如何在Ansible中复制除一个之外的所有孩子?

030*_*030 11 ansible

文档解释了如何使用copyAnsible 中的模块复制文件和目录。如何复制除一个之外的所有孩子?

讨论

  1. 这些选项没有说明如何做到这一点。
  2. 单独复制所有子项不是一种选择,因为父项包含 100 多个子项。

Hen*_*gel 13

最好的选择可能是使用该synchronize模块。

同步是 rsync 命令的包装器,旨在使使用 rsync 的常见任务更容易。

而该copy模块使用 Python 复制文件并且其功能受到限制。复制模块文档中有一个注释 :

“复制”模块递归复制功能不会扩展到大量(> 数百个)文件。作为替代,请参阅同步模块,它是 rsync 的包装器。

通过该synchronize模块,可以将exclude模式传递rsync_optsrsyncAnsible 正在执行的命令。

# Synchronize passing in extra rsync options
synchronize:
    src: /tmp/helloworld
    dest: /var/www/helloword
    rsync_opts:
      - "--exclude=.git"
Run Code Online (Sandbox Code Playgroud)

但是该synchronize模块有一些注意事项。就像rsync安装在本地和远程机器上的要求一样。这就是为什么我不会在不需要的时候使用它。


小智 8

如果我必须使用 just copy,这就是我会做的。在此示例中,我使用patterns特定于 Python 的 和 a .hiddenfile(我使用隐藏来演示 find 有很多选项可供探索)。然而基本的想法是——你可以使用模式/正则表达式过滤器来满足你的需求。

- name: prepare a list of files to copy from some place
  find:
    paths: /var/some-place
    hidden: yes
    patterns:
      - "*.py"
      - ".hiddenfile"
  delegate_to: localhost
  register: target_files

- name: copy files to other place
  copy:
    src: "{{ item.path }}"
    dest: /var/other-place
  with_items: "{{ target_files.files }}"
  tags:
    - copy
Run Code Online (Sandbox Code Playgroud)