Ansible 复制文件并从两个列表中获取文件的源和目标名称

Ansible copy files and getting sources and destinations names of file from two lists

我必须复制并重命名多个文件

我将源文件名和目标文件名列表存储在两个列表中:

这里是 sources_files 列表:

sources_files:
 - /path1/sourceFileOne.txt
 - /path2/sourceFileTwo.txt
 ...
 - /pathN/fileN.txt

这里是 destination_files 列表:

destination_files:
 - /path1/destFileOne.txt
 - /path2/destFileTwo.txt
 ...
 - /pathN/destfileN.txt

现在我希望我的复制任务执行从文件到目标文件

的复制

/path1/destFileOne.txt -> /path1/sourceFileOne.txt

我试过循环使用“with_nested

- name: Rename or copy sources files to new names and paths
  copy:
   remote_src: True
   src: "{{ item[0] }}"
   dest: "{{ item[1] }}"
  when:
    - ansible_host in groups[SERVER]
  with_nested:
    - "{{sources_files}}"
    - "{{destination_files}}"

但这似乎无法正常工作,因为该副本最终始终是最后一个目标文件的内容

建议 ?

您可能需要 with_togetherzip 过滤器的数据结构方式。

- name: Rename or copy sources files to new names and paths
  copy:
   remote_src: True
   src: "{{ item[0] }}"
   dest: "{{ item[1] }}"
  when:
    - ansible_host in groups[SERVER]
  loop: "{{ sources_files|zip(destination_files) }}"

话虽如此,我想知道是否不维护两个独立的 列出将它们组合起来更有意义,例如:

copy_files:
  - src: /src/file1
    dst: /dst/file1
  - src: /src/file2
    dst: /dst/file2

这可以降低您的两个列表最终不同步的可能性。

鉴于该数据结构,您的任务将如下所示:

- name: Rename or copy sources files to new names and paths
  copy:
   remote_src: True
   src: "{{ item.src }}"
   dest: "{{ item.dst }}"
  when:
    - ansible_host in groups[SERVER]
  loop: "{{ copy_files }}"