Fix setup subset (#74022)

* fix error msg on bad subset

* added test
* handle more raised but not handled fact exceptions
This commit is contained in:
Brian Coca 2021-03-26 12:43:16 -04:00 committed by GitHub
parent c66cff444c
commit 4a82e2c486
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 10 deletions

View file

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

View file

@ -144,10 +144,10 @@ EXAMPLES = """
# import module snippets # import module snippets
from ..module_utils.basic import AnsibleModule 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.namespace import PrefixFactNamespace
from ansible.module_utils.facts import ansible_collector
from ansible.module_utils.facts import default_collectors
def main(): def main():
@ -180,13 +180,16 @@ def main():
namespace = PrefixFactNamespace(namespace_name='ansible', namespace = PrefixFactNamespace(namespace_name='ansible',
prefix='ansible_') prefix='ansible_')
fact_collector = \ try:
ansible_collector.get_ansible_collector(all_collector_classes=all_collector_classes, fact_collector = ansible_collector.get_ansible_collector(all_collector_classes=all_collector_classes,
namespace=namespace, namespace=namespace,
filter_spec=filter_spec, filter_spec=filter_spec,
gather_subset=gather_subset, gather_subset=gather_subset,
gather_timeout=gather_timeout, gather_timeout=gather_timeout,
minimal_gather_subset=minimal_gather_subset) 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) facts_dict = fact_collector.collect(module=module)

View file

@ -16,3 +16,6 @@ ansible-playbook verify_merge_facts.yml -v "$@" -e 'ansible_facts_parallel: Fals
# ensure we dont clobber facts in loop # ensure we dont clobber facts in loop
ansible-playbook prevent_clobbering.yml -v "$@" ansible-playbook prevent_clobbering.yml -v "$@"
# ensure we dont fail module on bad subset
ansible-playbook verify_subset.yml "$@"

View file

@ -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']"