From 56c97f2ee4aa517859566fd91e57e326e7b6510c Mon Sep 17 00:00:00 2001 From: Elsa Passaro Date: Mon, 10 Jun 2024 15:50:36 +0200 Subject: [PATCH] enable snapshot_management integration target to run on real vcenter --- Makefile | 4 +- .../targets/snapshot_management_test/run.yml | 13 ---- .../targets/snapshot_management_test/runme.sh | 3 - .../run.yml | 27 ++++++++ .../runme.sh | 14 ++++ .../tasks/get_snapshot_info.yml | 20 ++++++ .../tasks/main.yml | 48 ++++++++++++++ .../tasks/manage_snapshot.yml | 13 ++++ .../tasks/remove_snapshot.yml | 10 +++ .../verify_snapshot_post_removal_test.yml | 19 ++++++ .../tasks/verify_snapshot_test.yml | 12 ++++ .../vars.yml} | 9 +-- .../vars/main.yml | 66 +++++++++++++++++++ 13 files changed, 233 insertions(+), 25 deletions(-) delete mode 100644 tests/integration/targets/snapshot_management_test/run.yml delete mode 100755 tests/integration/targets/snapshot_management_test/runme.sh create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/run.yml create mode 100755 tests/integration/targets/vmware_ops_snapshot_management_test/runme.sh create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/tasks/get_snapshot_info.yml create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/tasks/main.yml create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/tasks/manage_snapshot.yml create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/tasks/remove_snapshot.yml create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_post_removal_test.yml create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_test.yml rename tests/integration/targets/{snapshot_management_test/tasks/main.yml => vmware_ops_snapshot_management_test/vars.yml} (69%) create mode 100644 tests/integration/targets/vmware_ops_snapshot_management_test/vars/main.yml diff --git a/Makefile b/Makefile index 59036e50..32a92bd5 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,9 @@ integration: install-python-packages install-ansible-collections .PHONY: eco-vcenter-ci eco-vcenter-ci: install-python-packages install-ansible-collections install-pyvmomy-latest - ansible-test integration --no-temp-workdir info_test + @for dir in $(shell ansible-test integration --list-target --no-temp-workdir | grep 'vmware_ops_'); do \ + ansible-test integration --no-temp-workdir $$dir; \ + done .PHONY: ee-clean ee-clean: diff --git a/tests/integration/targets/snapshot_management_test/run.yml b/tests/integration/targets/snapshot_management_test/run.yml deleted file mode 100644 index 63884b19..00000000 --- a/tests/integration/targets/snapshot_management_test/run.yml +++ /dev/null @@ -1,13 +0,0 @@ -- hosts: localhost - gather_facts: no - collections: - - community.general - - tasks: - - name: Vcsim - ansible.builtin.import_role: - name: prepare_soap - - - name: Import manage VM snapshot role - ansible.builtin.import_role: - name: snapshot_management_test diff --git a/tests/integration/targets/snapshot_management_test/runme.sh b/tests/integration/targets/snapshot_management_test/runme.sh deleted file mode 100755 index a4c36631..00000000 --- a/tests/integration/targets/snapshot_management_test/runme.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -source ../init.sh -exec ansible-playbook run.yml diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/run.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/run.yml new file mode 100644 index 00000000..c5528529 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/run.yml @@ -0,0 +1,27 @@ +- hosts: localhost + gather_facts: no + collections: + - community.general + + tasks: + - name: Import eco-vcenter credentials + ansible.builtin.include_vars: + file: ../../integration_config.yml + tags: eco-vcenter-ci + + - name: Import simulator vars + ansible.builtin.include_vars: + file: vars.yml + tags: integration-ci + + - name: Vcsim + ansible.builtin.include_role: + name: prepare_soap + tags: integration-ci + + - name: Import manage VM snapshot role + ansible.builtin.include_role: + name: vmware_ops_snapshot_management_test + tags: + - eco-vcenter-ci + - integration-ci \ No newline at end of file diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/runme.sh b/tests/integration/targets/vmware_ops_snapshot_management_test/runme.sh new file mode 100755 index 00000000..3ee104e3 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/runme.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +source ../init.sh + +# Extract the ansible_tags from integration_config.yml +ANSIBLE_TAGS=$(awk '/ansible_tags/ {print $2}' ../../integration_config.yml) + +# Check if the ANSIBLE_TAGS variable is set +if [[ -n "$ANSIBLE_TAGS" ]]; then + echo "ANSIBLE_TAGS is set to: $ANSIBLE_TAGS" + exec ansible-playbook run.yml --tags "$ANSIBLE_TAGS" +else + echo "ANSIBLE_TAGS is not set for Eco vCenter. Running on simulator." + exec ansible-playbook run.yml --tags integration-ci +fi \ No newline at end of file diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/get_snapshot_info.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/get_snapshot_info.yml new file mode 100644 index 00000000..39323822 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/get_snapshot_info.yml @@ -0,0 +1,20 @@ +--- +- name: "Check snapshot existence for VM {{ manage_snapshot_vm_name }}" + community.vmware.vmware_guest_snapshot_info: + hostname: "{{ vcenter_hostname }}" + username: "{{ vcenter_username }}" + password: "{{ vcenter_password }}" + validate_certs: "{{ snapshot_management_validate_certs }}" + datacenter: "{{ snapshot_management_datacenter }}" + folder: "{{ snapshot_management_folder }}" + name: "{{ manage_snapshot_vm_name }}" + register: snapshot_info + +- name: Fail the task if the VM doesn't exist + ansible.builtin.fail: + msg: "No snapshot is present for VM {{ manage_snapshot_vm_name }}" + when: snapshot_info is not defined or snapshot_info.failed + +- name: Print snapshot_info for {{ manage_snapshot_vm_name }} + ansible.builtin.debug: + var: snapshot_info diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/main.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/main.yml new file mode 100644 index 00000000..3e99b5a0 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/main.yml @@ -0,0 +1,48 @@ +--- +- name: Create VM snapshot + #Ignore the errors due to an error in the response SOAP call from vcsim + ignore_errors: true + ansible.builtin.import_role: + name: cloud.vmware_ops.snapshot_management + tags: integration-ci + +- name: Test VM snapshot management role in vCenter Environment + block: + - name: Setup test - Provision VM + ansible.builtin.import_role: + name: cloud.vmware_ops.provision_vm + + - name: Create snapshot of provisioned VM + loop: "{{ vm_snapshots }}" + ansible.builtin.include_tasks: manage_snapshot.yml + + - name: Verify snapshots + ansible.builtin.include_tasks: verify_snapshot_test.yml + vars: + snapshots: "{{ vm_snapshots }}" + snapshot_names: "{{ snapshots | flatten | map(attribute='snapshot_management_snapshot_name') }}" + snapshot_descriptions: "{{ snapshots | flatten | map(attribute='snapshot_management_description') }}" + + - name: Update snapshots + loop: "{{ vm_snapshots_updated }}" + ansible.builtin.include_tasks: manage_snapshot.yml + + - name: Verify updated snapshots + ansible.builtin.include_tasks: verify_snapshot_test.yml + vars: + snapshots: "{{ vm_snapshots_updated }}" + snapshot_names: "{{ snapshots | flatten | map(attribute='snapshot_management_new_snapshot_name') }}" + snapshot_descriptions: "{{ snapshots | flatten | map(attribute='snapshot_management_new_description') }}" + + - name: Remove snapshots + loop: "{{ vm_snapshots_updated }}" + ansible.builtin.include_tasks: remove_snapshot.yml + + always: + - name: Remove VM + ansible.builtin.import_role: + name: cloud.vmware_ops.provision_vm + vars: + provision_vm_state: absent + provision_vm_force: true + tags: eco-vcenter-ci \ No newline at end of file diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/manage_snapshot.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/manage_snapshot.yml new file mode 100644 index 00000000..c3b3c1f0 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/manage_snapshot.yml @@ -0,0 +1,13 @@ +- name: Manage snapshot of existing VM + ansible.builtin.import_role: + name: snapshot_management + vars: + snapshot_management_vm_name: "{{ item.snapshot_management_vm_name | default(omit) }}" + snapshot_management_state: "{{ item.snapshot_management_state | default(omit) }}" + snapshot_management_uuid: "{{ item.snapshot_management_uuid | default(omit) }}" + snapshot_management_moid: "{{ item.snapshot_management_moid | default(omit) }}" + snapshot_management_snapshot_name: "{{ item.snapshot_management_snapshot_name | default(omit) }}" + snapshot_management_snapshot_id: "{{ item.snapshot_management_snapshot_id | default(omit) }}" + snapshot_management_description: "{{ item.snapshot_management_description | default(omit) }}" + snapshot_management_new_snapshot_name: "{{ item.snapshot_management_new_snapshot_name | default(omit) }}" + snapshot_management_new_description: "{{ item.snapshot_management_new_description | default(omit) }}" diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/remove_snapshot.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/remove_snapshot.yml new file mode 100644 index 00000000..46ee4a87 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/remove_snapshot.yml @@ -0,0 +1,10 @@ +- name: Remove snapshot {{ item.snapshot_management_new_snapshot_name }} + ansible.builtin.include_role: + name: snapshot_management + vars: + snapshot_management_vm_name: "{{ item.snapshot_management_vm_name }}" + snapshot_management_snapshot_name: "{{ item.snapshot_management_new_snapshot_name }}" + snapshot_management_state: "absent" + +- name: Verify that the snapshot is removed + ansible.builtin.include_tasks: verify_snapshot_post_removal_test.yml diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_post_removal_test.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_post_removal_test.yml new file mode 100644 index 00000000..df11540a --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_post_removal_test.yml @@ -0,0 +1,19 @@ +--- +- name: "Check that the following snapshot does not exist: {{ item.snapshot_management_new_snapshot_name }}" + community.vmware.vmware_guest_snapshot_info: + hostname: "{{ vcenter_hostname }}" + username: "{{ vcenter_username }}" + password: "{{ vcenter_password }}" + validate_certs: "{{ snapshot_management_validate_certs }}" + datacenter: "{{ snapshot_management_datacenter }}" + folder: "{{ snapshot_management_folder }}" + name: "{{ item.snapshot_management_vm_name }}" + register: snapshot_info + +- name: "Fail the task" + block: + - name: "Fail the task if the following snapshot exists: {{ item.snapshot_management_new_snapshot_name }}" + ansible.builtin.fail: + msg: "Snapshot {{ item.snapshot_management_new_snapshot_name }} still exists" + when: snapshot_info.guest_snapshots.snapshots | map(attribute='name') | list is ansible.builtin.contains(item.snapshot_management_new_snapshot_name) + when: "'snapshots' in snapshot_info.guest_snapshots" \ No newline at end of file diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_test.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_test.yml new file mode 100644 index 00000000..f6689a27 --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/tasks/verify_snapshot_test.yml @@ -0,0 +1,12 @@ +--- +- name: Get info about the snapshot + ansible.builtin.include_tasks: get_snapshot_info.yml + +- name: "Validate the properties of the snapshots" + loop: "{{ snapshots }}" + loop_control: + index_var: index + ansible.builtin.assert: + that: + - snapshot_info.guest_snapshots.snapshots[index].name == snapshot_names[index] + - snapshot_info.guest_snapshots.snapshots[index].description == snapshot_descriptions[index] \ No newline at end of file diff --git a/tests/integration/targets/snapshot_management_test/tasks/main.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/vars.yml similarity index 69% rename from tests/integration/targets/snapshot_management_test/tasks/main.yml rename to tests/integration/targets/vmware_ops_snapshot_management_test/vars.yml index 38a4240e..5ac8c739 100644 --- a/tests/integration/targets/snapshot_management_test/tasks/main.yml +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/vars.yml @@ -1,10 +1,3 @@ ---- -- name: Create VM snapshot - #Ignore the errors due to an error in the response SOAP call from vcsim - ignore_errors: true - ansible.builtin.import_role: - name: cloud.vmware_ops.snapshot_management - vars: snapshot_management_hostname: "127.0.0.1" snapshot_management_username: "test" snapshot_management_password: "test" @@ -15,4 +8,4 @@ snapshot_management_port: "8989" snapshot_management_state: present snapshot_management_snapshot_name: "snap1" - snapshot_management_snapshot_description: "snap1_description" + snapshot_management_snapshot_description: "snap1_description" \ No newline at end of file diff --git a/tests/integration/targets/vmware_ops_snapshot_management_test/vars/main.yml b/tests/integration/targets/vmware_ops_snapshot_management_test/vars/main.yml new file mode 100644 index 00000000..d2423abf --- /dev/null +++ b/tests/integration/targets/vmware_ops_snapshot_management_test/vars/main.yml @@ -0,0 +1,66 @@ +# vars.yaml +snapshot_management_hostname: "{{ vcenter_hostname }}" +snapshot_management_username: "{{ vcenter_username }}" +snapshot_management_password: "{{ vcenter_password }}" +snapshot_management_validate_certs: false + +snapshot_management_folder: "/Eco-Datacenter/vm/e2e-qe" +snapshot_management_datacenter: "Eco-Datacenter" + +vm_snapshots: +- snapshot_management_snapshot_name: "{{ manage_snapshot_vm_name }}-snapshot-1" + snapshot_management_vm_name: "{{ manage_snapshot_vm_name }}" + snapshot_management_description: "This is the first snapshot of VM {{ manage_snapshot_vm_name }}" +- snapshot_management_snapshot_name: "{{ manage_snapshot_vm_name }}-snapshot-2" + snapshot_management_vm_name: "{{ manage_snapshot_vm_name }}" + snapshot_management_state: present + snapshot_management_description: "This is the second snapshot of VM {{ manage_snapshot_vm_name }}" + +manage_snapshot_vm_name: "manage-snapshot-vm-rhel-9" + +vm_snapshots_updated: +- snapshot_management_snapshot_name: "{{ manage_snapshot_vm_name }}-snapshot-1" + snapshot_management_vm_name: "{{ manage_snapshot_vm_name }}" + snapshot_management_new_description: "This is the updated description for snapshot-1-updated" + snapshot_management_new_snapshot_name: "snapshot-1-updated" +- snapshot_management_snapshot_name: "{{ manage_snapshot_vm_name }}-snapshot-2" + snapshot_management_vm_name: "{{ manage_snapshot_vm_name }}" + snapshot_management_state: present + snapshot_management_new_snapshot_name: "snapshot-2-updated" + snapshot_management_new_description: "This is the updated description for snapshot-2-updated" + +provision_vm_hostname: "{{ snapshot_management_hostname }}" +provision_vm_username: "{{ snapshot_management_username }}" +provision_vm_password: "{{ snapshot_management_password }}" +provision_vm_validate_certs: "{{ snapshot_management_validate_certs }}" + +provision_vm_cluster: "Eco-Cluster" +provision_vm_folder: "{{ snapshot_management_folder }}" +provision_vm_datacenter: "{{ snapshot_management_datacenter }}" + +# RHEL9 VM +provision_vm_name: "{{ manage_snapshot_vm_name }}" +provision_vm_state: "poweredon" +provision_vm_cdrom: + - controller_number: 0 + unit_number: 0 + state: present + type: iso + iso_path: "[datastore1] ISO/rhel-9.3-x86_64-dvd.iso" +provision_vm_networks: + - name: "VM Network" + device_type: "vmxnet3" + mac: "00:50:56:bd:d2:9e" + type: "dhcp" +provision_vm_resource_pool: null +provision_vm_disk: + - size_gb: 50 + type: thin + datastore: "datastore1" +provision_vm_hardware: + memory_mb: 2000 + num_cpus: 4 + boot_firmware: efi + secure_boot: true +provision_vm_guest_id: "rhel9_64Guest" +provision_vm_datastore: "datastore1" \ No newline at end of file