04e816e13b
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. |
||
---|---|---|
.. | ||
__init__.py | ||
module_args.py | ||
README.rst | ||
schema.py | ||
skip.txt | ||
test_validate_modules_regex.py | ||
utils.py | ||
validate-modules |
validate-modules
Python program to help test or validate Ansible modules.
Originally developed by Matt Martz (@sivel)
Usage
cd /path/to/ansible/source
source hacking/env-setup
test/sanity/validate-modules/validate-modules /path/to/modules
Help
usage: validate-modules [-h] [-w] [--exclude EXCLUDE] [--arg-spec]
[--base-branch BASE_BRANCH] [--format {json,plain}]
[--output OUTPUT]
modules [modules ...]
positional arguments:
modules Path to module or module directory
optional arguments:
-h, --help show this help message and exit
-w, --warnings Show warnings
--exclude EXCLUDE RegEx exclusion pattern
--arg-spec Analyze module argument spec
--base-branch BASE_BRANCH
Used in determining if new options were added
--format {json,plain}
Output format. Default: "plain"
--output OUTPUT Output location, use "-" for stdout. Default "-"
Codes
Errors
code | sample message |
---|---|
1xx | Locations |
101 | Interpreter line is not #!/usr/bin/python |
102 | Interpreter line is not #!powershell |
103 | Did not find a call to main() |
104 | Call to main() not the last line |
105 | GPLv3 license header not found |
106 | Import found before documentation variables. All imports must appear
below
DOCUMENTATION /EXAMPLES /RETURN /ANSIBLE_METADATA |
107 | Imports should be directly below
DOCUMENTATION /EXAMPLES /RETURN /ANSIBLE_METADATA |
2xx | Imports |
201 | Did not find a module_utils import |
203 | requests import found, should use
ansible.module_utils.urls instead |
204 | boto import found, new modules should use
boto3 |
205 | sys.exit() call found. Should be
exit_json /fail_json |
206 | WANT_JSON not found in module |
207 | REPLACER_WINDOWS not found in module |
208 | module_utils imports should import specific components,
not * |
3xx | Documentation |
301 | No DOCUMENTATION provided |
302 | DOCUMENTATION is not valid YAML |
303 | DOCUMENTATION fragment missing |
304 | Unknown DOCUMENTATION error |
305 | Invalid DOCUMENTATION schema |
306 | Module level version_added is not a valid version
number |
307 | Module level version_added is incorrect |
308 | version_added for new option is not a valid version
number |
309 | version_added for new option is incorrect |
310 | No EXAMPLES provided |
311 | EXAMPLES is not valid YAML |
312 | No RETURN documentation provided |
313 | RETURN is not valid YAML |
314 | No ANSIBLE_METADATA provided |
315 | ANSIBLE_METADATA is not valid YAML |
316 | Invalid ANSIBLE_METADATA schema |
317 | option is marked as required but specifies a default. Arguments with a default should not be marked as required |
318 | Module deprecated, but DOCUMENTATION.deprecated is missing |
4xx | Syntax |
401 | Python SyntaxError while parsing module |
402 | Indentation contains tabs |
403 | Type comparison using type() found. Use
isinstance() instead |
5xx | Naming |
501 | Official Ansible modules must have a .py extension for
python modules or a .ps1 for powershell modules |
502 | Ansible module subdirectories must contain an
__init__.py |
503 | Missing python documentation file |
Warnings
code | sample message |
---|---|
1xx | Locations |
107 | Imports should be directly below
DOCUMENTATION /EXAMPLES /RETURN /ANSIBLE_METADATA
for legacy modules |
2xx | Imports |
208 | module_utils imports should import specific components
for legacy module, not * |
291 | Try/Except HAS_ expression missing |
292 | Did not find ansible.module_utils.basic import |
3xx | Documentation |
312 | No RETURN documentation provided for legacy module |
391 | Unknown pre-existing DOCUMENTATION error |
392 | Pre-existing DOCUMENTATION fragment missing |