如何在Ansible循环中选取SW变量的nodeid或managed值?
如何提取Ansible变量SW中的nodeid和managed值
你的SW变量结构中,每个元素的results字段是包含多个单键字典的列表,要提取其中的nodeid和managed值,可以用以下两种简单方法:
方法一:合并字典后直接取值
把results里的所有单键字典合并成一个完整字典,之后就能像普通字典一样通过.运算符直接取值:
--- - name: Simulate Solarwinds Unmute Nodes hosts: localhost vars: SW: - results: - nodeid: fsd243 - caption: test1 - managed : false - results: - nodeid: ser2 - caption: ser2cap - managed : false tasks: - debug: msg: "nodeid: {{ item.results | combine | nodeid }}, managed状态: {{ item.results | combine | managed }}" loop: "{{ SW }}"
执行后输出会类似:
ok: [localhost] => (item={'results': [{'nodeid': 'fsd243'}, {'caption': 'test1'}, {'managed': False}]}) => { "msg": "nodeid: fsd243, managed状态: False" } ok: [localhost] => (item={'results': [{'nodeid': 'ser2'}, {'caption': 'ser2cap'}, {'managed': False}]}) => { "msg": "nodeid: ser2, managed状态: False" }
方法二:筛选目标字典后取值
如果不想合并字典,也可以直接筛选出包含目标键的字典,再提取对应值:
tasks: - debug: msg: "nodeid: {{ (item.results | selectattr('nodeid', 'defined') | first).nodeid }}, managed状态: {{ (item.results | selectattr('managed', 'defined') | first).managed }}" loop: "{{ SW }}"
这里selectattr('nodeid', 'defined')会从results列表里挑出包含nodeid键的字典,first取第一个匹配项(因为每个键在列表里唯一),最后通过.nodeid取出对应值。
内容的提问来源于stack exchange,提问作者George Obed
相关产品推荐
相关产品推荐

