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

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

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

讨论

  1. 选项没有阐明如何做到这一点。
  2. 由于父级包含超过 100 个子级,因此无法单独复制所有子级。

答案1

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

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

而该copy模块使用 Python 复制文件,功能有限。 复制模块文档

“copy”模块的递归复制功能无法扩展到大量(>数百个)文件。有关替代方案,请参阅synchronize模块,它是rsync的包装器。

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

# Synchronize passing in extra rsync options
synchronize:
    src: /tmp/helloworld
    dest: /var/www/helloword
    rsync_opts:
      - "--exclude=.git"

synchronize模块有一些警告。就像在本地和远程机器上安装的要求一样rsync。这就是为什么当不需要时我不会使用它。

答案2

如果我不得不使用copy,我会这样做。在这个例子中,我使用的patterns是特定于 Python 的和.hiddenfile(我使用 hidden 来演示 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

相关内容