--- - module_defaults: group/openstack.cloud.openstack: cloud: "{{ cloud }}" # Backward compatibility with Ansible 2.9 openstack.cloud.federation_mapping: cloud: "{{ cloud }}" openstack.cloud.federation_mapping_info: cloud: "{{ cloud }}" block: - name: "Ensure mapping doesn't exist to start" openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name }}' - name: 'Create mapping - CHECK_MODE' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_1 }}' register: create_mapping check_mode: true - assert: that: - create_mapping is changed - name: 'Fetch mapping info (mapping should be absent)' openstack.cloud.federation_mapping_info: name: '{{ mapping_name }}' register: mapping_info - assert: that: - mapping_info.mappings | length == 0 - name: 'Create mapping' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_1 }}' register: create_mapping - assert: that: - create_mapping is changed - create_mapping.mapping.id == mapping_name - create_mapping.mapping.name == mapping_name - create_mapping.mapping.rules | length == 1 - name: assert return values of federation_mapping module assert: that: # allow new fields to be introduced but prevent fields from being removed - expected_fields|difference(create_mapping.mapping.keys())|length == 0 - name: 'Fetch mapping info - with name' openstack.cloud.federation_mapping_info: name: '{{ mapping_name }}' register: mapping_info - assert: that: - mapping_info.mappings | length == 1 - mapping_info.mappings[0].id == mapping_name - mapping_info.mappings[0].name == mapping_name - mapping_info.mappings[0].rules | length == 1 - name: Check info about mappings assert: that: - mapping_info.mappings|length > 0 # allow new fields to be introduced but prevent fields from being removed - expected_fields|difference(mapping_info.mappings[0].keys())|length == 0 - name: 'Fetch mapping info - without name' openstack.cloud.federation_mapping_info: {} register: mapping_info - assert: that: # In CI we generally have a clean slate, but this might # not be true for everyone... - mapping_info.mappings | length >= 1 - mapping_name in (mapping_info.mappings | map(attribute='id')) - mapping_name in (mapping_info.mappings | map(attribute='name')) - name: 'Create mapping (retry - no change) - CHECK_MODE' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_1 }}' register: create_mapping check_mode: true - assert: that: - create_mapping is not changed - name: 'Create mapping (retry - no change)' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_1 }}' register: create_mapping - assert: that: - create_mapping is not changed - create_mapping.mapping.id == mapping_name - create_mapping.mapping.name == mapping_name - create_mapping.mapping.rules | length == 1 - name: 'Update mapping - CHECK_MODE' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_2 }}' register: update_mapping check_mode: true - assert: that: - update_mapping is changed - name: 'Update mapping' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_2 }}' register: update_mapping - assert: that: - update_mapping is changed - update_mapping.mapping.id == mapping_name - update_mapping.mapping.name == mapping_name - update_mapping.mapping.rules | length == 1 - name: 'Update mapping (retry - no change)' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name }}' rules: '{{ mapping_rules_2 }}' register: update_mapping - assert: that: - update_mapping is not changed - update_mapping.mapping.id == mapping_name - update_mapping.mapping.name == mapping_name - update_mapping.mapping.rules | length == 1 - name: 'Create second mapping' openstack.cloud.federation_mapping: state: 'present' name: '{{ mapping_name_2 }}' rules: '{{ mapping_rules_1 }}' register: create_mapping - assert: that: - create_mapping is changed - create_mapping.mapping.id == mapping_name_2 - create_mapping.mapping.name == mapping_name_2 - create_mapping.mapping.rules | length == 1 - name: 'Fetch mapping (2) info - with name' openstack.cloud.federation_mapping_info: name: '{{ mapping_name_2 }}' register: mapping_info - assert: that: - mapping_info.mappings | length == 1 - mapping_info.mappings[0].id == mapping_name_2 - mapping_info.mappings[0].name == mapping_name_2 - mapping_info.mappings[0].rules | length == 1 - name: 'Fetch mapping info - without name' openstack.cloud.federation_mapping_info: {} register: mapping_info - assert: that: # In CI we generally have a clean slate, but this might # not be true for everyone... - mapping_info.mappings | length >= 2 - mapping_name in (mapping_info.mappings | map(attribute='id')) - mapping_name in (mapping_info.mappings | map(attribute='name')) - mapping_name_2 in (mapping_info.mappings | map(attribute='id')) - mapping_name_2 in (mapping_info.mappings | map(attribute='name')) - name: 'Delete mapping - CHECK_MODE' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name }}' register: delete_mapping check_mode: true - assert: that: - delete_mapping is changed - name: 'Delete mapping' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name }}' register: delete_mapping - assert: that: - delete_mapping is changed - name: 'Delete mapping (retry - no change) - CHECK_MODE' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name }}' register: delete_mapping check_mode: true - assert: that: - delete_mapping is not changed - name: 'Delete mapping (retry - no change) ' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name }}' register: delete_mapping - assert: that: - delete_mapping is not changed - name: 'Fetch mapping info after deletion' openstack.cloud.federation_mapping_info: name: '{{ mapping_name }}' register: mapping_info - assert: that: - mapping_info.mappings | length == 0 - name: 'Delete second mapping' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name_2 }}' register: delete_mapping - assert: that: - delete_mapping is changed always: - name: 'Delete mapping' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name }}' ignore_errors: true - name: 'Delete second mapping' openstack.cloud.federation_mapping: state: 'absent' name: '{{ mapping_name_2 }}' ignore_errors: true