VMware: check SwitchUUID value before assigning (#38369)
This fix adds a check for switchuuid value of distributed virtual switch. When there is no association between hostsystem and distributed virtual portgroup, both specified by user, then module does not find DVSwitch. This patch tries to mitigate that problem. Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
a121b5073c
commit
6e6325503a
1 changed files with 17 additions and 3 deletions
|
@ -1117,6 +1117,20 @@ class PyVmomiHelper(PyVmomi):
|
||||||
|
|
||||||
dvs_port_connection = vim.dvs.PortConnection()
|
dvs_port_connection = vim.dvs.PortConnection()
|
||||||
dvs_port_connection.portgroupKey = pg_obj.key
|
dvs_port_connection.portgroupKey = pg_obj.key
|
||||||
|
# If user specifies distributed port group without associating to the hostsystem on which
|
||||||
|
# virtual machine is going to be deployed then we get error. We can infer that there is no
|
||||||
|
# association between given distributed port group and host system.
|
||||||
|
host_system = self.params.get('esxi_hostname')
|
||||||
|
if host_system and host_system not in [host.config.host.name for host in pg_obj.config.distributedVirtualSwitch.config.host]:
|
||||||
|
self.module.fail_json(msg="It seems that host system '%s' is not associated with distributed"
|
||||||
|
" virtual portgroup '%s'. Please make sure host system is associated"
|
||||||
|
" with given distributed virtual portgroup" % (host_system, pg_obj.name))
|
||||||
|
# TODO: (akasurde) There is no way to find association between resource pool and distributed virtual portgroup
|
||||||
|
# For now, check if we are able to find distributed virtual switch
|
||||||
|
if not pg_obj.config.distributedVirtualSwitch:
|
||||||
|
self.module.fail_json(msg="Failed to find distributed virtual switch which is associated with"
|
||||||
|
" distributed virtual portgroup '%s'. Make sure hostsystem is associated with"
|
||||||
|
" the given distributed virtual portgroup." % pg_obj.name)
|
||||||
dvs_port_connection.switchUuid = pg_obj.config.distributedVirtualSwitch.uuid
|
dvs_port_connection.switchUuid = pg_obj.config.distributedVirtualSwitch.uuid
|
||||||
nic.device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
|
||||||
nic.device.backing.port = dvs_port_connection
|
nic.device.backing.port = dvs_port_connection
|
||||||
|
@ -1124,10 +1138,10 @@ class PyVmomiHelper(PyVmomi):
|
||||||
elif isinstance(self.cache.get_network(network_name), vim.OpaqueNetwork):
|
elif isinstance(self.cache.get_network(network_name), vim.OpaqueNetwork):
|
||||||
# NSX-T Logical Switch
|
# NSX-T Logical Switch
|
||||||
nic.device.backing = vim.vm.device.VirtualEthernetCard.OpaqueNetworkBackingInfo()
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.OpaqueNetworkBackingInfo()
|
||||||
|
network_id = self.cache.get_network(network_name).summary.opaqueNetworkId
|
||||||
nic.device.backing.opaqueNetworkType = 'nsx.LogicalSwitch'
|
nic.device.backing.opaqueNetworkType = 'nsx.LogicalSwitch'
|
||||||
nic.device.backing.opaqueNetworkId = self.cache.get_network(network_name).summary.opaqueNetworkId
|
nic.device.backing.opaqueNetworkId = network_id
|
||||||
nic.device.deviceInfo.summary = 'nsx.LogicalSwitch: %s' % (self.cache.get_network(network_name).summary.opaqueNetworkId)
|
nic.device.deviceInfo.summary = 'nsx.LogicalSwitch: %s' % network_id
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# vSwitch
|
# vSwitch
|
||||||
if not isinstance(nic.device.backing, vim.vm.device.VirtualEthernetCard.NetworkBackingInfo):
|
if not isinstance(nic.device.backing, vim.vm.device.VirtualEthernetCard.NetworkBackingInfo):
|
||||||
|
|
Loading…
Reference in a new issue