我正试图将多个模板文件复制到我的unix机器上。问题是,我有多个系统,所以模板是基于group_var文件app.yml进行变量化的。用户将system_name解析为ansible playbook,然后该playbook从app.yml收集详细信息。然后模板选择这些变量。然后应该将模板复制到目的地。然而,在我当前的代码中,两个模板中只有一个被复制。
app.yml:
system1:
src: 'template/file1.j2'
dst: '/app/user/file1'
src: 'template/file2.j2'
dst: '/app/user/file2'
system2:
src: 'template/file1.j2'
dst: '/app/user/file1'
src: 'template/file2.j2'
dst: '/app/user/file2'
main.yml
- name: copy mutiple templates to destination with dictionary
template: src={{ item.src }} dst={{ item.dst }}
when: "hostgroup='user_input'"
with_items: '{{ system1 }}'
使用以上内容,只复制一个文件,而不是同时复制两个文件。请有人给我指正确的方向好吗?我也使用了以下内容作为参考;https://riptutorial.com/ansible/example/22079/with-items---predefined-dictionary
您的错误是将它们定义为字典,因此YAML将其理解为数组
您应该将它们格式化为列表
你提到的例子格式正确
出于调试目的,我保持了system2的原样:
system1:
- src: 'template/file1.j2'
dst: '/app/user/file1'
- src: 'template/file2.j2'
dst: '/app/user/file2'
system2:
src: 'template/file1.j2'
dst: '/app/user/file1'
src: 'template/file2.j2'
dst: '/app/user/file2'
以下是一个带有type_debug
的调试任务,它可以识别变量类型:
- debug:
msg: "system1: {{ system1 | type_debug }} / system2: {{ system2 | type_debug }}"
结果:
TASK [debug] *******************************************************************************
ok: [localhost] => {
"msg": "system1: list / system2: dict"
}
列表中的一项由YAML中的短划线引入