From c631f49d8519e350ecaa15a08caf3b9bf10b99e1 Mon Sep 17 00:00:00 2001 From: anna-savina Date: Thu, 2 Jan 2025 14:25:00 +0200 Subject: [PATCH] Modified vcenter_vm_customize test to run on real vCebter --- .../action_on_vm/create_vm_from_template.yml | 17 ++ .../targets/action_on_vm/delete_vm.yml | 20 ++ .../targets/vcenter_vm_customize/.gitignore | 1 - .../targets/vcenter_vm_customize/aliases | 4 - .../vcenter_vm_customize/meta/main.yml | 0 .../targets/vcenter_vm_customize/playbook.yml | 10 - .../refresh_RETURN_block.sh | 11 -- .../targets/vcenter_vm_customize/runme.sh | 3 - .../vcenter_vm_customize/tasks/main.yml | 185 ------------------ .../defaults/main.yml | 7 + .../playbook.yml | 9 + .../tasks/main.yml | 168 ++++++++++++++++ 12 files changed, 221 insertions(+), 214 deletions(-) create mode 100644 tests/integration/targets/action_on_vm/create_vm_from_template.yml create mode 100644 tests/integration/targets/action_on_vm/delete_vm.yml delete mode 100644 tests/integration/targets/vcenter_vm_customize/.gitignore delete mode 100644 tests/integration/targets/vcenter_vm_customize/aliases delete mode 100644 tests/integration/targets/vcenter_vm_customize/meta/main.yml delete mode 100644 tests/integration/targets/vcenter_vm_customize/playbook.yml delete mode 100755 tests/integration/targets/vcenter_vm_customize/refresh_RETURN_block.sh delete mode 100755 tests/integration/targets/vcenter_vm_customize/runme.sh delete mode 100644 tests/integration/targets/vcenter_vm_customize/tasks/main.yml create mode 100644 tests/integration/targets/vmware_rest_vcenter_vm_customize/defaults/main.yml create mode 100644 tests/integration/targets/vmware_rest_vcenter_vm_customize/playbook.yml create mode 100644 tests/integration/targets/vmware_rest_vcenter_vm_customize/tasks/main.yml diff --git a/tests/integration/targets/action_on_vm/create_vm_from_template.yml b/tests/integration/targets/action_on_vm/create_vm_from_template.yml new file mode 100644 index 000000000..a08f91b0a --- /dev/null +++ b/tests/integration/targets/action_on_vm/create_vm_from_template.yml @@ -0,0 +1,17 @@ +--- +- name: Create a generic resource pool + vmware.vmware_rest.vcenter_resourcepool: + name: "{{ resource_pool_name }}" + parent: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/' + vcenter_datacenter + '/' + vcenter_cluster_name + '/' + resource_pool_parent_name) }}" + register: resource_pool_info + +- name: Deploy a new VM based on the template + vmware.vmware_rest.vcenter_vmtemplate_libraryitems: + name: "{{ vm_name }}" + template_library_item: "{{ vcenter_test_vm_template.id }}" + placement: + cluster: "{{ lookup('vmware.vmware_rest.cluster_moid', '/' + vcenter_datacenter + '/' + vcenter_cluster_name) }}" + folder: "{{ lookup('vmware.vmware_rest.folder_moid', '/' + vcenter_datacenter + '/' + vcenter_vm_folder) }}" + resource_pool: "{{ resource_pool_info.id }}" + state: deploy + register: vm_from_template diff --git a/tests/integration/targets/action_on_vm/delete_vm.yml b/tests/integration/targets/action_on_vm/delete_vm.yml new file mode 100644 index 000000000..b000b405c --- /dev/null +++ b/tests/integration/targets/action_on_vm/delete_vm.yml @@ -0,0 +1,20 @@ +--- +- name: Power off VM + vmware.vmware_rest.vcenter_vm_guest_power: + vm: "{{ vm_id }}" + state: shutdown + +- name: Wait until VM is off + vmware.vmware_rest.vcenter_vm_info: + vm: "{{ vm_id }}" + register: vm_info + until: + - vm_info is not failed + - vm_info.value.power_state == "POWERED_OFF" + retries: 60 + delay: 5 + +- name: Delete VM + vmware.vmware_rest.vcenter_vm: + vm: "{{ vm_id }}" + state: absent diff --git a/tests/integration/targets/vcenter_vm_customize/.gitignore b/tests/integration/targets/vcenter_vm_customize/.gitignore deleted file mode 100644 index 447ef9f48..000000000 --- a/tests/integration/targets/vcenter_vm_customize/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.vmdk-4 diff --git a/tests/integration/targets/vcenter_vm_customize/aliases b/tests/integration/targets/vcenter_vm_customize/aliases deleted file mode 100644 index 6fc59307a..000000000 --- a/tests/integration/targets/vcenter_vm_customize/aliases +++ /dev/null @@ -1,4 +0,0 @@ -network/vmware_rest -zuul/vmware/vcenter_1esxi_with_nested -# cannot run in the CI yet -disabled diff --git a/tests/integration/targets/vcenter_vm_customize/meta/main.yml b/tests/integration/targets/vcenter_vm_customize/meta/main.yml deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/integration/targets/vcenter_vm_customize/playbook.yml b/tests/integration/targets/vcenter_vm_customize/playbook.yml deleted file mode 100644 index b738da035..000000000 --- a/tests/integration/targets/vcenter_vm_customize/playbook.yml +++ /dev/null @@ -1,10 +0,0 @@ -- hosts: localhost - gather_facts: no - collections: - - vmware.vmware_rest - - community.vmware - tasks: - - import_role: - name: prepare_lab - - import_role: - name: vcenter_vm_customize diff --git a/tests/integration/targets/vcenter_vm_customize/refresh_RETURN_block.sh b/tests/integration/targets/vcenter_vm_customize/refresh_RETURN_block.sh deleted file mode 100755 index 95bf3d4ea..000000000 --- a/tests/integration/targets/vcenter_vm_customize/refresh_RETURN_block.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC2155 -set -eux - -export ANSIBLE_CALLBACK_WHITELIST=goneri.utils.collect_task_outputs -export COLLECT_TASK_OUTPUTS_COLLECTION=vmware.vmware_rest -export COLLECT_TASK_OUTPUTS_TARGET_DIR=$(realpath ../../../../manual/source/vmware_rest_scenarios/task_outputs/) -export INVENTORY_PATH=/tmp/inventory-vmware_rest - -source ../init.sh -exec ansible-playbook -i ${INVENTORY_PATH} playbook.yaml -e wait_for_vm=1 -vvv diff --git a/tests/integration/targets/vcenter_vm_customize/runme.sh b/tests/integration/targets/vcenter_vm_customize/runme.sh deleted file mode 100755 index 2c96a6abd..000000000 --- a/tests/integration/targets/vcenter_vm_customize/runme.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -source ../init.sh -exec ansible-playbook playbook.yaml diff --git a/tests/integration/targets/vcenter_vm_customize/tasks/main.yml b/tests/integration/targets/vcenter_vm_customize/tasks/main.yml deleted file mode 100644 index 8cedf9bf8..000000000 --- a/tests/integration/targets/vcenter_vm_customize/tasks/main.yml +++ /dev/null @@ -1,185 +0,0 @@ -- ansible.builtin.set_fact: - disk_name: rhel-8.5 - -- name: Fetch the root disk - ansible.builtin.get_url: - url: "https://s3.us-east-2.amazonaws.com/ansible-team-cloud-images/{{ disk_name }}.vmdk-4" - dest: "../{{ disk_name }}.vmdk-4" - checksum: sha256:e28616764ae9eb7e302f4642cace10f1596d8c7c254e2b9c4038c4cd726262ff - -- name: Copy the disk on the ESXi local datastore - ansible.builtin.copy: - src: "../{{ disk_name }}.vmdk-4" - dest: "/vmfs/volumes/local/{{ disk_name }}.vmdk-4" - delegate_to: esxi1.test - vars: - ansible_user: root - ansible_python_interpreter: /bin/python3 - ansible_remote_tmp: /vmfs/volumes/local - -- name: Create the test_vm1 directory - ansible.builtin.file: - path: /vmfs/volumes/local/test_vm1 - state: directory - delegate_to: esxi1.test - vars: - ansible_user: root - ansible_python_interpreter: /bin/python3 - ansible_remote_tmp: /vmfs/volumes/local - -- name: Stat disk file - ansible.builtin.stat: - path: "/vmfs/volumes/local/test_vm1/{{ disk_name }}.vmdk-4" - register: vmdk_stat - delegate_to: esxi1.test - vars: - ansible_user: root - ansible_python_interpreter: /bin/python3 - ansible_remote_tmp: /vmfs/volumes/local -- ansible.builtin.debug: var=vmdk_stat -- name: Prepare the VMDK file - ansible.builtin.command: "vmkfstools -i /vmfs/volumes/local/{{ disk_name }}.vmdk-4 /vmfs/volumes/local/test_vm1/{{ disk_name }}.vmdk -d thin" - delegate_to: esxi1.test - vars: - ansible_user: root - ansible_python_interpreter: /bin/python3 - when: not vmdk_stat.stat.exists|bool - -- name: Create a VM - vmware.vmware_rest.vcenter_vm: - placement: - cluster: "{{ lookup('vmware.vmware_rest.cluster_moid', '/my_dc/host/my_cluster') }}" - datastore: "{{ lookup('vmware.vmware_rest.datastore_moid', '/my_dc/datastore/local') }}" - folder: "{{ lookup('vmware.vmware_rest.folder_moid', '/my_dc/vm') }}" - resource_pool: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/my_dc/host/my_cluster/Resources') }}" - name: test_vm1 - guest_OS: RHEL_7_64 - hardware_version: VMX_11 - memory: - hot_add_enabled: true - size_MiB: 1024 - disks: - - type: SATA - backing: - type: VMDK_FILE - vmdk_file: "[local] test_vm1/{{ disk_name }}.vmdk" - - type: SATA - new_vmdk: - name: second_disk - capacity: 32000000000 - cdroms: - - type: SATA - sata: - bus: 0 - unit: 2 - nics: - - backing: - type: STANDARD_PORTGROUP - network: "{{ lookup('vmware.vmware_rest.network_moid', '/my_dc/network/VM Network') }}" - - register: my_vm -- ansible.builtin.assert: - that: - - my_vm is changed - -- name: Turn on the power of the VM - vmware.vmware_rest.vcenter_vm_power: - state: start - vm: '{{ my_vm.id }}' - -- name: Wait until my VM is ready - vmware.vmware_rest.vcenter_vm_tools_info: - vm: '{{ my_vm.id }}' - register: vm_tools_info - until: - - vm_tools_info is not failed - - vm_tools_info.value.run_state == "RUNNING" - retries: 60 - delay: 5 - -- name: Shut down the VM - vmware.vmware_rest.vcenter_vm_guest_power: - state: shutdown - vm: '{{ my_vm.id }}' - -- name: Wait until my VM is off - vmware.vmware_rest.vcenter_vm_info: - vm: '{{ my_vm.id }}' - register: vm_info - until: - - vm_info is not failed - - vm_info.value.power_state == "POWERED_OFF" - retries: 60 - delay: 5 - -- name: Read the power status of the VM - vmware.vmware_rest.vcenter_vm_guest_power_info: - vm: '{{ my_vm.id }}' - - -- name: Customize the VM - vmware.vmware_rest.vcenter_vm_guest_customization: - vm: "{{ lookup('vmware.vmware_rest.vm_moid', '/my_dc/vm/test_vm1') }}" - configuration_spec: - linux_config: - domain: mydomain - hostname: - fixed_name: foobar - type: FIXED - interfaces: - - adapter: - ipv4: - type: STATIC - gateways: - - 192.168.123.1 - ip_address: 192.168.123.50 - prefix: 24 - global_DNS_settings: - dns_suffix_list: [] - dns_servers: - - 1.1.1.1 - -- name: Turn on the power of the VM - vmware.vmware_rest.vcenter_vm_power: - state: start - vm: '{{ my_vm.id }}' - -- name: Wait until my VM is ready - vmware.vmware_rest.vcenter_vm_tools_info: - vm: '{{ my_vm.id }}' - register: vm_tools_info - until: - - vm_tools_info is not failed - - vm_tools_info.value.run_state == "RUNNING" - retries: 60 - delay: 5 - -- name: Wait to be sure the VM is actually operational - pause: - minutes: 1 - -- name: Ensure we can ping the new VM - ansible.builtin.command: ping -c 5 192.168.123.50 - -- shell: | - echo root:root|ssh root@192.168.123.50 chpasswd - -- name: Create a directory in /tmp - vmware.vmware_rest.vcenter_vm_guest_filesystem_directories: - vm: '{{ my_vm.id }}' - path: /tmp/my/path - create_parents: true - credentials: - interactive_session: false - type: USERNAME_PASSWORD - user_name: root - password: root - -- name: Get information about the vm-tools - vmware.vmware_rest.vcenter_vm_tools_installer_info: - vm: '{{ my_vm.id }}' - -- name: Update the vm-tools - vmware.vmware_rest.vcenter_vm_tools_installer: - vm: '{{ my_vm.id }}' - state: connect diff --git a/tests/integration/targets/vmware_rest_vcenter_vm_customize/defaults/main.yml b/tests/integration/targets/vmware_rest_vcenter_vm_customize/defaults/main.yml new file mode 100644 index 000000000..f21d34f5b --- /dev/null +++ b/tests/integration/targets/vmware_rest_vcenter_vm_customize/defaults/main.yml @@ -0,0 +1,7 @@ +--- +test_resource_pool_name: "{{ tiny_prefix }}-vm-customize-resource-pool" +test_vm_name: "{{ tiny_prefix }}-vm" +new_vm_setting: + vm_ip: 10.46.29.150 + dns_host_name: test + dns_servers: 1.1.1.1 diff --git a/tests/integration/targets/vmware_rest_vcenter_vm_customize/playbook.yml b/tests/integration/targets/vmware_rest_vcenter_vm_customize/playbook.yml new file mode 100644 index 000000000..75f25aa0f --- /dev/null +++ b/tests/integration/targets/vmware_rest_vcenter_vm_customize/playbook.yml @@ -0,0 +1,9 @@ +- hosts: localhost + gather_facts: no + + tasks: + - name: Import vcenter vm cusromize test + ansible.builtin.import_role: + name: vmware_rest_vcenter_vm_customize + tags: + - eco-vcenter-ci diff --git a/tests/integration/targets/vmware_rest_vcenter_vm_customize/tasks/main.yml b/tests/integration/targets/vmware_rest_vcenter_vm_customize/tasks/main.yml new file mode 100644 index 000000000..7cb87c263 --- /dev/null +++ b/tests/integration/targets/vmware_rest_vcenter_vm_customize/tasks/main.yml @@ -0,0 +1,168 @@ +--- +- name: Test VM customize on a real vCenter + block: + - name: Import eco-vcenter common vars + ansible.builtin.include_vars: + file: ../group_vars.yml + tags: eco-vcenter-ci + + - name: Create VM from template + ansible.builtin.include_tasks: ../../action_on_vm/create_vm_from_template.yml + vars: + resource_pool_name: "{{ test_resource_pool_name }}" + resource_pool_parent_name: "{{ vcenter_resource_pool }}" + vm_name: "{{ test_vm_name }}" + + - name: Power on VM + vmware.vmware_rest.vcenter_vm_power: + state: start + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + + - name: Wait until VM is ready + vmware.vmware_rest.vcenter_vm_tools_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_tools_info + until: + - vm_tools_info is not failed + - vm_tools_info.value.run_state == "RUNNING" + retries: 60 + delay: 5 + + - name: Shut down the VM + vmware.vmware_rest.vcenter_vm_guest_power: + state: shutdown + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + + - name: Wait until VM is off + vmware.vmware_rest.vcenter_vm_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_info + until: + - vm_info is not failed + - vm_info.value.power_state == "POWERED_OFF" + retries: 10 + delay: 5 + + - name: Read the power status of the VM + vmware.vmware_rest.vcenter_vm_guest_power_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_power_info + + - name: Verify power status of the VM + ansible.builtin.assert: + that: + - vm_power_info.value.state == "NOT_RUNNING" + - not vm_power_info.value.operations_ready + + - name: Customize the VM + vmware.vmware_rest.vcenter_vm_guest_customization: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + configuration_spec: + linux_config: + domain: testdomain + hostname: + fixed_name: "{{ new_vm_setting.dns_host_name }}" + type: FIXED + interfaces: + - adapter: + ipv4: + type: STATIC + ip_address: "{{ new_vm_setting.vm_ip }}" + prefix: 24 + global_DNS_settings: + dns_suffix_list: [] + dns_servers: + - "{{ new_vm_setting.dns_servers }}" + register: customized_vm + + - name: Print customized VM info + ansible.builtin.debug: + var: customized_vm + + - name: Turn on the power of the VM + vmware.vmware_rest.vcenter_vm_power: + state: start + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + + - name: Wait until VM is ready + vmware.vmware_rest.vcenter_vm_tools_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_tools_info + until: + - vm_tools_info is not failed + - vm_tools_info.value.run_state == "RUNNING" + retries: 60 + delay: 5 + + - name: Read the power status of the VM + vmware.vmware_rest.vcenter_vm_guest_power_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_power_info + + - name: Verify power status of the VM + ansible.builtin.assert: + that: + - vm_power_info.value.state == "RUNNING" + - vm_power_info.value.operations_ready + + - name: Wait to be sure the VM is actually operational + pause: + minutes: 1 + + - name: Collect information about VM network + vmware.vmware_rest.vcenter_vm_guest_networking_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_dns_info + + - name: Print VM network info + ansible.builtin.debug: + var: vm_dns_info + + - name: Verify DNS settings of VM + ansible.builtin.assert: + that: + - vm_dns_info.value.dns_values.host_name == new_vm_setting.dns_host_name + - vm_dns_info.value.dns.ip_addresses is contains new_vm_setting.dns_servers + - vm_dns_info.value.dns.search_domains | length == 0 + + - name: Collect information about networking interface of VM + vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_ip_info + + - name: Verify IP adress of VM + ansible.builtin.assert: + that: + - vm_ip_info.value[0].ip.ip_addresses|map(attribute='ip_address')|list is contains new_vm_setting.vm_ip + + - name: Get information about the vm-tools + vmware.vmware_rest.vcenter_vm_tools_installer_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_info + + - ansible.builtin.assert: + that: not vm_info.value.is_connected + + - name: Update the vm-tools + vmware.vmware_rest.vcenter_vm_tools_installer: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + state: connect + + - name: Get information about the vm-tools + vmware.vmware_rest.vcenter_vm_tools_installer_info: + vm: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + register: vm_info + + - ansible.builtin.assert: + that: vm_info.value.is_connected + + always: + - name: Delete VM + ansible.builtin.include_tasks: ../../action_on_vm/delete_vm.yml + vars: + vm_id: "{{ lookup('vmware.vmware_rest.vm_moid', test_vm_name) }}" + + - name: Delete resource pool + vmware.vmware_rest.vcenter_resourcepool: + resource_pool: "{{ lookup('vmware.vmware_rest.resource_pool_moid', test_resource_pool_name) }}" + state: absent