summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/argspec
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/argspec')
-rw-r--r--test/integration/targets/argspec/aliases2
-rw-r--r--test/integration/targets/argspec/library/argspec.py268
-rw-r--r--test/integration/targets/argspec/tasks/main.yml659
-rw-r--r--test/integration/targets/argspec/tasks/password_no_log.yml14
4 files changed, 943 insertions, 0 deletions
diff --git a/test/integration/targets/argspec/aliases b/test/integration/targets/argspec/aliases
new file mode 100644
index 0000000..498fedd
--- /dev/null
+++ b/test/integration/targets/argspec/aliases
@@ -0,0 +1,2 @@
+shippable/posix/group4
+context/controller
diff --git a/test/integration/targets/argspec/library/argspec.py b/test/integration/targets/argspec/library/argspec.py
new file mode 100644
index 0000000..b6d6d11
--- /dev/null
+++ b/test/integration/targets/argspec/library/argspec.py
@@ -0,0 +1,268 @@
+#!/usr/bin/python
+# Copyright: (c) 2020, Matt Martz <matt@sivel.net>
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+from ansible.module_utils.basic import AnsibleModule
+
+
+def main():
+ module = AnsibleModule(
+ {
+ 'required': {
+ 'required': True,
+ },
+ 'required_one_of_one': {},
+ 'required_one_of_two': {},
+ 'required_by_one': {},
+ 'required_by_two': {},
+ 'required_by_three': {},
+ 'state': {
+ 'type': 'str',
+ 'choices': ['absent', 'present'],
+ },
+ 'path': {},
+ 'content': {},
+ 'mapping': {
+ 'type': 'dict',
+ },
+ 'required_one_of': {
+ 'required_one_of': [['thing', 'other']],
+ 'type': 'list',
+ 'elements': 'dict',
+ 'options': {
+ 'thing': {},
+ 'other': {'aliases': ['other_alias']},
+ },
+ },
+ 'required_by': {
+ 'required_by': {'thing': 'other'},
+ 'type': 'list',
+ 'elements': 'dict',
+ 'options': {
+ 'thing': {},
+ 'other': {},
+ },
+ },
+ 'required_together': {
+ 'required_together': [['thing', 'other']],
+ 'type': 'list',
+ 'elements': 'dict',
+ 'options': {
+ 'thing': {},
+ 'other': {},
+ 'another': {},
+ },
+ },
+ 'required_if': {
+ 'required_if': (
+ ('thing', 'foo', ('other',), True),
+ ),
+ 'type': 'list',
+ 'elements': 'dict',
+ 'options': {
+ 'thing': {},
+ 'other': {},
+ 'another': {},
+ },
+ },
+ 'json': {
+ 'type': 'json',
+ },
+ 'fail_on_missing_params': {
+ 'type': 'list',
+ 'default': [],
+ },
+ 'needed_param': {},
+ 'required_together_one': {},
+ 'required_together_two': {},
+ 'suboptions_list_no_elements': {
+ 'type': 'list',
+ 'options': {
+ 'thing': {},
+ },
+ },
+ 'choices_with_strings_like_bools': {
+ 'type': 'str',
+ 'choices': [
+ 'on',
+ 'off',
+ ],
+ },
+ 'choices': {
+ 'type': 'str',
+ 'choices': [
+ 'foo',
+ 'bar',
+ ],
+ },
+ 'list_choices': {
+ 'type': 'list',
+ 'choices': [
+ 'foo',
+ 'bar',
+ 'baz',
+ ],
+ },
+ 'primary': {
+ 'type': 'str',
+ 'aliases': [
+ 'alias',
+ ],
+ },
+ 'password': {
+ 'type': 'str',
+ 'no_log': True,
+ },
+ 'not_a_password': {
+ 'type': 'str',
+ 'no_log': False,
+ },
+ 'maybe_password': {
+ 'type': 'str',
+ },
+ 'int': {
+ 'type': 'int',
+ },
+ 'apply_defaults': {
+ 'type': 'dict',
+ 'apply_defaults': True,
+ 'options': {
+ 'foo': {
+ 'type': 'str',
+ },
+ 'bar': {
+ 'type': 'str',
+ 'default': 'baz',
+ 'aliases': ['bar_alias1', 'bar_alias2'],
+ },
+ },
+ },
+ 'deprecation_aliases': {
+ 'type': 'str',
+ 'aliases': [
+ 'deprecation_aliases_version',
+ 'deprecation_aliases_date',
+ ],
+ 'deprecated_aliases': [
+ {
+ 'name': 'deprecation_aliases_version',
+ 'version': '2.0.0',
+ 'collection_name': 'foo.bar',
+ },
+ {
+ 'name': 'deprecation_aliases_date',
+ 'date': '2023-01-01',
+ 'collection_name': 'foo.bar',
+ },
+ ],
+ },
+ 'deprecation_param_version': {
+ 'type': 'str',
+ 'removed_in_version': '2.0.0',
+ 'removed_from_collection': 'foo.bar',
+ },
+ 'deprecation_param_date': {
+ 'type': 'str',
+ 'removed_at_date': '2023-01-01',
+ 'removed_from_collection': 'foo.bar',
+ },
+ 'subdeprecation': {
+ 'aliases': [
+ 'subdeprecation_alias',
+ ],
+ 'type': 'dict',
+ 'options': {
+ 'deprecation_aliases': {
+ 'type': 'str',
+ 'aliases': [
+ 'deprecation_aliases_version',
+ 'deprecation_aliases_date',
+ ],
+ 'deprecated_aliases': [
+ {
+ 'name': 'deprecation_aliases_version',
+ 'version': '2.0.0',
+ 'collection_name': 'foo.bar',
+ },
+ {
+ 'name': 'deprecation_aliases_date',
+ 'date': '2023-01-01',
+ 'collection_name': 'foo.bar',
+ },
+ ],
+ },
+ 'deprecation_param_version': {
+ 'type': 'str',
+ 'removed_in_version': '2.0.0',
+ 'removed_from_collection': 'foo.bar',
+ },
+ 'deprecation_param_date': {
+ 'type': 'str',
+ 'removed_at_date': '2023-01-01',
+ 'removed_from_collection': 'foo.bar',
+ },
+ },
+ },
+ 'subdeprecation_list': {
+ 'type': 'list',
+ 'elements': 'dict',
+ 'options': {
+ 'deprecation_aliases': {
+ 'type': 'str',
+ 'aliases': [
+ 'deprecation_aliases_version',
+ 'deprecation_aliases_date',
+ ],
+ 'deprecated_aliases': [
+ {
+ 'name': 'deprecation_aliases_version',
+ 'version': '2.0.0',
+ 'collection_name': 'foo.bar',
+ },
+ {
+ 'name': 'deprecation_aliases_date',
+ 'date': '2023-01-01',
+ 'collection_name': 'foo.bar',
+ },
+ ],
+ },
+ 'deprecation_param_version': {
+ 'type': 'str',
+ 'removed_in_version': '2.0.0',
+ 'removed_from_collection': 'foo.bar',
+ },
+ 'deprecation_param_date': {
+ 'type': 'str',
+ 'removed_at_date': '2023-01-01',
+ 'removed_from_collection': 'foo.bar',
+ },
+ },
+ }
+ },
+ required_if=(
+ ('state', 'present', ('path', 'content'), True),
+ ),
+ mutually_exclusive=(
+ ('path', 'content'),
+ ),
+ required_one_of=(
+ ('required_one_of_one', 'required_one_of_two'),
+ ),
+ required_by={
+ 'required_by_one': ('required_by_two', 'required_by_three'),
+ },
+ required_together=(
+ ('required_together_one', 'required_together_two'),
+ ),
+ )
+
+ module.fail_on_missing_params(module.params['fail_on_missing_params'])
+
+ module.exit_json(**module.params)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/test/integration/targets/argspec/tasks/main.yml b/test/integration/targets/argspec/tasks/main.yml
new file mode 100644
index 0000000..6e8ec05
--- /dev/null
+++ b/test/integration/targets/argspec/tasks/main.yml
@@ -0,0 +1,659 @@
+- argspec:
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_one_of_one: value
+ register: argspec_required_fail
+ ignore_errors: true
+
+- argspec:
+ required: value
+ required_one_of_two: value
+
+- argspec:
+ required: value
+ register: argspec_required_one_of_fail
+ ignore_errors: true
+
+- argspec:
+ required: value
+ required_one_of_two: value
+ required_by_one: value
+ required_by_two: value
+ required_by_three: value
+
+- argspec:
+ required: value
+ required_one_of_two: value
+ required_by_one: value
+ required_by_two: value
+ register: argspec_required_by_fail
+ ignore_errors: true
+
+- argspec:
+ state: absent
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ state: present
+ required: value
+ required_one_of_one: value
+ register: argspec_required_if_fail
+ ignore_errors: true
+
+- argspec:
+ state: present
+ path: foo
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ state: present
+ content: foo
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ state: present
+ content: foo
+ path: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_mutually_exclusive_fail
+ ignore_errors: true
+
+- argspec:
+ mapping:
+ foo: bar
+ required: value
+ required_one_of_one: value
+ register: argspec_good_mapping
+
+- argspec:
+ mapping: foo=bar
+ required: value
+ required_one_of_one: value
+ register: argspec_good_mapping_kv
+
+- argspec:
+ mapping: !!str '{"foo": "bar"}'
+ required: value
+ required_one_of_one: value
+ register: argspec_good_mapping_json
+
+- argspec:
+ mapping: !!str '{"foo": False}'
+ required: value
+ required_one_of_one: value
+ register: argspec_good_mapping_dict_repr
+
+- argspec:
+ mapping: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_bad_mapping_string
+ ignore_errors: true
+
+- argspec:
+ mapping: 1
+ required: value
+ required_one_of_one: value
+ register: argspec_bad_mapping_int
+ ignore_errors: true
+
+- argspec:
+ mapping:
+ - foo
+ - bar
+ required: value
+ required_one_of_one: value
+ register: argspec_bad_mapping_list
+ ignore_errors: true
+
+- argspec:
+ required_together:
+ - thing: foo
+ other: bar
+ another: baz
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_together:
+ - another: baz
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_together:
+ - thing: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_required_together_fail
+ ignore_errors: true
+
+- argspec:
+ required_together:
+ - thing: foo
+ other: bar
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_if:
+ - thing: bar
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_if:
+ - thing: foo
+ other: bar
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_if:
+ - thing: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_required_if_fail_2
+ ignore_errors: true
+
+- argspec:
+ required_one_of:
+ - thing: foo
+ other: bar
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_one_of:
+ - {}
+ required: value
+ required_one_of_one: value
+ register: argspec_required_one_of_fail_2
+ ignore_errors: true
+
+- argspec:
+ required_by:
+ - thing: foo
+ other: bar
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_by:
+ - thing: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_required_by_fail_2
+ ignore_errors: true
+
+- argspec:
+ json: !!str '{"foo": "bar"}'
+ required: value
+ required_one_of_one: value
+ register: argspec_good_json_string
+
+- argspec:
+ json:
+ foo: bar
+ required: value
+ required_one_of_one: value
+ register: argspec_good_json_dict
+
+- argspec:
+ json: 1
+ required: value
+ required_one_of_one: value
+ register: argspec_bad_json
+ ignore_errors: true
+
+- argspec:
+ fail_on_missing_params:
+ - needed_param
+ needed_param: whatever
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ fail_on_missing_params:
+ - needed_param
+ required: value
+ required_one_of_one: value
+ register: argspec_fail_on_missing_params_bad
+ ignore_errors: true
+
+- argspec:
+ required_together_one: foo
+ required_together_two: bar
+ required: value
+ required_one_of_one: value
+
+- argspec:
+ required_together_one: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_fail_required_together_2
+ ignore_errors: true
+
+- argspec:
+ suboptions_list_no_elements:
+ - thing: foo
+ required: value
+ required_one_of_one: value
+ register: argspec_suboptions_list_no_elements
+
+- argspec:
+ choices_with_strings_like_bools: on
+ required: value
+ required_one_of_one: value
+ register: argspec_choices_with_strings_like_bools_true
+
+- argspec:
+ choices_with_strings_like_bools: 'on'
+ required: value
+ required_one_of_one: value
+ register: argspec_choices_with_strings_like_bools_true_bool
+
+- argspec:
+ choices_with_strings_like_bools: off
+ required: value
+ required_one_of_one: value
+ register: argspec_choices_with_strings_like_bools_false
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ choices: foo
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ choices: baz
+ register: argspec_choices_bad_choice
+ ignore_errors: true
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ list_choices:
+ - bar
+ - baz
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ list_choices:
+ - bar
+ - baz
+ - qux
+ register: argspec_list_choices_bad_choice
+ ignore_errors: true
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ primary: foo
+ register: argspec_aliases_primary
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ alias: foo
+ register: argspec_aliases_alias
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ primary: foo
+ alias: foo
+ register: argspec_aliases_both
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ primary: foo
+ alias: bar
+ register: argspec_aliases_both_different
+
+- command: >-
+ ansible localhost -m argspec
+ -a 'required=value required_one_of_one=value primary=foo alias=bar'
+ environment:
+ ANSIBLE_LIBRARY: '{{ role_path }}/library'
+ register: argspec_aliases_both_warning
+
+- command: ansible localhost -m import_role -a 'role=argspec tasks_from=password_no_log.yml'
+ register: argspec_password_no_log
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ int: 1
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ int: foo
+ register: argspec_int_invalid
+ ignore_errors: true
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ register: argspec_apply_defaults_not_specified
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ apply_defaults: ~
+ register: argspec_apply_defaults_none
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ apply_defaults: {}
+ register: argspec_apply_defaults_empty
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ apply_defaults:
+ foo: bar
+ register: argspec_apply_defaults_one
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ deprecation_aliases_version: value
+ register: deprecation_alias_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ deprecation_aliases_date: value
+ register: deprecation_alias_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ deprecation_param_version: value
+ register: deprecation_param_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ deprecation_param_date: value
+ register: deprecation_param_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation:
+ deprecation_aliases_version: value
+ register: sub_deprecation_alias_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation:
+ deprecation_aliases_date: value
+ register: sub_deprecation_alias_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation:
+ deprecation_param_version: value
+ register: sub_deprecation_param_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation:
+ deprecation_param_date: value
+ register: sub_deprecation_param_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_alias:
+ deprecation_aliases_version: value
+ register: subalias_deprecation_alias_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_alias:
+ deprecation_aliases_date: value
+ register: subalias_deprecation_alias_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_alias:
+ deprecation_param_version: value
+ register: subalias_deprecation_param_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_alias:
+ deprecation_param_date: value
+ register: subalias_deprecation_param_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_list:
+ - deprecation_aliases_version: value
+ register: sublist_deprecation_alias_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_list:
+ - deprecation_aliases_date: value
+ register: sublist_deprecation_alias_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_list:
+ - deprecation_param_version: value
+ register: sublist_deprecation_param_version
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ subdeprecation_list:
+ - deprecation_param_date: value
+ register: sublist_deprecation_param_date
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ apply_defaults:
+ bar_alias1: foo
+ bar_alias2: baz
+ register: alias_warning_dict
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ required_one_of:
+ - other: foo
+ other_alias: bar
+ register: alias_warning_listdict
+
+- assert:
+ that:
+ - argspec_required_fail is failed
+
+ - argspec_required_one_of_fail is failed
+
+ - argspec_required_by_fail is failed
+
+ - argspec_required_if_fail is failed
+
+ - argspec_mutually_exclusive_fail is failed
+
+ - argspec_good_mapping is successful
+ - >-
+ argspec_good_mapping.mapping == {'foo': 'bar'}
+ - argspec_good_mapping_json is successful
+ - >-
+ argspec_good_mapping_json.mapping == {'foo': 'bar'}
+ - argspec_good_mapping_dict_repr is successful
+ - >-
+ argspec_good_mapping_dict_repr.mapping == {'foo': False}
+ - argspec_good_mapping_kv is successful
+ - >-
+ argspec_good_mapping_kv.mapping == {'foo': 'bar'}
+ - argspec_bad_mapping_string is failed
+ - argspec_bad_mapping_int is failed
+ - argspec_bad_mapping_list is failed
+
+ - argspec_required_together_fail is failed
+
+ - argspec_required_if_fail_2 is failed
+
+ - argspec_required_one_of_fail_2 is failed
+
+ - argspec_required_by_fail_2 is failed
+
+ - argspec_good_json_string is successful
+ - >-
+ argspec_good_json_string.json == '{"foo": "bar"}'
+ - argspec_good_json_dict is successful
+ - >-
+ argspec_good_json_dict.json == '{"foo": "bar"}'
+ - argspec_bad_json is failed
+
+ - argspec_fail_on_missing_params_bad is failed
+
+ - argspec_fail_required_together_2 is failed
+
+ - >-
+ argspec_suboptions_list_no_elements.suboptions_list_no_elements.0 == {'thing': 'foo'}
+
+ - argspec_choices_with_strings_like_bools_true.choices_with_strings_like_bools == 'on'
+ - argspec_choices_with_strings_like_bools_true_bool.choices_with_strings_like_bools == 'on'
+ - argspec_choices_with_strings_like_bools_false.choices_with_strings_like_bools == 'off'
+
+ - argspec_choices_bad_choice is failed
+
+ - argspec_list_choices_bad_choice is failed
+
+ - argspec_aliases_primary.primary == 'foo'
+ - argspec_aliases_primary.alias is undefined
+ - argspec_aliases_alias.primary == 'foo'
+ - argspec_aliases_alias.alias == 'foo'
+ - argspec_aliases_both.primary == 'foo'
+ - argspec_aliases_both.alias == 'foo'
+ - argspec_aliases_both_different.primary == 'bar'
+ - argspec_aliases_both_different.alias == 'bar'
+ - '"[WARNING]: Both option primary and its alias alias are set." in argspec_aliases_both_warning.stderr'
+
+ - '"Module did not set no_log for maybe_password" in argspec_password_no_log.stderr'
+ - '"Module did not set no_log for password" not in argspec_password_no_log.stderr'
+ - '"Module did not set no_log for not_a_password" not in argspec_password_no_log.stderr'
+ - argspec_password_no_log.stdout|regex_findall('VALUE_SPECIFIED_IN_NO_LOG_PARAMETER')|length == 1
+
+ - argspec_int_invalid is failed
+
+ - "argspec_apply_defaults_not_specified.apply_defaults == {'foo': none, 'bar': 'baz'}"
+ - "argspec_apply_defaults_none.apply_defaults == {'foo': none, 'bar': 'baz'}"
+ - "argspec_apply_defaults_empty.apply_defaults == {'foo': none, 'bar': 'baz'}"
+ - "argspec_apply_defaults_one.apply_defaults == {'foo': 'bar', 'bar': 'baz'}"
+
+ - deprecation_alias_version.deprecations | length == 1
+ - deprecation_alias_version.deprecations[0].msg == "Alias 'deprecation_aliases_version' is deprecated. See the module docs for more information"
+ - deprecation_alias_version.deprecations[0].collection_name == 'foo.bar'
+ - deprecation_alias_version.deprecations[0].version == '2.0.0'
+ - "'date' not in deprecation_alias_version.deprecations[0]"
+ - deprecation_alias_date.deprecations | length == 1
+ - deprecation_alias_date.deprecations[0].msg == "Alias 'deprecation_aliases_date' is deprecated. See the module docs for more information"
+ - deprecation_alias_date.deprecations[0].collection_name == 'foo.bar'
+ - deprecation_alias_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in deprecation_alias_date.deprecations[0]"
+ - deprecation_param_version.deprecations | length == 1
+ - deprecation_param_version.deprecations[0].msg == "Param 'deprecation_param_version' is deprecated. See the module docs for more information"
+ - deprecation_param_version.deprecations[0].collection_name == 'foo.bar'
+ - deprecation_param_version.deprecations[0].version == '2.0.0'
+ - "'date' not in deprecation_param_version.deprecations[0]"
+ - deprecation_param_date.deprecations | length == 1
+ - deprecation_param_date.deprecations[0].msg == "Param 'deprecation_param_date' is deprecated. See the module docs for more information"
+ - deprecation_param_date.deprecations[0].collection_name == 'foo.bar'
+ - deprecation_param_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in deprecation_param_date.deprecations[0]"
+
+ - sub_deprecation_alias_version.deprecations | length == 1
+ - sub_deprecation_alias_version.deprecations[0].msg == "Alias 'subdeprecation.deprecation_aliases_version' is deprecated. See the module docs for more information"
+ - sub_deprecation_alias_version.deprecations[0].collection_name == 'foo.bar'
+ - sub_deprecation_alias_version.deprecations[0].version == '2.0.0'
+ - "'date' not in sub_deprecation_alias_version.deprecations[0]"
+ - sub_deprecation_alias_date.deprecations | length == 1
+ - sub_deprecation_alias_date.deprecations[0].msg == "Alias 'subdeprecation.deprecation_aliases_date' is deprecated. See the module docs for more information"
+ - sub_deprecation_alias_date.deprecations[0].collection_name == 'foo.bar'
+ - sub_deprecation_alias_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in sub_deprecation_alias_date.deprecations[0]"
+ - sub_deprecation_param_version.deprecations | length == 1
+ - sub_deprecation_param_version.deprecations[0].msg == "Param 'subdeprecation[\"deprecation_param_version\"]' is deprecated. See the module docs for more information"
+ - sub_deprecation_param_version.deprecations[0].collection_name == 'foo.bar'
+ - sub_deprecation_param_version.deprecations[0].version == '2.0.0'
+ - "'date' not in sub_deprecation_param_version.deprecations[0]"
+ - sub_deprecation_param_date.deprecations | length == 1
+ - sub_deprecation_param_date.deprecations[0].msg == "Param 'subdeprecation[\"deprecation_param_date\"]' is deprecated. See the module docs for more information"
+ - sub_deprecation_param_date.deprecations[0].collection_name == 'foo.bar'
+ - sub_deprecation_param_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in sub_deprecation_param_date.deprecations[0]"
+
+ - subalias_deprecation_alias_version.deprecations | length == 1
+ - subalias_deprecation_alias_version.deprecations[0].msg == "Alias 'subdeprecation.deprecation_aliases_version' is deprecated. See the module docs for more information"
+ - subalias_deprecation_alias_version.deprecations[0].collection_name == 'foo.bar'
+ - subalias_deprecation_alias_version.deprecations[0].version == '2.0.0'
+ - "'date' not in subalias_deprecation_alias_version.deprecations[0]"
+ - subalias_deprecation_alias_date.deprecations | length == 1
+ - subalias_deprecation_alias_date.deprecations[0].msg == "Alias 'subdeprecation.deprecation_aliases_date' is deprecated. See the module docs for more information"
+ - subalias_deprecation_alias_date.deprecations[0].collection_name == 'foo.bar'
+ - subalias_deprecation_alias_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in subalias_deprecation_alias_date.deprecations[0]"
+ - subalias_deprecation_param_version.deprecations | length == 1
+ - subalias_deprecation_param_version.deprecations[0].msg == "Param 'subdeprecation[\"deprecation_param_version\"]' is deprecated. See the module docs for more information"
+ - subalias_deprecation_param_version.deprecations[0].collection_name == 'foo.bar'
+ - subalias_deprecation_param_version.deprecations[0].version == '2.0.0'
+ - "'date' not in subalias_deprecation_param_version.deprecations[0]"
+ - subalias_deprecation_param_date.deprecations | length == 1
+ - subalias_deprecation_param_date.deprecations[0].msg == "Param 'subdeprecation[\"deprecation_param_date\"]' is deprecated. See the module docs for more information"
+ - subalias_deprecation_param_date.deprecations[0].collection_name == 'foo.bar'
+ - subalias_deprecation_param_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in subalias_deprecation_param_date.deprecations[0]"
+
+ - sublist_deprecation_alias_version.deprecations | length == 1
+ - sublist_deprecation_alias_version.deprecations[0].msg == "Alias 'subdeprecation_list[0].deprecation_aliases_version' is deprecated. See the module docs for more information"
+ - sublist_deprecation_alias_version.deprecations[0].collection_name == 'foo.bar'
+ - sublist_deprecation_alias_version.deprecations[0].version == '2.0.0'
+ - "'date' not in sublist_deprecation_alias_version.deprecations[0]"
+ - sublist_deprecation_alias_date.deprecations | length == 1
+ - sublist_deprecation_alias_date.deprecations[0].msg == "Alias 'subdeprecation_list[0].deprecation_aliases_date' is deprecated. See the module docs for more information"
+ - sublist_deprecation_alias_date.deprecations[0].collection_name == 'foo.bar'
+ - sublist_deprecation_alias_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in sublist_deprecation_alias_date.deprecations[0]"
+ - sublist_deprecation_param_version.deprecations | length == 1
+ - sublist_deprecation_param_version.deprecations[0].msg == "Param 'subdeprecation_list[\"deprecation_param_version\"]' is deprecated. See the module docs for more information"
+ - sublist_deprecation_param_version.deprecations[0].collection_name == 'foo.bar'
+ - sublist_deprecation_param_version.deprecations[0].version == '2.0.0'
+ - "'date' not in sublist_deprecation_param_version.deprecations[0]"
+ - sublist_deprecation_param_date.deprecations | length == 1
+ - sublist_deprecation_param_date.deprecations[0].msg == "Param 'subdeprecation_list[\"deprecation_param_date\"]' is deprecated. See the module docs for more information"
+ - sublist_deprecation_param_date.deprecations[0].collection_name == 'foo.bar'
+ - sublist_deprecation_param_date.deprecations[0].date == '2023-01-01'
+ - "'version' not in sublist_deprecation_param_date.deprecations[0]"
+
+ - "'Both option apply_defaults.bar and its alias apply_defaults.bar_alias2 are set.' in alias_warning_dict.warnings"
+ - "'Both option required_one_of[0].other and its alias required_one_of[0].other_alias are set.' in alias_warning_listdict.warnings"
diff --git a/test/integration/targets/argspec/tasks/password_no_log.yml b/test/integration/targets/argspec/tasks/password_no_log.yml
new file mode 100644
index 0000000..99c3307
--- /dev/null
+++ b/test/integration/targets/argspec/tasks/password_no_log.yml
@@ -0,0 +1,14 @@
+- argspec:
+ required: value
+ required_one_of_one: value
+ password: foo
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ not_a_password: foo
+
+- argspec:
+ required: value
+ required_one_of_one: value
+ maybe_password: foo