--- #################################################################### # WARNING: These are designed specifically for Ansible tests # # and should not be used as examples of how to write Ansible roles # #################################################################### # Copyright (c) Ansible Project # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later - block: - name: Create temporary playbook files tempfile: state: file suffix: temp loop: "{{ tests }}" loop_control: loop_var: test label: "{{ test.name }}" register: temporary_playbook_files - name: Set temporary playbook file content copy: content: "{{ test.playbook }}" dest: "{{ temporary_playbook_files.results[test_idx].path }}" loop: "{{ tests }}" loop_control: loop_var: test index_var: test_idx label: "{{ test.name }}" - name: Collect outputs command: "ansible-playbook -i {{ inventory }} {{ playbook }}" environment: "{{ test.environment }}" loop: "{{ tests }}" loop_control: loop_var: test label: "{{ test.name }}" register: outputs changed_when: false vars: inventory: "{{ role_path }}/inventory.yml" playbook: " {%- for result in temporary_playbook_files.results -%} {%- if result.test.name == test.name -%} {{- result.path -}} {%- endif -%} {%- endfor -%}" - name: Assert test output equals expected output assert: that: result.output.differences | length == 0 loop: "{{ outputs.results | callback_results_extractor }}" loop_control: loop_var: result label: "{{ result.name }}" register: assertions always: - name: Remove temporary playbooks file: path: "{{ temporary_file.path }}" state: absent loop: "{{ temporary_playbook_files.results }}" loop_control: loop_var: temporary_file label: "{{ temporary_file.test.name }}: {{ temporary_file.path }}"