You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:53:28