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

Ansible如何用xml模块提取node_type为apic的节点及全部属性?

问题根源
  • 你使用的XPath规则//*会匹配XML文件内所有层级的节点,包括根节点、各子属性节点,所以返回结果是零散的单个节点集合,不是按<node123>这类父节点分组的结构
  • 循环对象调用错误,xml模块的匹配结果固定存储在注册变量的matches字段内,不能直接循环注册变量本身
正确实现方案

直接在XPath阶段完成过滤,一步拿到所有符合要求的节点:

- name: 提取所有node_type为apic的节点
  xml:
    path: "{{ playbook_dir }}/nnmconf_nnm.xml"
    # 该XPath规则直接匹配nodes下所有子节点中,node_type值为apic的节点
    xpath: /nodes/*[node_type/text()='apic']
    content: text
  register: apic_nodes

- name: 输出符合要求的节点信息
  debug:
    msg:
      节点名称: "{{ item.keys() | first }}"
      节点全部属性: "{{ item.values() | first }}"
  loop: "{{ apic_nodes.matches }}"
可选方案:先全量读取再过滤

如果你需要先拿到所有节点再做判断,也可以用如下写法:

- name: 读取nodes下所有子节点
  xml:
    path: "{{ playbook_dir }}/nnmconf_nnm.xml"
    xpath: /nodes/*
    content: text
  register: all_nodes

- name: 仅输出apic类型的节点
  debug:
    msg:
      节点名称: "{{ item.keys() | first }}"
      节点全部属性: "{{ item.values() | first }}"
  loop: "{{ all_nodes.matches }}"
  # when条件不需要加{{ }},直接读取变量即可
  when: (item.values() | first).node_type == 'apic'

内容的提问来源于stack exchange,提问作者MaxWasHere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:48:00