Touchup of validation logic from testing

This commit is contained in:
Alan Rominger
2023-01-18 15:56:09 -05:00
committed by Philip Douglass
parent 7f6f57bfee
commit 9777ce7fb8

View File

@@ -790,13 +790,14 @@ class CredentialTypeInjectorField(JSONSchemaField):
'extra_vars': { 'extra_vars': {
'type': 'object', 'type': 'object',
'patternProperties': { 'patternProperties': {
r'^(?:(?:{(?:{|%)[^{}]*?(?:%|})})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': { # http://docs.ansible.com/ansible/playbooks_variables.html#what-makes-a-valid-variable-name
"anyOf": [{'type': 'string'}, {'type': 'array'}, {'$ref': '#/properties/extra_vars'}] # plus, add ability to template
} r'^[a-zA-Z_\{\}]+[a-zA-Z0-9_\{\}]*$': {"anyOf": [{'type': 'string'}, {'type': 'array'}, {'$ref': '#/properties/extra_vars'}]}
}, },
'additionalProperties': False, 'additionalProperties': False,
}, },
}, },
'additionalProperties': False,
} }
def validate_env_var_allowed(self, env_var): def validate_env_var_allowed(self, env_var):
@@ -878,9 +879,12 @@ class CredentialTypeInjectorField(JSONSchemaField):
def validate_extra_vars(key, node): def validate_extra_vars(key, node):
if isinstance(node, dict): if isinstance(node, dict):
return {validate_extra_vars(key, k): validate_extra_vars("{key}.{k}".format(key=key, k=k), v) for k, v in node.items()} for k, v in node.items():
validate_template_string("extra_vars", 'a key' if key is None else key, k)
validate_extra_vars(k if key is None else "{key}.{k}".format(key=key, k=k), v)
elif isinstance(node, list): elif isinstance(node, list):
return [validate_extra_vars("{key}[{i}]".format(key=key, i=i), x) for i, x in enumerate(node)] for i, x in enumerate(node):
validate_extra_vars("{key}[{i}]".format(key=key, i=i), x)
else: else:
validate_template_string("extra_vars", key, node) validate_template_string("extra_vars", key, node)