diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2020-06-04 21:01:46 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-04 21:01:46 -0400 |
commit | 062e780a68f9acd2ee6f824f252458b8a0351f24 (patch) | |
tree | d30bdf5dc0586214c2078a43c7f7e1a77b672cfc /lib/ansible | |
parent | f5718a354c15acd3a47424318de87b0aeeda1d53 (diff) | |
download | ansible-062e780a68f9acd2ee6f824f252458b8a0351f24.tar.gz |
starting metadata sunset (#69454)
* starting metadata sunset
- purged metadata from any requirements
- fix indent in generic handler for yaml content (whey metadata display was off)
- make more resilient against bad formed docs
- removed all metadata from docs template
- remove metadata from schemas
- removed mdata tests and from unrelated tests
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Rick Elrod <rick@elrod.me>
Diffstat (limited to 'lib/ansible')
76 files changed, 73 insertions, 683 deletions
diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py index 94992a6628..dec582fb98 100644 --- a/lib/ansible/cli/doc.py +++ b/lib/ansible/cli/doc.py @@ -24,7 +24,6 @@ from ansible.module_utils._text import to_native, to_text from ansible.module_utils.common._collections_compat import Container, Sequence from ansible.module_utils.common.json import AnsibleJSONEncoder from ansible.module_utils.six import string_types -from ansible.parsing.metadata import extract_metadata from ansible.parsing.plugin_docs import read_docstub from ansible.parsing.yaml.dumper import AnsibleDumper from ansible.plugins.loader import action_loader, fragment_loader @@ -54,10 +53,6 @@ def add_collection_plugins(plugin_list, plugin_type, coll_filter=None): plugin_list.update(DocCLI.find_plugins(os.path.join(path, 'plugins', ptype), plugin_type, collection=collname)) -class RemovedPlugin(Exception): - pass - - class PluginNotFound(Exception): pass @@ -112,12 +107,45 @@ class DocCLI(CLI): return options + def display_plugin_list(self, results): + + # format for user + displace = max(len(x) for x in self.plugin_list) + linelimit = display.columns - displace - 5 + text = [] + + # format display per option + if context.CLIARGS['list_files']: + # list plugin file names + for plugin in results.keys(): + filename = results[plugin] + text.append("%-*s %-*.*s" % (displace, plugin, linelimit, len(filename), filename)) + else: + # list plugin names and short desc + deprecated = [] + for plugin in results.keys(): + desc = DocCLI.tty_ify(results[plugin]) + + if len(desc) > linelimit: + desc = desc[:linelimit] + '...' + + if plugin.startswith('_'): # Handle deprecated # TODO: add mark for deprecated collection plugins + deprecated.append("%-*s %-*.*s" % (displace, plugin[1:], linelimit, len(desc), desc)) + else: + text.append("%-*s %-*.*s" % (displace, plugin, linelimit, len(desc), desc)) + + if len(deprecated) > 0: + text.append("\nDEPRECATED:") + text.extend(deprecated) + + # display results + DocCLI.pager("\n".join(text)) + def run(self): super(DocCLI, self).run() plugin_type = context.CLIARGS['type'] - do_json = context.CLIARGS['json_format'] if plugin_type in C.DOCUMENTABLE_PLUGINS: @@ -130,6 +158,7 @@ class DocCLI(CLI): if basedir: AnsibleCollectionConfig.playbook_paths = basedir loader.add_directory(basedir, with_subdir=True) + if context.CLIARGS['module_path']: for path in context.CLIARGS['module_path']: if path: @@ -162,43 +191,10 @@ class DocCLI(CLI): if do_json: jdump(results) elif self.plugin_list: - # format for user - displace = max(len(x) for x in self.plugin_list) - linelimit = display.columns - displace - 5 - text = [] - - # format display per option - if context.CLIARGS['list_files']: - # list files - - for plugin in results.keys(): - - filename = results[plugin] - text.append("%-*s %-*.*s" % (displace, plugin, linelimit, len(filename), filename)) - else: - # list plugins - deprecated = [] - for plugin in results.keys(): - desc = DocCLI.tty_ify(results[plugin]) - - if len(desc) > linelimit: - desc = desc[:linelimit] + '...' - - if plugin.startswith('_'): # Handle deprecated # TODO: add mark for deprecated collection plugins - deprecated.append("%-*s %-*.*s" % (displace, plugin[1:], linelimit, len(desc), desc)) - else: - text.append("%-*s %-*.*s" % (displace, plugin, linelimit, len(desc), desc)) - - if len(deprecated) > 0: - text.append("\nDEPRECATED:") - text.extend(deprecated) - - # display results - DocCLI.pager("\n".join(text)) + self.display_plugin_list(results) else: display.warning("No plugins found.") - - # dump plugin desc/metadata as JSON + # dump plugin desc/data as JSON elif context.CLIARGS['dump']: plugin_data = {} plugin_names = DocCLI.get_all_plugins_of_type(plugin_type) @@ -208,7 +204,6 @@ class DocCLI(CLI): plugin_data[plugin_name] = plugin_info jdump(plugin_data) - else: # display specific plugin docs if len(context.CLIARGS['args']) == 0: @@ -222,9 +217,6 @@ class DocCLI(CLI): except PluginNotFound: display.warning("%s %s not found in:\n%s\n" % (plugin_type, plugin, search_paths)) continue - except RemovedPlugin: - display.warning("%s %s has been removed\n" % (plugin_type, plugin)) - continue except Exception as e: display.vvv(traceback.format_exc()) raise AnsibleError("%s %s missing documentation (or could not parse" @@ -235,8 +227,7 @@ class DocCLI(CLI): # The doc section existed but was empty continue - plugin_docs[plugin] = {'doc': doc, 'examples': plainexamples, - 'return': returndocs, 'metadata': metadata} + plugin_docs[plugin] = {'doc': doc, 'examples': plainexamples, 'return': returndocs, 'metadata': metadata} if do_json: # Some changes to how json docs are formatted @@ -257,6 +248,8 @@ class DocCLI(CLI): doc_data['return'], doc_data['metadata']) if textret: text.append(textret) + else: + display.warning("No valid documentation was retrieved from '%s'" % plugin) if text: DocCLI.pager(''.join(text)) @@ -286,20 +279,13 @@ class DocCLI(CLI): collection_name = '.'.join(plugin_name.split('.')[1:3]) try: - doc, __, __, metadata = get_docstring(filename, fragment_loader, verbose=(context.CLIARGS['verbosity'] > 0), - collection_name=collection_name, is_module=(plugin_type == 'module')) + doc, __, __, __ = get_docstring(filename, fragment_loader, verbose=(context.CLIARGS['verbosity'] > 0), + collection_name=collection_name, is_module=(plugin_type == 'module')) except Exception: display.vvv(traceback.format_exc()) - raise AnsibleError( - "%s %s at %s has a documentation error formatting or is missing documentation." % - (plugin_type, plugin_name, filename)) + raise AnsibleError("%s %s at %s has a documentation formatting error or is missing documentation." % (plugin_type, plugin_name, filename)) if doc is None: - if 'removed' not in metadata.get('status', []): - raise AnsibleError( - "%s %s at %s has a documentation error formatting or is missing documentation." % - (plugin_type, plugin_name, filename)) - # Removed plugins don't have any documentation return None @@ -339,22 +325,8 @@ class DocCLI(CLI): filename, fragment_loader, verbose=(context.CLIARGS['verbosity'] > 0), collection_name=collection_name, is_module=(plugin_type == 'module')) - # If the plugin existed but did not have a DOCUMENTATION element and was not removed, it's - # an error + # If the plugin existed but did not have a DOCUMENTATION element and was not removed, it's an error if doc is None: - # doc may be None when the module has been removed. Calling code may choose to - # handle that but we can't. - if 'status' in metadata and isinstance(metadata['status'], Container): - if 'removed' in metadata['status']: - raise RemovedPlugin('%s has been removed' % plugin) - - # Backwards compat: no documentation but valid metadata (or no metadata, which results in using the default metadata). - # Probably should make this an error in 2.10 - return {}, {}, {}, metadata - else: - # If metadata is invalid, warn but don't error - display.warning(u'%s has an invalid ANSIBLE_METADATA field' % plugin) - raise ValueError('%s did not contain a DOCUMENTATION attribute' % plugin) doc['filename'] = filename @@ -383,7 +355,10 @@ class DocCLI(CLI): if context.CLIARGS['show_snippet'] and plugin_type == 'module': text = DocCLI.get_snippet_text(doc) else: - text = DocCLI.get_man_text(doc) + try: + text = DocCLI.get_man_text(doc) + except Exception as e: + raise AnsibleError("Unable to retrieve documentation from '%s' due to: %s" % (plugin, to_native(e))) return text @@ -450,13 +425,6 @@ class DocCLI(CLI): continue if not doc or not isinstance(doc, dict): - with open(filename) as f: - metadata = extract_metadata(module_data=f.read()) - if metadata[0]: - if 'removed' not in metadata[0].get('status', []): - display.warning("%s parsing did not produce documentation." % plugin) - else: - continue desc = 'UNDOCUMENTED' else: desc = doc.get('short_description', 'INVALID SHORT DESCRIPTION').strip() @@ -564,16 +532,16 @@ class DocCLI(CLI): aliases = '' if 'aliases' in opt: if len(opt['aliases']) > 0: - aliases = "(Aliases: " + ", ".join(str(i) for i in opt['aliases']) + ")" + aliases = "(Aliases: " + ", ".join(to_text(i) for i in opt['aliases']) + ")" del opt['aliases'] choices = '' if 'choices' in opt: if len(opt['choices']) > 0: - choices = "(Choices: " + ", ".join(str(i) for i in opt['choices']) + ")" + choices = "(Choices: " + ", ".join(to_text(i) for i in opt['choices']) + ")" del opt['choices'] default = '' if 'default' in opt or not required: - default = "[Default: %s" % str(opt.pop('default', '(null)')) + "]" + default = "[Default: %s" % to_text(opt.pop('default', '(null)')) + "]" text.append(textwrap.fill(DocCLI.tty_ify(aliases + choices + default), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) @@ -613,31 +581,6 @@ class DocCLI(CLI): text.append('') @staticmethod - def get_support_block(doc): - # Note: 'curated' is deprecated and not used in any of the modules we ship - support_level_msg = {'core': 'The Ansible Core Team', - 'network': 'The Ansible Network Team', - 'certified': 'an Ansible Partner', - 'community': 'The Ansible Community', - 'curated': 'A Third Party', - } - return [" * This module is maintained by %s" % support_level_msg[doc['metadata']['supported_by']]] - - @staticmethod - def get_metadata_block(doc): - text = [] - - text.append("METADATA:") - text.append('\tSUPPORT LEVEL: %s' % doc['metadata']['supported_by']) - - for k in (m for m in doc['metadata'] if m != 'supported_by'): - if isinstance(k, list): - text.append("\t%s: %s" % (k.capitalize(), ", ".join(doc['metadata'][k]))) - else: - text.append("\t%s: %s" % (k.capitalize(), doc['metadata'][k])) - return text - - @staticmethod def get_man_text(doc): DocCLI.IGNORE = DocCLI.IGNORE + (context.CLIARGS['type'],) @@ -656,7 +599,7 @@ class DocCLI(CLI): text.append("%s\n" % textwrap.fill(DocCLI.tty_ify(desc), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) - if 'deprecated' in doc and doc['deprecated'] is not None and len(doc['deprecated']) > 0: + if doc.get('deprecated', False): text.append("DEPRECATED: \n") if isinstance(doc['deprecated'], dict): if 'version' in doc['deprecated'] and 'removed_in' not in doc['deprecated']: @@ -666,22 +609,15 @@ class DocCLI(CLI): text.append("%s" % doc.pop('deprecated')) text.append("\n") - try: - support_block = DocCLI.get_support_block(doc) - if support_block: - text.extend(support_block) - except Exception: - pass # FIXME: not suported by plugins - if doc.pop('action', False): text.append(" * note: %s\n" % "This module has a corresponding action plugin.") - if 'options' in doc and doc['options']: + if doc.get('options', False): text.append("OPTIONS (= is mandatory):\n") DocCLI.add_fields(text, doc.pop('options'), limit, opt_indent) text.append('') - if 'notes' in doc and doc['notes'] and len(doc['notes']) > 0: + if doc.get('notes', False): text.append("NOTES:") for note in doc['notes']: text.append(textwrap.fill(DocCLI.tty_ify(note), limit - 6, @@ -690,7 +626,7 @@ class DocCLI(CLI): text.append('') del doc['notes'] - if 'seealso' in doc and doc['seealso']: + if doc.get('seealso', False): text.append("SEE ALSO:") for item in doc['seealso']: if 'module' in item: @@ -719,7 +655,7 @@ class DocCLI(CLI): text.append('') del doc['seealso'] - if 'requirements' in doc and doc['requirements'] is not None and len(doc['requirements']) > 0: + if doc.get('requirements', False): req = ", ".join(doc.pop('requirements')) text.append("REQUIREMENTS:%s\n" % textwrap.fill(DocCLI.tty_ify(req), limit - 16, initial_indent=" ", subsequent_indent=opt_indent)) @@ -732,11 +668,12 @@ class DocCLI(CLI): elif isinstance(doc[k], (list, tuple)): text.append('%s: %s' % (k.upper(), ', '.join(doc[k]))) else: - text.append(DocCLI._dump_yaml({k.upper(): doc[k]}, opt_indent)) + # use empty indent since this affects the start of the yaml doc, not it's keys + text.append(DocCLI._dump_yaml({k.upper(): doc[k]}, '')) del doc[k] - text.append('') + text.append('') - if 'plainexamples' in doc and doc['plainexamples'] is not None: + if doc.get('plainexamples', False): text.append("EXAMPLES:") text.append('') if isinstance(doc['plainexamples'], string_types): @@ -746,20 +683,11 @@ class DocCLI(CLI): text.append('') text.append('') - if 'returndocs' in doc and doc['returndocs'] is not None: + if doc.get('returndocs', False): text.append("RETURN VALUES:") if isinstance(doc['returndocs'], string_types): text.append(doc.pop('returndocs')) else: text.append(yaml.dump(doc.pop('returndocs'), indent=2, default_flow_style=False)) - text.append('') - - try: - metadata_block = DocCLI.get_metadata_block(doc) - if metadata_block: - text.extend(metadata_block) - text.append('') - except Exception: - pass # metadata is optional return "\n".join(text) diff --git a/lib/ansible/galaxy/data/network/library/example_command.py.j2 b/lib/ansible/galaxy/data/network/library/example_command.py.j2 index 8c8594bd25..0f3dac2d98 100644 --- a/lib/ansible/galaxy/data/network/library/example_command.py.j2 +++ b/lib/ansible/galaxy/data/network/library/example_command.py.j2 @@ -22,11 +22,6 @@ __metaclass__ = type ### Documentation -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - DOCUMENTATION = """ Examples: https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/network/iosxr/iosxr_command.py diff --git a/lib/ansible/galaxy/data/network/library/example_config.py.j2 b/lib/ansible/galaxy/data/network/library/example_config.py.j2 index 15c29aff2e..2c2c72be9c 100644 --- a/lib/ansible/galaxy/data/network/library/example_config.py.j2 +++ b/lib/ansible/galaxy/data/network/library/example_config.py.j2 @@ -22,11 +22,6 @@ __metaclass__ = type ### Documentation -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - DOCUMENTATION = """ Examples: https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/network/iosxr/iosxr_config.py diff --git a/lib/ansible/galaxy/data/network/library/example_facts.py.j2 b/lib/ansible/galaxy/data/network/library/example_facts.py.j2 index ecff927f39..9f7608c39a 100644 --- a/lib/ansible/galaxy/data/network/library/example_facts.py.j2 +++ b/lib/ansible/galaxy/data/network/library/example_facts.py.j2 @@ -22,11 +22,6 @@ __metaclass__ = type ### Documentation -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - DOCUMENTATION = """ Examples: https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/network/iosxr/iosxr_facts.py diff --git a/lib/ansible/modules/add_host.py b/lib/ansible/modules/add_host.py index 5b125ad3cb..99e62464d4 100644 --- a/lib/ansible/modules/add_host.py +++ b/lib/ansible/modules/add_host.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/apt.py b/lib/ansible/modules/apt.py index bee314e601..d90d12dca6 100644 --- a/lib/ansible/modules/apt.py +++ b/lib/ansible/modules/apt.py @@ -10,9 +10,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/apt_key.py b/lib/ansible/modules/apt_key.py index 425193a5a5..d8bb6e1543 100644 --- a/lib/ansible/modules/apt_key.py +++ b/lib/ansible/modules/apt_key.py @@ -9,9 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/apt_repository.py b/lib/ansible/modules/apt_repository.py index db14521665..834bdec1dd 100644 --- a/lib/ansible/modules/apt_repository.py +++ b/lib/ansible/modules/apt_repository.py @@ -10,9 +10,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/assemble.py b/lib/ansible/modules/assemble.py index 078262608f..1940ac6101 100644 --- a/lib/ansible/modules/assemble.py +++ b/lib/ansible/modules/assemble.py @@ -9,9 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/assert.py b/lib/ansible/modules/assert.py index 9d251262d0..eb6b7a76f8 100644 --- a/lib/ansible/modules/assert.py +++ b/lib/ansible/modules/assert.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/async_status.py b/lib/ansible/modules/async_status.py index db42869957..158e771d25 100644 --- a/lib/ansible/modules/async_status.py +++ b/lib/ansible/modules/async_status.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/blockinfile.py b/lib/ansible/modules/blockinfile.py index f5b422c6bb..ecb06d45c3 100644 --- a/lib/ansible/modules/blockinfile.py +++ b/lib/ansible/modules/blockinfile.py @@ -8,9 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/command.py b/lib/ansible/modules/command.py index 2ebf7f743a..5844c2d849 100644 --- a/lib/ansible/modules/command.py +++ b/lib/ansible/modules/command.py @@ -9,10 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - DOCUMENTATION = r''' --- module: command diff --git a/lib/ansible/modules/copy.py b/lib/ansible/modules/copy.py index 382ac376fd..b6cd8c681f 100644 --- a/lib/ansible/modules/copy.py +++ b/lib/ansible/modules/copy.py @@ -8,9 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/cron.py b/lib/ansible/modules/cron.py index 0e102b0387..6a59acb6f7 100644 --- a/lib/ansible/modules/cron.py +++ b/lib/ansible/modules/cron.py @@ -11,9 +11,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/debconf.py b/lib/ansible/modules/debconf.py index eaeae1a39d..559b4f2b9c 100644 --- a/lib/ansible/modules/debconf.py +++ b/lib/ansible/modules/debconf.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/debug.py b/lib/ansible/modules/debug.py index 8a3f0caa52..1a140eb2bf 100644 --- a/lib/ansible/modules/debug.py +++ b/lib/ansible/modules/debug.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/dnf.py b/lib/ansible/modules/dnf.py index aaf404ed73..226703a7f4 100644 --- a/lib/ansible/modules/dnf.py +++ b/lib/ansible/modules/dnf.py @@ -11,11 +11,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: dnf diff --git a/lib/ansible/modules/dpkg_selections.py b/lib/ansible/modules/dpkg_selections.py index 2e35878ba3..9043786ece 100644 --- a/lib/ansible/modules/dpkg_selections.py +++ b/lib/ansible/modules/dpkg_selections.py @@ -8,11 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: dpkg_selections diff --git a/lib/ansible/modules/expect.py b/lib/ansible/modules/expect.py index 6a0d6b7749..f1b2ec6ff9 100644 --- a/lib/ansible/modules/expect.py +++ b/lib/ansible/modules/expect.py @@ -8,11 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - - DOCUMENTATION = r''' --- module: expect diff --git a/lib/ansible/modules/fail.py b/lib/ansible/modules/fail.py index 149049df8f..ed0a013a3f 100644 --- a/lib/ansible/modules/fail.py +++ b/lib/ansible/modules/fail.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/fetch.py b/lib/ansible/modules/fetch.py index d87ec1274f..959b992ddc 100644 --- a/lib/ansible/modules/fetch.py +++ b/lib/ansible/modules/fetch.py @@ -9,9 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/file.py b/lib/ansible/modules/file.py index ee96657234..ba5d4bd7fa 100644 --- a/lib/ansible/modules/file.py +++ b/lib/ansible/modules/file.py @@ -8,9 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/find.py b/lib/ansible/modules/find.py index e9ac43edfe..2288df7845 100644 --- a/lib/ansible/modules/find.py +++ b/lib/ansible/modules/find.py @@ -10,9 +10,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/gather_facts.py b/lib/ansible/modules/gather_facts.py index 711c840a98..756093597c 100644 --- a/lib/ansible/modules/gather_facts.py +++ b/lib/ansible/modules/gather_facts.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: gather_facts diff --git a/lib/ansible/modules/get_url.py b/lib/ansible/modules/get_url.py index d9f02217b4..7a48067c3c 100644 --- a/lib/ansible/modules/get_url.py +++ b/lib/ansible/modules/get_url.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/getent.py b/lib/ansible/modules/getent.py index 29337b0cfb..1997aa0d70 100644 --- a/lib/ansible/modules/getent.py +++ b/lib/ansible/modules/getent.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/git.py b/lib/ansible/modules/git.py index 4b4d740d7f..b47e94517b 100644 --- a/lib/ansible/modules/git.py +++ b/lib/ansible/modules/git.py @@ -8,11 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: git diff --git a/lib/ansible/modules/group.py b/lib/ansible/modules/group.py index 4c6d0b99a3..006e38185b 100644 --- a/lib/ansible/modules/group.py +++ b/lib/ansible/modules/group.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/group_by.py b/lib/ansible/modules/group_by.py index 5f43eea32d..3ef3b51114 100644 --- a/lib/ansible/modules/group_by.py +++ b/lib/ansible/modules/group_by.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/hostname.py b/lib/ansible/modules/hostname.py index 1669a64357..c0ffe37adf 100644 --- a/lib/ansible/modules/hostname.py +++ b/lib/ansible/modules/hostname.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/import_playbook.py b/lib/ansible/modules/import_playbook.py index 17ce2c9161..25ba1a7354 100644 --- a/lib/ansible/modules/import_playbook.py +++ b/lib/ansible/modules/import_playbook.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/import_role.py b/lib/ansible/modules/import_role.py index baca26f20b..eb4107047a 100644 --- a/lib/ansible/modules/import_role.py +++ b/lib/ansible/modules/import_role.py @@ -6,11 +6,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/import_tasks.py b/lib/ansible/modules/import_tasks.py index 3d54a7c549..e3884c75b1 100644 --- a/lib/ansible/modules/import_tasks.py +++ b/lib/ansible/modules/import_tasks.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/include.py b/lib/ansible/modules/include.py index cde31150fe..75b816057d 100644 --- a/lib/ansible/modules/include.py +++ b/lib/ansible/modules/include.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/include_role.py b/lib/ansible/modules/include_role.py index 722251cb8e..10c1d83c25 100644 --- a/lib/ansible/modules/include_role.py +++ b/lib/ansible/modules/include_role.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/include_tasks.py b/lib/ansible/modules/include_tasks.py index f55351b399..fad798d311 100644 --- a/lib/ansible/modules/include_tasks.py +++ b/lib/ansible/modules/include_tasks.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/include_vars.py b/lib/ansible/modules/include_vars.py index 58d1f00bf2..24f4359e94 100644 --- a/lib/ansible/modules/include_vars.py +++ b/lib/ansible/modules/include_vars.py @@ -6,11 +6,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core' -} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/iptables.py b/lib/ansible/modules/iptables.py index e6973689ed..7ec22cfd88 100644 --- a/lib/ansible/modules/iptables.py +++ b/lib/ansible/modules/iptables.py @@ -8,9 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/known_hosts.py b/lib/ansible/modules/known_hosts.py index 235019b018..858c6ba8d0 100644 --- a/lib/ansible/modules/known_hosts.py +++ b/lib/ansible/modules/known_hosts.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: known_hosts diff --git a/lib/ansible/modules/lineinfile.py b/lib/ansible/modules/lineinfile.py index 5860f4d6e7..1fa50c881d 100644 --- a/lib/ansible/modules/lineinfile.py +++ b/lib/ansible/modules/lineinfile.py @@ -9,10 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/meta.py b/lib/ansible/modules/meta.py index 2d683f0217..706ab9c4b9 100644 --- a/lib/ansible/modules/meta.py +++ b/lib/ansible/modules/meta.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' module: meta diff --git a/lib/ansible/modules/package.py b/lib/ansible/modules/package.py index 24ac099f20..f709d3e890 100644 --- a/lib/ansible/modules/package.py +++ b/lib/ansible/modules/package.py @@ -9,11 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: package diff --git a/lib/ansible/modules/package_facts.py b/lib/ansible/modules/package_facts.py index 60fb566988..e957e8300b 100644 --- a/lib/ansible/modules/package_facts.py +++ b/lib/ansible/modules/package_facts.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' module: package_facts diff --git a/lib/ansible/modules/pause.py b/lib/ansible/modules/pause.py index 3b2b0e3799..ac9d01fc34 100644 --- a/lib/ansible/modules/pause.py +++ b/lib/ansible/modules/pause.py @@ -6,11 +6,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: pause diff --git a/lib/ansible/modules/ping.py b/lib/ansible/modules/ping.py index 460f2a7aee..a2472cbfe7 100644 --- a/lib/ansible/modules/ping.py +++ b/lib/ansible/modules/ping.py @@ -9,10 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - DOCUMENTATION = ''' --- module: ping diff --git a/lib/ansible/modules/pip.py b/lib/ansible/modules/pip.py index 80b02ef010..97ae7d901f 100644 --- a/lib/ansible/modules/pip.py +++ b/lib/ansible/modules/pip.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/raw.py b/lib/ansible/modules/raw.py index 928350dbc6..d9c9cbbc40 100644 --- a/lib/ansible/modules/raw.py +++ b/lib/ansible/modules/raw.py @@ -7,11 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - - DOCUMENTATION = r''' --- module: raw diff --git a/lib/ansible/modules/reboot.py b/lib/ansible/modules/reboot.py index 0fab23a609..dea7823ed2 100644 --- a/lib/ansible/modules/reboot.py +++ b/lib/ansible/modules/reboot.py @@ -6,9 +6,6 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' module: reboot diff --git a/lib/ansible/modules/replace.py b/lib/ansible/modules/replace.py index d10da8049e..560a5447d0 100644 --- a/lib/ansible/modules/replace.py +++ b/lib/ansible/modules/replace.py @@ -8,10 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/rpm_key.py b/lib/ansible/modules/rpm_key.py index 74a9d50079..350cf4e3d1 100644 --- a/lib/ansible/modules/rpm_key.py +++ b/lib/ansible/modules/rpm_key.py @@ -9,9 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/script.py b/lib/ansible/modules/script.py index ed66947c4b..11399b9c03 100644 --- a/lib/ansible/modules/script.py +++ b/lib/ansible/modules/script.py @@ -4,9 +4,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/service.py b/lib/ansible/modules/service.py index 8846a36c65..7067b780e0 100644 --- a/lib/ansible/modules/service.py +++ b/lib/ansible/modules/service.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/service_facts.py b/lib/ansible/modules/service_facts.py index c890163139..407be92128 100644 --- a/lib/ansible/modules/service_facts.py +++ b/lib/ansible/modules/service_facts.py @@ -9,10 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - DOCUMENTATION = r''' --- module: service_facts diff --git a/lib/ansible/modules/set_fact.py b/lib/ansible/modules/set_fact.py index e3394fbe04..f87ab3cc5b 100644 --- a/lib/ansible/modules/set_fact.py +++ b/lib/ansible/modules/set_fact.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/set_stats.py b/lib/ansible/modules/set_stats.py index 95109e96a6..65ae54a721 100644 --- a/lib/ansible/modules/set_stats.py +++ b/lib/ansible/modules/set_stats.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/setup.py b/lib/ansible/modules/setup.py index 70756568be..fa0de69b5f 100644 --- a/lib/ansible/modules/setup.py +++ b/lib/ansible/modules/setup.py @@ -8,11 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - - DOCUMENTATION = ''' --- module: setup diff --git a/lib/ansible/modules/shell.py b/lib/ansible/modules/shell.py index 8066d7ad52..e8bb7e031b 100644 --- a/lib/ansible/modules/shell.py +++ b/lib/ansible/modules/shell.py @@ -12,11 +12,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - - DOCUMENTATION = r''' --- module: shell diff --git a/lib/ansible/modules/slurp.py b/lib/ansible/modules/slurp.py index c1891eac04..e1b5067bad 100644 --- a/lib/ansible/modules/slurp.py +++ b/lib/ansible/modules/slurp.py @@ -8,10 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - DOCUMENTATION = r''' --- module: slurp diff --git a/lib/ansible/modules/stat.py b/lib/ansible/modules/stat.py index 663d2c54a5..8868eb2812 100644 --- a/lib/ansible/modules/stat.py +++ b/lib/ansible/modules/stat.py @@ -6,9 +6,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/subversion.py b/lib/ansible/modules/subversion.py index 1e60529a06..43b02cb20e 100644 --- a/lib/ansible/modules/subversion.py +++ b/lib/ansible/modules/subversion.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/systemd.py b/lib/ansible/modules/systemd.py index 0ecd8ea588..0f0263e199 100644 --- a/lib/ansible/modules/systemd.py +++ b/lib/ansible/modules/systemd.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = ''' module: systemd diff --git a/lib/ansible/modules/sysvinit.py b/lib/ansible/modules/sysvinit.py index 779024865a..309bb0541f 100644 --- a/lib/ansible/modules/sysvinit.py +++ b/lib/ansible/modules/sysvinit.py @@ -8,11 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core' -} DOCUMENTATION = ''' module: sysvinit diff --git a/lib/ansible/modules/tempfile.py b/lib/ansible/modules/tempfile.py index 08a56fbf7b..f77373f35f 100644 --- a/lib/ansible/modules/tempfile.py +++ b/lib/ansible/modules/tempfile.py @@ -8,9 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/template.py b/lib/ansible/modules/template.py index c24deb72af..e01a18bb93 100644 --- a/lib/ansible/modules/template.py +++ b/lib/ansible/modules/template.py @@ -9,9 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/unarchive.py b/lib/ansible/modules/unarchive.py index fa38cec190..f69ab1c6cb 100644 --- a/lib/ansible/modules/unarchive.py +++ b/lib/ansible/modules/unarchive.py @@ -11,9 +11,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/uri.py b/lib/ansible/modules/uri.py index 21d5bec868..3cc4273230 100644 --- a/lib/ansible/modules/uri.py +++ b/lib/ansible/modules/uri.py @@ -8,10 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} - DOCUMENTATION = r''' --- module: uri diff --git a/lib/ansible/modules/user.py b/lib/ansible/modules/user.py index 254e07f552..2a59ef0bc5 100644 --- a/lib/ansible/modules/user.py +++ b/lib/ansible/modules/user.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' module: user diff --git a/lib/ansible/modules/wait_for.py b/lib/ansible/modules/wait_for.py index e11dfcb166..9c7614df97 100644 --- a/lib/ansible/modules/wait_for.py +++ b/lib/ansible/modules/wait_for.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/wait_for_connection.py b/lib/ansible/modules/wait_for_connection.py index e3c65f4399..7b27ac4fd6 100644 --- a/lib/ansible/modules/wait_for_connection.py +++ b/lib/ansible/modules/wait_for_connection.py @@ -7,9 +7,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = r''' --- diff --git a/lib/ansible/modules/yum.py b/lib/ansible/modules/yum.py index fe1d0e8bfc..c95ea758e7 100644 --- a/lib/ansible/modules/yum.py +++ b/lib/ansible/modules/yum.py @@ -10,9 +10,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core'} DOCUMENTATION = ''' --- diff --git a/lib/ansible/modules/yum_repository.py b/lib/ansible/modules/yum_repository.py index a709156aab..a875c4cd98 100644 --- a/lib/ansible/modules/yum_repository.py +++ b/lib/ansible/modules/yum_repository.py @@ -9,12 +9,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['stableinterface'], - 'supported_by': 'core' -} - DOCUMENTATION = ''' --- module: yum_repository diff --git a/lib/ansible/parsing/metadata.py b/lib/ansible/parsing/metadata.py deleted file mode 100644 index 70ed4491ce..0000000000 --- a/lib/ansible/parsing/metadata.py +++ /dev/null @@ -1,245 +0,0 @@ -# (c) 2017, Toshio Kuratomi <tkuratomi@ansible.com> -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import ast -import sys - -import yaml - -from ansible.module_utils._text import to_text - - -# There are currently defaults for all metadata fields so we can add it -# automatically if a file doesn't specify it -DEFAULT_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} - - -class ParseError(Exception): - """Thrown when parsing a file fails""" - pass - - -def _seek_end_of_dict(module_data, start_line, start_col, next_node_line, next_node_col): - """Look for the end of a dict in a set of lines - - We know the starting position of the dict and we know the start of the - next code node but in between there may be multiple newlines and comments. - There may also be multiple python statements on the same line (separated - by semicolons) - - Examples:: - ANSIBLE_METADATA = {[..]} - DOCUMENTATION = [..] - - ANSIBLE_METADATA = {[..]} # Optional comments with confusing junk => {} - # Optional comments {} - DOCUMENTATION = [..] - - ANSIBLE_METADATA = { - [..] - } - # Optional comments {} - DOCUMENTATION = [..] - - ANSIBLE_METADATA = {[..]} ; DOCUMENTATION = [..] - - ANSIBLE_METADATA = {}EOF - """ - if next_node_line is None: - # The dict is the last statement in the file - snippet = module_data.splitlines()[start_line:] - next_node_col = 0 - # Include the last line in the file - last_line_offset = 0 - else: - # It's somewhere in the middle so we need to separate it from the rest - snippet = module_data.splitlines()[start_line:next_node_line] - # Do not include the last line because that's where the next node - # starts - last_line_offset = 1 - - if next_node_col == 0: - # This handles all variants where there are only comments and blank - # lines between the dict and the next code node - - # Step backwards through all the lines in the snippet - for line_idx, line in tuple(reversed(tuple(enumerate(snippet))))[last_line_offset:]: - end_col = None - # Step backwards through all the characters in the line - for col_idx, char in reversed(tuple(enumerate(c for c in line))): - if not isinstance(char, bytes): - # Python3 wart. slicing a byte string yields integers - char = bytes((char,)) - if char == b'}' and end_col is None: - # Potentially found the end of the dict - end_col = col_idx - - elif char == b'#' and end_col is not None: - # The previous '}' was part of a comment. Keep trying - end_col = None - - if end_col is not None: - # Found the end! - end_line = start_line + line_idx - break - else: - raise ParseError('Unable to find the end of dictionary') - else: - # Harder cases involving multiple statements on one line - # Good Ansible Module style doesn't do this so we're just going to - # treat this as an error for now: - raise ParseError('Multiple statements per line confuses the module metadata parser.') - - return end_line, end_col - - -def _seek_end_of_string(module_data, start_line, start_col, next_node_line, next_node_col): - """ - This is much trickier than finding the end of a dict. A dict has only one - ending character, "}". Strings have four potential ending characters. We - have to parse the beginning of the string to determine what the ending - character will be. - - Examples: - ANSIBLE_METADATA = '''[..]''' # Optional comment with confusing chars ''' - # Optional comment with confusing chars ''' - DOCUMENTATION = [..] - - ANSIBLE_METADATA = ''' - [..] - ''' - DOCUMENTATIONS = [..] - - ANSIBLE_METADATA = '''[..]''' ; DOCUMENTATION = [..] - - SHORT_NAME = ANSIBLE_METADATA = '''[..]''' ; DOCUMENTATION = [..] - - String marker variants: - * '[..]' - * "[..]" - * '''[..]''' - * \"\"\"[..]\"\"\" - - Each of these come in u, r, and b variants: - * '[..]' - * u'[..]' - * b'[..]' - * r'[..]' - * ur'[..]' - * ru'[..]' - * br'[..]' - * b'[..]' - * rb'[..]' - """ - raise NotImplementedError('Finding end of string not yet implemented') - - -def extract_metadata(module_ast=None, module_data=None, offsets=False): - """Extract the metadata from a module - - :kwarg module_ast: ast representation of the module. At least one of this - or ``module_data`` must be given. If the code calling - :func:`extract_metadata` has already parsed the module_data into an ast, - giving the ast here will save reparsing it. - :kwarg module_data: Byte string containing a module's code. At least one - of this or ``module_ast`` must be given. - :kwarg offsets: If set to True, offests into the source code will be - returned. This requires that ``module_data`` be set. - :returns: a tuple of metadata (a dict), line the metadata starts on, - column the metadata starts on, line the metadata ends on, column the - metadata ends on, and the names the metadata is assigned to. One of - the names the metadata is assigned to will be ANSIBLE_METADATA. If no - metadata is found, the tuple will be (None, -1, -1, -1, -1, None). - If ``offsets`` is False then the tuple will consist of - (metadata, -1, -1, -1, -1, None). - :raises ansible.parsing.metadata.ParseError: if ``module_data`` does not parse - :raises SyntaxError: if ``module_data`` is needed but does not parse correctly - """ - if offsets and module_data is None: - raise TypeError('If offsets is True then module_data must also be given') - - if module_ast is None and module_data is None: - raise TypeError('One of module_ast or module_data must be given') - - metadata = None - start_line = -1 - start_col = -1 - end_line = -1 - end_col = -1 - targets = None - if module_ast is None: - module_ast = ast.parse(module_data) - - for root_idx, child in reversed(list(enumerate(module_ast.body))): - if isinstance(child, ast.Assign): - for target in child.targets: - if isinstance(target, ast.Name) and target.id == 'ANSIBLE_METADATA': - metadata = ast.literal_eval(child.value) - if not offsets: - continue - - try: - # Determine where the next node starts - next_node = module_ast.body[root_idx + 1] - next_lineno = next_node.lineno - next_col_offset = next_node.col_offset - except IndexError: - # Metadata is defined in the last node of the file - next_lineno = None - next_col_offset = None - - if isinstance(child.value, ast.Dict): - # Determine where the current metadata ends - end_line, end_col = _seek_end_of_dict(module_data, - child.lineno - 1, - child.col_offset, - next_lineno, - next_col_offset) - - elif isinstance(child.value, ast.Str): - metadata = yaml.safe_load(child.value.s) - end_line, end_col = _seek_end_of_string(module_data, - child.lineno - 1, - child.col_offset, - next_lineno, - next_col_offset) - elif isinstance(child.value, ast.Bytes): - metadata = yaml.safe_load(to_text(child.value.s, errors='surrogate_or_strict')) - end_line, end_col = _seek_end_of_string(module_data, - child.lineno - 1, - child.col_offset, - next_lineno, - next_col_offset) - else: - raise ParseError('Ansible plugin metadata must be a dict') - - # Do these after the if-else so we don't pollute them in - # case this was a false positive - start_line = child.lineno - 1 - start_col = child.col_offset - targets = [t.id for t in child.targets] - break - - if metadata is not None: - # Once we've found the metadata we're done - break - - return metadata, start_line, start_col, end_line, end_col, targets diff --git a/lib/ansible/parsing/plugin_docs.py b/lib/ansible/parsing/plugin_docs.py index 4f036127e0..468fed1407 100644 --- a/lib/ansible/parsing/plugin_docs.py +++ b/lib/ansible/parsing/plugin_docs.py @@ -5,17 +5,18 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import ast -import yaml from ansible.module_utils._text import to_text -from ansible.parsing.metadata import extract_metadata from ansible.parsing.yaml.loader import AnsibleLoader from ansible.utils.display import Display display = Display() +# NOTE: should move to just reading the variable as we do in plugin_loader since we already load as a 'module' +# which is much faster than ast parsing ourselves. def read_docstring(filename, verbose=True, ignore_errors=True): + """ Search for assignment of the DOCUMENTATION and EXAMPLES variables in the given file. Parse DOCUMENTATION from YAML and return the YAML doc or None together with EXAMPLES, as plain text. @@ -25,7 +26,7 @@ def read_docstring(filename, verbose=True, ignore_errors=True): 'doc': None, 'plainexamples': None, 'returndocs': None, - 'metadata': None, + 'metadata': None, # NOTE: not used anymore, kept for compat 'seealso': None, } @@ -33,6 +34,7 @@ def read_docstring(filename, verbose=True, ignore_errors=True): 'DOCUMENTATION': 'doc', 'EXAMPLES': 'plainexamples', 'RETURN': 'returndocs', + 'ANSIBLE_METADATA': 'metadata', # NOTE: now unused, but kept for backwards compat } try: @@ -54,33 +56,16 @@ def read_docstring(filename, verbose=True, ignore_errors=True): if isinstance(child.value, ast.Dict): data[varkey] = ast.literal_eval(child.value) else: - if theid == 'DOCUMENTATION': - # string should be yaml - data[varkey] = AnsibleLoader(child.value.s, file_name=filename).get_single_data() - else: - # not yaml, should be a simple string + if theid in ['EXAMPLES', 'RETURN']: + # examples 'can' be yaml, return must be, but even if so, we dont want to parse as such here + # as it can create undesired 'objects' that don't display well as docs. data[varkey] = to_text(child.value.s) - display.debug('assigned :%s' % varkey) - - # Metadata is per-file and a dict rather than per-plugin/function and yaml - data['metadata'] = extract_metadata(module_ast=M)[0] - - if data['metadata']: - # remove version - for field in ('version', 'metadata_version'): - if field in data['metadata']: - del data['metadata'][field] - - if 'supported_by' not in data['metadata']: - data['metadata']['supported_by'] = 'community' + else: + # string should be yaml if already not a dict + data[varkey] = AnsibleLoader(child.value.s, file_name=filename).get_single_data() - if 'status' not in data['metadata']: - data['metadata']['status'] = ['preview'] + display.debug('assigned: %s' % varkey) - else: - # Add default metadata - data['metadata'] = {'supported_by': 'community', - 'status': ['preview']} except Exception: if verbose: display.error("unable to parse %s" % filename) diff --git a/lib/ansible/plugins/filter/urlsplit.py b/lib/ansible/plugins/filter/urlsplit.py index 19ad5f26f8..84e460aad1 100644 --- a/lib/ansible/plugins/filter/urlsplit.py +++ b/lib/ansible/plugins/filter/urlsplit.py @@ -6,13 +6,6 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -ANSIBLE_METADATA = { - 'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core' -} - - from ansible.errors import AnsibleFilterError from ansible.module_utils.six.moves.urllib.parse import urlsplit from ansible.utils import helpers diff --git a/lib/ansible/plugins/inventory/toml.py b/lib/ansible/plugins/inventory/toml.py index 31fe95fb56..efbec37216 100644 --- a/lib/ansible/plugins/inventory/toml.py +++ b/lib/ansible/plugins/inventory/toml.py @@ -4,10 +4,6 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'core'} - DOCUMENTATION = ''' inventory: toml version_added: "2.8" |