Ansible中遍历含嵌套列表的字典列表的实现方法问询
解决Ansible字典列表嵌套元素的遍历问题
我来帮你搞定这个需求!你需要用到Ansible的subelements过滤器,它正好适配这种外层字典列表+内层嵌套列表的遍历场景,能把每个字典的mykey和对应的inner_list元素一一配对输出。
完整Playbook示例
--- - hosts: localhost tasks: - debug: msg: "{{ item.0.mykey }} with {{ item.1 }}" loop: "{{ example | subelements('inner_list') }}" vars: example: - mykey: key1 inner_list: - one - two - mykey: key2 inner_list: - three - four
代码说明
subelements('inner_list'):这个过滤器会遍历example列表里的每个字典,把字典和它的inner_list元素拆分成成对的子项。item.0:代表外层的字典,所以item.0.mykey就是当前字典的mykey值。item.1:代表内层inner_list里的单个元素。
执行后输出
ok: [localhost] => (item=[{'mykey': 'key1', 'inner_list': ['one', 'two']}, 'one']) => { "msg": "key1 with one" } ok: [localhost] => (item=[{'mykey': 'key1', 'inner_list': ['one', 'two']}, 'two']) => { "msg": "key1 with two" } ok: [localhost] => (item=[{'mykey': 'key2', 'inner_list': ['three', 'four']}, 'three']) => { "msg": "key2 with three" } ok: [localhost] => (item=[{'mykey': 'key2', 'inner_list': ['three', 'four']}, 'four']) => { "msg": "key2 with four" }
如果后续需要替换debug做其他操作(比如执行命令、修改文件等),只需要调整task的模块,item.0.mykey和item.1的引用方式保持不变就行。
内容的提问来源于stack exchange,提问作者George Shuklin
相关产品推荐
相关产品推荐

