Ansible—有没有一种优雅的方法可以将tar.gz和rsync转换为一个大目录?

Ansible—有没有一种优雅的方法可以将tar.gz和rsync转换为一个大目录?,ansible,tar,ansible-playbook,gzip,Ansible,Tar,Ansible Playbook,Gzip,在我的ansible游戏中,我试图避免列出“命令”模块,但似乎没有关于tar/gz的ansible文档,同步模块似乎。。。不完整 我想gzip一个大目录的tarball,然后rsync它到另一个主机。甚至使用“命令”似乎对我也不起作用:所以,我让它起作用了。。。只是不雅观 设置了v标志后,我的ansible stdout异常冗长(甚至没有使用ansible playbook调用-vvv)。关闭tar命令内的开关可以更容易地跟踪问题 问题实际上是错误“错误:文件在读取时发生了更改”-毫无疑问,因为

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


我想gzip一个大目录的tarball,然后rsync它到另一个主机。甚至使用“命令”似乎对我也不起作用:所以,我让它起作用了。。。只是不雅观

  • 设置了v标志后,我的ansible stdout异常冗长(甚至没有使用ansible playbook调用-vvv)。关闭tar命令内的开关可以更容易地跟踪问题
  • 问题实际上是错误“错误:文件在读取时发生了更改”-毫无疑问,因为我正在将存档文件添加到压缩的目录中。我只需在运行时将存档文件移到一个目录中,就解决了这个问题

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

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

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

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

    在2.2版中,ansible将获得一个存档模块:


    有了它,您就可以使用ansible模块归档、传输和取消归档,而不必处理命令行参数。

    ansible的这些命令警告非常有用。他们只是检查命令中的第一个单词,如果它与列表匹配,它就会抱怨。它没有考虑到使用
    tar
    命令比取消归档可以做更多的事情。。。您可以通过以下方式避免警告:
    -command:`whichtar`……
    ,但该警告只是一个警告。失败来自其他原因。你记得-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 }}"
    
    - unarchive: src=foo.tgz dest=/var/lib/foo