Ansible - 有没有一种优雅的方式来 tar.gz 和 rsync 一个大目录?

问题描述 投票:0回答:3

我试图避免在我的 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 }}"
tar ansible gzip
3个回答
1
投票

从 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 模块归档、传输和取消归档所有内容,而不必摆弄命令行参数。


0
投票

所以,我让它工作了......只是不优雅。

  1. 设置了 v 标志后,我的 ansible 标准输出非常冗长(即使没有使用 ansible-playbook 调用 -vvvv )。关闭 tar 命令内的开关可以更轻松地追踪问题。
  2. 问题实际上是错误“错误:文件在我们读取时已更改” - 毫无疑问,因为我将存档文件添加到它正在压缩的目录中。我通过在运行时简单地将存档文件移动到一个目录来解决这个问题。

然而,这给我留下了“一个又一个命令”的解决方案——这是我希望我最终能够避免的。不过,已经成功一半了。


-1
投票

此警告提示您可以使用 ansible unarchive 模块而不是 tar commnad。语法非常简单,如下所示:

- unarchive: src=foo.tgz dest=/var/lib/foo

您可以从这里获得更多详细信息:unarchive_module

© www.soinside.com 2019 - 2024. All rights reserved.