鉴于这些字典:
somedict:
key1: value1
key2: value2
otherdict:
key1: mapped1
key2: mapped2
如何somedict
通过otherdict
在Ansible中查找键来映射和更改键?结果应该是这样的:
mapped1: value1
mapped2: value2
看起来应该可以使用这种声明性的东西:
{{ somedict | map(<MAP KEY>) | list }}
还是我真的必须对这种事情使用命令式循环?
以下
{{ somedict | map('extract', otherdict) | list }}
成功地映射了键,但是在过程中丢失了值...
问:“结果应该是这样的: ”
mapped1: value1
mapped2: value2
答:下面的任务
- debug:
msg: "{{ somedict|
map('extract', otherdict)|
zip(somedict|
dict2items|
map(attribute='value'))|
list }}"
给出列表列表。这不是预期的结果
msg:
- - mapped1
- value1
- - mapped2
- value2
要接收字典,请应用dict函数并删除列表过滤器。例如
- debug:
msg: "{{ dict(somedict|
map('extract', otherdict)|
zip(somedict|
dict2items|
map(attribute='value'))) }}"
给
msg:
mapped1: value1
mapped2: value2
这可以进一步简化。下面的任务给出了相同的字典
- debug:
msg: "{{ dict(somedict|
map('extract', otherdict)|
zip(somedict.values())) }}"
- debug:
msg: "{{ somedict|list }}"
给
msg:
- key1
- key2
- debug:
msg: "{{ somedict.keys()|list }}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句