Allow changed/failed mgmt on strategy actions (#70919)
* Allow changed/failed mgmt on strategy actions
This commit is contained in:
parent
37e9d2278a
commit
f9c3c6cba6
3 changed files with 42 additions and 1 deletions
2
changelogs/fragments/changed_when_group_by.yml
Normal file
2
changelogs/fragments/changed_when_group_by.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- Restore the ability for changed_when/failed_when to function with group_by (#70844).
|
|
@ -37,11 +37,11 @@ from ansible.errors import AnsibleError, AnsibleFileNotFound, AnsibleParserError
|
||||||
from ansible.executor import action_write_locks
|
from ansible.executor import action_write_locks
|
||||||
from ansible.executor.process.worker import WorkerProcess
|
from ansible.executor.process.worker import WorkerProcess
|
||||||
from ansible.executor.task_result import TaskResult
|
from ansible.executor.task_result import TaskResult
|
||||||
from ansible.inventory.host import Host
|
|
||||||
from ansible.module_utils.six.moves import queue as Queue
|
from ansible.module_utils.six.moves import queue as Queue
|
||||||
from ansible.module_utils.six import iteritems, itervalues, string_types
|
from ansible.module_utils.six import iteritems, itervalues, string_types
|
||||||
from ansible.module_utils._text import to_text
|
from ansible.module_utils._text import to_text
|
||||||
from ansible.module_utils.connection import Connection, ConnectionError
|
from ansible.module_utils.connection import Connection, ConnectionError
|
||||||
|
from ansible.playbook.conditional import Conditional
|
||||||
from ansible.playbook.handler import Handler
|
from ansible.playbook.handler import Handler
|
||||||
from ansible.playbook.helpers import load_list_of_blocks
|
from ansible.playbook.helpers import load_list_of_blocks
|
||||||
from ansible.playbook.included_file import IncludedFile
|
from ansible.playbook.included_file import IncludedFile
|
||||||
|
@ -70,6 +70,22 @@ class StrategySentinel:
|
||||||
_sentinel = StrategySentinel()
|
_sentinel = StrategySentinel()
|
||||||
|
|
||||||
|
|
||||||
|
def post_process_whens(result, task, templar):
|
||||||
|
|
||||||
|
cond = None
|
||||||
|
if task.changed_when:
|
||||||
|
cond = Conditional(loader=templar._loader)
|
||||||
|
cond.when = task.changed_when
|
||||||
|
result['changed'] = cond.evaluate_conditional(templar, templar.available_variables)
|
||||||
|
|
||||||
|
if task.failed_when:
|
||||||
|
if cond is None:
|
||||||
|
cond = Conditional(loader=templar._loader)
|
||||||
|
cond.when = task.failed_when
|
||||||
|
failed_when_result = cond.evaluate_conditional(templar, templar.available_variables)
|
||||||
|
result['failed_when_result'] = result['failed'] = failed_when_result
|
||||||
|
|
||||||
|
|
||||||
def results_thread_main(strategy):
|
def results_thread_main(strategy):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
@ -634,10 +650,12 @@ class StrategyBase:
|
||||||
# this task added a new host (add_host module)
|
# this task added a new host (add_host module)
|
||||||
new_host_info = result_item.get('add_host', dict())
|
new_host_info = result_item.get('add_host', dict())
|
||||||
self._add_host(new_host_info, result_item)
|
self._add_host(new_host_info, result_item)
|
||||||
|
post_process_whens(result_item, original_task, handler_templar)
|
||||||
|
|
||||||
elif 'add_group' in result_item:
|
elif 'add_group' in result_item:
|
||||||
# this task added a new group (group_by module)
|
# this task added a new group (group_by module)
|
||||||
self._add_group(original_host, result_item)
|
self._add_group(original_host, result_item)
|
||||||
|
post_process_whens(result_item, original_task, handler_templar)
|
||||||
|
|
||||||
if 'ansible_facts' in result_item:
|
if 'ansible_facts' in result_item:
|
||||||
# if delegated fact and we are delegating facts, we need to change target host for them
|
# if delegated fact and we are delegating facts, we need to change target host for them
|
||||||
|
|
|
@ -38,3 +38,24 @@
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "not shell_result.changed"
|
- "not shell_result.changed"
|
||||||
|
|
||||||
|
- name: Add hosts to test group and ensure it appears as changed
|
||||||
|
group_by:
|
||||||
|
key: "cw_test1_{{ inventory_hostname }}"
|
||||||
|
register: groupby
|
||||||
|
|
||||||
|
- name: verify its changed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- groupby is changed
|
||||||
|
|
||||||
|
- name: Add hosts to test group and ensure it does NOT appear as changed
|
||||||
|
group_by:
|
||||||
|
key: "cw_test2_{{ inventory_hostname }}"
|
||||||
|
changed_when: False
|
||||||
|
register: groupby
|
||||||
|
|
||||||
|
- name: verify its not changed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- groupby is not changed
|
||||||
|
|
Loading…
Reference in a new issue