- name: set connection information for all tasks set_fact: aws_connection_info: &aws_connection_info aws_access_key: "{{ aws_access_key }}" aws_secret_key: "{{ aws_secret_key }}" security_token: "{{ security_token }}" region: "{{ aws_region }}" no_log: true - block: - name: Create IAM role for test iam_role: name: "ansible-test-sts-{{ resource_prefix }}-test-policy" assume_role_policy_document: "{{ lookup('file','assume-role-policy.json') }}" state: present create_instance_profile: yes managed_policy: - AmazonEC2ContainerServiceRole <<: *aws_connection_info register: iam_role - name: Create second IAM role for test iam_role: name: "ansible-test-sts-{{ resource_prefix }}-test-policy-2" assume_role_policy_document: "{{ lookup('file','assume-role-policy.json') }}" state: present create_instance_profile: yes managed_policy: - AmazonEC2ContainerServiceRole <<: *aws_connection_info register: iam_role_2 - name: Make instance with an instance_role ec2_instance: name: "{{ resource_prefix }}-test-instance-role" image_id: "{{ ec2_ami_image[aws_region] }}" security_groups: "{{ sg.group_id }}" instance_type: t2.micro instance_role: "ansible-test-sts-{{ resource_prefix }}-test-policy" <<: *aws_connection_info register: instance_with_role - assert: that: - 'instance_with_role.instances[0].iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/")' - name: Make instance with an instance_role(check mode) ec2_instance: name: "{{ resource_prefix }}-test-instance-role-checkmode" image_id: "{{ ec2_ami_image[aws_region] }}" security_groups: "{{ sg.group_id }}" instance_type: t2.micro instance_role: "{{ iam_role.arn.replace(':role/', ':instance-profile/') }}" <<: *aws_connection_info check_mode: yes - name: "fact presented ec2 instance" ec2_instance_info: filters: "tag:Name": "{{ resource_prefix }}-test-instance-role" <<: *aws_connection_info register: presented_instance_fact - name: "fact checkmode ec2 instance" ec2_instance_info: filters: "tag:Name": "{{ resource_prefix }}-test-instance-role-checkmode" <<: *aws_connection_info register: checkmode_instance_fact - name: "Confirm whether the check mode is working normally." assert: that: - "{{ presented_instance_fact.instances | length }} > 0" - "{{ checkmode_instance_fact.instances | length }} == 0" - name: Update instance with new instance_role ec2_instance: name: "{{ resource_prefix }}-test-instance-role" image_id: "{{ ec2_ami_image[aws_region] }}" security_groups: "{{ sg.group_id }}" instance_type: t2.micro instance_role: "{{ iam_role_2.arn.replace(':role/', ':instance-profile/') }}" <<: *aws_connection_info register: instance_with_updated_role until: instance_with_updated_role is not failed retries: 10 - assert: that: - 'instance_with_updated_role.instances[0].iam_instance_profile.arn == iam_role_2.arn.replace(":role/", ":instance-profile/")' - 'instance_with_updated_role.instances[0].instance_id == instance_with_role.instances[0].instance_id' always: - name: Terminate instance ec2: instance_ids: "{{ instance_with_role.instance_ids }}" state: absent <<: *aws_connection_info register: removed until: removed is not failed ignore_errors: yes retries: 10 - name: Delete IAM role for test iam_role: name: "{{ item }}" assume_role_policy_document: "{{ lookup('file','assume-role-policy.json') }}" state: absent create_instance_profile: yes managed_policy: - AmazonEC2ContainerServiceRole <<: *aws_connection_info loop: - "ansible-test-sts-{{ resource_prefix }}-test-policy" - "ansible-test-sts-{{ resource_prefix }}-test-policy-2" register: removed until: removed is not failed ignore_errors: yes retries: 10