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

时间:2016-02-16 04:51:32

标签: ansible tar ansible-playbook gz

我正试图在我的ansible play中避免使用'命令'模块列表,但似乎没有关于tar / gz的ansible文档,并且synch模块似乎......不完整。

我想gzip一个大目录的tarball然后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 unable to continue as the `tar` fails due to `file change as we read`

(编辑)显示任务,因为有人问我是否记得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 }}"

3 个答案:

答案 0 :(得分:0)

所以,我让它工作......只是不合时宜。

  1. 设置了v标志后,我的ansible stdout非常冗长(即使没有使用ansible-playbook调用-vvvv)。关闭tar命令中的开关可以更容易地跟踪问题。
  2. 问题实际上是错误"错误:文件在我们阅读时发生了变化" - 毫无疑问,因为我将存档文件添加到它正在压缩的目录中。我通过在运行时将存档文件移动到目录中来解决它。
  3. 然而,这使得我在命令后输入了'命令'解决方案 - 这是我希望我最终能够避免的。不过那里有一半。

答案 1 :(得分:0)

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

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

您可以从此处获得更多详细信息:unarchive_module

答案 2 :(得分:0)

在2.2版中,ansible将获得一个存档模块:https://docs.ansible.com/ansible/archive_module.html

通过它,您可以使用ansible模块对所有文件进行存档,传输和取消存档,而不必使用命令行参数。