VMware: Check device type explicitly (#38729)

Check datatype of device instead of comparing them directly in
vmware_guest. Also, added testcases to check this behavior.

DPVG is not supported in current version vcsim

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
pull/40074/head
Abhijeet Kasurde 6 years ago committed by GitHub
parent 5cf61d7401
commit 79c7d462c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1100,7 +1100,8 @@ class PyVmomiHelper(PyVmomi):
nic_change_detected = True
if 'device_type' in network_devices[key]:
device = self.device_helper.get_device(network_devices[key]['device_type'], network_name)
if nic.device != device:
device_class = type(device)
if not isinstance(nic.device, device_class):
self.module.fail_json(msg="Changing the device type is not possible when interface is already present. "
"The failing device type is %s" % network_devices[key]['device_type'])
# Changing mac address has no effect when editing interface

@ -28,3 +28,4 @@
#- include: template_d1_c1_f0.yml
- include: vapp_d1_c1_f0.yml
- include: disk_size_d1_c1_f0.yml
- include: network_with_device.yml

@ -0,0 +1,97 @@
# Test code for the vmware_guest module.
# Copyright: (c) 2018, Abhijeet Kasurde <akasurde@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# Testcase to check #38605
- name: Wait for Flask controller to come up online
wait_for:
host: "{{ vcsim }}"
port: 5000
state: started
- name: kill vcsim
uri:
url: http://{{ vcsim }}:5000/killall
- name: start vcsim with no folders
uri:
url: http://{{ vcsim }}:5000/spawn?datacenter=1&cluster=1&folder=0
register: vcsim_instance
- name: Wait for Flask controller to come up online
wait_for:
host: "{{ vcsim }}"
port: 443
state: started
- name: get a list of VMS from vcsim
uri:
url: http://{{ vcsim }}:5000/govc_find?filter=VM
register: vmlist
- debug: var=vcsim_instance
- debug: var=vmlist
- set_fact:
vm1: "{{ vmlist['json'][0] }}"
- debug: var=vm1
- set_fact:
vm_name: "VM_{{ 10000 | random }}"
- name: Deploy VM {{ vm1 | basename }}
vmware_guest:
hostname: "{{ vcsim }}"
username: "{{ vcsim_instance['json']['username'] }}"
password: "{{ vcsim_instance['json']['password'] }}"
validate_certs: False
datacenter: "{{ (vm1|basename).split('_')[0] }}"
state: poweredon
folder: "{{ vm1 | dirname }}"
name: "{{ vm_name }}"
disk:
- size: 10mb
autoselect_datastore: yes
guest_id: rhel7_64guest
hardware:
memory_mb: 512
num_cpus: 1
networks:
- name: 'VM Network'
device_type: "vmxnet3"
register: vm_result
- debug: var=vm_result
- assert:
that:
- "vm_result.changed"
- name: Deploy VM {{ vm1 | basename }} again
vmware_guest:
hostname: "{{ vcsim }}"
username: "{{ vcsim_instance['json']['username'] }}"
password: "{{ vcsim_instance['json']['password'] }}"
validate_certs: False
datacenter: "{{ (vm1|basename).split('_')[0] }}"
state: poweredon
folder: "{{ vm1 | dirname }}"
name: "{{ vm_name }}"
disk:
- size: 10mb
autoselect_datastore: yes
guest_id: rhel7_64guest
hardware:
memory_mb: 512
num_cpus: 1
networks:
- name: 'VM Network'
device_type: "vmxnet3"
register: vm_result_again
- debug: var=vm_result_again
- assert:
that:
- "not vm_result_again.changed"
Loading…
Cancel
Save