searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Libvirt处理虚拟机XML配置文件流程介绍

2023-10-30 03:53:32
122
0

    Libvirt定义了一套通过xml文件进行虚拟机配置设置的规范。

    由上层服务构造xml文件并调用Libvirt接口进行虚拟机配置设置。Libvirt服务对xml文件进行格式/参数校验以及默认参数填充后,将xml文件保存于指定目录中。

    完成虚拟机配置设置后,上层服务可调用Libvirt接口进行虚拟机启动。Libvirt服务在启动虚拟机时,将读取xml文件内容,对于Qemu类型虚拟机,则根据xml文件内容进行Qemu参数的拼接。

    对于Libvirt而言,虚拟机配置设置与虚拟机启动是分开的两个接口。

    对于虚拟机配置设置,Libvirt服务需对xml文件进行格式/参数校验以及默认参数填充,再将xml文件保存于指定目录中。

    在此接口中,Libvirt需完成以下动作:xml格式校验及解析、各种类型配置的参数获取、各种类型配置的参数校验、各种类型配置的默认参数填充、xml格式化。

    首先是xml格式校验及解析,Libvirt在代码conf/util/virxml.c中基于libxml库封装了一套xmll格式校验及解析方法,将xml文本转化为libxml库的xmlDocPtr结构体对象。

    各种类型配置均定义相应的参数获取方法(ParseXML方法),从xmlDocPtr指针中获取各项配置属性参数值,如对显卡设备配置实现了virDomainVideoDefParseXML方法,将xml片段转化为一个结构体对象。

    同样,各种类型配置均定义相应的参数校验方法(Validate方法)及默认参数填充方法(PostParse方法),如对显卡设备配置实现了virDomainVideoDefValidate方法及qemuDomainDeviceVideoDefPostParse方法,完成参数校验以及默认参数填充。

    最后,各种类型配置均定义相应的xml格式化方法(Format方法),如对显卡设备配置实现了virDomainVideoDefFormat方法,将结构体对象转为xml文本,并进行xml文件保存。

    对于Qemu虚拟机启动,Libvirt服务除需对xml文件进行解析外,还需将其构造为Qemu参数。

    在此接口中,Libvirt需完成以下动作:xml格式校验及解析、各种类型配置的参数获取、Qemu参数构造、启动Qemu虚拟机。

    前两个动作将各个xml片段转化为不同的结构体对象。

    然后,Libvirt在qemu/qemu_command.c中通过qemuBuildCommandLine方法实现Qemu参数(含环境变量)构造。针对不同类型的Qemu参数片段,有不同的子方法进行实现,将结构体对象通过字符串拼接方式直接转为Qemu参数文本。如对显卡设备,使用qemuBuildVideoCommandLine方法进行参数构造。

    至此,Qemu参数即构造完成,后续将用于启动虚拟机。

0条评论
0 / 1000