From 3e9943bc5e7a9cd393757aa8100d7fed80bd316e Mon Sep 17 00:00:00 2001 From: Amin Vakil Date: Tue, 22 Sep 2020 23:37:29 +0330 Subject: [PATCH] Reduce ignored module sanity tests (#70319) * Reorder test/sanity/ignore.txt to better see changes * Remove extra empty line causing pass fail * Apply suggestions made by Akasurde * Minor fix in package_facts and remove two unnecessary ignores * Fix subversion based on a suggestion made by felixfontein * Apply suggestions made by felixfontein and Andersson007 * Fix subversion.py as suggested by felixfontein * Minor reformatting in yum_repository description * Reformat changelog * Add key to apt_key, add deprecated changelog * Add PR url to changelog * Ignore paramater-type-not-in-doc in favour of adding key back to apt_key * Fix apt_key * Remove undocumented-paramater from apt_key ignore * Ignore doc-choices-do-not-match-spec in package_facts * Fix package_facts * Fix filter option in setup module --- ...319-reduce-ignored-module-sanity-tests.yml | 4 ++ lib/ansible/module_utils/yumdnf.py | 10 ++-- lib/ansible/modules/apt.py | 13 ++++- lib/ansible/modules/apt_key.py | 9 ++- lib/ansible/modules/apt_repository.py | 10 +++- lib/ansible/modules/command.py | 4 +- lib/ansible/modules/dnf.py | 16 ++++++ lib/ansible/modules/dpkg_selections.py | 6 +- lib/ansible/modules/expect.py | 1 + lib/ansible/modules/get_url.py | 1 + lib/ansible/modules/getent.py | 4 ++ lib/ansible/modules/git.py | 15 ++++- lib/ansible/modules/hostname.py | 2 + lib/ansible/modules/iptables.py | 12 ++-- lib/ansible/modules/known_hosts.py | 2 +- lib/ansible/modules/package_facts.py | 4 +- lib/ansible/modules/pip.py | 1 + lib/ansible/modules/rpm_key.py | 2 + lib/ansible/modules/setup.py | 6 +- lib/ansible/modules/subversion.py | 10 +++- lib/ansible/modules/systemd.py | 3 + lib/ansible/modules/sysvinit.py | 9 ++- lib/ansible/modules/unarchive.py | 6 +- lib/ansible/modules/uri.py | 4 +- lib/ansible/modules/user.py | 3 +- lib/ansible/modules/wait_for.py | 6 +- lib/ansible/modules/yum.py | 18 ++++++ lib/ansible/modules/yum_repository.py | 55 ++++++++++++++++--- test/sanity/ignore.txt | 39 ------------- 29 files changed, 199 insertions(+), 76 deletions(-) create mode 100644 changelogs/fragments/70319-reduce-ignored-module-sanity-tests.yml diff --git a/changelogs/fragments/70319-reduce-ignored-module-sanity-tests.yml b/changelogs/fragments/70319-reduce-ignored-module-sanity-tests.yml new file mode 100644 index 00000000000..dde323e5cf9 --- /dev/null +++ b/changelogs/fragments/70319-reduce-ignored-module-sanity-tests.yml @@ -0,0 +1,4 @@ +bugfixes: + - apt_repository - fixes ``mode`` doc to remove ineffective default (https://github.com/ansible/ansible/pull/70319). +deprecated_features: + - apt_key - the paramater ``key`` does not have any effect, has been deprecated and will be removed in ansible-base version 2.14 (https://github.com/ansible/ansible/pull/70319). diff --git a/lib/ansible/module_utils/yumdnf.py b/lib/ansible/module_utils/yumdnf.py index 0d715bfca0d..6407670980f 100644 --- a/lib/ansible/module_utils/yumdnf.py +++ b/lib/ansible/module_utils/yumdnf.py @@ -29,13 +29,13 @@ yumdnf_argument_spec = dict( conf_file=dict(type='str'), disable_excludes=dict(type='str', default=None), disable_gpg_check=dict(type='bool', default=False), - disable_plugin=dict(type='list', default=[]), - disablerepo=dict(type='list', default=[]), + disable_plugin=dict(type='list', elements='str', default=[]), + disablerepo=dict(type='list', elements='str', default=[]), download_only=dict(type='bool', default=False), download_dir=dict(type='str', default=None), - enable_plugin=dict(type='list', default=[]), - enablerepo=dict(type='list', default=[]), - exclude=dict(type='list', default=[]), + enable_plugin=dict(type='list', elements='str', default=[]), + enablerepo=dict(type='list', elements='str', default=[]), + exclude=dict(type='list', elements='str', default=[]), installroot=dict(type='str', default="/"), install_repoquery=dict(type='bool', default=True), install_weak_deps=dict(type='bool', default=True), diff --git a/lib/ansible/modules/apt.py b/lib/ansible/modules/apt.py index 5eb63a57a85..fb5e3d45d64 100644 --- a/lib/ansible/modules/apt.py +++ b/lib/ansible/modules/apt.py @@ -30,11 +30,13 @@ options: description: - Indicates the desired package state. C(latest) ensures that the latest version is installed. C(build-dep) ensures the package build dependencies are installed. C(fixed) attempt to correct a system with broken dependencies in place. + type: str default: present choices: [ absent, build-dep, latest, present, fixed ] update_cache: description: - Run the equivalent of C(apt-get update) before the operation. Can be run as part of the package installation or as a separate step. + aliases: [ update-cache ] type: bool default: 'no' update_cache_retries: @@ -53,6 +55,7 @@ options: description: - Update the apt cache if its older than the I(cache_valid_time). This option is set in seconds. - As of Ansible 2.4, if explicitly set, this sets I(update_cache=yes). + type: int default: 0 purge: description: @@ -62,11 +65,13 @@ options: default_release: description: - Corresponds to the C(-t) option for I(apt) and sets pin priorities + aliases: [ default-release ] + type: str install_recommends: description: - Corresponds to the C(--no-install-recommends) option for I(apt). C(yes) installs recommended packages. C(no) does not install recommended packages. By default, Ansible will use the same defaults as the operating system. Suggested packages are never installed. - aliases: ['install-recommends'] + aliases: [ install-recommends ] type: bool force: description: @@ -82,6 +87,7 @@ options: description: - Ignore if packages cannot be authenticated. This is useful for bootstrapping environments that manage their own apt-key setup. - 'C(allow_unauthenticated) is only supported with state: I(install)/I(present)' + aliases: [ allow-unauthenticated ] type: bool default: 'no' version_added: "2.1" @@ -95,16 +101,19 @@ options: version_added: "1.1" choices: [ dist, full, 'no', safe, 'yes' ] default: 'no' + type: str dpkg_options: description: - Add dpkg options to apt command. Defaults to '-o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold"' - Options should be supplied as comma separated list default: force-confdef,force-confold + type: str deb: description: - Path to a .deb package on the remote machine. - If :// in the path, ansible will attempt to download deb before installing. (Version added 2.1) - Requires the C(xz-utils) package to extract the control file of the deb package to install. + type: path required: false version_added: "1.6" autoremove: @@ -1050,7 +1059,7 @@ def main(): default_release=dict(type='str', aliases=['default-release']), install_recommends=dict(type='bool', aliases=['install-recommends']), force=dict(type='bool', default=False), - upgrade=dict(type='str', choices=['dist', 'full', 'no', 'safe', 'yes']), + upgrade=dict(type='str', choices=['dist', 'full', 'no', 'safe', 'yes'], default='no'), dpkg_options=dict(type='str', default=DPKG_OPTIONS), autoremove=dict(type='bool', default=False), autoclean=dict(type='bool', default=False), diff --git a/lib/ansible/modules/apt_key.py b/lib/ansible/modules/apt_key.py index 40341a5c8bf..bf17c8b46b2 100644 --- a/lib/ansible/modules/apt_key.py +++ b/lib/ansible/modules/apt_key.py @@ -35,26 +35,33 @@ options: - Including this allows check mode to correctly report the changed state. - If specifying a subkey's id be aware that apt-key does not understand how to remove keys via a subkey id. Specify the primary key's id instead. - This parameter is required when C(state) is set to C(absent). + type: str data: description: - The keyfile contents to add to the keyring. + type: str file: description: - The path to a keyfile on the remote server to add to the keyring. + type: path keyring: description: - The full path to specific keyring file in /etc/apt/trusted.gpg.d/ + type: path version_added: "1.3" url: description: - The URL to retrieve key from. + type: str keyserver: description: - The keyserver to retrieve key from. + type: str version_added: "1.6" state: description: - Ensures that the key is present (added) or absent (revoked). + type: str choices: [ absent, present ] default: present validate_certs: @@ -267,7 +274,7 @@ def main(): url=dict(type='str'), data=dict(type='str'), file=dict(type='path'), - key=dict(type='str'), + key=dict(type='str', removed_in_version='2.14', removed_from_collection='ansible.builtin'), keyring=dict(type='path'), validate_certs=dict(type='bool', default=True), keyserver=dict(type='str'), diff --git a/lib/ansible/modules/apt_repository.py b/lib/ansible/modules/apt_repository.py index 06755d4db0c..7b82f1854a2 100644 --- a/lib/ansible/modules/apt_repository.py +++ b/lib/ansible/modules/apt_repository.py @@ -24,22 +24,26 @@ options: repo: description: - A source string for the repository. + type: str required: true state: description: - A source string state. + type: str choices: [ absent, present ] default: "present" mode: description: - - The octal mode for newly created files in sources.list.d - default: '0644' + - The octal mode for newly created files in sources.list.d. + - Default is what system uses (probably 0644). + type: raw version_added: "1.6" update_cache: description: - Run the equivalent of C(apt-get update) when a change occurs. Cache updates are run after making changes. type: bool default: "yes" + aliases: [ update-cache ] update_cache_retries: description: - Amount of retries if the cache update fails. Also see I(update_cache_retry_max_delay). @@ -64,11 +68,13 @@ options: - Sets the name of the source list file in sources.list.d. Defaults to a file name based on the repository source url. The .list extension will be automatically added. + type: str version_added: '2.1' codename: description: - Override the distribution codename to use for PPA repositories. Should usually only be set when working with a PPA on a non-Ubuntu target (e.g. Debian or Mint) + type: str version_added: '2.3' author: - Alexander Saltanov (@sashka) diff --git a/lib/ansible/modules/command.py b/lib/ansible/modules/command.py index 70d6df558e7..f873cf35149 100644 --- a/lib/ansible/modules/command.py +++ b/lib/ansible/modules/command.py @@ -37,6 +37,7 @@ options: - The command to run. argv: type: list + elements: str description: - Passes the command as a list rather than a string. - Use C(argv) to avoid quoting values that would otherwise be interpreted incorrectly (for example "user name"). @@ -67,6 +68,7 @@ options: stdin: description: - Set the stdin of the command directly to the specified value. + type: str version_added: "2.4" stdin_add_newline: type: bool @@ -255,7 +257,7 @@ def main(): argument_spec=dict( _raw_params=dict(), _uses_shell=dict(type='bool', default=False), - argv=dict(type='list'), + argv=dict(type='list', elements='str'), chdir=dict(type='path'), executable=dict(), creates=dict(type='path'), diff --git a/lib/ansible/modules/dnf.py b/lib/ansible/modules/dnf.py index 3b97ab9675b..48a6a7e67ec 100644 --- a/lib/ansible/modules/dnf.py +++ b/lib/ansible/modules/dnf.py @@ -34,6 +34,7 @@ options: list: description: - Various (non-idempotent) commands for usage with C(/usr/bin/ansible) and I(not) playbooks. See examples. + type: str state: description: @@ -41,22 +42,28 @@ options: - Default is C(None), however in effect the default action is C(present) unless the C(autoremove) option is enabled for this module, then C(absent) is inferred. choices: ['absent', 'present', 'installed', 'removed', 'latest'] + type: str enablerepo: description: - I(Repoid) of repositories to enable for the install/update operation. These repos will not persist beyond the transaction. When specifying multiple repos, separate them with a ",". + type: list + elements: str disablerepo: description: - I(Repoid) of repositories to disable for the install/update operation. These repos will not persist beyond the transaction. When specifying multiple repos, separate them with a ",". + type: list + elements: str conf_file: description: - The remote dnf configuration file to use for the transaction. + type: str disable_gpg_check: description: @@ -73,12 +80,14 @@ options: will be installed. version_added: "2.3" default: "/" + type: str releasever: description: - Specifies an alternative release from which all packages will be installed. version_added: "2.6" + type: str autoremove: description: @@ -93,6 +102,8 @@ options: - Package name(s) to exclude when state=present, or latest. This can be a list or a comma separated string. version_added: "2.7" + type: list + elements: str skip_broken: description: - Skip packages with broken dependencies(devsolve) and are causing problems. @@ -131,11 +142,15 @@ options: - I(Plugin) name to enable for the install/update operation. The enabled plugin will not persist beyond the transaction. version_added: "2.7" + type: list + elements: str disable_plugin: description: - I(Plugin) name to disable for the install/update operation. The disabled plugins will not persist beyond the transaction. version_added: "2.7" + type: list + elements: str disable_excludes: description: - Disable the excludes defined in DNF config files. @@ -143,6 +158,7 @@ options: - If set to C(main), disable excludes defined in [main] in dnf.conf. - If set to C(repoid), disable excludes defined for given repo id. version_added: "2.7" + type: str validate_certs: description: - This only applies if using a https url as the source of the rpm. e.g. for localinstall. If set to C(no), the SSL certificates will not be validated. diff --git a/lib/ansible/modules/dpkg_selections.py b/lib/ansible/modules/dpkg_selections.py index 9043786ecee..a51b9e580d8 100644 --- a/lib/ansible/modules/dpkg_selections.py +++ b/lib/ansible/modules/dpkg_selections.py @@ -20,13 +20,15 @@ author: options: name: description: - - Name of the package + - Name of the package. required: true + type: str selection: description: - The selection state to set the package to. choices: [ 'install', 'hold', 'deinstall', 'purge' ] required: true + type: str notes: - This module won't cause any packages to be installed/removed/purged, use the C(apt) module for that. ''' @@ -44,7 +46,7 @@ def main(): module = AnsibleModule( argument_spec=dict( name=dict(required=True), - selection=dict(choices=['install', 'hold', 'deinstall', 'purge']) + selection=dict(choices=['install', 'hold', 'deinstall', 'purge'], required=True) ), supports_check_mode=True, ) diff --git a/lib/ansible/modules/expect.py b/lib/ansible/modules/expect.py index 0f2621566f2..37bc7651375 100644 --- a/lib/ansible/modules/expect.py +++ b/lib/ansible/modules/expect.py @@ -23,6 +23,7 @@ options: description: - The command module takes command to run. required: true + type: str creates: type: path description: diff --git a/lib/ansible/modules/get_url.py b/lib/ansible/modules/get_url.py index 00a2aa1c7f9..009070f689f 100644 --- a/lib/ansible/modules/get_url.py +++ b/lib/ansible/modules/get_url.py @@ -78,6 +78,7 @@ options: This option is deprecated and will be removed in version 2.14. Use option C(checksum) instead. default: '' + type: str version_added: "1.3" checksum: description: diff --git a/lib/ansible/modules/getent.py b/lib/ansible/modules/getent.py index 1997aa0d70e..4eb471a2634 100644 --- a/lib/ansible/modules/getent.py +++ b/lib/ansible/modules/getent.py @@ -21,20 +21,24 @@ options: description: - The name of a getent database supported by the target system (passwd, group, hosts, etc). + type: str required: True key: description: - Key from which to return values from the specified database, otherwise the full contents are returned. + type: str default: '' service: description: - Override all databases with the specified service - The underlying system must support the service flag which is not always available. + type: str version_added: "2.9" split: description: - "Character used to split the database values into lists/arrays such as ':' or '\t', otherwise it will try to pick one depending on the database." + type: str fail_key: description: - If a supplied key is missing this will make the task fail if C(yes). diff --git a/lib/ansible/modules/git.py b/lib/ansible/modules/git.py index 4734a958a7d..737f442164c 100644 --- a/lib/ansible/modules/git.py +++ b/lib/ansible/modules/git.py @@ -22,12 +22,14 @@ options: repo: description: - git, SSH, or HTTP(S) protocol address of the git repository. + type: str required: true aliases: [ name ] dest: description: - The path of where the repository should be checked out. This parameter is required, unless C(clone) is set to C(no). + type: path required: true version: description: @@ -35,6 +37,7 @@ options: the literal string C(HEAD), a branch name, a tag name. It can also be a I(SHA-1) hash, in which case C(refspec) needs to be specified if the given revision is not already available. + type: str default: "HEAD" accept_hostkey: description: @@ -50,10 +53,12 @@ options: An example value could be "-o StrictHostKeyChecking=no" (although this particular option is better set via C(accept_hostkey)). + type: str version_added: "1.5" key_file: description: - Specify an optional private key file path, on the target host, to use for the checkout. + type: path version_added: "1.5" reference: description: @@ -62,6 +67,7 @@ options: remote: description: - Name of the remote. + type: str default: "origin" refspec: description: @@ -71,6 +77,7 @@ options: the I(SHA-1). Uses the same syntax as the C(git fetch) command. An example value could be "refs/meta/config". + type: str version_added: "1.9" force: description: @@ -86,6 +93,7 @@ options: - Create a shallow clone with a history truncated to the specified number or revisions. The minimum possible value is C(1), otherwise ignored. Needs I(git>=1.9.1) to work correctly. + type: int version_added: "1.2" clone: description: @@ -105,6 +113,7 @@ options: description: - Path to git executable to use. If not supplied, the normal mechanism for resolving binary paths will be used. + type: path version_added: "1.4" bare: description: @@ -117,6 +126,7 @@ options: description: - The umask to set before doing any checkouts, or any other repository maintenance. + type: raw version_added: "2.2" recursive: @@ -163,6 +173,7 @@ options: Allowed archive formats ["zip", "tar.gz", "tar", "tgz"] - This will clone and perform git archive from local directory as not all git servers support git archive. + type: path version_added: "2.4" archive_prefix: @@ -175,6 +186,7 @@ options: description: - The path to place the cloned repository. If specified, Git repository can be separated from working tree. + type: path version_added: "2.7" gpg_whitelist: @@ -184,6 +196,7 @@ options: - Only used when I(verify_commit=yes). - Use of this feature requires Git 2.6+ due to its reliance on git's C(--raw) flag to C(verify-commit) and C(verify-tag). type: list + elements: str default: [] version_added: "2.9" @@ -1081,7 +1094,7 @@ def main(): clone=dict(default='yes', type='bool'), update=dict(default='yes', type='bool'), verify_commit=dict(default='no', type='bool'), - gpg_whitelist=dict(default=[], type='list'), + gpg_whitelist=dict(default=[], type='list', elements='str'), accept_hostkey=dict(default='no', type='bool'), key_file=dict(default=None, type='path', required=False), ssh_opts=dict(default=None, required=False), diff --git a/lib/ansible/modules/hostname.py b/lib/ansible/modules/hostname.py index af6fe23d581..7df647a4e5f 100644 --- a/lib/ansible/modules/hostname.py +++ b/lib/ansible/modules/hostname.py @@ -25,12 +25,14 @@ options: name: description: - Name of the host + type: str required: true use: description: - Which strategy to use to update the hostname. - If not set we try to autodetect, but this can be problematic, particularly with containers as they can present misleading information. choices: ['generic', 'debian', 'sles', 'redhat', 'alpine', 'systemd', 'openrc', 'openbsd', 'solaris', 'freebsd'] + type: str version_added: '2.9' ''' diff --git a/lib/ansible/modules/iptables.py b/lib/ansible/modules/iptables.py index 01741c88fbd..f0b60ed9584 100644 --- a/lib/ansible/modules/iptables.py +++ b/lib/ansible/modules/iptables.py @@ -118,10 +118,12 @@ options: description: - List of flags you want to examine. type: list + elements: str flags_set: description: - Flags to be set. type: list + elements: str match: description: - Specifies a match to use, that is, an extension module that tests for @@ -130,6 +132,7 @@ options: - Matches are evaluated first to last if specified as an array and work in short-circuit fashion, i.e. if one extension yields false, evaluation will stop. type: list + elements: str default: [] jump: description: @@ -268,6 +271,7 @@ options: - C(ctstate) is a list of the connection states to match in the conntrack module. - Possible states are C(INVALID), C(NEW), C(ESTABLISHED), C(RELATED), C(UNTRACKED), C(SNAT), C(DNAT) type: list + elements: str default: [] src_range: description: @@ -667,11 +671,11 @@ def main(): to_source=dict(type='str'), destination=dict(type='str'), to_destination=dict(type='str'), - match=dict(type='list', default=[]), + match=dict(type='list', elements='str', default=[]), tcp_flags=dict(type='dict', options=dict( - flags=dict(type='list'), - flags_set=dict(type='list')) + flags=dict(type='list', elements='str'), + flags_set=dict(type='list', elements='str')) ), jump=dict(type='str'), gateway=dict(type='str'), @@ -693,7 +697,7 @@ def main(): set_dscp_mark=dict(type='str'), set_dscp_mark_class=dict(type='str'), comment=dict(type='str'), - ctstate=dict(type='list', default=[]), + ctstate=dict(type='list', elements='str', default=[]), src_range=dict(type='str'), dst_range=dict(type='str'), limit=dict(type='str'), diff --git a/lib/ansible/modules/known_hosts.py b/lib/ansible/modules/known_hosts.py index 221e24cc1b4..aac1e0036da 100644 --- a/lib/ansible/modules/known_hosts.py +++ b/lib/ansible/modules/known_hosts.py @@ -24,8 +24,8 @@ options: - The host to add or remove (must match a host specified in key). It will be converted to lowercase so that ssh-keygen can find it. - Must match with or present in key attribute. - For custom SSH port, C(name) needs to specify port as well. See example section. - required: true type: str + required: true key: description: - The SSH public host key, as a string. diff --git a/lib/ansible/modules/package_facts.py b/lib/ansible/modules/package_facts.py index 16c6afa5d59..e3c300933ff 100644 --- a/lib/ansible/modules/package_facts.py +++ b/lib/ansible/modules/package_facts.py @@ -24,6 +24,7 @@ options: choices: ['auto', 'rpm', 'apt', 'portage', 'pkg', 'pacman', 'apk'] required: False type: list + elements: str strategy: description: - This option controls how the module queries the package managers on the system. @@ -31,6 +32,7 @@ options: C(all) will return information for all supported and available package managers on the system. choices: ['first', 'all'] default: 'first' + type: str version_added: "2.8" version_added: "2.5" requirements: @@ -408,7 +410,7 @@ def main(): # start work global module - module = AnsibleModule(argument_spec=dict(manager={'type': 'list', 'default': ['auto']}, + module = AnsibleModule(argument_spec=dict(manager={'type': 'list', 'elements': 'str', 'default': ['auto']}, strategy={'choices': ['first', 'all'], 'default': 'first'}), supports_check_mode=True) packages = {} diff --git a/lib/ansible/modules/pip.py b/lib/ansible/modules/pip.py index 97ae7d901ff..420e3a18fc7 100644 --- a/lib/ansible/modules/pip.py +++ b/lib/ansible/modules/pip.py @@ -22,6 +22,7 @@ options: - The name of a Python library to install or the url(bzr+,hg+,git+,svn+) of the remote package. - This can be a list (since 2.2) and contain version specifiers (since 2.7). type: list + elements: str version: description: - The version number to install of the Python library specified in the I(name) parameter. diff --git a/lib/ansible/modules/rpm_key.py b/lib/ansible/modules/rpm_key.py index 350cf4e3d17..c5016dd7eaa 100644 --- a/lib/ansible/modules/rpm_key.py +++ b/lib/ansible/modules/rpm_key.py @@ -24,10 +24,12 @@ options: description: - Key that will be modified. Can be a url, a file on the managed node, or a keyid if the key already exists in the database. + type: str required: true state: description: - If the key will be imported or removed from the rpm db. + type: str default: present choices: [ absent, present ] validate_certs: diff --git a/lib/ansible/modules/setup.py b/lib/ansible/modules/setup.py index 5ee9b853706..52dc977f8df 100644 --- a/lib/ansible/modules/setup.py +++ b/lib/ansible/modules/setup.py @@ -28,12 +28,15 @@ options: use C(!all,!min), and specify the particular fact subsets. Use the filter parameter if you do not want to display some collected facts." + type: list + elements: str required: false default: "all" gather_timeout: version_added: "2.2" description: - Set the default timeout in seconds for individual fact gathering. + type: int required: false default: 10 filter: @@ -64,6 +67,7 @@ options: exists on the target host. Files in this path MUST be PowerShell scripts C(.ps1) which outputs an object. This object will be formatted by Ansible as json so the script should be outputting a raw hashtable, array, or other primitive object. + type: path required: false default: /etc/ansible/facts.d description: @@ -152,7 +156,7 @@ from ansible.module_utils.facts import default_collectors def main(): module = AnsibleModule( argument_spec=dict( - gather_subset=dict(default=["all"], required=False, type='list'), + gather_subset=dict(default=["all"], required=False, type='list', elements='str'), gather_timeout=dict(default=10, required=False, type='int'), filter=dict(default=[], required=False, type='list', elements='str'), fact_path=dict(default='/etc/ansible/facts.d', required=False, type='path'), diff --git a/lib/ansible/modules/subversion.py b/lib/ansible/modules/subversion.py index 34218705bd1..57d2c0b7b38 100644 --- a/lib/ansible/modules/subversion.py +++ b/lib/ansible/modules/subversion.py @@ -24,17 +24,20 @@ options: repo: description: - The subversion URL to the repository. + type: str required: true aliases: [ name, repository ] dest: description: - Absolute path where the repository should be deployed. - required: true + - The destination directory must be specified unless I(checkout=no), I(update=no), and I(export=no). + type: path revision: description: - Specific revision to checkout. + type: str default: HEAD - aliases: [ version ] + aliases: [ rev, version ] force: description: - If C(yes), modified files will be discarded. If C(no), module will fail if it encounters modified files. @@ -51,15 +54,18 @@ options: username: description: - C(--username) parameter passed to svn. + type: str password: description: - C(--password) parameter passed to svn when svn is less than version 1.10.0. This is not secure and the password will be leaked to argv. - C(--password-from-stdin) parameter when svn is greater or equal to version 1.10.0. + type: str executable: description: - Path to svn executable to use. If not supplied, the normal mechanism for resolving binary paths will be used. + type: path version_added: "1.4" checkout: description: diff --git a/lib/ansible/modules/systemd.py b/lib/ansible/modules/systemd.py index b59dc0262a1..921b64477d1 100644 --- a/lib/ansible/modules/systemd.py +++ b/lib/ansible/modules/systemd.py @@ -21,11 +21,13 @@ options: description: - Name of the service. This parameter takes the name of exactly one service to work with. - When using in a chroot environment you always need to specify the full name i.e. (crond.service). + type: str aliases: [ service, unit ] state: description: - C(started)/C(stopped) are idempotent actions that will not run commands unless necessary. C(restarted) will always bounce the service. C(reloaded) will always reload. + type: str choices: [ reloaded, restarted, started, stopped ] enabled: description: @@ -61,6 +63,7 @@ options: - "For systemd to work with 'user', the executing user must have its own instance of dbus started (systemd requirement). The user dbus process is normally started during normal login, but not during the run of Ansible tasks. Otherwise you will probably get a 'Failed to connect to bus: no such file or directory' error." + type: str choices: [ system, user, global ] default: system version_added: "2.7" diff --git a/lib/ansible/modules/sysvinit.py b/lib/ansible/modules/sysvinit.py index 309bb0541f8..c598cf6ab5b 100644 --- a/lib/ansible/modules/sysvinit.py +++ b/lib/ansible/modules/sysvinit.py @@ -22,12 +22,14 @@ options: required: true description: - Name of the service. + type: str aliases: ['service'] state: choices: [ 'started', 'stopped', 'restarted', 'reloaded' ] description: - C(started)/C(stopped) are idempotent actions that will not run commands unless necessary. Not all init scripts support C(restarted) nor C(reloaded) natively, so these will both trigger a stop and start as needed. + type: str enabled: type: bool description: @@ -37,18 +39,23 @@ options: description: - If the service is being C(restarted) or C(reloaded) then sleep this many seconds between the stop and start command. This helps to workaround badly behaving services. + type: int pattern: description: - A substring to look for as would be found in the output of the I(ps) command as a stand-in for a status result. - If the string is found, the service will be assumed to be running. - "This option is mainly for use with init scripts that don't support the 'status' option." + type: str runlevels: description: - The runlevels this script should be enabled/disabled from. - Use this to override the defaults set by the package or init script itself. + type: list + elements: str arguments: description: - Additional arguments provided on the command line that some init scripts accept. + type: str aliases: [ 'args' ] daemonize: type: bool @@ -124,7 +131,7 @@ def main(): sleep=dict(type='int', default=1), pattern=dict(type='str'), arguments=dict(type='str', aliases=['args']), - runlevels=dict(type='list'), + runlevels=dict(type='list', elements='str'), daemonize=dict(type='bool', default=False), ), supports_check_mode=True, diff --git a/lib/ansible/modules/unarchive.py b/lib/ansible/modules/unarchive.py index 749d0288896..f6591ed5d41 100644 --- a/lib/ansible/modules/unarchive.py +++ b/lib/ansible/modules/unarchive.py @@ -59,6 +59,7 @@ options: description: - List the directory and file entries that you would like to exclude from the unarchive action. type: list + elements: str version_added: "2.1" keep_newer: description: @@ -72,6 +73,7 @@ options: - Each space-separated command-line option should be a new element of the array. See examples. - Command-line options with multiple elements must use multiple lines in the array, one for each element. type: list + elements: str default: "" version_added: "2.1" remote_src: @@ -822,8 +824,8 @@ def main(): creates=dict(type='path'), list_files=dict(type='bool', default=False), keep_newer=dict(type='bool', default=False), - exclude=dict(type='list', default=[]), - extra_opts=dict(type='list', default=[]), + exclude=dict(type='list', elements='str', default=[]), + extra_opts=dict(type='list', elements='str', default=[]), validate_certs=dict(type='bool', default=True), ), add_file_common_args=True, diff --git a/lib/ansible/modules/uri.py b/lib/ansible/modules/uri.py index f13ddb47321..f44460134ce 100644 --- a/lib/ansible/modules/uri.py +++ b/lib/ansible/modules/uri.py @@ -107,6 +107,7 @@ options: description: - A list of valid, numeric, HTTP status codes that signifies success of the request. type: list + elements: str default: [ 200 ] timeout: description: @@ -168,6 +169,7 @@ options: unix_socket: description: - Path to Unix domain socket to use for connection + type: path version_added: '2.8' http_agent: description: @@ -618,7 +620,7 @@ def main(): follow_redirects=dict(type='str', default='safe', choices=['all', 'no', 'none', 'safe', 'urllib2', 'yes']), creates=dict(type='path'), removes=dict(type='path'), - status_code=dict(type='list', default=[200]), + status_code=dict(type='list', elements='str', default=[200]), timeout=dict(type='int', default=30), headers=dict(type='dict', default={}), unix_socket=dict(type='path'), diff --git a/lib/ansible/modules/user.py b/lib/ansible/modules/user.py index 14a365b7491..9a53cd6aeaa 100644 --- a/lib/ansible/modules/user.py +++ b/lib/ansible/modules/user.py @@ -57,6 +57,7 @@ options: the user is removed from all groups except the primary group. - Before Ansible 2.3, the only input format allowed was a comma separated string. type: list + elements: str append: description: - If C(yes), add the user to the groups specified in C(groups). @@ -2873,7 +2874,7 @@ def main(): uid=dict(type='int'), non_unique=dict(type='bool', default=False), group=dict(type='str'), - groups=dict(type='list'), + groups=dict(type='list', elements='str'), comment=dict(type='str'), home=dict(type='path'), shell=dict(type='str'), diff --git a/lib/ansible/modules/wait_for.py b/lib/ansible/modules/wait_for.py index 0820585a260..26287f02fd8 100644 --- a/lib/ansible/modules/wait_for.py +++ b/lib/ansible/modules/wait_for.py @@ -56,6 +56,7 @@ options: description: - The list of TCP connection states which are counted as active connections. type: list + elements: str default: [ ESTABLISHED, FIN_WAIT1, FIN_WAIT2, SYN_RECV, SYN_SENT, TIME_WAIT ] version_added: "2.3" state: @@ -83,6 +84,7 @@ options: description: - List of hosts or IPs to ignore when looking for active TCP connections for C(drained) state. type: list + elements: str version_added: "1.8" sleep: description: @@ -462,11 +464,11 @@ def main(): connect_timeout=dict(type='int', default=5), delay=dict(type='int', default=0), port=dict(type='int'), - active_connection_states=dict(type='list', default=['ESTABLISHED', 'FIN_WAIT1', 'FIN_WAIT2', 'SYN_RECV', 'SYN_SENT', 'TIME_WAIT']), + active_connection_states=dict(type='list', elements='str', default=['ESTABLISHED', 'FIN_WAIT1', 'FIN_WAIT2', 'SYN_RECV', 'SYN_SENT', 'TIME_WAIT']), path=dict(type='path'), search_regex=dict(type='str'), state=dict(type='str', default='started', choices=['absent', 'drained', 'present', 'started', 'stopped']), - exclude_hosts=dict(type='list'), + exclude_hosts=dict(type='list', elements='str'), sleep=dict(type='int', default=1), msg=dict(type='str'), ), diff --git a/lib/ansible/modules/yum.py b/lib/ansible/modules/yum.py index d63fd52a1fb..9b636bdfbd3 100644 --- a/lib/ansible/modules/yum.py +++ b/lib/ansible/modules/yum.py @@ -28,6 +28,7 @@ options: - By default, this module will select the backend based on the C(ansible_pkg_mgr) fact. default: "auto" choices: [ auto, yum, yum4, dnf ] + type: str version_added: "2.7" name: description: @@ -43,12 +44,15 @@ options: exclude: description: - Package name(s) to exclude when state=present, or latest + type: list + elements: str version_added: "2.0" list: description: - "Package name to run the equivalent of yum list --show-duplicates against. In addition to listing packages, use can also list the following: C(installed), C(updates), C(available) and C(repos)." - This parameter is mutually exclusive with C(name). + type: str state: description: - Whether to install (C(present) or C(installed), C(latest)), or remove (C(absent) or C(removed)) a package. @@ -57,6 +61,7 @@ options: - C(absent) and C(removed) will remove the specified package. - Default is C(None), however in effect the default action is C(present) unless the C(autoremove) option is enabled for this module, then C(absent) is inferred. + type: str choices: [ absent, installed, latest, present, removed ] enablerepo: description: @@ -65,6 +70,8 @@ options: When specifying multiple repos, separate them with a C(","). - As of Ansible 2.7, this can alternatively be a list instead of C(",") separated string + type: list + elements: str version_added: "0.9" disablerepo: description: @@ -73,10 +80,13 @@ options: When specifying multiple repos, separate them with a C(","). - As of Ansible 2.7, this can alternatively be a list instead of C(",") separated string + type: list + elements: str version_added: "0.9" conf_file: description: - The remote yum configuration file to use for the transaction. + type: str version_added: "0.6" disable_gpg_check: description: @@ -121,6 +131,7 @@ options: - Specifies an alternative installroot, relative to which all packages will be installed. default: "/" + type: str version_added: "2.3" security: description: @@ -132,6 +143,7 @@ options: description: - If set to C(yes), and C(state=latest) then only installs updates that have been marked bugfix related. default: "no" + type: bool version_added: "2.6" allow_downgrade: description: @@ -150,16 +162,21 @@ options: description: - I(Plugin) name to enable for the install/update operation. The enabled plugin will not persist beyond the transaction. + type: list + elements: str version_added: "2.5" disable_plugin: description: - I(Plugin) name to disable for the install/update operation. The disabled plugins will not persist beyond the transaction. + type: list + elements: str version_added: "2.5" releasever: description: - Specifies an alternative release from which all packages will be installed. + type: str version_added: "2.7" autoremove: description: @@ -176,6 +193,7 @@ options: - If set to C(all), disables all excludes. - If set to C(main), disable excludes defined in [main] in yum.conf. - If set to C(repoid), disable excludes defined for given repo id. + type: str version_added: "2.7" download_only: description: diff --git a/lib/ansible/modules/yum_repository.py b/lib/ansible/modules/yum_repository.py index d20916020fa..f7d3afb6d8f 100644 --- a/lib/ansible/modules/yum_repository.py +++ b/lib/ansible/modules/yum_repository.py @@ -34,6 +34,7 @@ options: throttling will be disabled. If I(throttle) is expressed as a data rate (bytes/sec) then this option is ignored. Default is C(0) (no bandwidth throttling). + type: str default: 0 baseurl: description: @@ -42,10 +43,13 @@ options: - It can also be a list of multiple URLs. - This, the I(metalink) or I(mirrorlist) parameters are required if I(state) is set to C(present). + type: list + elements: str cost: description: - Relative cost of accessing this repository. Useful for weighing one repo's packages as greater/less than any other. + type: str default: 1000 deltarpm_metadata_percentage: description: @@ -54,34 +58,39 @@ options: can give values over C(100), so C(200) means that the metadata is required to be half the size of the packages. Use C(0) to turn off this check, and always download metadata. + type: str default: 100 deltarpm_percentage: description: - When the relative size of delta vs pkg is larger than this, delta is not used. Use C(0) to turn off delta rpm processing. Local repositories (with file:// I(baseurl)) have delta rpms turned off by default. + type: str default: 75 description: description: - A human readable string describing the repository. This option corresponds to the "name" property in the repo file. - This parameter is only required if I(state) is set to C(present). + type: str enabled: description: - This tells yum whether or not use this repository. + - Yum default value is C(true). type: bool - default: 'yes' enablegroups: description: - Determines whether yum will allow the use of package groups for this repository. + - Yum default value is C(true). type: bool - default: 'yes' exclude: description: - List of packages to exclude from updates or installs. This should be a space separated list. Shell globs using wildcards (eg. C(*) and C(?)) are allowed. - The list can also be a regular YAML array. + type: list + elements: str failovermethod: choices: [roundrobin, priority] default: roundrobin @@ -91,13 +100,16 @@ options: contacting the host. - C(priority) starts from the first I(baseurl) listed and reads through them sequentially. + type: str file: description: - File name without the C(.repo) extension to save the repo in. Defaults to the value of I(name). + type: str gpgcakey: description: - A URL pointing to the ASCII-armored CA key file for the repository. + type: str gpgcheck: description: - Tells yum whether or not it should perform a GPG signature check on @@ -109,6 +121,8 @@ options: description: - A URL pointing to the ASCII-armored GPG key file for the repository. - It can also be a list of multiple URLs. + type: list + elements: str module_hotfixes: description: - Disable module RPM filtering and make all RPMs from the repository @@ -124,6 +138,7 @@ options: not repository metadata downloads). - C(none) means that no HTTP downloads should be cached. choices: [all, packages, none] + type: str default: all include: description: @@ -131,6 +146,7 @@ options: supported. Configuration file will be inserted at the position of the I(include=) line. Included files may contain further include lines. Yum will abort with an error if an inclusion loop is detected. + type: str includepkgs: description: - List of packages you want to only use from a repository. This should be @@ -138,12 +154,15 @@ options: are allowed. Substitution variables (e.g. C($releasever)) are honored here. - The list can also be a regular YAML array. + type: list + elements: str ip_resolve: description: - Determines how yum resolves host names. - C(4) or C(IPv4) - resolve to IPv4 addresses only. - C(6) or C(IPv6) - resolve to IPv6 addresses only. choices: [4, 6, IPv4, IPv6, whatever] + type: str default: whatever keepalive: description: @@ -157,11 +176,13 @@ options: - Either C(1) or C(0). Determines whether or not yum keeps the cache of headers and packages after successful installation. choices: ['0', '1'] + type: str default: '1' metadata_expire: description: - Time (in seconds) after which the metadata will expire. - Default value is 6 hours. + type: str default: 21600 metadata_expire_filter: description: @@ -182,6 +203,7 @@ options: I(yum check-update). - Note that this option does not override "yum clean expire-cache". choices: [never, 'read-only:past', 'read-only:present', 'read-only:future'] + type: str default: 'read-only:present' metalink: description: @@ -190,31 +212,37 @@ options: mirrors for the repomd.xml file to a I(baseurl). - This, the I(baseurl) or I(mirrorlist) parameters are required if I(state) is set to C(present). + type: str mirrorlist: description: - Specifies a URL to a file containing a list of baseurls. - This, the I(baseurl) or I(metalink) parameters are required if I(state) is set to C(present). + type: str mirrorlist_expire: description: - Time (in seconds) after which the mirrorlist locally cached will expire. - Default value is 6 hours. + type: str default: 21600 name: description: - Unique repository ID. This option builds the section name of the repository in the repo file. - This parameter is only required if I(state) is set to C(present) or C(absent). + type: str required: true password: description: - Password to use with the username for basic authentication. + type: str priority: description: - Enforce ordered protection of repositories. The value is an integer from 1 to 99. - This option only works if the YUM Priorities plugin is installed. + type: str default: 99 protect: description: @@ -225,12 +253,15 @@ options: description: - URL to the proxy server that yum should use. Set to C(_none_) to disable the global proxy setting. + type: str proxy_password: description: - Password for this proxy. + type: str proxy_username: description: - Username to use for proxy. + type: str repo_gpgcheck: description: - This tells yum whether or not it should perform a GPG signature check @@ -240,11 +271,13 @@ options: reposdir: description: - Directory where the C(.repo) files will be stored. + type: path default: /etc/yum.repos.d retries: description: - Set the number of times any attempt to retrieve a file should retry before returning an error. Setting this to C(0) makes yum try forever. + type: str default: 10 s3_enabled: description: @@ -273,16 +306,19 @@ options: description: - Path to the directory containing the databases of the certificate authorities yum should use to verify SSL certificates. + type: str aliases: [ ca_cert ] sslclientcert: description: - Path to the SSL client certificate yum should use to connect to repos/remote sites. + type: str aliases: [ client_cert ] sslclientkey: description: - Path to the SSL client key yum should use to connect to repos/remote sites. + type: str aliases: [ client_key ] sslverify: description: @@ -294,25 +330,30 @@ options: description: - State of the repo file. choices: [absent, present] + type: str default: present throttle: description: - Enable bandwidth throttling for downloads. - This option can be expressed as a absolute data rate in bytes/sec. An SI prefix (k, M or G) may be appended to the bandwidth value. + type: str timeout: description: - Number of seconds to wait for a connection before timing out. + type: str default: 30 ui_repoid_vars: description: - When a repository id is displayed, append these yum variables to the string if they are used in the I(baseurl)/etc. Variables are appended in the order listed (and found). + type: str default: releasever basearch username: description: - Username to use for basic authentication to a repo or really any url. + type: str extends_documentation_fragment: - files @@ -548,23 +589,23 @@ def main(): # Module settings argument_spec = dict( bandwidth=dict(), - baseurl=dict(type='list'), + baseurl=dict(type='list', elements='str'), cost=dict(), deltarpm_metadata_percentage=dict(), deltarpm_percentage=dict(), description=dict(), enabled=dict(type='bool'), enablegroups=dict(type='bool'), - exclude=dict(type='list'), + exclude=dict(type='list', elements='str'), failovermethod=dict(choices=['roundrobin', 'priority']), file=dict(), gpgcakey=dict(), gpgcheck=dict(type='bool'), - gpgkey=dict(type='list'), + gpgkey=dict(type='list', elements='str'), module_hotfixes=dict(type='bool'), http_caching=dict(choices=['all', 'packages', 'none']), include=dict(), - includepkgs=dict(type='list'), + includepkgs=dict(type='list', elements='str'), ip_resolve=dict(choices=['4', '6', 'IPv4', 'IPv6', 'whatever']), keepalive=dict(type='bool'), keepcache=dict(choices=['0', '1']), @@ -603,7 +644,7 @@ def main(): username=dict(), ) - argument_spec['async'] = dict(type='bool') + argument_spec['async'] = dict(type='bool', default=True) module = AnsibleModule( argument_spec=argument_spec, diff --git a/test/sanity/ignore.txt b/test/sanity/ignore.txt index 6be6977ca1a..59a3bb7172a 100644 --- a/test/sanity/ignore.txt +++ b/test/sanity/ignore.txt @@ -69,9 +69,7 @@ lib/ansible/module_utils/urls.py pylint:blacklisted-name lib/ansible/module_utils/urls.py replace-urlopen lib/ansible/modules/command.py validate-modules:doc-missing-type lib/ansible/modules/command.py validate-modules:nonexistent-parameter-documented -lib/ansible/modules/command.py validate-modules:parameter-list-no-elements lib/ansible/modules/command.py validate-modules:undocumented-parameter -lib/ansible/modules/expect.py validate-modules:doc-missing-type lib/ansible/modules/assemble.py validate-modules:nonexistent-parameter-documented lib/ansible/modules/blockinfile.py validate-modules:doc-choices-do-not-match-spec lib/ansible/modules/blockinfile.py validate-modules:doc-default-does-not-match-spec @@ -91,80 +89,43 @@ lib/ansible/modules/stat.py validate-modules:parameter-invalid lib/ansible/modules/stat.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/stat.py validate-modules:undocumented-parameter lib/ansible/modules/unarchive.py validate-modules:nonexistent-parameter-documented -lib/ansible/modules/unarchive.py validate-modules:parameter-list-no-elements -lib/ansible/modules/get_url.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/uri.py pylint:blacklisted-name lib/ansible/modules/uri.py validate-modules:doc-required-mismatch -lib/ansible/modules/uri.py validate-modules:parameter-list-no-elements -lib/ansible/modules/uri.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/pip.py pylint:blacklisted-name -lib/ansible/modules/pip.py validate-modules:doc-elements-mismatch lib/ansible/modules/pip.py validate-modules:invalid-ansiblemodule-schema -lib/ansible/modules/apt.py validate-modules:doc-default-does-not-match-spec lib/ansible/modules/apt.py validate-modules:parameter-invalid -lib/ansible/modules/apt.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/apt.py validate-modules:undocumented-parameter lib/ansible/modules/apt_key.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/apt_key.py validate-modules:undocumented-parameter lib/ansible/modules/apt_repository.py validate-modules:doc-default-does-not-match-spec lib/ansible/modules/apt_repository.py validate-modules:parameter-invalid lib/ansible/modules/apt_repository.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/apt_repository.py validate-modules:undocumented-parameter -lib/ansible/modules/dnf.py validate-modules:doc-missing-type lib/ansible/modules/dnf.py validate-modules:doc-required-mismatch lib/ansible/modules/dnf.py validate-modules:parameter-invalid -lib/ansible/modules/dnf.py validate-modules:parameter-list-no-elements -lib/ansible/modules/dnf.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/dpkg_selections.py validate-modules:doc-missing-type -lib/ansible/modules/dpkg_selections.py validate-modules:doc-required-mismatch lib/ansible/modules/package_facts.py validate-modules:doc-choices-do-not-match-spec -lib/ansible/modules/package_facts.py validate-modules:doc-missing-type -lib/ansible/modules/package_facts.py validate-modules:parameter-list-no-elements -lib/ansible/modules/rpm_key.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/yum.py pylint:blacklisted-name -lib/ansible/modules/yum.py validate-modules:doc-missing-type lib/ansible/modules/yum.py validate-modules:parameter-invalid -lib/ansible/modules/yum.py validate-modules:parameter-list-no-elements -lib/ansible/modules/yum.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/yum_repository.py validate-modules:doc-default-does-not-match-spec -lib/ansible/modules/yum_repository.py validate-modules:doc-missing-type -lib/ansible/modules/yum_repository.py validate-modules:parameter-list-no-elements lib/ansible/modules/yum_repository.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/yum_repository.py validate-modules:undocumented-parameter lib/ansible/modules/git.py pylint:blacklisted-name lib/ansible/modules/git.py use-argspec-type-path lib/ansible/modules/git.py validate-modules:doc-missing-type lib/ansible/modules/git.py validate-modules:doc-required-mismatch -lib/ansible/modules/git.py validate-modules:parameter-list-no-elements -lib/ansible/modules/git.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/subversion.py validate-modules:doc-required-mismatch -lib/ansible/modules/subversion.py validate-modules:parameter-type-not-in-doc -lib/ansible/modules/subversion.py validate-modules:undocumented-parameter -lib/ansible/modules/getent.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/hostname.py validate-modules:invalid-ansiblemodule-schema -lib/ansible/modules/hostname.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/iptables.py pylint:blacklisted-name -lib/ansible/modules/iptables.py validate-modules:parameter-list-no-elements lib/ansible/modules/service.py validate-modules:nonexistent-parameter-documented lib/ansible/modules/service.py validate-modules:use-run-command-not-popen -lib/ansible/modules/setup.py validate-modules:parameter-list-no-elements -lib/ansible/modules/setup.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/systemd.py validate-modules:parameter-invalid -lib/ansible/modules/systemd.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/systemd.py validate-modules:return-syntax-error -lib/ansible/modules/sysvinit.py validate-modules:parameter-list-no-elements -lib/ansible/modules/sysvinit.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/sysvinit.py validate-modules:return-syntax-error lib/ansible/modules/user.py validate-modules:doc-default-does-not-match-spec lib/ansible/modules/user.py validate-modules:doc-default-incompatible-type -lib/ansible/modules/user.py validate-modules:parameter-list-no-elements lib/ansible/modules/user.py validate-modules:use-run-command-not-popen lib/ansible/modules/async_status.py use-argspec-type-path lib/ansible/modules/async_status.py validate-modules!skip lib/ansible/modules/async_wrapper.py ansible-doc!skip # not an actual module lib/ansible/modules/async_wrapper.py pylint:ansible-bad-function # ignore, required lib/ansible/modules/async_wrapper.py use-argspec-type-path -lib/ansible/modules/wait_for.py validate-modules:parameter-list-no-elements lib/ansible/parsing/vault/__init__.py pylint:blacklisted-name lib/ansible/playbook/base.py pylint:blacklisted-name lib/ansible/playbook/collectionsearch.py required-and-default-attributes # https://github.com/ansible/ansible/issues/61460