diff options
author | Toshio Kuratomi <a.badger@gmail.com> | 2015-05-26 11:20:40 -0700 |
---|---|---|
committer | Toshio Kuratomi <a.badger@gmail.com> | 2015-05-26 11:20:40 -0700 |
commit | c6b286424f45d62ba96fd22c7a8de80696034507 (patch) | |
tree | c3a7ed4e7949781b0b92d05c31f8f9afd0169722 | |
parent | aea8758b440b834ab47c86252139b1ed73f3aa44 (diff) | |
parent | 61ae3c732ff024a9102d5f423eb7fa0c69ae1c46 (diff) | |
download | ansible-c6b286424f45d62ba96fd22c7a8de80696034507.tar.gz |
Merge pull request #9423 from emonty/features/required-if
Add required_if to AnsibleModule
-rw-r--r-- | lib/ansible/module_utils/basic.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 99971d17b1..935eb31e66 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -337,7 +337,8 @@ class AnsibleModule(object): def __init__(self, argument_spec, bypass_checks=False, no_log=False, check_invalid_arguments=True, mutually_exclusive=None, required_together=None, - required_one_of=None, add_file_common_args=False, supports_check_mode=False): + required_one_of=None, add_file_common_args=False, supports_check_mode=False, + required_if=None): ''' common code for quickly building an ansible module in Python @@ -385,6 +386,7 @@ class AnsibleModule(object): self._check_argument_types() self._check_required_together(required_together) self._check_required_one_of(required_one_of) + self._check_required_if(required_if) self._set_defaults(pre=False) if not self.no_log: @@ -958,6 +960,20 @@ class AnsibleModule(object): if len(missing) > 0: self.fail_json(msg="missing required arguments: %s" % ",".join(missing)) + def _check_required_if(self, spec): + ''' ensure that parameters which conditionally required are present ''' + if spec is None: + return + for (key, val, requirements) in spec: + missing = [] + if key in self.params and self.params[key] == val: + for check in requirements: + count = self._count_terms(check) + if count == 0: + missing.append(check) + if len(missing) > 0: + self.fail_json(msg="%s is %s but the following are missing: %s" % (key, val, ','.join(missing)) + def _check_argument_values(self): ''' ensure all arguments have the requested values, and there are no stray arguments ''' for (k,v) in self.argument_spec.iteritems(): |