summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToshio Kuratomi <a.badger@gmail.com>2015-05-26 11:20:40 -0700
committerToshio Kuratomi <a.badger@gmail.com>2015-05-26 11:20:40 -0700
commitc6b286424f45d62ba96fd22c7a8de80696034507 (patch)
treec3a7ed4e7949781b0b92d05c31f8f9afd0169722
parentaea8758b440b834ab47c86252139b1ed73f3aa44 (diff)
parent61ae3c732ff024a9102d5f423eb7fa0c69ae1c46 (diff)
downloadansible-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.py18
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():