diff --git a/changelogs/fragments/ansible-doc-has_action.yml b/changelogs/fragments/ansible-doc-has_action.yml new file mode 100644 index 00000000000000..f1ab97eb79d4b0 --- /dev/null +++ b/changelogs/fragments/ansible-doc-has_action.yml @@ -0,0 +1,2 @@ +minor_changes: +- "ansible-doc - provide ``has_action`` field in JSON output for modules. That information is currently only available in the text view (https://github.com/ansible/ansible/pull/72359)." diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py index 061b406853a4ed..41baa7966531e3 100644 --- a/lib/ansible/cli/doc.py +++ b/lib/ansible/cli/doc.py @@ -259,7 +259,7 @@ def run(self): # The doc section existed but was empty continue - plugin_docs[plugin] = {'doc': doc, 'examples': plainexamples, 'return': returndocs, 'metadata': metadata} + plugin_docs[plugin] = DocCLI._combine_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metadata) if do_json: jdump(plugin_docs) @@ -354,6 +354,19 @@ def _get_plugin_doc(plugin, plugin_type, loader, search_paths): doc['collection'] = collection_name return doc, plainexamples, returndocs, metadata + @staticmethod + def _combine_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metadata): + # generate extra data + if plugin_type == 'module': + # is there corresponding action plugin? + if plugin in action_loader: + doc['has_action'] = True + else: + doc['has_action'] = False + + # return everything as one dictionary + return {'doc': doc, 'examples': plainexamples, 'return': returndocs, 'metadata': metadata} + @staticmethod def format_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metadata): collection_name = doc['collection'] @@ -369,18 +382,6 @@ def format_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metad doc['returndocs'] = returndocs doc['metadata'] = metadata - # generate extra data - if plugin_type == 'module': - # is there corresponding action plugin? - if plugin in action_loader: - doc['action'] = True - else: - doc['action'] = False - - doc['now_date'] = datetime.date.today().strftime('%Y-%m-%d') - if 'docuri' in doc: - doc['docuri'] = doc[plugin_type].replace('_', '-') - if context.CLIARGS['show_snippet'] and plugin_type == 'module': text = DocCLI.get_snippet_text(doc) else: @@ -658,7 +659,7 @@ def get_man_text(doc, collection_name='', plugin_type=''): text.append("%s" % doc.pop('deprecated')) text.append("\n") - if doc.pop('action', False): + if doc.pop('has_action', False): text.append(" * note: %s\n" % "This module has a corresponding action plugin.") if doc.get('options', False):