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 4a82e2c486)

* Update fix_setup_bad_subset.yml

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

@ -0,0 +1,2 @@
bugfixes:
- setup - fix error handling on bad subset given.

@ -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)

@ -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 "$@"

@ -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']"
Loading…
Cancel
Save