summaryrefslogtreecommitdiff
path: root/lib/ansible
diff options
context:
space:
mode:
authorBrian Coca <bcoca@users.noreply.github.com>2020-06-04 21:01:46 -0400
committerGitHub <noreply@github.com>2020-06-04 21:01:46 -0400
commit062e780a68f9acd2ee6f824f252458b8a0351f24 (patch)
treed30bdf5dc0586214c2078a43c7f7e1a77b672cfc /lib/ansible
parentf5718a354c15acd3a47424318de87b0aeeda1d53 (diff)
downloadansible-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')
-rw-r--r--lib/ansible/cli/doc.py194
-rw-r--r--lib/ansible/galaxy/data/network/library/example_command.py.j25
-rw-r--r--lib/ansible/galaxy/data/network/library/example_config.py.j25
-rw-r--r--lib/ansible/galaxy/data/network/library/example_facts.py.j25
-rw-r--r--lib/ansible/modules/add_host.py3
-rw-r--r--lib/ansible/modules/apt.py3
-rw-r--r--lib/ansible/modules/apt_key.py3
-rw-r--r--lib/ansible/modules/apt_repository.py3
-rw-r--r--lib/ansible/modules/assemble.py3
-rw-r--r--lib/ansible/modules/assert.py3
-rw-r--r--lib/ansible/modules/async_status.py3
-rw-r--r--lib/ansible/modules/blockinfile.py3
-rw-r--r--lib/ansible/modules/command.py4
-rw-r--r--lib/ansible/modules/copy.py3
-rw-r--r--lib/ansible/modules/cron.py3
-rw-r--r--lib/ansible/modules/debconf.py3
-rw-r--r--lib/ansible/modules/debug.py3
-rw-r--r--lib/ansible/modules/dnf.py5
-rw-r--r--lib/ansible/modules/dpkg_selections.py5
-rw-r--r--lib/ansible/modules/expect.py5
-rw-r--r--lib/ansible/modules/fail.py3
-rw-r--r--lib/ansible/modules/fetch.py3
-rw-r--r--lib/ansible/modules/file.py3
-rw-r--r--lib/ansible/modules/find.py3
-rw-r--r--lib/ansible/modules/gather_facts.py5
-rw-r--r--lib/ansible/modules/get_url.py3
-rw-r--r--lib/ansible/modules/getent.py3
-rw-r--r--lib/ansible/modules/git.py5
-rw-r--r--lib/ansible/modules/group.py3
-rw-r--r--lib/ansible/modules/group_by.py3
-rw-r--r--lib/ansible/modules/hostname.py3
-rw-r--r--lib/ansible/modules/import_playbook.py5
-rw-r--r--lib/ansible/modules/import_role.py5
-rw-r--r--lib/ansible/modules/import_tasks.py5
-rw-r--r--lib/ansible/modules/include.py5
-rw-r--r--lib/ansible/modules/include_role.py5
-rw-r--r--lib/ansible/modules/include_tasks.py5
-rw-r--r--lib/ansible/modules/include_vars.py5
-rw-r--r--lib/ansible/modules/iptables.py3
-rw-r--r--lib/ansible/modules/known_hosts.py5
-rw-r--r--lib/ansible/modules/lineinfile.py4
-rw-r--r--lib/ansible/modules/meta.py3
-rw-r--r--lib/ansible/modules/package.py5
-rw-r--r--lib/ansible/modules/package_facts.py3
-rw-r--r--lib/ansible/modules/pause.py5
-rw-r--r--lib/ansible/modules/ping.py4
-rw-r--r--lib/ansible/modules/pip.py3
-rw-r--r--lib/ansible/modules/raw.py5
-rw-r--r--lib/ansible/modules/reboot.py3
-rw-r--r--lib/ansible/modules/replace.py4
-rw-r--r--lib/ansible/modules/rpm_key.py3
-rw-r--r--lib/ansible/modules/script.py3
-rw-r--r--lib/ansible/modules/service.py3
-rw-r--r--lib/ansible/modules/service_facts.py4
-rw-r--r--lib/ansible/modules/set_fact.py3
-rw-r--r--lib/ansible/modules/set_stats.py3
-rw-r--r--lib/ansible/modules/setup.py5
-rw-r--r--lib/ansible/modules/shell.py5
-rw-r--r--lib/ansible/modules/slurp.py4
-rw-r--r--lib/ansible/modules/stat.py3
-rw-r--r--lib/ansible/modules/subversion.py3
-rw-r--r--lib/ansible/modules/systemd.py3
-rw-r--r--lib/ansible/modules/sysvinit.py5
-rw-r--r--lib/ansible/modules/tempfile.py3
-rw-r--r--lib/ansible/modules/template.py3
-rw-r--r--lib/ansible/modules/unarchive.py3
-rw-r--r--lib/ansible/modules/uri.py4
-rw-r--r--lib/ansible/modules/user.py3
-rw-r--r--lib/ansible/modules/wait_for.py3
-rw-r--r--lib/ansible/modules/wait_for_connection.py3
-rw-r--r--lib/ansible/modules/yum.py3
-rw-r--r--lib/ansible/modules/yum_repository.py6
-rw-r--r--lib/ansible/parsing/metadata.py245
-rw-r--r--lib/ansible/parsing/plugin_docs.py39
-rw-r--r--lib/ansible/plugins/filter/urlsplit.py7
-rw-r--r--lib/ansible/plugins/inventory/toml.py4
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"