我想自动备份的过程域上的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 }}"
1条答案
按热度按时间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接口。