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 集合。
安装 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
基本用法:读取和查询 XML 内容
用 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
- name: Show value
debug:
var: xml_out.xml_result
修改 XML:插入、更新、删除节点
使用
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: | state: editnexus-public https://nexus.example.com/repository/maven-public/ central 注意事项与常见问题
该模块对 XML 格式敏感,实际使用中容易出错:
- XML 文件必须编码为 UTF-8,且无 BOM;含中文或特殊字符时建议先用
iconv或 Python 脚本预处理 - XPath 匹配失败常因命名空间(namespace)——默认不支持带 namespace 的文档;如需处理,得先用其他工具(如
xmlstar)剥离或转换 - 模块不自动格式化/缩进输出,修改后 XML 可能变成单行;如需可读性,后续可用
community.general.xml配合xsltproc或用shell模块调用xmllint --format - 所有操作均在控制节点进行,确保
path是控制节点上的路径;如需操作远程文件,先用fetch或copy同步再处理
-










