Ansible 使用 community.general.xml 模块可读取、修改、写入 XML 文件,需先安装 community.general 集合;支持 state: query 查询和 state: edit 编辑,操作均在控制节点执行,要求 UTF-8 编码且 XPath 精准匹配。
Ansible 使用 community.general.xml 模块可以读取、修改、写入 XML 文件,适用于配置文件(如 Jenkins config.xml、Maven settings.xml)或任何需要结构化编辑的 XML 场景。该模块不是 Ansible 核心模块,需提前安装 community.general 集合。
确保目标控制节点(运行 Ansible 的机器)已安装集合:
ansible-galaxy collection install community.general
ansible-galaxy collection install community.general:>=6.0.0
ansible-galaxy collection list | grep community.general

用 state: query 提取节点值或属性,适合校验或变量抽取:
path 指定本地 XML 文件路径(任务在控制节点执行,不是远程)xpath 使用标准 XPath 表达式定位节点,支持 text()、@attr 等ansible_facts.xml_result 中,可用 debug 查看示例:获取 Jenkins 全局安全设置中的 useSecurity 值
- name: Read Jenkins security flag
community.general.xml:
path: /tmp/jenkins/config.xml
xpath: /hudson/useSecurity/text()
state: query
register: xml_out
使用 state: edit,配合 xmlstring(插入内容)、value(更新文本)、attribute(设置属性)等参数:
xpath 必须能唯一匹配目标节点;若无匹配,默认在根下追加(取决于操作类型)xmlstring 必须是格式良好的 XML 片段(如 text )value,更新属性用 attribute(字典格式,如 { "enabled": "true" })state: absent,XPath 匹配即删示例:为 Maven settings.xml 添加一个镜像仓库
- name: Add mirror to Maven settings
community.general.xml:
path: ~/.m2/settings.xml
xpath: /settings/mirrors
xmlstring: |
nexus-public
https://nexus.example.com/repository/maven-public/
central
state: edit
该模块对 XML 格式敏感,实际使用中容易出错:
iconv 或 Python 脚本预处理xmlstar)剥离或转换community.general.xml 配合 xsltproc 或用 shell 模块调用 xmllint --format
path 是控制节点上的路径;如需操作远程文件,先用 fetch 或 copy 同步再处理