ansible/test/sanity/validate-modules
Matt Martz b143fdea54 DOC options must be a dict when used with extends_documentation_fragment (#21745)
* Fix string formatting
* Provide better tracebacks
* When options is None and extends_documentation_fragment is in use, add an error that options must be a dict
* If options was specified and not a dict, then error
2017-02-21 17:42:39 -08:00
..
__init__.py
module_args.py validate-modules --arg-spec (#21331) 2017-02-15 08:09:08 +00:00
README.rst Validate modules json output (#21680) 2017-02-20 13:28:23 -08:00
schema.py Update validate-modules (#20932) 2017-02-02 11:45:22 -08:00
skip.txt
test_validate_modules_regex.py Update validate-modules (#20932) 2017-02-02 11:45:22 -08:00
utils.py Validate EXAMPLES as YAML 2017-02-15 13:01:43 -08:00
validate-modules DOC options must be a dict when used with extends_documentation_fragment (#21745) 2017-02-21 17:42:39 -08:00

validate-modules
================

Python program to help test or validate Ansible modules.

Originally developed by Matt Martz (@sivel)

Usage
~~~~~

.. code:: shell

    cd /path/to/ansible/source
    source hacking/env-setup
    test/sanity/validate-modules/validate-modules /path/to/modules

Help
~~~~

.. code:: shell

    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``  |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
| **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                                                                                                   |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
| **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                            |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
| **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                                                                                                                             |
+=========+============================================================================================================================================+
| **2xx** | **Imports**                                                                                                                                |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
| 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                                                                                            |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+