From 54133166b74828627b54dafd173ec30427009cbe Mon Sep 17 00:00:00 2001 From: Rene Moser Date: Mon, 25 Nov 2024 21:43:58 +0100 Subject: [PATCH] add volume --- tests/integration/targets/volume/aliases | 3 + .../targets/volume/defaults/main.yml | 8 + .../integration/targets/volume/meta/main.yml | 3 + .../targets/volume/tasks/common.yml | 322 ++++++++++++++++++ .../targets/volume/tasks/extract_upload.yml | 190 +++++++++++ .../integration/targets/volume/tasks/main.yml | 3 + 6 files changed, 529 insertions(+) create mode 100644 tests/integration/targets/volume/aliases create mode 100644 tests/integration/targets/volume/defaults/main.yml create mode 100644 tests/integration/targets/volume/meta/main.yml create mode 100644 tests/integration/targets/volume/tasks/common.yml create mode 100644 tests/integration/targets/volume/tasks/extract_upload.yml create mode 100644 tests/integration/targets/volume/tasks/main.yml diff --git a/tests/integration/targets/volume/aliases b/tests/integration/targets/volume/aliases new file mode 100644 index 00000000..1d747ed2 --- /dev/null +++ b/tests/integration/targets/volume/aliases @@ -0,0 +1,3 @@ +cloud/cs +cs/group2 +cs/group3 diff --git a/tests/integration/targets/volume/defaults/main.yml b/tests/integration/targets/volume/defaults/main.yml new file mode 100644 index 00000000..4fe4282d --- /dev/null +++ b/tests/integration/targets/volume/defaults/main.yml @@ -0,0 +1,8 @@ +--- +test_cs_instance_1: "{{ cs_resource_prefix }}-vm1" +test_cs_instance_2: "{{ cs_resource_prefix }}-vm2" +test_cs_instance_3: "{{ cs_resource_prefix }}-vm3" +test_cs_instance_template: "{{ cs_common_template }}" +test_cs_instance_offering_1: Small Instance +test_cs_disk_offering_1: Custom +test_cs_volume_to_upload: https://ansible-ci-files.s3.us-east-1.amazonaws.com/test/integration/targets/cs_volume/macchinina-xen.vhd.bz2 diff --git a/tests/integration/targets/volume/meta/main.yml b/tests/integration/targets/volume/meta/main.yml new file mode 100644 index 00000000..e9a5b9ee --- /dev/null +++ b/tests/integration/targets/volume/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - cs_common diff --git a/tests/integration/targets/volume/tasks/common.yml b/tests/integration/targets/volume/tasks/common.yml new file mode 100644 index 00000000..ef8722aa --- /dev/null +++ b/tests/integration/targets/volume/tasks/common.yml @@ -0,0 +1,322 @@ +--- +- name: setup + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: absent + register: vol +- name: verify setup + assert: + that: + - vol is successful + +- name: setup instance 1 + ngine_io.cloudstack.instance: + name: "{{ test_cs_instance_1 }}" + template: "{{ test_cs_instance_template }}" + service_offering: "{{ test_cs_instance_offering_1 }}" + zone: "{{ cs_common_zone_basic }}" + register: instance +- name: verify create instance + assert: + that: + - instance is successful + +- name: setup instance 2 + ngine_io.cloudstack.instance: + name: "{{ test_cs_instance_2 }}" + template: "{{ test_cs_instance_template }}" + service_offering: "{{ test_cs_instance_offering_1 }}" + zone: "{{ cs_common_zone_basic }}" + register: instance +- name: verify create instance + assert: + that: + - instance is successful + +- name: test fail if missing name + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_basic }}" + register: vol + ignore_errors: true +- name: verify results of fail if missing name + assert: + that: + - vol is failed + - "vol.msg == 'missing required arguments: name'" + +- name: test create volume in check mode + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + disk_offering: "{{ test_cs_disk_offering_1 }}" + size: 20 + register: vol + check_mode: true +- name: verify results test create volume in check mode + assert: + that: + - vol is changed + +- name: test create volume + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + disk_offering: "{{ test_cs_disk_offering_1 }}" + size: 20 + register: vol +- name: verify results test create volume + assert: + that: + - vol is changed + - vol.size == 20 * 1024 ** 3 + - vol.name == cs_resource_prefix + "_vol" + +- name: test create volume idempotence + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + disk_offering: "{{ test_cs_disk_offering_1 }}" + size: 20 + register: vol +- name: verify results test create volume idempotence + assert: + that: + - vol is not changed + - vol.size == 20 * 1024 ** 3 + - vol.name == cs_resource_prefix + "_vol" + +- name: test shrink volume in check mode + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + disk_offering: "{{ test_cs_disk_offering_1 }}" + size: 10 + shrink_ok: yes + register: vol + check_mode: true +- name: verify results test create volume in check mode + assert: + that: + - vol is changed + - vol.size == 20 * 1024 ** 3 + - vol.name == cs_resource_prefix + "_vol" + +- name: test shrink volume + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + disk_offering: "{{ test_cs_disk_offering_1 }}" + size: 10 + shrink_ok: yes + register: vol +- name: verify results test create volume + assert: + that: + - vol is changed + - vol.size == 10 * 1024 ** 3 + - vol.name == cs_resource_prefix + "_vol" + +- name: test shrink volume idempotence + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + disk_offering: "{{ test_cs_disk_offering_1 }}" + size: 10 + shrink_ok: yes + register: vol +- name: verify results test create volume + assert: + that: + - vol is not changed + - vol.size == 10 * 1024 ** 3 + - vol.name == cs_resource_prefix + "_vol" + +- name: test attach volume in check mode + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + vm: "{{ test_cs_instance_1 }}" + state: attached + register: vol + check_mode: true +- name: verify results test attach volume in check mode + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + - vol.attached is not defined + +- name: test attach volume + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + vm: "{{ test_cs_instance_1 }}" + state: attached + register: vol +- name: verify results test attach volume + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + - vol.vm == "{{ test_cs_instance_1 }}" + - vol.attached is defined + +- name: test attach volume idempotence + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + vm: "{{ test_cs_instance_1 }}" + state: attached + register: vol +- name: verify results test attach volume idempotence + assert: + that: + - vol is not changed + - vol.name == cs_resource_prefix + "_vol" + - vol.vm == "{{ test_cs_instance_1 }}" + - vol.attached is defined + +- name: test attach attached volume to another vm in check mdoe + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + vm: "{{ test_cs_instance_2 }}" + state: attached + register: vol + check_mode: true +- name: verify results test attach attached volume to another vm in check mode + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + - vol.vm == "{{ test_cs_instance_1 }}" + - vol.attached is defined + +- name: test attach attached volume to another vm + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + vm: "{{ test_cs_instance_2 }}" + state: attached + register: vol +- name: verify results test attach attached volume to another vm + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + - vol.vm == "{{ test_cs_instance_2 }}" + - vol.attached is defined + +- name: test attach attached volume to another vm idempotence + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + vm: "{{ test_cs_instance_2 }}" + state: attached + register: vol +- name: verify results test attach attached volume to another vm idempotence + assert: + that: + - vol is not changed + - vol.name == cs_resource_prefix + "_vol" + - vol.vm == "{{ test_cs_instance_2 }}" + - vol.attached is defined + +- name: test detach volume in check mode + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: detached + register: vol + check_mode: true +- name: verify results test detach volume in check mdoe + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + - vol.attached is defined + +- name: test detach volume + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: detached + register: vol +- name: verify results test detach volume + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + - vol.attached is undefined + +- name: test detach volume idempotence + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: detached + register: vol +- name: verify results test detach volume idempotence + assert: + that: + - vol is not changed + - vol.name == cs_resource_prefix + "_vol" + - vol.attached is undefined + +- name: test delete volume in check mode + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: absent + register: vol + check_mode: true +- name: verify results test create volume in check mode + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + +- name: test delete volume + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: absent + register: vol +- name: verify results test create volume + assert: + that: + - vol is changed + - vol.name == cs_resource_prefix + "_vol" + +- name: test delete volume idempotence + ngine_io.cloudstack.volume: + name: "{{ cs_resource_prefix }}_vol" + zone: "{{ cs_common_zone_basic }}" + state: absent + register: vol +- name: verify results test delete volume idempotence + assert: + that: + - vol is not changed + +- name: cleanup instance 1 + ngine_io.cloudstack.instance: + name: "{{ test_cs_instance_1 }}" + zone: "{{ cs_common_zone_basic }}" + state: absent + register: instance +- name: verify create instance + assert: + that: + - instance is successful + +- name: cleanup instance 2 + ngine_io.cloudstack.instance: + name: "{{ test_cs_instance_2 }}" + zone: "{{ cs_common_zone_basic }}" + state: absent + register: instance +- name: verify create instance + assert: + that: + - instance is successful diff --git a/tests/integration/targets/volume/tasks/extract_upload.yml b/tests/integration/targets/volume/tasks/extract_upload.yml new file mode 100644 index 00000000..68073ee2 --- /dev/null +++ b/tests/integration/targets/volume/tasks/extract_upload.yml @@ -0,0 +1,190 @@ +--- +- name: setup + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + name: "{{ cs_resource_prefix }}_upload" + state: absent + register: uploaded_vol +- name: verify setup + assert: + that: + - uploaded_vol is successful + +- name: setup network + ngine_io.cloudstack.network: + name: "cs_volume_network" + zone: "{{ cs_common_zone_adv }}" + network_offering: DefaultSharedNetworkOffering + vlan: 2435 + start_ip: 10.100.129.11 + end_ip: 10.100.129.250 + gateway: 10.100.129.1 + netmask: 255.255.255.0 + register: net +- name: verify setup network + assert: + that: + - net is successful + - net.name == "cs_volume_network" + +- name: setup instance + ngine_io.cloudstack.instance: + zone: "{{ cs_common_zone_adv }}" + name: "{{ test_cs_instance_3 }}" + template: "{{ test_cs_instance_template }}" + service_offering: "{{ test_cs_instance_offering_1 }}" + network: cs_volume_network + register: instance +- name: verify setup instance + assert: + that: + - instance is successful + +- name: setup stop instance + ngine_io.cloudstack.instance: + zone: "{{ cs_common_zone_adv }}" + name: "{{ test_cs_instance_3 }}" + state: stopped + register: instance +- name: verify stop instance + assert: + that: + - instance is successful + - instance.state == 'Stopped' + +- name: setup get instance info + ngine_io.cloudstack.instance_info: + name: "{{ test_cs_instance_3 }}" + register: instance +- name: verify setup get instance info + assert: + that: + - instance is successful + +- name: test extract volume in check mode + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: extracted + name: "{{ instance.instances[0].volumes[0].name }}" + check_mode: true + register: extracted_vol +- name: verify test extract volume in check mode + assert: + that: + - extracted_vol is successful + - extracted_vol is changed + - extracted_vol.state == "Ready" + - extracted_vol.name == instance.instances[0].volumes[0].name + - extracted_vol.url is not defined + +- name: test extract volume + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: extracted + name: "{{ instance.instances[0].volumes[0].name }}" + register: extracted_vol +- name: verify test extract volume + assert: + that: + - extracted_vol is successful + - extracted_vol is changed + - extracted_vol.state == "DOWNLOAD_URL_CREATED" + - extracted_vol.name == instance.instances[0].volumes[0].name + - extracted_vol.url is defined + +- name: test upload volume with missing param + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: uploaded + name: "{{ cs_resource_prefix }}_upload" + url: "{{ test_cs_volume_to_upload }}" + ignore_errors: true + register: uploaded_vol +- name: verify upload volume with missing param + assert: + that: + - uploaded_vol is failed + - uploaded_vol is not changed + - 'uploaded_vol.msg == "state is uploaded but all of the following are missing: format"' + +- name: test upload volume in check mode + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: uploaded + name: "{{ cs_resource_prefix }}_upload" + format: VHD + url: "{{ test_cs_volume_to_upload }}" + check_mode: true + register: uploaded_vol +- name: verify upload volume in check mode + assert: + that: + - uploaded_vol is successful + - uploaded_vol is changed + - uploaded_vol.name is not defined + +- name: test upload volume + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: uploaded + name: "{{ cs_resource_prefix }}_upload" + format: VHD + url: "{{ test_cs_volume_to_upload }}" + register: uploaded_vol +- name: verify upload volume + assert: + that: + - uploaded_vol is successful + - uploaded_vol is changed + - uploaded_vol.name == cs_resource_prefix + "_upload" + - uploaded_vol.state == "Uploaded" + +- name: test upload volume idempotence + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: uploaded + name: "{{ cs_resource_prefix }}_upload" + format: VHD + url: "{{ test_cs_volume_to_upload }}" + register: uploaded_vol +- name: verify upload volume idempotence + assert: + that: + - uploaded_vol is successful + - uploaded_vol is not changed + - uploaded_vol.name == cs_resource_prefix + "_upload" + - uploaded_vol.state == "Uploaded" + +- name: delete volume + ngine_io.cloudstack.volume: + zone: "{{ cs_common_zone_adv }}" + state: absent + name: "{{ cs_resource_prefix }}_upload" + register: uploaded_vol +- name: verify delete volume + assert: + that: + - uploaded_vol is successful + - uploaded_vol is changed + +- name: destroy instance + ngine_io.cloudstack.instance: + zone: "{{ cs_common_zone_adv }}" + name: "{{ test_cs_instance_3 }}" + state: expunged + register: instance +- name: verify destroy instance + assert: + that: + - instance is successful + +- name: delete network + ngine_io.cloudstack.network: + name: "cs_volume_network" + zone: "{{ cs_common_zone_adv }}" + state: absent + register: net +- name: verify delete network + assert: + that: + - net is successful diff --git a/tests/integration/targets/volume/tasks/main.yml b/tests/integration/targets/volume/tasks/main.yml new file mode 100644 index 00000000..3b863beb --- /dev/null +++ b/tests/integration/targets/volume/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- include_tasks: common.yml +- include_tasks: extract_upload.yml