mirror of
https://github.com/ansible/awx.git
synced 2026-05-17 06:17:36 -02:30
allow WFJT nodes without required variables
This commit is contained in:
@@ -3176,7 +3176,7 @@ class WorkflowJobTemplateNodeSerializer(LaunchConfigurationBaseSerializer):
|
|||||||
success_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
success_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
failure_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
failure_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
always_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
always_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
exclude_errors = ('required') # required variables may be provided by WFJT or on launch
|
exclude_errors = ('required',) # required variables may be provided by WFJT or on launch
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WorkflowJobTemplateNode
|
model = WorkflowJobTemplateNode
|
||||||
@@ -3574,7 +3574,7 @@ class JobLaunchSerializer(BaseSerializer):
|
|||||||
template = self.context.get('template')
|
template = self.context.get('template')
|
||||||
|
|
||||||
accepted, rejected, errors = template._accept_or_ignore_job_kwargs(
|
accepted, rejected, errors = template._accept_or_ignore_job_kwargs(
|
||||||
_exclude_errors=['prompts', 'required'], # make several error types non-blocking
|
_exclude_errors=['prompts'], # make several error types non-blocking
|
||||||
**attrs)
|
**attrs)
|
||||||
self._ignored_fields = rejected
|
self._ignored_fields = rejected
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ class SurveyJobTemplateMixin(models.Model):
|
|||||||
create_kwargs['extra_vars'] = json.dumps(extra_vars)
|
create_kwargs['extra_vars'] = json.dumps(extra_vars)
|
||||||
return create_kwargs
|
return create_kwargs
|
||||||
|
|
||||||
def _survey_element_validation(self, survey_element, data):
|
def _survey_element_validation(self, survey_element, data, validate_required=True):
|
||||||
# Don't apply validation to the `$encrypted$` placeholder; the decrypted
|
# Don't apply validation to the `$encrypted$` placeholder; the decrypted
|
||||||
# default (if any) will be validated against instead
|
# default (if any) will be validated against instead
|
||||||
errors = []
|
errors = []
|
||||||
@@ -185,11 +185,13 @@ class SurveyJobTemplateMixin(models.Model):
|
|||||||
password_value == '$encrypted$'
|
password_value == '$encrypted$'
|
||||||
):
|
):
|
||||||
if survey_element.get('default') is None and survey_element['required']:
|
if survey_element.get('default') is None and survey_element['required']:
|
||||||
errors.append("'%s' value missing" % survey_element['variable'])
|
if validate_required:
|
||||||
|
errors.append("'%s' value missing" % survey_element['variable'])
|
||||||
return errors
|
return errors
|
||||||
|
|
||||||
if survey_element['variable'] not in data and survey_element['required']:
|
if survey_element['variable'] not in data and survey_element['required']:
|
||||||
errors.append("'%s' value missing" % survey_element['variable'])
|
if validate_required:
|
||||||
|
errors.append("'%s' value missing" % survey_element['variable'])
|
||||||
elif survey_element['type'] in ["textarea", "text", "password"]:
|
elif survey_element['type'] in ["textarea", "text", "password"]:
|
||||||
if survey_element['variable'] in data:
|
if survey_element['variable'] in data:
|
||||||
if type(data[survey_element['variable']]) not in (str, unicode):
|
if type(data[survey_element['variable']]) not in (str, unicode):
|
||||||
@@ -267,12 +269,14 @@ class SurveyJobTemplateMixin(models.Model):
|
|||||||
for survey_element in self.survey_spec.get("spec", []):
|
for survey_element in self.survey_spec.get("spec", []):
|
||||||
key = survey_element.get('variable', None)
|
key = survey_element.get('variable', None)
|
||||||
value = data.get(key, None)
|
value = data.get(key, None)
|
||||||
|
validate_required = 'required' not in _exclude_errors
|
||||||
if extra_passwords and key in extra_passwords and is_encrypted(value):
|
if extra_passwords and key in extra_passwords and is_encrypted(value):
|
||||||
element_errors = self._survey_element_validation(survey_element, {
|
element_errors = self._survey_element_validation(survey_element, {
|
||||||
key: decrypt_value(get_encryption_key('value', pk=None), value)
|
key: decrypt_value(get_encryption_key('value', pk=None), value)
|
||||||
})
|
}, validate_required=validate_required)
|
||||||
else:
|
else:
|
||||||
element_errors = self._survey_element_validation(survey_element, data)
|
element_errors = self._survey_element_validation(
|
||||||
|
survey_element, data, validate_required=validate_required)
|
||||||
|
|
||||||
if element_errors:
|
if element_errors:
|
||||||
survey_errors += element_errors
|
survey_errors += element_errors
|
||||||
|
|||||||
Reference in New Issue
Block a user