From 735f5d14b3e189bcebffb36c1ebe70965e5637d3 Mon Sep 17 00:00:00 2001 From: Wayne Witzel III Date: Tue, 24 Jan 2017 16:39:41 -0500 Subject: [PATCH] ensure that launching respects default values --- awx/api/views.py | 2 +- awx/main/models/mixins.py | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/awx/api/views.py b/awx/api/views.py index 4f904645ae..63321ac537 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2450,9 +2450,9 @@ class JobTemplateSurveySpec(GenericAPIView): return Response(dict(error=_("'spec' must be a list of items.")), status=status.HTTP_400_BAD_REQUEST) if len(new_spec["spec"]) < 1: return Response(dict(error=_("'spec' doesn't contain any items.")), status=status.HTTP_400_BAD_REQUEST) + idx = 0 variable_set = set() - for survey_item in new_spec["spec"]: if not isinstance(survey_item, dict): return Response(dict(error=_("Survey question %s is not a json object.") % str(idx)), status=status.HTTP_400_BAD_REQUEST) diff --git a/awx/main/models/mixins.py b/awx/main/models/mixins.py index c929cb99fd..f9a638c6b7 100644 --- a/awx/main/models/mixins.py +++ b/awx/main/models/mixins.py @@ -105,14 +105,6 @@ class SurveyJobTemplateMixin(models.Model): # Job Template extra_vars extra_vars = self.extra_vars_dict - # Overwrite with job template extra vars with survey default vars - if self.survey_enabled and 'spec' in self.survey_spec: - for survey_element in self.survey_spec.get("spec", []): - if survey_element.get('type') == 'password': - if 'default' in survey_element and survey_element['default'].startswith('$encrypted$'): - continue - extra_vars[survey_element['variable']] = survey_element['default'] - # transform to dict if 'extra_vars' in kwargs: kwargs_extra_vars = kwargs['extra_vars'] @@ -120,6 +112,18 @@ class SurveyJobTemplateMixin(models.Model): else: kwargs_extra_vars = {} + # Overwrite with job template extra vars with survey default vars + if self.survey_enabled and 'spec' in self.survey_spec: + for survey_element in self.survey_spec.get("spec", []): + if survey_element.get('type') == 'password': + default = survey_element.get('default', None) + variable_key = survey_element['variable'] + if default is not None and variable_key in kwargs_extra_vars: + value = kwargs_extra_vars[variable_key] + if value.startswith('$encrypted$') and value != default: + kwargs_extra_vars[variable_key] = default + extra_vars[survey_element['variable']] = survey_element['default'] + # Overwrite job template extra vars with explicit job extra vars # and add on job extra vars extra_vars.update(kwargs_extra_vars) @@ -150,7 +154,6 @@ class SurveyJobTemplateMixin(models.Model): if 'max' in survey_element and survey_element['max'] not in ["", None] and len(data[survey_element['variable']]) > int(survey_element['max']): errors.append("'%s' value %s is too large (must be no more than %s)." % (survey_element['variable'], data[survey_element['variable']], survey_element['max'])) - elif survey_element['type'] == 'integer': if survey_element['variable'] in data: if type(data[survey_element['variable']]) != int: