一种通过nova调用qemu guest agent接口的方法技术

技术编号:24497346 阅读:43 留言:0更新日期:2020-06-13 03:33
本发明专利技术提供一种通过nova调用qemu guest agent接口的方法,属于云计算技术领域,本发明专利技术通过nova‑compute代理qemu guest agent(QGA)请求,用户通过调用nova api的接口的方式,将需要执行的指令以json字符串的形式传入。nova‑api将待执行的QGA命令通过RPC形式传递给指定的nova‑compute组件,nova‑compute通过执行libvirt的函数触发QGA命令,获取指令的结果,并将返回值传递给前端。在保证nova代码没有很大调整的基础上,增加了调用QGA命令的功能。

A method of calling QEMU guest agent interface through Nova

【技术实现步骤摘要】
一种通过nova调用qemuguestagent接口的方法
本专利技术涉及云计算技术,尤其涉及一种通过nova调用qemuguestagent接口的方法,拓展openstack的nova组件的功能,支持调用QemuGuestAgent命令。
技术介绍
Nova是OpenStack中创建、管理、删除虚拟机的组件。该组件包括了nova-api、nova-conductor、nova-scheduler和nova-compute在内的4个核心组件和一些插件。其中nova-api提供了一组标准RESTAPI接口,用于和用户进行交互。nova-conductor组件用户流程控制和数据库的访问,nova-conductor将其他几个关键部件组合起来,并实现了数据库调用的解耦。nova-scheduler是调度组件,通过和OpenStackplacement-api的交互,获取节点资源的信息,根据调度策略的不同,选择出最合适的一组计算节点,并最终通过nova-conductor将创建虚拟机的请求代理到指定的计算节点上,当在某个计算节点失败时,conductor会从待选主机集合中,选择另一个节点继续尝试,直到用尽了节点。nova-compute负责和本地的libvirt进程进行交互,并根据用户请求的信息,定义符合要求的libvirtxml配置文件。并调用libvirt接口,创建由QEMU进行管理的虚拟机。这种方式对一般性的管理操作,如关机、重启、增加删除设备等,比较方便。同时也可以通过libvirt获取一些基本的参数。但是其问题是,这些操作或指标都是宿主机可见的、间接的数据,具体的虚拟机内部操作系统的数据是无法获取的。这个问题直接导致一些高级的功能无法实现,如在虚拟机内部执行一些指令,获取程序的CPU占用数据等功能。这些功能已经通过QGA接口的形式暴露出来,并可以通过在guest中注入QGA的形式暴露出来。同时libvirt也暴露了API支持了和QGA的交互。但是当前nova并没有集成这个功能。这导致了管理源和用户的功能受限。
技术实现思路
为了解决以上技术问题,本专利技术提出了一种通过nova调用qemuguestagent接口的方法,拓展nova的接口,丰富了nova-api、nova-compute的接口,使用户可以直接调用RESTAPI,触发QGA指令,并将返回值传递给用户。通过引入QGA的调用,使系统管理员和用户对虚拟机进行更细粒度的操作、获取更准确的数据成为可能。本专利技术的技术方案是:一种通过nova调用qemuguestagent接口的方法,通过拓展OpenStacknova的接口,通过nova-compute代理qemuguestagent(QGA)请求,用户通过调用novaapi的接口的方式,将需要执行的指令以json字符串的形式传入。nova-api将待执行的QGA命令通过RPC形式传递给指定的nova-compute组件,nova-compute通过执行libvirt的函数触发QGA命令,获取指令的结果,并将返回值传递给前端。具体步骤如下:1)在创建镜像时,设置属性hw_qemu_guest_agent=yes,这样通过该镜像创建的虚拟机的时候即会在创建的时候,增加对QGA的支持。(虚拟机中需要安装QGA的软件)2)调用nova-api的拓展接口,执行QGA的指令3)nova-api将对指令的参数进行校验,若参数校验无误,则进入到下一步的操作,若调用有误,则将错误返回到用户侧4)nova-api通过数据库的查找,获取虚拟机所在的计算节点的信息,在验证虚拟机状态是运行中之后,向计算节点发送调用RPC调用5)当nova-compute收到RPC请求后,通过调用libvirt接口的形式,调用相关的QGA命令,并收集返回值发送给前端。调用的时候,会传入一个timeout值,若超过该超时时间,则会抛出异常,并返回给前端用户。6)整个过程是同步,用户的http连接将一直保持。本专利技术的有益效果是拓展nova的接口,丰富了nova-api、nova-compute的接口,使用户可以直接调用RESTAPI,触发QGA指令,并将返回值传递给用户。通过引入QGA的调用,使系统管理员和用户对虚拟机进行更细粒度的操作、获取更准确的数据成为可能。1、通过RESTAPI的形式进行QGA命令的调用,调用相较于传统的C语言接口的方式更为直观简便。2、拓展了nova-api的功能,用户可以通过调用QEMUagent的接口获取虚拟机内部的信息,包括虚拟机内部的内存情况、虚拟机中运行的程序对CPU的占用情况和执行指令。3、该拓展方式直接可以直接在nova源代码的基础上,进行代码添加且不会对其他功能产生影响,修改简单,需要修改的代码较少,侵入性较低。4、考虑了QGA指令调用的安全性,首先需要对调用这的权限进行检验,只有虚拟机的用户和系统的管理员由权限调用接口。配置了指令调用的硬时限,防止指令时间过长,宿主机的负载过高。限制了指令和返回值的长度,防止由于入参或回参长度过长,导致消息队列等中间件的负载过高。附图说明图1是本专利技术的工作流程示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例,基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术的一种通过nova调用qemuguestagent接口的方法,包括以下步骤:(1)制作带有QGA的虚拟机镜像文件。(2)将带有QGA的镜像文件上传到OpenStack的镜像仓库中,并设置hw_qemu_guest_agent为yes。(3)以带有QGA支持的镜像为模板,创建虚拟机。(4)通过RESTAPI调用的方式,访问nova-api的QGA接口。(5)nova-api接收到REST请求后需要首先对入参进行校验,在校验无误后进行下一步的处理。(6)nova-api会访问服务的数据库,并获取到虚拟机所在的计算节点。(7)在获取到计算节点的信息之后,API端需要构造一个RPC请求,并封装调用QGA所需要的信息。(8)在nova-compute收到RPC请求之后,需要解析入参,并构造一个标准格式的QGA请求,并通过libvirt暴露的接口,实现QGA的调用。(9)当获取到返回值后,将其回显给前端用户。(10)在调用QGA接口时,设置了入参长度的检查和程序执行的超时时间,入参检查失败或程序执行的时间过长,则直接抛出异常;如果指令的返回值过长,则直接进行切断。所述步骤(4)直接拓展nova-api的接口,增加QGA调用的支持,代码的开发量小。...

【技术保护点】
1.一种通过nova调用qemu guest agent接口的方法,其特征在于,/n拓展OpenStack nova的接口,通过nova-compute代理qemu guest agent即QGA请求,用户通过调用nova api的接口的方式,将需要执行的指令以json字符串的形式传入;nova-api将待执行的QGA命令通过RPC形式传递给指定的nova-compute组件,nova-compute通过执行libvirt的函数触发QGA命令,获取指令的结果,并将返回值传递给前端。/n

【技术特征摘要】
1.一种通过nova调用qemuguestagent接口的方法,其特征在于,
拓展OpenStacknova的接口,通过nova-compute代理qemuguestagent即QGA请求,用户通过调用novaapi的接口的方式,将需要执行的指令以json字符串的形式传入;nova-api将待执行的QGA命令通过RPC形式传递给指定的nova-compute组件,nova-compute通过执行libvirt的函数触发QGA命令,获取指令的结果,并将返回值传递给前端。


2.根据权利要求1所述的方法,其特征在于,
具体步骤如下:
1)在创建镜像时,设置属性hw_qemu_guest_agent=yes,这样通过该镜像创建的虚拟机的时候即会在创建的时候,增加对QGA的支持;虚拟机中需要安装QGA的软件;
2)调用nova-api的拓展接口,执行QGA的指令;
3)nova-api将对指令的参数进行校验,若参数校验无误,则进入到下一步的操作,若调用有误,则将错误返回到用户侧;
4)nova-api通过数据库的查找,获取虚拟机所在的计算节点的信息,在验证虚拟机状态是运行中之后,向计算节点发送调用RPC调用;
5)当nova-compute收到RPC请求后,通过调用libvirt接口的形式,调用相关的QGA命令,并收集返回值发送给前端;调用的时候,会传入一个timeout值,若超过该超时时间,则会抛出异常,并返回给前端用户;
6)整个过程是同步,用户的http连接将一直保持。


3.根据权利要求2所述的方法,其特征在于,
所述镜像带有QGA的虚拟机镜像文件;将带有QGA的镜像文...

【专利技术属性】
技术研发人员:申嘉童谢涛涛宋伟
申请(专利权)人:山东汇贸电子口岸有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1