mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-07 13:52:54 +00:00
Stricter module documentation validation (#22353)
Raise the bar for module `DOCUMENTAION` This validator update was used to find the issues in https://github.com/ansible/ansible/pull/22297/files **Validation** * Updated Validation and docs to enforce more (items fixed in https://github.com/ansible/ansible/pull/22297/files) * Use `suboptions` to document complex options * Validate module name * Validate deprecated modules have correct ANSIBLE_METADATA **Module Documentation Generation** * Document `suboptions:` Example https://gist.github.com/gundalow/4bdc3669d696268328ccc18528cc6718 * Tidy up HTML generation (valid HTML, no empty lists, etc) **Documentation** * Clarify the steps for deprecating a module * Use correct RST headings * Document `suboptions:` (options) * Document `contains:` (returns) **Details** The aim is to get this (and corresponding module updates) complete by the time `devel` becomes `2.4`, as this allows us to raise the bar for new modules Example `suboptions` https://gist.github.com/gundalow/4bdc3669d696268328ccc18528cc6718 The aim is to get this PR integrated into `devel` *before* we branch `stable-2.3`, this will allows us to: * Raise the bar for new modules in 2.4 * Ensure the generated module documentation for 2.3 and higher is improved, important as we will be doing versioned docs moving forward.
This commit is contained in:
@@ -609,16 +609,6 @@ class ModuleValidator(Validator):
|
||||
error.data = doc
|
||||
errors.extend(e.errors)
|
||||
|
||||
options = doc.get('options', {})
|
||||
for key, option in (options or {}).items():
|
||||
try:
|
||||
option_schema(option)
|
||||
except Exception as e:
|
||||
for error in e.errors:
|
||||
error.path[:0] = ['options', key]
|
||||
error.data = option
|
||||
errors.extend(e.errors)
|
||||
|
||||
for error in errors:
|
||||
path = [str(p) for p in error.path]
|
||||
|
||||
@@ -668,14 +658,16 @@ class ModuleValidator(Validator):
|
||||
'with DOCUMENTATION.extends_documentation_fragment')
|
||||
))
|
||||
|
||||
deprecated = False
|
||||
if self.object_name.startswith('_') and not os.path.islink(self.object_path):
|
||||
deprecated = True
|
||||
if 'deprecated' not in doc or not doc.get('deprecated'):
|
||||
self.errors.append((
|
||||
318,
|
||||
'Module deprecated, but DOCUMENTATION.deprecated is missing'
|
||||
))
|
||||
|
||||
self._validate_docs_schema(doc, doc_schema, 'DOCUMENTATION', 305)
|
||||
self._validate_docs_schema(doc, doc_schema(self.object_name.split('.')[0]), 'DOCUMENTATION', 305)
|
||||
self._check_version_added(doc)
|
||||
self._check_for_new_args(doc)
|
||||
|
||||
@@ -718,7 +710,7 @@ class ModuleValidator(Validator):
|
||||
self.traces.extend(traces)
|
||||
|
||||
if metadata:
|
||||
self._validate_docs_schema(metadata, metadata_schema,
|
||||
self._validate_docs_schema(metadata, metadata_schema(deprecated),
|
||||
'ANSIBLE_METADATA', 316)
|
||||
|
||||
return doc_info
|
||||
|
||||
Reference in New Issue
Block a user