背景: 克隆出来的虚拟机遇到了一个很奇怪的现象,克隆配置的IP和显示的第一IP地址不符合,如下图,当我去检查配置的IP,机器上的IP也配置成功了,但获取IP却是192.168.122.1。
目的: 获取克隆出来的虚拟机对象的IP是192.168.30.222
原获取IP的代码:
vm = self._get_obj([vim.VirtualMachine], vm_name)
if not vm:
return {'info': {}, 'status': False}
summary = vm.summary
# IP地址
ip_address = summary.guest.ipAddress
host_name = summary.guest.hostName
发现这种获取方式是极其不严谨的,当克隆的虚拟机有这种虚拟的IP的时候,大概率会出现这种获取不到想要的IP信息。
现获取IP的代码:
vm = self._get_obj([vim.VirtualMachine], vm_name)
if not vm:
return {'info': {}, 'status': False}
# IP地址
ips = []
if vm.guest.net:
for i in vm.guest.net:
if i.network:
ips.extend(i.ipAddress)
这样获取的IP会获取到这个虚拟机的所有IP(包括IPv6)
后续只需要判断你设置的IP是否在这个ips列表里面就可以了。