VMware: Use existing DVPG network in vmware_guest_network (#65994)
* Handle all cases of networks Fixes: #65968 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
69f9c3c8eb
commit
afb71c14bd
3 changed files with 161 additions and 6 deletions
2
changelogs/fragments/65968-vmware_guest_network.yml
Normal file
2
changelogs/fragments/65968-vmware_guest_network.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- In vmware_guest_network module use appropriate network while creating or reconfiguring (https://github.com/ansible/ansible/issues/65968).
|
|
@ -306,9 +306,27 @@ class PyVmomiHelper(PyVmomi):
|
||||||
nic = vim.vm.device.VirtualDeviceSpec()
|
nic = vim.vm.device.VirtualDeviceSpec()
|
||||||
nic.device = self.get_device_type(device_type=device_info.get('device_type', 'vmxnet3'))
|
nic.device = self.get_device_type(device_type=device_info.get('device_type', 'vmxnet3'))
|
||||||
nic.device.deviceInfo = vim.Description()
|
nic.device.deviceInfo = vim.Description()
|
||||||
|
network_object = self.find_network_by_name(network_name=device_info['name'])[0]
|
||||||
|
if network_object:
|
||||||
|
if hasattr(network_object, 'portKeys'):
|
||||||
|
# DistributedVirtualPortGroup
|
||||||
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
|
||||||
|
nic.device.backing.port = vim.dvs.PortConnection()
|
||||||
|
nic.device.backing.port.switchUuid = network_object.config.distributedVirtualSwitch.uuid
|
||||||
|
nic.device.backing.port.portgroupKey = network_object.key
|
||||||
|
elif isinstance(network_object, vim.OpaqueNetwork):
|
||||||
|
# NSX-T Logical Switch
|
||||||
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.OpaqueNetworkBackingInfo()
|
||||||
|
network_id = network_object.summary.opaqueNetworkId
|
||||||
|
nic.device.backing.opaqueNetworkType = 'nsx.LogicalSwitch'
|
||||||
|
nic.device.backing.opaqueNetworkId = network_id
|
||||||
|
nic.device.deviceInfo.summary = 'nsx.LogicalSwitch: %s' % network_id
|
||||||
|
else:
|
||||||
|
# Standard vSwitch
|
||||||
nic.device.deviceInfo.summary = device_info['name']
|
nic.device.deviceInfo.summary = device_info['name']
|
||||||
nic.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
|
||||||
nic.device.backing.deviceName = device_info['name']
|
nic.device.backing.deviceName = device_info['name']
|
||||||
|
nic.device.backing.network = network_object
|
||||||
nic.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
|
nic.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
|
||||||
nic.device.connectable.startConnected = device_info.get('start_connected', True)
|
nic.device.connectable.startConnected = device_info.get('start_connected', True)
|
||||||
nic.device.connectable.allowGuestControl = True
|
nic.device.connectable.allowGuestControl = True
|
||||||
|
@ -461,8 +479,30 @@ class PyVmomiHelper(PyVmomi):
|
||||||
if 'connected' in network and nic_device.connectable.connected != network['connected']:
|
if 'connected' in network and nic_device.connectable.connected != network['connected']:
|
||||||
nic_device.connectable.connected = network['connected']
|
nic_device.connectable.connected = network['connected']
|
||||||
self.change_detected = True
|
self.change_detected = True
|
||||||
if 'name' in network and nic_device.deviceInfo.summary != network['name']:
|
if 'name' in network:
|
||||||
nic_device.deviceInfo.summary = network['name']
|
network_object = self.find_network_by_name(network_name=network['name'])[0]
|
||||||
|
if network_object and hasattr(network_object, 'portKeys') and hasattr(nic_spec.device.backing, 'port'):
|
||||||
|
if network_object.config.distributedVirtualSwitch.uuid != nic_spec.device.backing.port.switchUuid:
|
||||||
|
# DistributedVirtualPortGroup
|
||||||
|
nic_spec.device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
|
||||||
|
nic_spec.device.backing.port = vim.dvs.PortConnection()
|
||||||
|
nic_spec.device.backing.port.switchUuid = network_object.config.distributedVirtualSwitch.uuid
|
||||||
|
nic_spec.device.backing.port.portgroupKey = network_object.key
|
||||||
|
self.change_detected = True
|
||||||
|
elif network_object and isinstance(network_object, vim.OpaqueNetwork) and hasattr(nic_spec.device.backing, 'opaqueNetworkId'):
|
||||||
|
if nic_spec.device.backing.opaqueNetworkId != network_object.summary.opaqueNetworkId:
|
||||||
|
# NSX-T Logical Switch
|
||||||
|
nic_spec.device.backing = vim.vm.device.VirtualEthernetCard.OpaqueNetworkBackingInfo()
|
||||||
|
network_id = network_object.summary.opaqueNetworkId
|
||||||
|
nic_spec.device.backing.opaqueNetworkType = 'nsx.LogicalSwitch'
|
||||||
|
nic_spec.device.backing.opaqueNetworkId = network_id
|
||||||
|
nic_spec.device.deviceInfo.summary = 'nsx.LogicalSwitch: %s' % network_id
|
||||||
|
self.change_detected = True
|
||||||
|
elif nic_device.deviceInfo.summary != network['name']:
|
||||||
|
# Standard vSwitch
|
||||||
|
nic_spec.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
|
||||||
|
nic_spec.device.backing.deviceName = network['name']
|
||||||
|
nic_spec.device.backing.network = network_object
|
||||||
self.change_detected = True
|
self.change_detected = True
|
||||||
if 'manual_mac' in network and nic_device.macAddress != network['manual_mac']:
|
if 'manual_mac' in network and nic_device.macAddress != network['manual_mac']:
|
||||||
if vm_obj.runtime.powerState != vim.VirtualMachinePowerState.poweredOff:
|
if vm_obj.runtime.powerState != vim.VirtualMachinePowerState.poweredOff:
|
||||||
|
|
|
@ -235,3 +235,116 @@
|
||||||
that:
|
that:
|
||||||
- not (no_nw_details is changed)
|
- not (no_nw_details is changed)
|
||||||
- no_nw_details.failed
|
- no_nw_details.failed
|
||||||
|
|
||||||
|
- name: Change portgroup to dvPortgroup
|
||||||
|
vmware_guest_network:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
name: test_vm1
|
||||||
|
networks:
|
||||||
|
- name: "{{ dvpg1 }}"
|
||||||
|
label: "Network adapter 1"
|
||||||
|
connected: false
|
||||||
|
start_connected: true
|
||||||
|
state: present
|
||||||
|
register: change_netaddr_dvp
|
||||||
|
|
||||||
|
- debug: var=change_netaddr_dvp
|
||||||
|
|
||||||
|
- name: Check changed to dvPortgroup from PortGroup
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- change_netaddr_dvp.changed is sameas true
|
||||||
|
|
||||||
|
- name: Change portgroup to dvPortgroup
|
||||||
|
vmware_guest_network:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
name: test_vm1
|
||||||
|
networks:
|
||||||
|
- name: "{{ dvpg1 }}"
|
||||||
|
label: "Network adapter 1"
|
||||||
|
connected: false
|
||||||
|
start_connected: true
|
||||||
|
state: present
|
||||||
|
register: change_netaddr_dvp
|
||||||
|
|
||||||
|
- debug: var=change_netaddr_dvp
|
||||||
|
|
||||||
|
- name: Check not changed of dvPortgroup
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- change_netaddr_dvp.changed is sameas false
|
||||||
|
|
||||||
|
- name: Change dvPortgroup to PortGroup
|
||||||
|
vmware_guest_network:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
name: test_vm1
|
||||||
|
networks:
|
||||||
|
- name: "VM Network"
|
||||||
|
label: "Network adapter 1"
|
||||||
|
connected: false
|
||||||
|
start_connected: true
|
||||||
|
state: present
|
||||||
|
register: change_netaddr_pg
|
||||||
|
|
||||||
|
- debug: var=change_netaddr_pg
|
||||||
|
|
||||||
|
- name: Check changed to dvPortgroup from PortGroup
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- change_netaddr_pg.changed is sameas true
|
||||||
|
- change_netaddr_pg.network_data['0'].name == "VM Network"
|
||||||
|
|
||||||
|
- name: Change dvPortgroup to PortGroup
|
||||||
|
vmware_guest_network:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
name: test_vm1
|
||||||
|
networks:
|
||||||
|
- name: "VM Network"
|
||||||
|
label: "Network adapter 1"
|
||||||
|
connected: false
|
||||||
|
start_connected: true
|
||||||
|
state: present
|
||||||
|
register: change_netaddr_pg
|
||||||
|
|
||||||
|
- debug: var=change_netaddr_pg
|
||||||
|
|
||||||
|
- name: Check not changed of PortGroup
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- change_netaddr_pg.changed is sameas false
|
||||||
|
- change_netaddr_pg.network_data['0'].name == "VM Network"
|
||||||
|
|
||||||
|
# https://github.com/ansible/ansible/issues/65968
|
||||||
|
- name: Create a network with dvPortgroup
|
||||||
|
vmware_guest_network:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
name: test_vm1
|
||||||
|
networks:
|
||||||
|
- name: "{{ dvpg1 }}"
|
||||||
|
label: "Network adapter 2"
|
||||||
|
connected: true
|
||||||
|
start_connected: true
|
||||||
|
state: new
|
||||||
|
register: create_netaddr_pg
|
||||||
|
|
||||||
|
- debug: var=create_netaddr_pg
|
||||||
|
|
||||||
|
- name: Check if network is created with dvpg
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- create_netaddr_pg.changed is sameas true
|
||||||
|
|
Loading…
Reference in a new issue