Ansible:根据LOC值获取对应HOME NAME属性值
通过LOC值查询XML中的HOME NAME属性
方案1:使用Ansible xml lookup插件
直接借助XPath属性过滤逻辑,精准定位目标节点并提取NAME属性。以下是可直接复用的Playbook片段:
- name: 获取指定LOC对应的Oracle HOME名称 vars: target_loc: "/oracle/19.0.0" # 替换为你的目标LOC路径 inventory_xml_path: "/path/to/your/oraInventory/ContentsXML/inventory.xml" # 替换为实际XML文件路径 tasks: - name: 查询匹配的HOME NAME set_fact: oracle_home_name: "{{ lookup('xml', inventory_xml_path, xpath=\"/INVENTORY/HOME_LIST/HOME[@LOC='{{ target_loc }}']/@NAME\") }}" - name: 输出结果 debug: msg: "对应LOC的HOME NAME: {{ oracle_home_name }}"
核心XPath说明
/INVENTORY/HOME_LIST/HOME[@LOC='{{ target_loc }}']/@NAME
- 从根节点
INVENTORY进入HOME_LIST容器 - 筛选出LOC属性与目标路径完全匹配的
HOME节点 - 直接提取该节点的
NAME属性值
方案2:使用community.general.xml模块(适合复杂场景)
如果需要处理更复杂的XML操作(比如批量查询、修改),推荐使用专门的XML模块:
- name: 用xml模块查询Oracle HOME信息 community.general.xml: path: "/path/to/your/inventory.xml" xpath: "/INVENTORY/HOME_LIST/HOME[@LOC='/oracle/19.0.0']" content: attribute register: xml_query_result - name: 提取NAME属性值 set_fact: oracle_home_name: "{{ xml_query_result.matches[0].HOME.NAME }}" - name: 打印结果 debug: msg: "匹配的HOME NAME: {{ oracle_home_name }}"
注意事项
- 若使用方案2,需先安装
community.general集合:ansible-galaxy collection install community.general - XPath匹配严格区分大小写与路径格式,确保目标LOC与XML中的值完全一致
内容的提问来源于stack exchange,提问作者calsaint
相关产品推荐
相关产品推荐

