如何用Ansible自动化Libvirt虚拟机Domain XML的更新与验证
用Ansible自动化配置Libvirt虚拟机XML以支持增量备份
要实现Libvirt虚拟机的增量备份自动化,需要给Domain XML添加两个关键配置:
- 顶级
<domain>标签中的qemu命名空间声明 <qemu:capabilities>下的<qemu:add>元素
以下是完整的Ansible自动化流程,替代手动virsh edit操作:
步骤1:读取现有Domain XML
先把目标虚拟机的XML配置读取到Ansible变量中,后续用于修改:
- name: 读取目标虚拟机的XML配置 community.general.virsh: command: dumpxml name: "{{ target_vm_name }}" register: vm_xml_raw become: true
步骤2:修改XML配置
使用community.general.xml模块处理XML,添加命名空间和所需元素:
- name: 为Domain XML添加qemu命名空间 community.general.xml: xmlstring: "{{ vm_xml_raw.stdout }}" xpath: /domain attribute: xmlns:qemu value: "http://libvirt.org/schemas/domain/qemu/1.0" state: present register: modified_xml_namespace become: true - name: 添加qemu:capabilities容器元素 community.general.xml: xmlstring: "{{ modified_xml_namespace.xmlstring | default(vm_xml_raw.stdout) }}" xpath: /domain/qemu:capabilities state: present namespaces: qemu: http://libvirt.org/schemas/domain/qemu/1.0 register: modified_xml_capabilities become: true - name: 配置增量备份capability属性 community.general.xml: xmlstring: "{{ modified_xml_capabilities.xmlstring | default(modified_xml_namespace.xmlstring) | default(vm_xml_raw.stdout) }}" xpath: /domain/qemu:capabilities/qemu:add attribute: capability value: incremental-backup state: present namespaces: qemu: http://libvirt.org/schemas/domain/qemu/1.0 register: final_modified_xml become: true
步骤3:重新定义Domain
将修改后的XML写回Libvirt,完成配置更新:
- name: 重新定义虚拟机配置 community.general.virsh: command: define xml: "{{ final_modified_xml.xmlstring }}" become: true
关键说明
- 确保已安装
community.general集合:执行ansible-galaxy collection install community.general完成安装 - 所有操作需要root权限,Playbook中需通过
become: true提升权限 - 整个流程具备幂等性:如果目标命名空间或元素已存在,不会重复执行修改操作
内容的提问来源于stack exchange,提问作者philipp
相关产品推荐
相关产品推荐

