提问人:philipp 提问时间:5/21/2023 最后编辑:philipp 更新时间:5/22/2023 访问量:129
如何自动执行域 xml 更新/验证?
How can I automate domain xml update / verification?
问:
我想在基于虚拟机管理程序上自动执行域的备份过程。为了获得增量备份的能力,“域XML”需要包含:libvirt
- 顶级命名空间声明属性和
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 …
我可以使用它来获取域的XML配置,检查和修改。但是如何设置/写入结果呢?virsh dumpxml …
更新
多亏了 @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 }}"
答:
要从已有的现有 XML 编写域定义(配置),请使用 。virsh define /path/to/def.xml
请注意,libvirt 未启用备份的原因是它太旧了,并且该功能当时尚未完成。在完成时,您不再需要指定标志。在这种情况下,如果要迁移 VM 或想要使用其他块作业或创建快照,则备份元数据可能会中断。
另请注意,libvirt 关于使用覆盖状态的文档:<qemu:add capability
Libvirt 提供了一个 XML 命名空间和一个可选的库 libvirt-qemu.so 专门用于处理 QEMU 的问题。使用时 正确地,这些扩展允许测试特定的 QEMU 功能 尚未移植到通用 libvirt XML 和 API 接口。但是,它们不受支持,因为库不受支持 保证具有稳定的 API,滥用库或 XML 可能会导致 在不一致的状态下,libvirtd 崩溃,并升级 qemu-kvm 或 libvirtd 可能会破坏依赖的域的行为 在特定于 QEMU 的直通上。如果您发现自己需要使用 他们访问特定的 qemu 功能,然后请将 RFE 发布到 libvirt 邮件列表,将该功能合并到 稳定的 libvirt XML 和 API 接口。
评论
define
正是这个伎俩。
评论
virsh
创建持久域?virsh define