1、需求背景:
旧平台openstack虚拟机需要迁移到ovirt-engine环境,直接用ovirt自带的对接openstack环境一直cinder鉴权报错,调查是版本不支持,只能手动备份导入的ovirt平台。
思路:获取openstack环境虚拟机信息,读取迁移虚拟机表格,导出虚拟机为qcow2,上传到ovirt平台创建虚拟机挂盘。
2、获取openstack计算节点虚拟机信息
通过virsh list获取instance实例列表,再通过dumpxml获取虚拟机信息利用xml模块解析所需要的信息
def get_vms_list(self):
# print("virsh list --all --name ...")
list_cmd = "virsh list --all --name".split(" ")
stdout, stderr = self.cmd_process(list_cmd)
instance_names = list(filter(None, stdout.split("\n")))
return instance_names
def get_dumpxml_info(self, instance_name):
# print("virsh dumpxml...")
info_cmd = "virsh dumpxml %s" % instance_name
stdout, _ = self.cmd_process(info_cmd.split(" "))
return stdout
def get_vms_info(self):
instance_names = self.get_vms_list()
vms_info = []
for instance_name in instance_names:
xml_str = self.get_dumpxml_info(instance_name)
DOMTree = xml.dom.minidom.parseString(xml_str)
collection = DOMTree.documentElement
vm_info = {}
data_volume = []
vm_info["instance_name"] = collection.getElementsByTagName("name")[0].childNodes[0].data
vm_info["vm_name"] = collection.getElementsByTagName("metadata")[0].getElementsByTagName("nova:instance")[
0].getElementsByTagName("nova:name")[0].childNodes[0].data
vm_info["vm_flavor"] = collection.getElementsByTagName("metadata")[0].getElementsByTagName("nova:instance")[
0].getElementsByTagName("nova:flavor")[0].getAttribute("name")
vm_info["instance_uuid"] = collection.getElementsByTagName("uuid")[0].childNodes[0].data
vm_info["instance_vcpu"] = collection.getElementsByTagName("vcpu")[0].childNodes[0].data
vm_info["instance_memory"] = collection.getElementsByTagName("memory")[0].childNodes[0].data
for disk_info in collection.getElementsByTagName("devices")[0].getElementsByTagName("disk"):
dev = disk_info.getElementsByTagName("target")[0].getAttribute("dev")
if dev == "vda" or dev == "hda":
vm_info["system_volume"] = disk_info.getElementsByTagName("source")[0].getAttribute("name")
else:
data_volume.append(disk_info.getElementsByTagName("source")[0].getAttribute("name"))
vm_info["data_volume"] = data_volume
vms_info.append(vm_info)
return vms_info
计算节点都要执行,最后汇总到执行脚本的节点,并且汇总读取信息(注意系统卷和数据卷的判断根据具体环境修改适配)
run_first_time = False
if run_first_time:
for host in HOST_LIST:
print("** get the vm info from %s" % host)
os.system("scp get_vm_info.py root@%s:/home" % host)
sshclient_execmd(host, "pyth

本文档介绍了如何将openstack虚拟机手动迁移到ovirt-engine环境,由于cinder鉴权问题,采用备份导入的方式。详细步骤包括:获取openstack虚拟机信息,使用virsh和xml解析获取详细配置,将虚拟机disk转换为qcow2格式,通过ovirt SDK上传并创建虚拟机,挂载磁盘和添加网卡。
最低0.47元/天 解锁文章
3986

被折叠的 条评论
为什么被折叠?



