module_utils/basic.py: Support logical or condition in required_if (#20220)
* Support logical or condition in required_if Add logical 'or' condition support in 'required_if' for requirements. * If requirements is a list all parameters within it should be present. * If requirements is a set atleast one parameter should be present * Fix review commentpull/4420/head
parent
bbe2903d63
commit
01f4d4a666
|
@ -1467,14 +1467,26 @@ class AnsibleModule(object):
|
|||
''' ensure that parameters which conditionally required are present '''
|
||||
if spec is None:
|
||||
return
|
||||
for (key, val, requirements) in spec:
|
||||
for sp in spec:
|
||||
missing = []
|
||||
max_missing_count = 0
|
||||
is_one_of = False
|
||||
if len(sp) == 4:
|
||||
key, val, requirements, is_one_of = sp
|
||||
else:
|
||||
key, val, requirements = sp
|
||||
|
||||
# is_one_of is True at least one requirement should be
|
||||
# present, else all requirements should be present.
|
||||
if is_one_of:
|
||||
max_missing_count = len(requirements)
|
||||
|
||||
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:
|
||||
if len(missing) and len(missing) >= max_missing_count:
|
||||
self.fail_json(msg="%s is %s but the following are missing: %s" % (key, val, ','.join(missing)))
|
||||
|
||||
def _check_argument_values(self):
|
||||
|
|
Loading…
Reference in New Issue