diff --git a/changelogs/fragments/adoc_dumps_keywords.yml b/changelogs/fragments/adoc_dumps_keywords.yml new file mode 100644 index 00000000000..2612aff00e9 --- /dev/null +++ b/changelogs/fragments/adoc_dumps_keywords.yml @@ -0,0 +1,2 @@ +bugfixes: + - ansible-doc can now dump kewyords with --metadata-dump (still just for internal use) diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py index 31164f5b1cb..1c023393de0 100644 --- a/lib/ansible/cli/doc.py +++ b/lib/ansible/cli/doc.py @@ -530,12 +530,20 @@ class DocCLI(CLI, RoleMixin): data = {} descs = DocCLI._list_keywords() - for keyword in keys: - if keyword.startswith('with_'): + for key in keys: + + if key.startswith('with_'): + # simplify loops, dont want to handle every with_ combo keyword = 'loop' + elif key == 'async': + # cause async became reserved in python we had to rename internally + keyword = 'async_val' + else: + keyword = key + try: # if no desc, typeerror raised ends this block - kdata = {'description': descs[keyword]} + kdata = {'description': descs[key]} # get playbook objects for keyword and use first to get keyword attributes kdata['applies_to'] = [] @@ -574,10 +582,12 @@ class DocCLI(CLI, RoleMixin): if kdata[k] is None: del kdata[k] - data[keyword] = kdata + data[key] = kdata - except KeyError as e: - display.warning("Skipping Invalid keyword '%s' specified: %s" % (keyword, to_text(e))) + except (AttributeError, KeyError) as e: + display.warning("Skipping Invalid keyword '%s' specified: %s" % (key, to_text(e))) + if display.verbosity >= 3: + display.verbose(traceback.format_exc()) return data @@ -669,7 +679,10 @@ class DocCLI(CLI, RoleMixin): raise AnsibleOptionsError("Unknown or undocumentable plugin type: %s" % plugin_type) elif plugin_type == 'keyword': - if listing: + if context.CLIARGS['dump']: + keys = DocCLI._list_keywords() + docs = DocCLI._get_keywords_docs(keys.keys()) + elif listing: docs = DocCLI._list_keywords() else: docs = DocCLI._get_keywords_docs(context.CLIARGS['args'])