Fix debug factsetter (#74067) (#74084)

* Fix debug factsetter (#74067)

* prevent debug from setting namespaced facts as tlv
* also added tests

(cherry picked from commit f9f839fa08)

* Update debug_dont_set_facts.yml

Co-authored-by: Rick Elrod <rick@elrod.me>
pull/74169/head
Brian Coca 4 years ago committed by GitHub
parent 40543aa8db
commit adae63e053
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- debug action - prevent setting facts when displaying ansible_facts (https://github.com/ansible/ansible/issues/74060).

@ -713,7 +713,7 @@ class TaskExecutor:
failed_when_result = False
return failed_when_result
if 'ansible_facts' in result:
if 'ansible_facts' in result and self._task.action not in C._ACTION_DEBUG:
if self._task.action in C._ACTION_WITH_CLEAN_FACTS:
vars_copy.update(result['ansible_facts'])
else:
@ -777,7 +777,7 @@ class TaskExecutor:
if self._task.register:
variables[self._task.register] = result = wrap_var(result)
if 'ansible_facts' in result:
if 'ansible_facts' in result and self._task.action not in C._ACTION_DEBUG:
if self._task.action in C._ACTION_WITH_CLEAN_FACTS:
variables.update(result['ansible_facts'])
else:

@ -670,7 +670,7 @@ class StrategyBase:
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 and original_task.action not in C._ACTION_DEBUG:
# if delegated fact and we are delegating facts, we need to change target host for them
if original_task.delegate_to is not None and original_task.delegate_facts:
host_list = self.get_delegated_hosts(result_item, original_task)

@ -0,0 +1,21 @@
- name: check we dont set facts with debug ansible_facts https://github.com/ansible/ansible/issues/74060
hosts: localhost
gather_facts: false
tasks:
- name: create namespaced non fact
set_fact:
ansible_facts:
nonfact: 1
- name: ensure nonfact does not exist
assert:
that:
- nonfact is not defined
- name: debug ansible_facts to create issue
debug: var=ansible_facts
- name: ensure nonfact STILL does not exist
assert:
that:
- nonfact is not defined

@ -15,3 +15,6 @@ for i in 1 2 3; do
grep "ok: \[localhost\] => (item=$i)" out
grep "\"item\": $i" out
done
# ensure debug does not set top level vars when looking at ansible_facts
ansible-playbook nosetfacts.yml "$@"

Loading…
Cancel
Save