# This playbook exists to document the behavior of how run_once when # applied to a dynamic include works # # As with other uses of keywords on dynamic includes, it only affects the include. # In this case it causes the include to only be processed for ansible_play_hosts[0] # which has the side effect of only running the tasks on ansible_play_hosts[0] # and would only delegate facts of the include itself, not the tasks contained within - hosts: localhost gather_facts: false tasks: - add_host: name: "{{ item }}" ansible_connection: local groups: - all loop: - localhost0 - localhost1 - add_host: name: "{{ item }}" groups: - testing ansible_connection: local loop: - localhost2 - localhost3 - hosts: all:!testing gather_facts: false vars: lola: untouched tasks: - include_tasks: file: include_me.yml apply: run_once: true run_once: true - assert: that: - lola == 'wiseman' - hosts: testing gather_facts: false vars: lola: untouched tasks: - include_tasks: include_me.yml run_once: true - assert: that: - lola == 'wiseman' when: inventory_hostname == ansible_play_hosts[0] - assert: that: - lola == 'untouched' when: inventory_hostname != ansible_play_hosts[0]