【问题标题】:Ansible - is there an elegant way to tar.gz and rsync a large directory?Ansible - 是否有一种优雅的方式来 tar.gz 和 rsync 一个大目录?
【发布时间】:2016-02-16 04:51:31
【问题描述】:

我试图在我的 ansible 游戏中避免列出“命令”模块,​​但似乎没有关于 tar/gz 的 ansible 文档,并且同步模块似乎......不完整。

我想压缩一个大目录的压缩包,然后将其同步到另一台主机。即使使用“命令”似乎对我也不起作用:

 "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 }}"

【问题讨论】:

  • 这些 ansible 的命令警告相当垃圾。他们只是检查命令中的第一个单词,如果它与列表匹配,它会抱怨。它没有考虑到您可以使用tar 命令执行更多操作而不是取消归档...您可以通过以下方式避免警告:- command: `which tar` ...
  • 但是那个警告只是一个警告。失败来自其他方面。
  • 你记得 -z 对吗?

标签: ansible tar ansible-playbook gzip


【解决方案1】:

这个警告提示你可以使用 ansible unarchive 模块而不是 tar commnad。语法很简单,如下所示:

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

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

【讨论】:

    【解决方案2】:

    所以,我得到了它的工作......只是不雅。

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

    然而,这给我留下了“命令后命令”解决方案——我希望我最终能够避免这种情况。不过,到了一半。

    【讨论】:

      【解决方案3】:

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

      您可以使用 ansible 模块归档、传输和取消归档所有内容,而不必摆弄命令行参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-18
        • 2014-02-13
        • 2011-02-23
        • 2021-06-09
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 2022-06-11
        相关资源
        最近更新 更多