Fix notify on import_tasks (#73572)

* Fix notify on import_tasks

  also able to apply to blocks now.
This commit is contained in:
Brian Coca 2021-03-03 16:11:09 -05:00 committed by GitHub
parent 935528e22e
commit ce1de28061
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 97 additions and 26 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- notify keyword is not ignored anymore on import_tasks, also able to apply to blocks now.

View file

@ -61,6 +61,31 @@ class _DeprecatedSequenceConstant(Sequence):
# CONSTANTS ### yes, actual ones
# The following are hard-coded action names
_ACTION_DEBUG = add_internal_fqcns(('debug', ))
_ACTION_IMPORT_PLAYBOOK = add_internal_fqcns(('import_playbook', ))
_ACTION_IMPORT_ROLE = add_internal_fqcns(('import_role', ))
_ACTION_IMPORT_TASKS = add_internal_fqcns(('import_tasks', ))
_ACTION_INCLUDE = add_internal_fqcns(('include', ))
_ACTION_INCLUDE_ROLE = add_internal_fqcns(('include_role', ))
_ACTION_INCLUDE_TASKS = add_internal_fqcns(('include_tasks', ))
_ACTION_INCLUDE_VARS = add_internal_fqcns(('include_vars', ))
_ACTION_META = add_internal_fqcns(('meta', ))
_ACTION_SET_FACT = add_internal_fqcns(('set_fact', ))
_ACTION_SETUP = add_internal_fqcns(('setup', ))
_ACTION_HAS_CMD = add_internal_fqcns(('command', 'shell', 'script'))
_ACTION_ALLOWS_RAW_ARGS = _ACTION_HAS_CMD + add_internal_fqcns(('raw', ))
_ACTION_ALL_INCLUDES = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS + _ACTION_INCLUDE_ROLE
_ACTION_ALL_IMPORT_PLAYBOOKS = _ACTION_INCLUDE + _ACTION_IMPORT_PLAYBOOK
_ACTION_ALL_INCLUDE_IMPORT_TASKS = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS + _ACTION_IMPORT_TASKS
_ACTION_ALL_PROPER_INCLUDE_IMPORT_ROLES = _ACTION_INCLUDE_ROLE + _ACTION_IMPORT_ROLE
_ACTION_ALL_PROPER_INCLUDE_IMPORT_TASKS = _ACTION_INCLUDE_TASKS + _ACTION_IMPORT_TASKS
_ACTION_ALL_INCLUDE_ROLE_TASKS = _ACTION_INCLUDE_ROLE + _ACTION_INCLUDE_TASKS
_ACTION_ALL_INCLUDE_TASKS = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS
_ACTION_FACT_GATHERING = _ACTION_SETUP + add_internal_fqcns(('gather_facts', ))
_ACTION_WITH_CLEAN_FACTS = _ACTION_SET_FACT + _ACTION_INCLUDE_VARS
# http://nezzen.net/2008/06/23/colored-text-in-python-using-ansi-escape-sequences/
COLOR_CODES = {
'black': u'0;30', 'bright gray': u'0;37',
@ -178,28 +203,3 @@ for setting in config.data.get_settings():
for warn in config.WARNINGS:
_warning(warn)
# The following are hard-coded action names
_ACTION_DEBUG = add_internal_fqcns(('debug', ))
_ACTION_IMPORT_PLAYBOOK = add_internal_fqcns(('import_playbook', ))
_ACTION_IMPORT_ROLE = add_internal_fqcns(('import_role', ))
_ACTION_IMPORT_TASKS = add_internal_fqcns(('import_tasks', ))
_ACTION_INCLUDE = add_internal_fqcns(('include', ))
_ACTION_INCLUDE_ROLE = add_internal_fqcns(('include_role', ))
_ACTION_INCLUDE_TASKS = add_internal_fqcns(('include_tasks', ))
_ACTION_INCLUDE_VARS = add_internal_fqcns(('include_vars', ))
_ACTION_META = add_internal_fqcns(('meta', ))
_ACTION_SET_FACT = add_internal_fqcns(('set_fact', ))
_ACTION_SETUP = add_internal_fqcns(('setup', ))
_ACTION_HAS_CMD = add_internal_fqcns(('command', 'shell', 'script'))
_ACTION_ALLOWS_RAW_ARGS = _ACTION_HAS_CMD + add_internal_fqcns(('raw', ))
_ACTION_ALL_INCLUDES = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS + _ACTION_INCLUDE_ROLE
_ACTION_ALL_IMPORT_PLAYBOOKS = _ACTION_INCLUDE + _ACTION_IMPORT_PLAYBOOK
_ACTION_ALL_INCLUDE_IMPORT_TASKS = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS + _ACTION_IMPORT_TASKS
_ACTION_ALL_PROPER_INCLUDE_IMPORT_ROLES = _ACTION_INCLUDE_ROLE + _ACTION_IMPORT_ROLE
_ACTION_ALL_PROPER_INCLUDE_IMPORT_TASKS = _ACTION_INCLUDE_TASKS + _ACTION_IMPORT_TASKS
_ACTION_ALL_INCLUDE_ROLE_TASKS = _ACTION_INCLUDE_ROLE + _ACTION_INCLUDE_TASKS
_ACTION_ALL_INCLUDE_TASKS = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS
_ACTION_FACT_GATHERING = _ACTION_SETUP + add_internal_fqcns(('gather_facts', ))
_ACTION_WITH_CLEAN_FACTS = _ACTION_SET_FACT + _ACTION_INCLUDE_VARS

View file

@ -38,7 +38,8 @@ class Block(Base, Conditional, CollectionSearch, Taggable):
_rescue = FieldAttribute(isa='list', default=list, inherit=False)
_always = FieldAttribute(isa='list', default=list, inherit=False)
# other fields
# other fields for task compat
_notify = FieldAttribute(isa='list')
_delegate_to = FieldAttribute(isa='string')
_delegate_facts = FieldAttribute(isa='bool')

View file

@ -0,0 +1,19 @@
- hosts: localhost
gather_facts: false
tasks:
- name: test notify inheritance in block
notify: hello
block:
- debug: msg='trigger it'
changed_when: true
handlers:
- name: hello
set_fact: hello=world
post_tasks:
- name: ensure handler ran
assert:
that:
- hello is defined
- "hello == 'world'"

View file

@ -100,3 +100,6 @@ cat role_complete_test.out
[ "$(grep -c 'Tagged task' role_complete_test.out)" -eq 2 ]
[ "$(grep -c 'Not tagged task' role_complete_test.out)" -eq 0 ]
rm -f role_complete_test.out
# test notify inheritance
ansible-playbook inherit_notify.yml "$@"

View file

@ -0,0 +1,2 @@
shippable/posix/group5
skip/aix

View file

@ -0,0 +1,15 @@
- hosts: localhost
gather_facts: false
pre_tasks:
- import_tasks: tasks/trigger_change.yml
notify: hello
handlers:
- name: hello
set_fact: hello=world
tasks:
- name: ensure handler ran
assert:
that:
- "hello is defined and hello == 'world'"

View file

@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -eux
ansible-playbook inherit_notify.yml "$@"

View file

@ -0,0 +1,2 @@
- debug: msg="I trigger changed!"
changed_when: true

View file

@ -0,0 +1,18 @@
- hosts: localhost
gather_facts: false
pre_tasks:
- include_tasks:
file: tasks/trigger_change.yml
apply:
notify: hello
handlers:
- name: hello
set_fact: hello=world
tasks:
- name: ensure handler ran
assert:
that:
- hello is defined
- "hello == 'world'"

View file

@ -3,3 +3,5 @@
set -eux
ansible-playbook test_includes.yml -i ../../inventory "$@"
ansible-playbook inherit_notify.yml "$@"

View file

@ -0,0 +1,2 @@
- debug: msg="I trigger changed!"
changed_when: true