From 79b9f3d42f96dab86233600ae9cc18c02b632ed5 Mon Sep 17 00:00:00 2001 From: GomathiselviS Date: Wed, 16 Oct 2024 13:47:56 -0400 Subject: [PATCH] add ec2_instance_placement_options target back --- .../ec2_instance_placement_options/aliases | 6 + .../defaults/main.yml | 6 + .../meta/main.yml | 7 ++ .../tasks/main.yml | 105 ++++++++++++++++++ .../tasks/select_availability_zone.yml | 23 ++++ 5 files changed, 147 insertions(+) create mode 100644 tests/integration/targets/ec2_instance_placement_options/aliases create mode 100644 tests/integration/targets/ec2_instance_placement_options/defaults/main.yml create mode 100644 tests/integration/targets/ec2_instance_placement_options/meta/main.yml create mode 100644 tests/integration/targets/ec2_instance_placement_options/tasks/main.yml create mode 100644 tests/integration/targets/ec2_instance_placement_options/tasks/select_availability_zone.yml diff --git a/tests/integration/targets/ec2_instance_placement_options/aliases b/tests/integration/targets/ec2_instance_placement_options/aliases new file mode 100644 index 00000000000..7497e801170 --- /dev/null +++ b/tests/integration/targets/ec2_instance_placement_options/aliases @@ -0,0 +1,6 @@ +time=10m + +cloud/aws + +ec2_instance_info +ec2_instance diff --git a/tests/integration/targets/ec2_instance_placement_options/defaults/main.yml b/tests/integration/targets/ec2_instance_placement_options/defaults/main.yml new file mode 100644 index 00000000000..970dba1980a --- /dev/null +++ b/tests/integration/targets/ec2_instance_placement_options/defaults/main.yml @@ -0,0 +1,6 @@ +--- +# defaults file for ec2_instance_block_devices +ec2_instance_type: t3.micro +ec2_instance_tag_TestId: "{{ resource_prefix }}-placement-group" +ec2_tenancy: dedicated +ec2_placement_group_name: "{{ resource_prefix}}-placement-group" diff --git a/tests/integration/targets/ec2_instance_placement_options/meta/main.yml b/tests/integration/targets/ec2_instance_placement_options/meta/main.yml new file mode 100644 index 00000000000..71c1ca3b25f --- /dev/null +++ b/tests/integration/targets/ec2_instance_placement_options/meta/main.yml @@ -0,0 +1,7 @@ +--- +# this just makes sure they're in the right place +dependencies: + - role: setup_ec2_facts + - role: setup_ec2_instance_env + vars: + ec2_instance_test_name: placement_options diff --git a/tests/integration/targets/ec2_instance_placement_options/tasks/main.yml b/tests/integration/targets/ec2_instance_placement_options/tasks/main.yml new file mode 100644 index 00000000000..4c7f0ca6d69 --- /dev/null +++ b/tests/integration/targets/ec2_instance_placement_options/tasks/main.yml @@ -0,0 +1,105 @@ +--- +- module_defaults: + group/aws: + access_key: "{{ aws_access_key }}" + secret_key: "{{ aws_secret_key }}" + session_token: "{{ security_token | default(omit) }}" + region: "{{ aws_region }}" + block: + - name: New placement group + amazon.aws.ec2_placement_group: + name: "{{ ec2_placement_group_name }}" + strategy: partition + partition_count: 1 + state: present + + - name: New instance with placement group name + amazon.aws.ec2_instance: + state: running + name: "{{ resource_prefix }}-test-placement-group-name" + image_id: "{{ ec2_ami_id }}" + placement: + group_name: "{{ ec2_placement_group_name }}" + tags: + Name: "{{ resource_prefix }}-test-placement-group-name" + TestId: "{{ ec2_instance_tag_TestId }}" + security_group: default + instance_type: "{{ ec2_instance_type }}" + wait: true + ignore_errors: true + register: instance_creation_group_name + + - name: Gather ec2 facts to check placement group options + amazon.aws.ec2_instance_info: + filters: + tag:Name: "{{ resource_prefix }}-test-placement-group-name" + tag:TestId: "{{ ec2_instance_tag_TestId }}" + instance-state-name: running + ignore_errors: true + register: instance_facts + + - name: Validate instance with placement group name + ansible.builtin.assert: + that: + - instance_creation_group_name is success + - instance_creation_group_name is changed + - instance_facts.instances[0].placement.group_name == ec2_placement_group_name + + - ansible.builtin.include_tasks: select_availability_zone.yml + + - name: New instance with dedicated tenancy + amazon.aws.ec2_instance: + state: running + name: "{{ resource_prefix }}-test-dedicated-tenancy" + image_id: "{{ ec2_ami_id }}" + placement: + tenancy: "{{ ec2_tenancy }}" + tags: + TestId: "{{ ec2_instance_tag_TestId }}" + security_group: default + instance_type: "{{ ec2_instance_type }}" + availability_zone: "{{ ec2_availability_zone }}" + wait: true + ignore_errors: true + register: instance_creation_tenancy + + - name: Gather ec2 facts to check placement tenancy + amazon.aws.ec2_instance_info: + filters: + tag:Name: "{{ resource_prefix }}-test-dedicated-tenancy" + tag:TestId: "{{ ec2_instance_tag_TestId }}" + instance-state-name: running + ignore_errors: true + register: instance_facts + + - name: Validate instance with dedicated tenancy + ansible.builtin.assert: + that: + - instance_creation_tenancy is success + - instance_creation_tenancy is changed + - instance_facts.instances[0].placement.tenancy == ec2_tenancy + # - instance_creation is failed + # - '"You are not authorized to perform this operation." in instance_creation.msg' + + always: + - name: Delete instances created with placement group name + amazon.aws.ec2_instance: + state: absent + instance_ids: "{{ instance_creation_group_name.instance_ids }}" + wait: false + ignore_errors: true + when: instance_creation_group_name is defined + + - name: Delete instances created with placement tenancy + amazon.aws.ec2_instance: + state: absent + instance_ids: "{{ instance_creation_tenancy.instance_ids }}" + wait: false + ignore_errors: true + when: instance_creation_tenancy is defined + + - name: Delete placement group. + amazon.aws.ec2_placement_group: + name: "{{ ec2_placement_group_name }}" + state: absent + ignore_errors: true diff --git a/tests/integration/targets/ec2_instance_placement_options/tasks/select_availability_zone.yml b/tests/integration/targets/ec2_instance_placement_options/tasks/select_availability_zone.yml new file mode 100644 index 00000000000..0b48ebcb85c --- /dev/null +++ b/tests/integration/targets/ec2_instance_placement_options/tasks/select_availability_zone.yml @@ -0,0 +1,23 @@ +# aws regions supporting 't3.micro' instance type +- ansible.builtin.set_fact: + av_zones: + - us-east-1a + - us-east-1b + - us-east-1c + - us-east-1d + - us-east-1f + +- name: List t3.micro instances + amazon.aws.ec2_instance_info: + filters: + instance-type: t3.micro + instance-state-name: + - pending + - running + register: _instances + +- ansible.builtin.set_fact: + instances_zones: "{{ _instances.instances | map(attribute='placement.availability_zone') | list | ansible.builtin.unique }}" + +- ansible.builtin.set_fact: + ec2_availability_zone: "{{ av_zones | ansible.builtin.difference(instances_zones) | list | ansible.builtin.random }}"