shell 如何自动化域XML更新/验证?

ih99xse1  于 2023-05-23  发布在  Shell
关注(0)|答案(1)|浏览(165)

我想自动备份的过程域上的libvirt基于虚拟机管理程序。要获得增量backups的能力,»Domain XML«需要包含:

  • 顶级qemu命名空间声明属性和
  • qemu:capabilities / qemu:add元素

如图所示:

<domain type='kvm' id='1' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  [..]
  <qemu:capabilities>
    <qemu:add capability='incremental-backup'/>
  </qemu:capabilities>
  [..]
 </domain>

在交互式shell中这样做是没有问题的。

$ sudo virsh edit some-domain # that launches an interactive editor (vi/vim)
                              # containing the XML configuration 
                              # saving the result updates the domains
                              # XML

我的问题是,不知何故,我不知道如何用Ansible自动化。为了检查/创建上面显示的那些属性/元素,我可以使用community.general.xml模块,但我如何将其应用于virsh edit …启动的交互式编辑器
我可以使用virsh dumpxml …来获取域的XML配置,检查和修改。但是如何设置/写入结果?

更新

感谢@peter-krempa的回答,最终的ansible代码现在看起来像这样:

# "{{ item }}" refers to the name of the domain / vm

- name: Read Domain XML
  community.libvirt.virt:
    command: get_xml
    name: "{{ item }}"
  register: vms_xml

- name: Add namespaced capability for incremental backups
  community.general.xml:
    xmlstring: "{{ vms_xml.get_xml }}"
    xpath: '/domain/qemu:capabilities/qemu:add'
    attribute: capability
    value: incremental-backup
    namespaces:
      qemu: 'http://libvirt.org/schemas/domain/qemu/1.0'
  register: vm_xml_with_inc

- name: Redefine Domain
  community.libvirt.virt:
    name: "{{ item }}"
    command: define
    xml: "{{ vm_xml_with_inc.xmlstring }}"
ep6jt1vc

ep6jt1vc1#

要从已有的XML编写域定义(配置),可以使用virsh define /path/to/def.xml
请注意,libvirt没有启用备份的原因是它太旧了,而且当时该功能还没有完成。当它完成时,您不再需要指定标志。在您的情况下,如果您要迁移VM或希望使用其他块作业或创建快照,则备份元数据可能会中断。
还要注意,libvirt使用<qemu:add capability的文档覆盖了以下声明:
Libvirt提供了一个XML名称空间和一个可选库libvirt-qemu.so,专门用于处理qemu。如果正确使用,这些扩展允许测试尚未移植到通用libvirt XML和API接口的特定qemu特性。但是,它们不受支持,因为库不能保证具有稳定的API,滥用库或XML可能导致libvirtd崩溃的不一致状态,并且升级qemu-kvm或libvirtd可能会破坏依赖于qemu特定传递的域的行为。如果您发现自己需要使用它们来访问特定的qemu功能,那么请将RFE发布到libvirt邮件列表,以将该功能纳入稳定的libvirt XML和API接口。

相关问题