需求描述
在我们设计和实现的CMDB平台中,首先已经将物理设备资产信息和虚机、云主机、容器以及多种类型的网络设备进行了统一管理。在使用中,很多重要业务技术系统是运行在kvm虚拟化服务器上的,因此我们一直有对虚机和虚机的宿主机关联关系进行登记管理,便于全盘掌握物理设备资源和业务虚机使用方面的要求。
以前我们是使用一个excel表格来登记物理设备资源和业务虚机的关联关系,随着CMDB信息化水平的提升,现在我们终于可以废弃掉难于手动维护的excel文件,设计并实现一个可以程序自动获取KVM虚拟化的宿主机与虚机关系信息并进行展示的功能。
功能设计
- 在资产管理平台上补充设计一个新的功能:对那些属于kvm物理主机组且设备类型为物理主机 的设备,每天定时执行一个自动化地更新KVM虚似化信息的程序。这个定时任务的功能有两种实现方法,简单的是django-crontab模块,稍复杂但功能更强的是django-celery模块。
- 需要能够由程序自动去获取每个虚拟化宿主机上的kvm虚机配置信息,我们在实现时是选择使用SaltStack工具提供底层的自动化运维管理任务的支持。
- 目前我们主要关注的是在kvm宿主机上执行
virsh list
命令所返回的当前活跃状态的虚机列表信息。 - 在CMDB数据库设备资产表中,为服务器设备新增一个属性
vms
用于记录在设备上运行着的kvm虚机列表信息。 - 在查看主机设备资产的详情页中,为符合条件的设备增加显示kvm虚机列表的页面信息。根据虚机名称,在cmdb主机资产列表中查询是否存在唯一一致的主机资产,如果存在,则再附加上可以查看该虚机资产信息的URL链接;否则,就只显示该虚机名称的文本名称即可。
- 在展示kvm虚机的详情页信息时,同样需要根据以上的关系信息查找其kvm宿主机,并展示出来,以便于我们使用。
代码实现
把下面的函数配置成一个定时运行的django定时任务即可。对于KVM宿主机和虚机关联系统的信息,因为并不会经常发生变更,所以每天更新一次即可以满足我们的使用需求了。
以上函数完成了信息采集与更新的功能。接下来,就是对这些采集到的信息怎么做出一个更好的展示效果了,参照下一部分的页面效果展示。
页面展示设计与实现
我们只截取了主机详情页中与kvm虚机信息展示有关的部分页面代码如下。
- 其中使用到了两个变更vms_list,vms_string不过是基于库表中
vms
属性信息做的进一步数据分析。其中把可以在cmdb中找到主机资产记录信息的虚机放入一个list中,把那些在kvm宿主机上实际存在但由于各种原因未维护在cmdb中的业务虚机放入一个字符串变量中。 - 在处理页面展示内容的细节时,又区分处理了下kvm虚机和kvm宿主机不同的展示结果。
我们的测试环境中,有一个kvm宿主机,其中运行着两个虚机,不过其中有一个虚机暂未接入到cmdb系统中,所以下图中并未显示。
查看KVM物理服务器宿主机的详细信息,以下是与虚机有关部分的截图。
- 我们可以看到,为该物理服务器展示出它共有两个kvm虚机,其中一个因为同样可以在cmdb中查找到相关资产记录,所以提供了一个查看该业务虚机详情信息的URL链接。
我们点击这个名为custom_wiki
的虚机名称链接,进入下面的详情页面。
- 从中可以看到,在查看一个虚机的详情信息时,在结果中展示的是描述其kvm宿主机的信息,以及查看宿 主机详情的链接。
[完]