我知道如何使用“ loop”关键字来执行此操作,但是在某些情况下,我无法使用“ loop”。例如,如果我在调试任务中仅使用一个标签选项运行“ ansible-playbook”,则该错误不起作用:“未定义'final_users'”
这些是我要结合的两个变量:
# defaults/main.yml
users:
- name: 'foo1'
id: '001'
- name: 'foo2'
id: '002'
- name: 'foo3'
id: '003'
user_template:
- key: 'path/to/{{ item.name | to_uuid }}/baz1'
value: 'common_123'
- key: 'path/to/{{ item.name | to_uuid }}/baz2'
value: '{{ item.name }}'
- key: 'path/to/{{ item.name | to_uuid }}/baz3'
value: '{{ item.id }}'
这是我组合变量的方式:
# /tasks/main.yml
- set_fact:
final_users: |
{{
final_users
| default([])
+ [ user_template ]
}}
loop: '{{ users }}'
- debug:
msg: '{{ item }}'
loop: '{{ final_users }}'
tags: 'test_debug'
是否有一种无需«loop»关键字即可创建«final_users»的方法?换句话说,摆脱“ set_fact”任务,直接在“ debug”任务或“ defaults / main.yml”文件中创建“ final_users”。
结果应如下所示:
msg: |-
- - key: path/to/2e414bfd-3b86-55a8-b00e-2891c3709d46/baz1
value: 'common_123'
- key: path/to/2e414bfd-3b86-55a8-b00e-2891c3709d46/baz2
value: foo1
- key: path/to/2e414bfd-3b86-55a8-b00e-2891c3709d46/baz3
value: '001'
- - key: path/to/58971df0-ec8e-5c53-be75-ec6562b04101/baz1
value: 'common_123'
- key: path/to/58971df0-ec8e-5c53-be75-ec6562b04101/baz2
value: foo2
- key: path/to/58971df0-ec8e-5c53-be75-ec6562b04101/baz3
value: '002'
- - key: path/to/d97ff9e1-f11f-5ed5-a65d-9313471fb7f1/baz1
value: 'common_123'
- key: path/to/d97ff9e1-f11f-5ed5-a65d-9313471fb7f1/baz2
value: foo3
- key: path/to/d97ff9e1-f11f-5ed5-a65d-9313471fb7f1/baz3
value: '003'
我尝试使用 lookup 和 filters ,但无法获得所需的结果。