diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2021-04-05 02:34:26 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-05 01:34:26 -0500 |
commit | 7683dfb7278afa24ee0d6d53968110b8bd467641 (patch) | |
tree | 39e6a5a2ff8ed48406eff31de74b02b0a84e0911 | |
parent | adae63e053fae822b26beb2fa9b70b7ba2da34b1 (diff) | |
download | ansible-7683dfb7278afa24ee0d6d53968110b8bd467641.tar.gz |
Fix setup subset (#74022) (#74047)
* fix error msg on bad subset
* added test
* handle more raised but not handled fact exceptions
(cherry picked from commit 4a82e2c4860b88aa2d5ab2fd1f7cd79636005b5f)
* Update fix_setup_bad_subset.yml
Co-authored-by: Rick Elrod <rick@elrod.me>
-rw-r--r-- | changelogs/fragments/fix_setup_bad_subset.yml | 2 | ||||
-rw-r--r-- | lib/ansible/modules/setup.py | 23 | ||||
-rwxr-xr-x | test/integration/targets/gathering_facts/runme.sh | 3 | ||||
-rw-r--r-- | test/integration/targets/gathering_facts/verify_subset.yml | 13 |
4 files changed, 31 insertions, 10 deletions
diff --git a/changelogs/fragments/fix_setup_bad_subset.yml b/changelogs/fragments/fix_setup_bad_subset.yml new file mode 100644 index 0000000000..1bc1ce9977 --- /dev/null +++ b/changelogs/fragments/fix_setup_bad_subset.yml @@ -0,0 +1,2 @@ +bugfixes: + - setup - fix error handling on bad subset given. diff --git a/lib/ansible/modules/setup.py b/lib/ansible/modules/setup.py index f2040dfc34..520b947196 100644 --- a/lib/ansible/modules/setup.py +++ b/lib/ansible/modules/setup.py @@ -126,10 +126,10 @@ EXAMPLES = """ # import module snippets from ..module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_text +from ansible.module_utils.facts import ansible_collector, default_collectors +from ansible.module_utils.facts.collector import CollectorNotFoundError, CycleFoundInFactDeps, UnresolvedFactDep from ansible.module_utils.facts.namespace import PrefixFactNamespace -from ansible.module_utils.facts import ansible_collector - -from ansible.module_utils.facts import default_collectors def main(): @@ -162,13 +162,16 @@ def main(): namespace = PrefixFactNamespace(namespace_name='ansible', prefix='ansible_') - fact_collector = \ - ansible_collector.get_ansible_collector(all_collector_classes=all_collector_classes, - namespace=namespace, - filter_spec=filter_spec, - gather_subset=gather_subset, - gather_timeout=gather_timeout, - minimal_gather_subset=minimal_gather_subset) + try: + fact_collector = ansible_collector.get_ansible_collector(all_collector_classes=all_collector_classes, + namespace=namespace, + filter_spec=filter_spec, + gather_subset=gather_subset, + gather_timeout=gather_timeout, + minimal_gather_subset=minimal_gather_subset) + except (TypeError, CollectorNotFoundError, CycleFoundInFactDeps, UnresolvedFactDep) as e: + # bad subset given, collector, idk, deps declared but not found + module.fail_json(msg=to_text(e)) facts_dict = fact_collector.collect(module=module) diff --git a/test/integration/targets/gathering_facts/runme.sh b/test/integration/targets/gathering_facts/runme.sh index 4635562710..9904c9e78e 100755 --- a/test/integration/targets/gathering_facts/runme.sh +++ b/test/integration/targets/gathering_facts/runme.sh @@ -16,3 +16,6 @@ ansible-playbook verify_merge_facts.yml -v "$@" -e 'ansible_facts_parallel: Fals # ensure we dont clobber facts in loop ansible-playbook prevent_clobbering.yml -v "$@" + +# ensure we dont fail module on bad subset +ansible-playbook verify_subset.yml "$@" diff --git a/test/integration/targets/gathering_facts/verify_subset.yml b/test/integration/targets/gathering_facts/verify_subset.yml new file mode 100644 index 0000000000..89132756ea --- /dev/null +++ b/test/integration/targets/gathering_facts/verify_subset.yml @@ -0,0 +1,13 @@ +- hosts: localhost + gather_facts: false + tasks: + - name: bad subset used + setup: gather_subset=nonsense + register: bad_sub + ignore_errors: true + + - name: verify we fail the right way + assert: + that: + - bad_sub is failed + - "'MODULE FAILURE' not in bad_sub['msg']" |