From 0dd3a61a75c4ca4fc489e56299da2045d3c5722a Mon Sep 17 00:00:00 2001 From: jctanner Date: Wed, 27 Sep 2017 18:10:08 -0400 Subject: [PATCH] vmware_guest: tests for createvm+modifyvm tasks (#30959) * Save the serialized values instead of their types * Add tests for creating and modifying VMs without using a template * Remove blank line * Add tests for vm deletion --- lib/ansible/module_utils/vmware.py | 5 +- .../vmware_guest/tasks/create_d1_c1_f0.yml | 179 ++++++++++++++++++ .../targets/vmware_guest/tasks/main.yml | 1 + 3 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 test/integration/targets/vmware_guest/tasks/create_d1_c1_f0.yml diff --git a/lib/ansible/module_utils/vmware.py b/lib/ansible/module_utils/vmware.py index 64c30cba725..bb6bfd5775e 100644 --- a/lib/ansible/module_utils/vmware.py +++ b/lib/ansible/module_utils/vmware.py @@ -618,7 +618,10 @@ def serialize_spec(clonespec): for xe in xo: data[x].append(serialize_spec(xe)) elif issubclass(xt, string_types + integer_types + (float, bool)): - data[x] = to_text(xt) + if issubclass(xt, integer_types): + data[x] = int(xo) + else: + data[x] = to_text(xo) elif issubclass(xt, bool): data[x] = xo elif issubclass(xt, dict): diff --git a/test/integration/targets/vmware_guest/tasks/create_d1_c1_f0.yml b/test/integration/targets/vmware_guest/tasks/create_d1_c1_f0.yml new file mode 100644 index 00000000000..bd7119d329c --- /dev/null +++ b/test/integration/targets/vmware_guest/tasks/create_d1_c1_f0.yml @@ -0,0 +1,179 @@ +- 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 + +- name: create new VMs + vmware_guest: + validate_certs: False + hostname: "{{ vcsim }}" + username: "{{ vcsim_instance['json']['username'] }}" + password: "{{ vcsim_instance['json']['password'] }}" + name: "{{ 'newvm_' + item|basename }}" + #template: "{{ item|basename }}" + guest_id: centos64Guest + datacenter: "{{ (item|basename).split('_')[0] }}" + hardware: + num_cpus: 1 + memory_mb: 512 + disk: + - size: 0gb + type: thin + autoselect_datastore: True + state: poweredoff + folder: "{{ item|dirname }}" + with_items: "{{ vmlist['json'] }}" + register: clone_d1_c1_f0 + +- debug: var=clone_d1_c1_f0 + +- name: assert that changes were made + assert: + that: + - "clone_d1_c1_f0.results|map(attribute='changed')|unique|list == [true]" + +- name: create new VMs again + vmware_guest: + validate_certs: False + hostname: "{{ vcsim }}" + username: "{{ vcsim_instance['json']['username'] }}" + password: "{{ vcsim_instance['json']['password'] }}" + name: "{{ 'newvm_' + item|basename }}" + #template: "{{ item|basename }}" + guest_id: centos64Guest + datacenter: "{{ (item|basename).split('_')[0] }}" + hardware: + num_cpus: 1 + memory_mb: 512 + disk: + - size: 0gb + type: thin + autoselect_datastore: True + state: poweredoff + folder: "{{ item|dirname }}" + with_items: "{{ vmlist['json'] }}" + register: clone_d1_c1_f0_recreate + +- debug: var=clone_d1_c1_f0_recreate + +- name: assert that no changes were made after re-creating + assert: + that: + - "clone_d1_c1_f0_recreate.results|map(attribute='changed')|unique|list == [false]" + +- name: modify the new VMs + vmware_guest: + validate_certs: False + hostname: "{{ vcsim }}" + username: "{{ vcsim_instance['json']['username'] }}" + password: "{{ vcsim_instance['json']['password'] }}" + name: "{{ 'newvm_' + item|basename }}" + #template: "{{ item|basename }}" + guest_id: centos64Guest + datacenter: "{{ (item|basename).split('_')[0] }}" + hardware: + num_cpus: 2 + memory_mb: 1024 + state: present + folder: "{{ item|dirname }}" + with_items: "{{ vmlist['json'] }}" + register: clone_d1_c1_f0_modify + +- debug: var=clone_d1_c1_f0_modify + +- name: assert that changes were made with modification + assert: + that: + - "clone_d1_c1_f0_modify.results|map(attribute='changed')|unique|list == [true]" + +- name: re-modify the new VMs + vmware_guest: + validate_certs: False + hostname: "{{ vcsim }}" + username: "{{ vcsim_instance['json']['username'] }}" + password: "{{ vcsim_instance['json']['password'] }}" + name: "{{ 'newvm_' + item|basename }}" + #template: "{{ item|basename }}" + guest_id: centos64Guest + datacenter: "{{ (item|basename).split('_')[0] }}" + hardware: + num_cpus: 2 + memory_mb: 1024 + state: present + folder: "{{ item|dirname }}" + with_items: "{{ vmlist['json'] }}" + register: clone_d1_c1_f0_remodify + +- debug: var=clone_d1_c1_f0_remodify + +- name: assert that no changes were made when re-modified + assert: + that: + - "clone_d1_c1_f0_remodify.results|map(attribute='changed')|unique|list == [false]" + +- name: delete the new VMs + vmware_guest: + validate_certs: False + hostname: "{{ vcsim }}" + username: "{{ vcsim_instance['json']['username'] }}" + password: "{{ vcsim_instance['json']['password'] }}" + name: "{{ 'newvm_' + item|basename }}" + #template: "{{ item|basename }}" + #guest_id: centos64Guest + datacenter: "{{ (item|basename).split('_')[0] }}" + state: absent + folder: "{{ item|dirname }}" + with_items: "{{ vmlist['json'] }}" + register: clone_d1_c1_f0_delete + +- debug: var=clone_d1_c1_f0_delete + +- name: assert that changes were made with deletion + assert: + that: + - "clone_d1_c1_f0_delete.results|map(attribute='changed')|unique|list == [true]" + +- name: re-delete the new VMs + vmware_guest: + validate_certs: False + hostname: "{{ vcsim }}" + username: "{{ vcsim_instance['json']['username'] }}" + password: "{{ vcsim_instance['json']['password'] }}" + name: "{{ 'newvm_' + item|basename }}" + #template: "{{ item|basename }}" + #guest_id: centos64Guest + datacenter: "{{ (item|basename).split('_')[0] }}" + state: absent + folder: "{{ item|dirname }}" + with_items: "{{ vmlist['json'] }}" + register: clone_d1_c1_f0_redelete + +- debug: var=clone_d1_c1_f0_redelete + +- name: assert that no changes were made with redeletion + assert: + that: + - "clone_d1_c1_f0_redelete.results|map(attribute='changed')|unique|list == [false]" diff --git a/test/integration/targets/vmware_guest/tasks/main.yml b/test/integration/targets/vmware_guest/tasks/main.yml index 9a8b5856c2e..b58de9fa631 100644 --- a/test/integration/targets/vmware_guest/tasks/main.yml +++ b/test/integration/targets/vmware_guest/tasks/main.yml @@ -12,3 +12,4 @@ - include: poweroff_d1_c1_f0.yml - include: poweroff_d1_c1_f1.yml - include: clone_d1_c1_f0.yml +- include: create_d1_c1_f0.yml