Ansible基于双列表配置批量复制重命名文件的问题咨询
问题原因
你使用的with_nested会生成两个列表的笛卡尔积,即每一个源文件都会和所有目标文件依次配对执行复制操作。所有目标路径在循环末尾都会被最后一个源文件的内容覆盖,因此最终所有目标文件内容都和最后一个源文件一致。
正确实现方案
如果使用Ansible 2.5及以上版本,推荐用loop搭配zip过滤器实现同下标位置的元素一一配对:
- name: 按下标对应复制源文件到目标路径 copy: remote_src: True src: "{{ item.0 }}" dest: "{{ item.1 }}" when: ansible_host in groups[SERVER] loop: "{{ sources_files | zip(destination_files) | list }}"
如果使用的是更旧的Ansible版本,也可以用with_together参数实现同样效果:
- name: 按下标对应复制源文件到目标路径 copy: remote_src: True src: "{{ item.0 }}" dest: "{{ item.1 }}" when: ansible_host in groups[SERVER] with_together: - "{{ sources_files }}" - "{{ destination_files }}"
注意事项
请确保sources_files和destination_files两个列表长度完全一致,否则长度较短的列表缺失位置会被填充为None,执行任务时会触发报错。
内容的提问来源于stack exchange,提问作者firasKoubaa
相关产品推荐
相关产品推荐

