如何将库存列表元素与ansible中的vars yml列表匹配
How to match inventory list elements with vars yml list in ansible
我在清单文件中有一个列表 abcd@host.com list_1=['abc','def','xyz']
我在 vars yml 文件中有列表
list_2:
abc:
- name: abc
- alias: a
def:
- name: def
- alias: b
xyz:
- name: xyz
- alias: b
我想将 list_1 的元素与 list_1 的 vars yml 的属性相匹配。比如说,当 'abc' 被选为 list_1 的第一个元素时,'abc' 应该与 list_2 匹配,并且它应该从它的 list_2 中获取名称和别名。整个 list_1 应该以类似的方式实现。如何在 ansible 中执行此操作?有什么想法或建议吗?
问:"来自 list_1 的元素 ... 与 list_2 匹配 ... 获取名称和别名 ...对于整个 list_1"
A:list_2 是这个用例的错误结构。相反,将值放入字典中,例如
dict_2:
abc:
name: abc
alias: a
def:
name: def
alias: b
xyz:
name: xyz
alias: b
然后,下面的任务完成工作,例如
- debug:
msg: "element: {{ item }}
name: {{ dict_2[item]['name'] }}
alias: {{ dict_2[item]['alias'] }}"
loop: "{{ list_1 }}"
给予
msg: 'element: abc name: abc alias: a'
msg: 'element: def name: def alias: b'
msg: 'element: xyz name: xyz alias: b'
如果您无法更改数据结构,请先转换它,例如
- set_fact:
dict_2: "{{ dict_2|default({})|
combine({item.0.key: item.1}, recursive=True) }}"
with_subelements:
- "{{ list_2|dict2items }}"
- value
我在清单文件中有一个列表 abcd@host.com list_1=['abc','def','xyz']
我在 vars yml 文件中有列表
list_2:
abc:
- name: abc
- alias: a
def:
- name: def
- alias: b
xyz:
- name: xyz
- alias: b
我想将 list_1 的元素与 list_1 的 vars yml 的属性相匹配。比如说,当 'abc' 被选为 list_1 的第一个元素时,'abc' 应该与 list_2 匹配,并且它应该从它的 list_2 中获取名称和别名。整个 list_1 应该以类似的方式实现。如何在 ansible 中执行此操作?有什么想法或建议吗?
问:"来自 list_1 的元素 ... 与 list_2 匹配 ... 获取名称和别名 ...对于整个 list_1"
A:list_2 是这个用例的错误结构。相反,将值放入字典中,例如
dict_2:
abc:
name: abc
alias: a
def:
name: def
alias: b
xyz:
name: xyz
alias: b
然后,下面的任务完成工作,例如
- debug:
msg: "element: {{ item }}
name: {{ dict_2[item]['name'] }}
alias: {{ dict_2[item]['alias'] }}"
loop: "{{ list_1 }}"
给予
msg: 'element: abc name: abc alias: a'
msg: 'element: def name: def alias: b'
msg: 'element: xyz name: xyz alias: b'
如果您无法更改数据结构,请先转换它,例如
- set_fact:
dict_2: "{{ dict_2|default({})|
combine({item.0.key: item.1}, recursive=True) }}"
with_subelements:
- "{{ list_2|dict2items }}"
- value