--- # Run: ansible-playbook tests/users/test_users.yml # One host per fixture: set_fact state cannot be cleared between loop iterations. - name: Register one host per users fixture hosts: localhost gather_facts: false connection: local vars_files: - users_fixtures.yml tasks: - name: Add the fixture host ansible.builtin.add_host: name: "{{ uf.name }}" groups: users_fixtures ansible_connection: local ansible_python_interpreter: "{{ ansible_playbook_python }}" expect: "{{ uf.expect }}" system: "{{ _system }}" system_cfg: "{{ _system if uf.precomputed | default(false) else omit }}" vars: _system: "{{ users_fixture_system | combine(uf.system, {'name': uf.name}, recursive=True) }}" loop: "{{ users_fixtures }}" loop_control: loop_var: uf label: "{{ uf.name }}" - name: Run global_defaults against each users fixture hosts: users_fixtures gather_facts: false vars: hypervisor: type: libvirt url: qemu:///system storage: default boot_iso: /var/lib/libvirt/images/fixture.iso tasks: - name: Normalize and validate block: - name: Load global defaults ansible.builtin.include_role: name: global_defaults - name: Record the pass ansible.builtin.set_fact: users_outcome: pass rescue: - name: Record the failure ansible.builtin.set_fact: users_outcome: >- {{ ([ansible_failed_result.msg | default('')] + (ansible_failed_result.results | default([]) | map(attribute='msg', default='') | list)) | join(' ') }} - name: Assert the expected outcome ansible.builtin.assert: that: - >- (users_outcome == 'pass' and bootstrap_primary_user.name == expect.primary) if expect.primary is defined else (expect.fail in users_outcome) fail_msg: "[{{ inventory_hostname }}] expected {{ expect }}, got: {{ users_outcome }}" success_msg: "[{{ inventory_hostname }}] OK"