You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible/test/units/module_utils
Dag Wieers cd9471ef17 Introduce new 'required_by' argument_spec option (#28662)
* Introduce new "required_by' argument_spec option

This PR introduces a new **required_by** argument_spec option which allows you to say *"if parameter A is set, parameter B and C are required as well"*.

- The difference with **required_if** is that it can only add dependencies if a parameter is set to a specific value, not when it is just defined.
- The difference with **required_together** is that it has a commutative property, so: *"Parameter A and B are required together, if one of them has been defined"*.

As an example, we need this for the complex options that the xml module provides. One of the issues we often see is that users are not using the correct combination of options, and then are surprised that the module does not perform the requested action(s).

This would be solved by adding the correct dependencies, and mutual exclusives. For us this is important to get this shipped together with the new xml module in Ansible v2.4. (This is related to bugfix https://github.com/ansible/ansible/pull/28657)

```python
    module = AnsibleModule(
        argument_spec=dict(
            path=dict(type='path', aliases=['dest', 'file']),
            xmlstring=dict(type='str'),
            xpath=dict(type='str'),
            namespaces=dict(type='dict', default={}),
            state=dict(type='str', default='present', choices=['absent',
'present'], aliases=['ensure']),
            value=dict(type='raw'),
            attribute=dict(type='raw'),
            add_children=dict(type='list'),
            set_children=dict(type='list'),
            count=dict(type='bool', default=False),
            print_match=dict(type='bool', default=False),
            pretty_print=dict(type='bool', default=False),
            content=dict(type='str', choices=['attribute', 'text']),
            input_type=dict(type='str', default='yaml', choices=['xml',
'yaml']),
            backup=dict(type='bool', default=False),
        ),
        supports_check_mode=True,
        required_by=dict(
            add_children=['xpath'],
            attribute=['value', 'xpath'],
            content=['xpath'],
            set_children=['xpath'],
            value=['xpath'],
        ),
        required_if=[
            ['count', True, ['xpath']],
            ['print_match', True, ['xpath']],
        ],
        required_one_of=[
            ['path', 'xmlstring'],
            ['add_children', 'content', 'count', 'pretty_print', 'print_match', 'set_children', 'value'],
        ],
        mutually_exclusive=[
            ['add_children', 'content', 'count', 'print_match','set_children', 'value'],
            ['path', 'xmlstring'],
        ],
    )
```

* Rebase and fix conflict

* Add modules that use required_by functionality

* Update required_by schema

* Fix rebase issue
6 years ago
..
aws Move unit test compat code out of `lib/ansible/`. (#46996) 6 years ago
basic Introduce new 'required_by' argument_spec option (#28662) 6 years ago
cloud Move unit test compat code out of `lib/ansible/`. (#46996) 6 years ago
common Add a CLIArgs Singleton class that will hold the parse cli arguments 6 years ago
docker docker modules: various adjustments (#51700) 6 years ago
ec2 Update bare exceptions to specify Exception. 6 years ago
facts parallelize getting mount info (#49398) 6 years ago
gcp Enable additional pylint rules and resolve issues found. (#47221) 6 years ago
json_utils Move unit test compat code out of `lib/ansible/`. (#46996) 6 years ago
net_tools Move unit test compat code out of `lib/ansible/`. (#46996) 6 years ago
network Fix unit tests on Python 3.8. 6 years ago
parsing
urls identity: Add GSSAPI suport for FreeIPA authentication (#52031) 6 years ago
xenserver Initial commit for xenserver module_util unit tests (#50850) 6 years ago
__init__.py
conftest.py
test_acme.py Code style adjustment. (#49329) 6 years ago
test_database.py
test_distribution_version.py facts: solaris: introduce distribution_major version detection for Solaris (#43978) 6 years ago
test_distro.py Fix unit tests on Python 3.8. 6 years ago
test_known_hosts.py
test_postgresql.py Move unit test compat code out of `lib/ansible/`. (#46996) 6 years ago
test_text.py
test_utm_utils.py Add optional headers to utm modules (#49856) 6 years ago
test_vmware.py Final round of moving modules to new import error msg (#51852) 6 years ago