我试图避免在我的 ansible 游戏中出现“命令”模块列表,但似乎没有关于 tar/gz 的 ansible 文档,并且同步模块似乎......不完整。
我想对一个大目录的 tarball 进行 gzip 压缩,然后将其 rsync 到另一个主机。即使使用“命令”似乎对我不起作用:<
"warnings": ["Consider using unarchive module rather than running tar"]}
[WARNING]: Consider using unarchive module rather than running tar
PLAY RECAP *********************************************************************
ctarlctarl : ok=2 changed=0 unreachable=0 failed=1
“unarchive”模块似乎需要一个已经压缩/存档的目录,但似乎不是我想要的解决方案。
相关但未答复:ansible playbook 无法继续,因为“tar”由于“我们读取的文件发生更改”而失败
(编辑)显示任务,因为有人问我是否记得 z。 =)
- name: tar ball app dir, exclude conf files
command: "tar -zcvf {{ item.code_dir }}.tar.gz --exclude '*config*' ."
args:
chdir: "{{ apps_home }}/{{ item.code_dir }}"
with_items:
- "{{ processes }}"
从 2.3 版本开始,Ansible 具有
archive
模块:https://docs.ansible.com/ansible/2.9/modules/archive_module.html
自 Ansible 版本 8.4 起,此模块已移至
community.general
集合:
https://docs.ansible.com/ansible/latest/collections/community/general/archive_module.html
synchronize
模块来避免通过 rsync
调用 command
。
有了它,您可以使用 Ansible 模块归档、传输和取消归档所有内容,而不必摆弄命令行参数。
所以,我让它工作了......只是不优雅。
然而,这给我留下了“一个又一个命令”的解决方案——这是我希望我最终能够避免的。不过,已经成功一半了。
此警告提示您可以使用 ansible unarchive 模块而不是 tar commnad。语法非常简单,如下所示:
- unarchive: src=foo.tgz dest=/var/lib/foo
您可以从这里获得更多详细信息:unarchive_module