From 0aaa5e3d91bbd8ca8587737c4ed3d5a2ff1c5256 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Wed, 17 Feb 2021 07:16:16 +0100 Subject: [PATCH] Tidy up validations + bug fixes + deprecations (#1830) (#1846) * fixed validation-modules for plugins/modules/database/misc/elasticsearch_plugin.py * fixed validation-modules for plugins/modules/database/misc/kibana_plugin.py * fixed validation-modules for plugins/modules/database/misc/riak.py * fixed validation-modules for plugins/modules/database/vertica/vertica_info.py * fixed validation-modules for plugins/modules/database/vertica/vertica_role.py * fixed validation-modules for plugins/modules/database/vertica/vertica_schema.py * fixed validation-modules for plugins/modules/database/vertica/vertica_user.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_domain.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_host_ports.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_host.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_pool.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_vol.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_vol_map.py * fixed validation-modules for plugins/modules/storage/ibm/ibm_sa_host_ports.py * fixed validation-modules for plugins/modules/system/runit.py * fixed validation-modules for plugins/modules/source_control/bzr.py * fixed validation-modules for plugins/modules/source_control/hg.py * fixed validation-modules for plugins/modules/storage/emc/emc_vnx_sg_member.py * fixed validation-modules for plugins/modules/identity/opendj/opendj_backendprop.py * fixed validation-modules for plugins/modules/files/iso_extract.py * fixed validation-modules for plugins/modules/monitoring/logstash_plugin.py * fixed validation-modules for plugins/modules/database/aerospike/aerospike_migrations.py * Tidy up a number of sanity checks for some modules * added changelog fragment * Some parameters in vertica_* had their aliases documented as the name, and sometimes vice-versa as well * Adjustments per PR * Rolled back sanity ignores for runit * Update changelogs/fragments/1830-valmod_docmissingtype_batch1.yml Co-authored-by: Felix Fontein Co-authored-by: Felix Fontein (cherry picked from commit 3778eac1bab4eb223ecb2478945aae60f55a89db) Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> --- .../1830-valmod_docmissingtype_batch1.yml | 7 +++++ .../aerospike/aerospike_migrations.py | 1 - .../database/misc/elasticsearch_plugin.py | 12 ++++++- .../modules/database/misc/kibana_plugin.py | 9 +++++- plugins/modules/database/misc/riak.py | 13 ++++++-- .../database/vertica/vertica_configuration.py | 4 +-- .../modules/database/vertica/vertica_info.py | 7 ++++- .../modules/database/vertica/vertica_role.py | 15 +++++++-- .../database/vertica/vertica_schema.py | 23 ++++++++++---- .../modules/database/vertica/vertica_user.py | 30 ++++++++++++------ plugins/modules/files/iso_extract.py | 9 ++---- .../identity/opendj/opendj_backendprop.py | 10 ++++++ plugins/modules/monitoring/logstash_plugin.py | 8 ++--- plugins/modules/source_control/bzr.py | 4 +++ plugins/modules/source_control/hg.py | 4 +++ .../modules/storage/emc/emc_vnx_sg_member.py | 3 ++ plugins/modules/storage/ibm/ibm_sa_domain.py | 12 +++++++ plugins/modules/storage/ibm/ibm_sa_host.py | 6 ++++ .../modules/storage/ibm/ibm_sa_host_ports.py | 6 +++- plugins/modules/storage/ibm/ibm_sa_pool.py | 6 ++++ plugins/modules/storage/ibm/ibm_sa_vol.py | 4 +++ plugins/modules/storage/ibm/ibm_sa_vol_map.py | 6 ++++ plugins/modules/system/runit.py | 27 ++-------------- tests/sanity/ignore-2.10.txt | 31 ------------------- tests/sanity/ignore-2.11.txt | 31 ------------------- tests/sanity/ignore-2.9.txt | 28 ----------------- 26 files changed, 164 insertions(+), 152 deletions(-) create mode 100644 changelogs/fragments/1830-valmod_docmissingtype_batch1.yml diff --git a/changelogs/fragments/1830-valmod_docmissingtype_batch1.yml b/changelogs/fragments/1830-valmod_docmissingtype_batch1.yml new file mode 100644 index 0000000000..83a27f7e77 --- /dev/null +++ b/changelogs/fragments/1830-valmod_docmissingtype_batch1.yml @@ -0,0 +1,7 @@ +bugfixes: + - kibana_plugin - ``state`` parameter choices must use ``list()`` in python3 (https://github.com/ansible-collections/community.general/pull/1830). + - elasticsearch_plugin - ``state`` parameter choices must use ``list()`` in python3 (https://github.com/ansible-collections/community.general/pull/1830). + - riak - parameters ``wait_for_handoffs`` and ``wait_for_ring`` are ``int`` but the default value was ``false`` (https://github.com/ansible-collections/community.general/pull/1830). + - logstash_plugin - wrapped ``dict.keys()`` with ``list`` for use in ``choices`` setting (https://github.com/ansible-collections/community.general/pull/1830). + - iso_extract - use proper alias deprecation mechanism for ``thirsty`` alias of ``force`` (https://github.com/ansible-collections/community.general/pull/1830). + - runit - removed unused code, and passing command as ``list`` instead of ``str`` to ``run_command()`` (https://github.com/ansible-collections/community.general/pull/1830). diff --git a/plugins/modules/database/aerospike/aerospike_migrations.py b/plugins/modules/database/aerospike/aerospike_migrations.py index bf6ac60e8f..95eda4775c 100644 --- a/plugins/modules/database/aerospike/aerospike_migrations.py +++ b/plugins/modules/database/aerospike/aerospike_migrations.py @@ -115,7 +115,6 @@ EXAMPLES = ''' local_only: False # example playbook: ---- - name: Upgrade aerospike hosts: all become: true diff --git a/plugins/modules/database/misc/elasticsearch_plugin.py b/plugins/modules/database/misc/elasticsearch_plugin.py index 27a67406a8..bc7df931b6 100644 --- a/plugins/modules/database/misc/elasticsearch_plugin.py +++ b/plugins/modules/database/misc/elasticsearch_plugin.py @@ -22,11 +22,13 @@ options: description: - Name of the plugin to install. required: True + type: str state: description: - Desired state of a plugin. choices: ["present", "absent"] default: present + type: str src: description: - Optionally set the source location to retrieve the plugin from. This can be a file:// @@ -38,16 +40,19 @@ options: effect. - For ES 1.x use url. required: False + type: str url: description: - Set exact URL to download the plugin from (Only works for ES 1.x). - For ES 2.x and higher, use src. required: False + type: str timeout: description: - "Timeout setting: 30s, 1m, 1h..." - Only valid for Elasticsearch < 5.0. This option is ignored for Elasticsearch > 5.0. default: 1m + type: str force: description: - "Force batch mode when installing plugins. This is only necessary if a plugin requires additional permissions and console detection fails." @@ -57,20 +62,25 @@ options: description: - Location of the plugin binary. If this file is not found, the default plugin binaries will be used. - The default changed in Ansible 2.4 to None. + type: path plugin_dir: description: - Your configured plugin directory specified in Elasticsearch default: /usr/share/elasticsearch/plugins/ + type: path proxy_host: description: - Proxy host to use during plugin installation + type: str proxy_port: description: - Proxy port to use during plugin installation + type: str version: description: - Version of the plugin to be installed. If plugin exists with previous version, it will NOT be updated + type: str ''' EXAMPLES = ''' @@ -241,7 +251,7 @@ def main(): module = AnsibleModule( argument_spec=dict( name=dict(required=True), - state=dict(default="present", choices=PACKAGE_STATE_MAP.keys()), + state=dict(default="present", choices=list(PACKAGE_STATE_MAP.keys())), src=dict(default=None), url=dict(default=None), timeout=dict(default="1m"), diff --git a/plugins/modules/database/misc/kibana_plugin.py b/plugins/modules/database/misc/kibana_plugin.py index e84d8a6bf0..33bc86229b 100644 --- a/plugins/modules/database/misc/kibana_plugin.py +++ b/plugins/modules/database/misc/kibana_plugin.py @@ -22,31 +22,38 @@ options: description: - Name of the plugin to install. required: True + type: str state: description: - Desired state of a plugin. choices: ["present", "absent"] default: present + type: str url: description: - Set exact URL to download the plugin from. - For local file, prefix its absolute path with file:// + type: str timeout: description: - "Timeout setting: 30s, 1m, 1h etc." default: 1m + type: str plugin_bin: description: - Location of the Kibana binary. default: /opt/kibana/bin/kibana + type: path plugin_dir: description: - Your configured plugin directory specified in Kibana. default: /opt/kibana/installedPlugins/ + type: path version: description: - Version of the plugin to be installed. - If plugin exists with previous version, plugin will NOT be updated unless C(force) is set to yes. + type: str force: description: - Delete and re-install the plugin. Can be useful for plugins update. @@ -209,7 +216,7 @@ def main(): module = AnsibleModule( argument_spec=dict( name=dict(required=True), - state=dict(default="present", choices=PACKAGE_STATE_MAP.keys()), + state=dict(default="present", choices=list(PACKAGE_STATE_MAP.keys())), url=dict(default=None), timeout=dict(default="1m"), plugin_bin=dict(default="/opt/kibana/bin/kibana", type="path"), diff --git a/plugins/modules/database/misc/riak.py b/plugins/modules/database/misc/riak.py index 848a5e3f16..4ee7b5b674 100644 --- a/plugins/modules/database/misc/riak.py +++ b/plugins/modules/database/misc/riak.py @@ -23,28 +23,37 @@ options: description: - The command you would like to perform against the cluster. choices: ['ping', 'kv_test', 'join', 'plan', 'commit'] + type: str config_dir: description: - The path to the riak configuration directory default: /etc/riak + type: path http_conn: description: - The ip address and port that is listening for Riak HTTP queries default: 127.0.0.1:8098 + type: str target_node: description: - The target node for certain operations (join, ping) default: riak@127.0.0.1 + type: str wait_for_handoffs: description: - Number of seconds to wait for handoffs to complete. + type: int + default: 0 wait_for_ring: description: - Number of seconds to wait for all nodes to agree on the ring. + type: int + default: 0 wait_for_service: description: - Waits for a riak service to come online before continuing. choices: ['kv'] + type: str validate_certs: description: - If C(no), SSL certificates will not be validated. This should only be used @@ -93,8 +102,8 @@ def main(): config_dir=dict(default='/etc/riak', type='path'), http_conn=dict(required=False, default='127.0.0.1:8098'), target_node=dict(default='riak@127.0.0.1', required=False), - wait_for_handoffs=dict(default=False, type='int'), - wait_for_ring=dict(default=False, type='int'), + wait_for_handoffs=dict(default=0, type='int'), + wait_for_ring=dict(default=0, type='int'), wait_for_service=dict( required=False, default=None, choices=['kv']), validate_certs=dict(default=True, type='bool')) diff --git a/plugins/modules/database/vertica/vertica_configuration.py b/plugins/modules/database/vertica/vertica_configuration.py index 3d0788e67f..1d67a831d9 100644 --- a/plugins/modules/database/vertica/vertica_configuration.py +++ b/plugins/modules/database/vertica/vertica_configuration.py @@ -14,11 +14,11 @@ short_description: Updates Vertica configuration parameters. description: - Updates Vertica configuration parameters. options: - name: + parameter: description: - Name of the parameter to update. required: true - aliases: [parameter] + aliases: [name] type: str value: description: diff --git a/plugins/modules/database/vertica/vertica_info.py b/plugins/modules/database/vertica/vertica_info.py index a5741719b7..ace130b89d 100644 --- a/plugins/modules/database/vertica/vertica_info.py +++ b/plugins/modules/database/vertica/vertica_info.py @@ -21,25 +21,30 @@ options: description: - Name of the cluster running the schema. default: localhost + type: str port: description: Database port to connect to. default: 5433 + type: str db: description: - Name of the database running the schema. + type: str login_user: description: - The username used to authenticate with. default: dbadmin + type: str login_password: description: - The password used to authenticate with. + type: str notes: - The default authentication assumes that you are either logging in as or sudo'ing to the C(dbadmin) account on the host. - This module uses C(pyodbc), a Python ODBC database adapter. You must ensure - that C(unixODBC) and C(pyodbc) is installed on the host and properly configured. + that C(unixODBC) and C(pyodbc) are installed on the host and properly configured. - Configuring C(unixODBC) for Vertica requires C(Driver = /opt/vertica/lib64/libverticaodbc.so) to be added to the C(Vertica) section of either C(/etc/odbcinst.ini) or C($HOME/.odbcinst.ini) and both C(ErrorMessagesPath = /opt/vertica/lib64) and C(DriverManagerEncoding = UTF-16) diff --git a/plugins/modules/database/vertica/vertica_role.py b/plugins/modules/database/vertica/vertica_role.py index bba411d03f..fc80907cc6 100644 --- a/plugins/modules/database/vertica/vertica_role.py +++ b/plugins/modules/database/vertica/vertica_role.py @@ -15,37 +15,46 @@ short_description: Adds or removes Vertica database roles and assigns roles to t description: - Adds or removes Vertica database role and, optionally, assign other roles. options: - name: + role: description: - Name of the role to add or remove. required: true + type: str + aliases: ['name'] assigned_roles: description: - Comma separated list of roles to assign to the role. aliases: ['assigned_role'] + type: str state: description: - Whether to create C(present), drop C(absent) or lock C(locked) a role. choices: ['present', 'absent'] default: present + type: str db: description: - Name of the Vertica database. + type: str cluster: description: - Name of the Vertica cluster. default: localhost + type: str port: description: - Vertica cluster port to connect to. default: 5433 + type: str login_user: description: - The username used to authenticate with. default: dbadmin + type: str login_password: description: - The password used to authenticate with. + type: str notes: - The default authentication assumes that you are either logging in as or sudo'ing to the C(dbadmin) account on the host. @@ -168,11 +177,11 @@ def main(): role=dict(required=True, aliases=['name']), assigned_roles=dict(default=None, aliases=['assigned_role']), state=dict(default='present', choices=['absent', 'present']), - db=dict(default=None), + db=dict(), cluster=dict(default='localhost'), port=dict(default='5433'), login_user=dict(default='dbadmin'), - login_password=dict(default=None, no_log=True), + login_password=dict(no_log=True), ), supports_check_mode=True) if not pyodbc_found: diff --git a/plugins/modules/database/vertica/vertica_schema.py b/plugins/modules/database/vertica/vertica_schema.py index 424de564dc..0c85e3e091 100644 --- a/plugins/modules/database/vertica/vertica_schema.py +++ b/plugins/modules/database/vertica/vertica_schema.py @@ -20,44 +20,55 @@ description: will fail and only remove roles created for the schema if they have no dependencies. options: - name: + schema: description: - Name of the schema to add or remove. required: true + aliases: ['name'] + type: str usage_roles: description: - Comma separated list of roles to create and grant usage access to the schema. aliases: ['usage_role'] + type: str create_roles: description: - Comma separated list of roles to create and grant usage and create access to the schema. aliases: ['create_role'] + type: str owner: description: - Name of the user to set as owner of the schema. + type: str state: description: - Whether to create C(present), or drop C(absent) a schema. default: present choices: ['present', 'absent'] + type: str db: description: - Name of the Vertica database. + type: str cluster: description: - Name of the Vertica cluster. default: localhost + type: str port: description: - Vertica cluster port to connect to. default: 5433 + type: str login_user: description: - The username used to authenticate with. default: dbadmin + type: str login_password: description: - The password used to authenticate with. + type: str notes: - The default authentication assumes that you are either logging in as or sudo'ing to the C(dbadmin) account on the host. @@ -230,15 +241,15 @@ def main(): module = AnsibleModule( argument_spec=dict( schema=dict(required=True, aliases=['name']), - usage_roles=dict(default=None, aliases=['usage_role']), - create_roles=dict(default=None, aliases=['create_role']), - owner=dict(default=None), + usage_roles=dict(aliases=['usage_role']), + create_roles=dict(aliases=['create_role']), + owner=dict(), state=dict(default='present', choices=['absent', 'present']), - db=dict(default=None), + db=dict(), cluster=dict(default='localhost'), port=dict(default='5433'), login_user=dict(default='dbadmin'), - login_password=dict(default=None, no_log=True), + login_password=dict(no_log=True), ), supports_check_mode=True) if not pyodbc_found: diff --git a/plugins/modules/database/vertica/vertica_user.py b/plugins/modules/database/vertica/vertica_user.py index f550f190c7..791ef5fef9 100644 --- a/plugins/modules/database/vertica/vertica_user.py +++ b/plugins/modules/database/vertica/vertica_user.py @@ -17,22 +17,27 @@ description: - In such a situation, if the module tries to remove the user it will fail and only remove roles granted to the user. options: - name: + user: description: - Name of the user to add or remove. required: true + type: str + aliases: ['name'] profile: description: - Sets the user's profile. + type: str resource_pool: description: - Sets the user's resource pool. + type: str password: description: - The user's password encrypted by the MD5 algorithm. - The password must be generated with the format C("md5" + md5[password + username]), resulting in a total of 35 characters. An easy way to do this is by querying the Vertica database with select 'md5'||md5(''). + type: str expired: description: - Sets the user's password expiration. @@ -46,29 +51,36 @@ options: description: - Comma separated list of roles to assign to the user. aliases: ['role'] + type: str state: description: - Whether to create C(present), drop C(absent) or lock C(locked) a user. choices: ['present', 'absent', 'locked'] default: present + type: str db: description: - Name of the Vertica database. + type: str cluster: description: - Name of the Vertica cluster. default: localhost + type: str port: description: - Vertica cluster port to connect to. default: 5433 + type: str login_user: description: - The username used to authenticate with. default: dbadmin + type: str login_password: description: - The password used to authenticate with. + type: str notes: - The default authentication assumes that you are either logging in as or sudo'ing to the C(dbadmin) account on the host. @@ -282,18 +294,18 @@ def main(): module = AnsibleModule( argument_spec=dict( user=dict(required=True, aliases=['name']), - profile=dict(default=None), - resource_pool=dict(default=None), - password=dict(default=None, no_log=True), - expired=dict(type='bool', default=None), - ldap=dict(type='bool', default=None), - roles=dict(default=None, aliases=['role']), + profile=dict(), + resource_pool=dict(), + password=dict(no_log=True), + expired=dict(type='bool'), + ldap=dict(type='bool'), + roles=dict(aliases=['role']), state=dict(default='present', choices=['absent', 'present', 'locked']), - db=dict(default=None), + db=dict(), cluster=dict(default='localhost'), port=dict(default='5433'), login_user=dict(default='dbadmin'), - login_password=dict(default=None, no_log=True), + login_password=dict(no_log=True), ), supports_check_mode=True) if not pyodbc_found: diff --git a/plugins/modules/files/iso_extract.py b/plugins/modules/files/iso_extract.py index 0c73ac96ee..b84db39756 100644 --- a/plugins/modules/files/iso_extract.py +++ b/plugins/modules/files/iso_extract.py @@ -59,8 +59,8 @@ options: executable: description: - The path to the C(7z) executable to use for extracting files from the ISO. + - If not provided, it will assume the value C(7z). type: path - default: '7z' notes: - Only the file checksum (content) is taken into account when extracting files from the ISO image. If C(force=no), only checks the presence of the file. @@ -101,7 +101,8 @@ def main(): image=dict(type='path', required=True, aliases=['path', 'src']), dest=dict(type='path', required=True), files=dict(type='list', elements='str', required=True), - force=dict(type='bool', default=True, aliases=['thirsty']), + force=dict(type='bool', default=True, aliases=['thirsty'], + deprecated_aliases=[dict(name='thirsty', version='3.0.0', collection_name='community.general')]), executable=dict(type='path'), # No default on purpose ), supports_check_mode=True, @@ -112,10 +113,6 @@ def main(): force = module.params['force'] executable = module.params['executable'] - if module.params.get('thirsty'): - module.deprecate('The alias "thirsty" has been deprecated and will be removed, use "force" instead', - version='3.0.0', collection_name='community.general') # was Ansible 2.13 - result = dict( changed=False, dest=dest, diff --git a/plugins/modules/identity/opendj/opendj_backendprop.py b/plugins/modules/identity/opendj/opendj_backendprop.py index aa477e42d7..be118a505d 100644 --- a/plugins/modules/identity/opendj/opendj_backendprop.py +++ b/plugins/modules/identity/opendj/opendj_backendprop.py @@ -22,46 +22,56 @@ options: - The path to the bin directory of OpenDJ. required: false default: /opt/opendj/bin + type: path hostname: description: - The hostname of the OpenDJ server. required: true + type: str port: description: - The Admin port on which the OpenDJ instance is available. required: true + type: str username: description: - The username to connect to. required: false default: cn=Directory Manager + type: str password: description: - The password for the cn=Directory Manager user. - Either password or passwordfile is needed. required: false + type: str passwordfile: description: - Location to the password file which holds the password for the cn=Directory Manager user. - Either password or passwordfile is needed. required: false + type: path backend: description: - The name of the backend on which the property needs to be updated. required: true + type: str name: description: - The configuration setting to update. required: true + type: str value: description: - The value for the configuration item. required: true + type: str state: description: - If configuration needs to be added/updated required: false default: "present" + type: str ''' EXAMPLES = ''' diff --git a/plugins/modules/monitoring/logstash_plugin.py b/plugins/modules/monitoring/logstash_plugin.py index 4a45c04a77..5d1cd488ab 100644 --- a/plugins/modules/monitoring/logstash_plugin.py +++ b/plugins/modules/monitoring/logstash_plugin.py @@ -138,11 +138,11 @@ def main(): module = AnsibleModule( argument_spec=dict( name=dict(required=True), - state=dict(default="present", choices=PACKAGE_STATE_MAP.keys()), + state=dict(default="present", choices=list(PACKAGE_STATE_MAP.keys())), plugin_bin=dict(default="/usr/share/logstash/bin/logstash-plugin", type="path"), - proxy_host=dict(default=None), - proxy_port=dict(default=None), - version=dict(default=None) + proxy_host=dict(), + proxy_port=dict(), + version=dict() ), supports_check_mode=True ) diff --git a/plugins/modules/source_control/bzr.py b/plugins/modules/source_control/bzr.py index 7af3f27993..a4ce4bc075 100644 --- a/plugins/modules/source_control/bzr.py +++ b/plugins/modules/source_control/bzr.py @@ -22,15 +22,18 @@ options: - SSH or HTTP protocol address of the parent branch. aliases: [ parent ] required: yes + type: str dest: description: - Absolute path of where the branch should be cloned to. required: yes + type: path version: description: - What version of the branch to clone. This can be the bzr revno or revid. default: head + type: str force: description: - If C(yes), any modified files in the working @@ -42,6 +45,7 @@ options: description: - Path to bzr executable to use. If not supplied, the normal mechanism for resolving binary paths will be used. + type: str ''' EXAMPLES = ''' diff --git a/plugins/modules/source_control/hg.py b/plugins/modules/source_control/hg.py index 5c084d3ad1..810b918bd6 100644 --- a/plugins/modules/source_control/hg.py +++ b/plugins/modules/source_control/hg.py @@ -21,15 +21,18 @@ options: - The repository address. required: yes aliases: [ name ] + type: str dest: description: - Absolute path of where the repository should be cloned to. This parameter is required, unless clone and update are set to no + type: path revision: description: - Equivalent C(-r) option in hg command which could be the changeset, revision number, branch name or even tag. aliases: [ version ] + type: str force: description: - Discards uncommitted changes. Runs C(hg update -C). Prior to @@ -55,6 +58,7 @@ options: description: - Path to hg executable to use. If not supplied, the normal mechanism for resolving binary paths will be used. + type: str notes: - This module does not support push capability. See U(https://github.com/ansible/ansible/issues/31156). - "If the task seems to be hanging, first verify remote host is in C(known_hosts). diff --git a/plugins/modules/storage/emc/emc_vnx_sg_member.py b/plugins/modules/storage/emc/emc_vnx_sg_member.py index dfac03ef40..b5b68d4ef4 100644 --- a/plugins/modules/storage/emc/emc_vnx_sg_member.py +++ b/plugins/modules/storage/emc/emc_vnx_sg_member.py @@ -29,10 +29,12 @@ options: description: - Name of the Storage group to manage. required: true + type: str lunid: description: - Lun id to be added. required: true + type: int state: description: - Indicates the desired lunid state. @@ -40,6 +42,7 @@ options: - C(absent) ensures specified lunid is absent from Storage Group. default: present choices: [ "present", "absent"] + type: str author: diff --git a/plugins/modules/storage/ibm/ibm_sa_domain.py b/plugins/modules/storage/ibm/ibm_sa_domain.py index 29690497c3..9c5e6c50c8 100644 --- a/plugins/modules/storage/ibm/ibm_sa_domain.py +++ b/plugins/modules/storage/ibm/ibm_sa_domain.py @@ -23,51 +23,63 @@ options: description: - Name of the domain to be managed. required: true + type: str state: description: - The desired state of the domain. default: "present" choices: [ "present", "absent" ] + type: str ldap_id: description: - ldap id to add to the domain. required: false + type: str size: description: - Size of the domain. required: false + type: str hard_capacity: description: - Hard capacity of the domain. required: false + type: str soft_capacity: description: - Soft capacity of the domain. required: false + type: str max_cgs: description: - Number of max cgs. required: false + type: str max_dms: description: - Number of max dms. required: false + type: str max_mirrors: description: - Number of max_mirrors. required: false + type: str max_pools: description: - Number of max_pools. required: false + type: str max_volumes: description: - Number of max_volumes. required: false + type: str perf_class: description: - Add the domain to a performance class. required: false + type: str extends_documentation_fragment: - community.general.ibm_storage diff --git a/plugins/modules/storage/ibm/ibm_sa_host.py b/plugins/modules/storage/ibm/ibm_sa_host.py index 5ce12992bc..27a7287f8a 100644 --- a/plugins/modules/storage/ibm/ibm_sa_host.py +++ b/plugins/modules/storage/ibm/ibm_sa_host.py @@ -22,15 +22,18 @@ options: description: - Host name. required: true + type: str state: description: - Host state. default: "present" choices: [ "present", "absent" ] + type: str cluster: description: - The name of the cluster to include the host. required: false + type: str domain: description: - The domains the cluster will be attached to. @@ -38,15 +41,18 @@ options: separate domain names with commas. To include all existing domains, use an asterisk ("*"). required: false + type: str iscsi_chap_name: description: - The host's CHAP name identifier required: false + type: str iscsi_chap_secret: description: - The password of the initiator used to authenticate to the system when CHAP is enable required: false + type: str extends_documentation_fragment: - community.general.ibm_storage diff --git a/plugins/modules/storage/ibm/ibm_sa_host_ports.py b/plugins/modules/storage/ibm/ibm_sa_host_ports.py index 981bc553ff..32daa9f3c7 100644 --- a/plugins/modules/storage/ibm/ibm_sa_host_ports.py +++ b/plugins/modules/storage/ibm/ibm_sa_host_ports.py @@ -23,28 +23,32 @@ options: description: - Host name. required: true + type: str state: description: - Host ports state. default: "present" choices: [ "present", "absent" ] + type: str iscsi_name: description: - iSCSI initiator name. required: false + type: str fcaddress: description: - Fiber channel address. required: false + type: str num_of_visible_targets: description: - Number of visible targets. required: false + type: str extends_documentation_fragment: - community.general.ibm_storage - author: - Tzur Eliyahu (@tzure) ''' diff --git a/plugins/modules/storage/ibm/ibm_sa_pool.py b/plugins/modules/storage/ibm/ibm_sa_pool.py index 812904eb77..67c963ace1 100644 --- a/plugins/modules/storage/ibm/ibm_sa_pool.py +++ b/plugins/modules/storage/ibm/ibm_sa_pool.py @@ -22,27 +22,33 @@ options: description: - Pool name. required: true + type: str state: description: - Pool state. default: "present" choices: [ "present", "absent" ] + type: str size: description: - Pool size in GB required: false + type: str snapshot_size: description: - Pool snapshot size in GB required: false + type: str domain: description: - Adds the pool to the specified domain. required: false + type: str perf_class: description: - Assigns a perf_class to the pool. required: false + type: str extends_documentation_fragment: - community.general.ibm_storage diff --git a/plugins/modules/storage/ibm/ibm_sa_vol.py b/plugins/modules/storage/ibm/ibm_sa_vol.py index bf578ceef7..7820d26828 100644 --- a/plugins/modules/storage/ibm/ibm_sa_vol.py +++ b/plugins/modules/storage/ibm/ibm_sa_vol.py @@ -22,19 +22,23 @@ options: description: - Volume name. required: true + type: str pool: description: - Volume pool. required: false + type: str state: description: - Volume state. default: "present" choices: [ "present", "absent" ] + type: str size: description: - Volume size. required: false + type: str extends_documentation_fragment: - community.general.ibm_storage diff --git a/plugins/modules/storage/ibm/ibm_sa_vol_map.py b/plugins/modules/storage/ibm/ibm_sa_vol_map.py index f1f5a807d3..b449ba8de4 100644 --- a/plugins/modules/storage/ibm/ibm_sa_vol_map.py +++ b/plugins/modules/storage/ibm/ibm_sa_vol_map.py @@ -24,29 +24,35 @@ options: description: - Volume name. required: true + type: str state: default: "present" choices: [ "present", "absent" ] description: - When the state is present the volume is mapped. When the state is absent, the volume is meant to be unmapped. + type: str cluster: description: - Maps the volume to a cluster. required: false + type: str host: description: - Maps the volume to a host. required: false + type: str lun: description: - The LUN identifier. required: false + type: str override: description: - Overrides the existing volume mapping. required: false + type: str extends_documentation_fragment: - community.general.ibm_storage diff --git a/plugins/modules/system/runit.py b/plugins/modules/system/runit.py index b80ed8cb24..f8f3ada3da 100644 --- a/plugins/modules/system/runit.py +++ b/plugins/modules/system/runit.py @@ -87,34 +87,12 @@ from ansible.module_utils.basic import AnsibleModule from ansible.module_utils._text import to_native -def _load_dist_subclass(cls, *args, **kwargs): # @FIXME remove unused function? - ''' - Used for derivative implementations - ''' - subclass = None - - distro = kwargs['module'].params['distro'] - - # get the most specific superclass for this platform - if distro is not None: - for sc in cls.__subclasses__(): - if sc.distro is not None and sc.distro == distro: - subclass = sc - if subclass is None: - subclass = cls - - return super(cls, subclass).__new__(subclass) - - class Sv(object): """ Main class that handles daemontools, can be subclassed and overridden in case we want to use a 'derivative' like encore, s6, etc """ - # def __new__(cls, *args, **kwargs): - # return _load_dist_subclass(cls, args, kwargs) - def __init__(self, module): self.extra_paths = [] self.report_vars = ['state', 'enabled', 'svc_full', 'src_full', 'pid', 'duration', 'full_state'] @@ -220,10 +198,10 @@ class Sv(object): def execute_command(self, cmd): try: - (rc, out, err) = self.module.run_command(' '.join(cmd)) + (rc, out, err) = self.module.run_command(cmd) except Exception as e: self.module.fail_json(msg="failed to execute: %s" % to_native(e)) - return (rc, out, err) + return rc, out, err def report(self): self.get_status() @@ -253,7 +231,6 @@ def main(): sv = Sv(module) changed = False - orig_state = sv.report() if enabled is not None and enabled != sv.enabled: changed = True diff --git a/tests/sanity/ignore-2.10.txt b/tests/sanity/ignore-2.10.txt index 300a12c7fd..84171285f9 100644 --- a/tests/sanity/ignore-2.10.txt +++ b/tests/sanity/ignore-2.10.txt @@ -199,37 +199,16 @@ plugins/modules/clustering/consul/consul_session.py validate-modules:parameter-s plugins/modules/clustering/etcd3.py validate-modules:parameter-type-not-in-doc plugins/modules/clustering/znode.py validate-modules:doc-missing-type plugins/modules/clustering/znode.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/aerospike/aerospike_migrations.py yamllint:unparsable-with-libyaml -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:doc-missing-type -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/kibana_plugin.py validate-modules:doc-missing-type -plugins/modules/database/misc/kibana_plugin.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/database/misc/kibana_plugin.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/riak.py validate-modules:doc-default-does-not-match-spec -plugins/modules/database/misc/riak.py validate-modules:doc-missing-type -plugins/modules/database/misc/riak.py validate-modules:parameter-type-not-in-doc plugins/modules/database/postgresql/postgresql_db.py use-argspec-type-path plugins/modules/database/postgresql/postgresql_db.py validate-modules:use-run-command-not-popen plugins/modules/database/postgresql/postgresql_privs.py validate-modules:parameter-documented-multiple-times plugins/modules/database/postgresql/postgresql_tablespace.py validate-modules:mutually_exclusive-unknown plugins/modules/database/postgresql/postgresql_user.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/database/vertica/vertica_info.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_role.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_role.py validate-modules:undocumented-parameter -plugins/modules/database/vertica/vertica_schema.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_schema.py validate-modules:undocumented-parameter -plugins/modules/database/vertica/vertica_user.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_user.py validate-modules:undocumented-parameter -plugins/modules/files/iso_extract.py validate-modules:doc-default-does-not-match-spec -plugins/modules/identity/opendj/opendj_backendprop.py validate-modules:doc-missing-type -plugins/modules/identity/opendj/opendj_backendprop.py validate-modules:parameter-type-not-in-doc plugins/modules/monitoring/bigpanda.py validate-modules:invalid-argument-name plugins/modules/monitoring/datadog/datadog_event.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/datadog/datadog_monitor.py validate-modules:invalid-argument-name plugins/modules/monitoring/datadog/datadog_monitor.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/icinga2_host.py validate-modules:undocumented-parameter -plugins/modules/monitoring/logstash_plugin.py validate-modules:invalid-ansiblemodule-schema plugins/modules/monitoring/sensu/sensu_check.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/sensu/sensu_client.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/sensu/sensu_handler.py validate-modules:parameter-list-no-elements @@ -405,7 +384,6 @@ plugins/modules/remote_management/stacki/stacki_host.py validate-modules:doc-def plugins/modules/remote_management/stacki/stacki_host.py validate-modules:no-default-for-required-parameter plugins/modules/remote_management/stacki/stacki_host.py validate-modules:parameter-type-not-in-doc plugins/modules/remote_management/stacki/stacki_host.py validate-modules:undocumented-parameter -plugins/modules/source_control/bzr.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/git_config.py validate-modules:doc-missing-type plugins/modules/source_control/git_config.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_deploy_key.py validate-modules:doc-missing-type @@ -419,19 +397,10 @@ plugins/modules/source_control/github/github_release.py validate-modules:doc-mis plugins/modules/source_control/github/github_release.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_webhook.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_webhook_info.py validate-modules:parameter-type-not-in-doc -plugins/modules/source_control/hg.py validate-modules:parameter-type-not-in-doc -plugins/modules/storage/emc/emc_vnx_sg_member.py validate-modules:doc-missing-type -plugins/modules/storage/emc/emc_vnx_sg_member.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/glusterfs/gluster_heal_info.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/glusterfs/gluster_peer.py validate-modules:parameter-list-no-elements plugins/modules/storage/glusterfs/gluster_volume.py validate-modules:parameter-list-no-elements plugins/modules/storage/glusterfs/gluster_volume.py validate-modules:parameter-type-not-in-doc -plugins/modules/storage/ibm/ibm_sa_domain.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_host.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_host_ports.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_pool.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_vol.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_vol_map.py validate-modules:doc-missing-type plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:doc-missing-type plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/netapp/na_cdot_license.py validate-modules:incompatible-default-type diff --git a/tests/sanity/ignore-2.11.txt b/tests/sanity/ignore-2.11.txt index 1d4d84faba..9cdfef52c3 100644 --- a/tests/sanity/ignore-2.11.txt +++ b/tests/sanity/ignore-2.11.txt @@ -187,37 +187,16 @@ plugins/modules/clustering/consul/consul_session.py validate-modules:parameter-s plugins/modules/clustering/etcd3.py validate-modules:parameter-type-not-in-doc plugins/modules/clustering/znode.py validate-modules:doc-missing-type plugins/modules/clustering/znode.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/aerospike/aerospike_migrations.py yamllint:unparsable-with-libyaml -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:doc-missing-type -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/kibana_plugin.py validate-modules:doc-missing-type -plugins/modules/database/misc/kibana_plugin.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/database/misc/kibana_plugin.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/riak.py validate-modules:doc-default-does-not-match-spec -plugins/modules/database/misc/riak.py validate-modules:doc-missing-type -plugins/modules/database/misc/riak.py validate-modules:parameter-type-not-in-doc plugins/modules/database/postgresql/postgresql_db.py use-argspec-type-path plugins/modules/database/postgresql/postgresql_db.py validate-modules:use-run-command-not-popen plugins/modules/database/postgresql/postgresql_privs.py validate-modules:parameter-documented-multiple-times plugins/modules/database/postgresql/postgresql_tablespace.py validate-modules:mutually_exclusive-unknown plugins/modules/database/postgresql/postgresql_user.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/database/vertica/vertica_info.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_role.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_role.py validate-modules:undocumented-parameter -plugins/modules/database/vertica/vertica_schema.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_schema.py validate-modules:undocumented-parameter -plugins/modules/database/vertica/vertica_user.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_user.py validate-modules:undocumented-parameter -plugins/modules/files/iso_extract.py validate-modules:doc-default-does-not-match-spec -plugins/modules/identity/opendj/opendj_backendprop.py validate-modules:doc-missing-type -plugins/modules/identity/opendj/opendj_backendprop.py validate-modules:parameter-type-not-in-doc plugins/modules/monitoring/bigpanda.py validate-modules:invalid-argument-name plugins/modules/monitoring/datadog/datadog_event.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/datadog/datadog_monitor.py validate-modules:invalid-argument-name plugins/modules/monitoring/datadog/datadog_monitor.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/icinga2_host.py validate-modules:undocumented-parameter -plugins/modules/monitoring/logstash_plugin.py validate-modules:invalid-ansiblemodule-schema plugins/modules/monitoring/sensu/sensu_check.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/sensu/sensu_client.py validate-modules:parameter-list-no-elements plugins/modules/monitoring/sensu/sensu_handler.py validate-modules:parameter-list-no-elements @@ -393,7 +372,6 @@ plugins/modules/remote_management/stacki/stacki_host.py validate-modules:doc-def plugins/modules/remote_management/stacki/stacki_host.py validate-modules:no-default-for-required-parameter plugins/modules/remote_management/stacki/stacki_host.py validate-modules:parameter-type-not-in-doc plugins/modules/remote_management/stacki/stacki_host.py validate-modules:undocumented-parameter -plugins/modules/source_control/bzr.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/git_config.py validate-modules:doc-missing-type plugins/modules/source_control/git_config.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_deploy_key.py validate-modules:doc-missing-type @@ -407,19 +385,10 @@ plugins/modules/source_control/github/github_release.py validate-modules:doc-mis plugins/modules/source_control/github/github_release.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_webhook.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_webhook_info.py validate-modules:parameter-type-not-in-doc -plugins/modules/source_control/hg.py validate-modules:parameter-type-not-in-doc -plugins/modules/storage/emc/emc_vnx_sg_member.py validate-modules:doc-missing-type -plugins/modules/storage/emc/emc_vnx_sg_member.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/glusterfs/gluster_heal_info.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/glusterfs/gluster_peer.py validate-modules:parameter-list-no-elements plugins/modules/storage/glusterfs/gluster_volume.py validate-modules:parameter-list-no-elements plugins/modules/storage/glusterfs/gluster_volume.py validate-modules:parameter-type-not-in-doc -plugins/modules/storage/ibm/ibm_sa_domain.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_host.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_host_ports.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_pool.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_vol.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_vol_map.py validate-modules:doc-missing-type plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:doc-missing-type plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/netapp/na_cdot_license.py validate-modules:incompatible-default-type diff --git a/tests/sanity/ignore-2.9.txt b/tests/sanity/ignore-2.9.txt index cf71b82c8f..9c41edfc46 100644 --- a/tests/sanity/ignore-2.9.txt +++ b/tests/sanity/ignore-2.9.txt @@ -203,13 +203,6 @@ plugins/modules/clustering/consul/consul_kv.py validate-modules:parameter-type-n plugins/modules/clustering/etcd3.py validate-modules:parameter-type-not-in-doc plugins/modules/clustering/znode.py validate-modules:doc-missing-type plugins/modules/clustering/znode.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:doc-missing-type -plugins/modules/database/misc/elasticsearch_plugin.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/kibana_plugin.py validate-modules:doc-missing-type -plugins/modules/database/misc/kibana_plugin.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/misc/riak.py validate-modules:doc-default-does-not-match-spec -plugins/modules/database/misc/riak.py validate-modules:doc-missing-type -plugins/modules/database/misc/riak.py validate-modules:parameter-type-not-in-doc plugins/modules/database/postgresql/postgresql_db.py use-argspec-type-path plugins/modules/database/postgresql/postgresql_db.py validate-modules:parameter-type-not-in-doc plugins/modules/database/postgresql/postgresql_db.py validate-modules:use-run-command-not-popen @@ -217,17 +210,6 @@ plugins/modules/database/postgresql/postgresql_ext.py validate-modules:parameter plugins/modules/database/postgresql/postgresql_schema.py validate-modules:parameter-type-not-in-doc plugins/modules/database/postgresql/postgresql_user.py validate-modules:doc-choices-do-not-match-spec plugins/modules/database/postgresql/postgresql_user.py validate-modules:parameter-type-not-in-doc -plugins/modules/database/vertica/vertica_configuration.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_info.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_role.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_role.py validate-modules:undocumented-parameter -plugins/modules/database/vertica/vertica_schema.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_schema.py validate-modules:undocumented-parameter -plugins/modules/database/vertica/vertica_user.py validate-modules:doc-missing-type -plugins/modules/database/vertica/vertica_user.py validate-modules:undocumented-parameter -plugins/modules/files/iso_extract.py validate-modules:doc-default-does-not-match-spec -plugins/modules/identity/opendj/opendj_backendprop.py validate-modules:doc-missing-type -plugins/modules/identity/opendj/opendj_backendprop.py validate-modules:parameter-type-not-in-doc plugins/modules/monitoring/icinga2_host.py validate-modules:undocumented-parameter plugins/modules/net_tools/ldap/ldap_attr.py validate-modules:deprecation-mismatch plugins/modules/net_tools/ldap/ldap_attr.py validate-modules:invalid-documentation @@ -369,7 +351,6 @@ plugins/modules/remote_management/stacki/stacki_host.py validate-modules:doc-def plugins/modules/remote_management/stacki/stacki_host.py validate-modules:no-default-for-required-parameter plugins/modules/remote_management/stacki/stacki_host.py validate-modules:parameter-type-not-in-doc plugins/modules/remote_management/stacki/stacki_host.py validate-modules:undocumented-parameter -plugins/modules/source_control/bzr.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/git_config.py validate-modules:doc-missing-type plugins/modules/source_control/git_config.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_deploy_key.py validate-modules:doc-missing-type @@ -385,17 +366,8 @@ plugins/modules/source_control/github/github_release.py validate-modules:doc-mis plugins/modules/source_control/github/github_release.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_webhook.py validate-modules:parameter-type-not-in-doc plugins/modules/source_control/github/github_webhook_info.py validate-modules:parameter-type-not-in-doc -plugins/modules/source_control/hg.py validate-modules:parameter-type-not-in-doc -plugins/modules/storage/emc/emc_vnx_sg_member.py validate-modules:doc-missing-type -plugins/modules/storage/emc/emc_vnx_sg_member.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/glusterfs/gluster_heal_info.py validate-modules:parameter-type-not-in-doc plugins/modules/storage/glusterfs/gluster_volume.py validate-modules:parameter-type-not-in-doc -plugins/modules/storage/ibm/ibm_sa_domain.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_host.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_host_ports.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_pool.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_vol.py validate-modules:doc-missing-type -plugins/modules/storage/ibm/ibm_sa_vol_map.py validate-modules:doc-missing-type plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:deprecation-mismatch plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:invalid-documentation plugins/modules/storage/netapp/na_cdot_aggregate.py validate-modules:missing-main-call