Ansible中如何打印嵌套变量结构里groups字段的所有对应值
问题根因
你的调试表达式输出不符合预期,是因为cluster1.projects是列表类型(YAML 中以-开头的条目构成列表),无法直接通过.groups访问下属属性,需要先定位到列表内的项目字典,再提取groups字典的所有值。
解决方案
场景1:projects列表仅有1个项目
直接取列表第一个元素的groups值遍历输出即可,playbook示例如下:
--- - hosts: localhost tasks: - debug: msg: "{{ item }}" loop: "{{ cluster1.projects[0].groups.values() | list }}"
场景2:projects列表包含多个项目(通用方案)
通过Jinja2过滤器批量提取所有项目下groups的所有值,无需关心列表长度,playbook示例如下:
--- - hosts: localhost tasks: - debug: msg: "{{ item }}" loop: "{{ cluster1.projects | map(attribute='groups') | map('dict2items') | flatten | map(attribute='value') | list }}"
两种方案执行后都会按行输出你需要的foo1、bar1、bar2结果。
内容的提问来源于stack exchange,提问作者smc
相关产品推荐
相关产品推荐

