Skip to content

Commit

Permalink
enable snapshot_management integration target to run on real vcenter
Browse files Browse the repository at this point in the history
  • Loading branch information
elsapassaro committed Jun 10, 2024
1 parent 9bf53a7 commit 56c97f2
Show file tree
Hide file tree
Showing 13 changed files with 233 additions and 25 deletions.
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
13 changes: 0 additions & 13 deletions tests/integration/targets/snapshot_management_test/run.yml

This file was deleted.

3 changes: 0 additions & 3 deletions tests/integration/targets/snapshot_management_test/runme.sh

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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) }}"
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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"
Original file line number Diff line number Diff line change
@@ -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]
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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"
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit 56c97f2

Please sign in to comment.