Add run_once as a valid TaskInclude keyword (#48068)
* Add run_once as a valid TaskInclude keyword * Add changelog fragment * Add integration test that documents run_once behavior
This commit is contained in:
parent
7034d8c47a
commit
d2969884b4
5 changed files with 70 additions and 1 deletions
2
changelogs/fragments/include-run-once.yaml
Normal file
2
changelogs/fragments/include-run-once.yaml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- dynamic includes - Add missed ``run_once`` to valid include attributes (https://github.com/ansible/ansible/pull/48068)
|
|
@ -45,7 +45,8 @@ class TaskInclude(Task):
|
||||||
OTHER_ARGS = frozenset(('apply',)) # assigned to matching property
|
OTHER_ARGS = frozenset(('apply',)) # assigned to matching property
|
||||||
VALID_ARGS = BASE.union(OTHER_ARGS) # all valid args
|
VALID_ARGS = BASE.union(OTHER_ARGS) # all valid args
|
||||||
VALID_INCLUDE_KEYWORDS = frozenset(('action', 'args', 'debugger', 'ignore_errors', 'loop', 'loop_control',
|
VALID_INCLUDE_KEYWORDS = frozenset(('action', 'args', 'debugger', 'ignore_errors', 'loop', 'loop_control',
|
||||||
'loop_with', 'name', 'no_log', 'register', 'tags', 'vars', 'when'))
|
'loop_with', 'name', 'no_log', 'register', 'run_once', 'tags', 'vars',
|
||||||
|
'when'))
|
||||||
|
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
# ATTRIBUTES
|
# ATTRIBUTES
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
- set_fact:
|
||||||
|
lola: wiseman
|
|
@ -0,0 +1,61 @@
|
||||||
|
# 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]
|
|
@ -83,3 +83,6 @@ test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3
|
||||||
ansible-playbook public_exposure/playbook.yml -i ../../inventory "$@"
|
ansible-playbook public_exposure/playbook.yml -i ../../inventory "$@"
|
||||||
ansible-playbook public_exposure/no_bleeding.yml -i ../../inventory "$@"
|
ansible-playbook public_exposure/no_bleeding.yml -i ../../inventory "$@"
|
||||||
ansible-playbook public_exposure/no_overwrite_roles.yml -i ../../inventory "$@"
|
ansible-playbook public_exposure/no_overwrite_roles.yml -i ../../inventory "$@"
|
||||||
|
|
||||||
|
# https://github.com/ansible/ansible/pull/48068
|
||||||
|
ansible-playbook run_once/playbook.yml "$@"
|
||||||
|
|
Loading…
Reference in a new issue