From 3164c6d356ac830dc0cac25dd81221d5736b6e8c Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Thu, 4 Dec 2014 11:16:58 -0500 Subject: [PATCH] Fix an issue where we weren't properly dealing with extra data passed as survey answers when launching a job template --- awx/main/models/jobs.py | 17 +++++++++-------- awx/main/models/unified_jobs.py | 4 +++- awx/main/tests/jobs.py | 4 ++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 32361f64a4..b66074e9ff 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -445,16 +445,17 @@ class Job(UnifiedJob, JobOptions): return dependencies def handle_extra_data(self, extra_data): - if extra_data == "": - return - try: - evars = json.loads(self.extra_vars) - except Exception, e: - return - if evars is None: + print("Extra data: " + str(extra_data)) + if type(extra_data) == dict: evars = extra_data else: - evars.update(extra_data) + if extra_data == "": + return + try: + evars = json.loads(self.extra_vars) + except Exception, e: + logger.warn("Exception deserializing extra vars: " + str(e)) + print("Evars: " + str(evars)) self.update_fields(extra_vars=json.dumps(evars)) def copy(self): diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index d582209e73..e9dd64036d 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -695,12 +695,14 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique self.job_explanation = u'Missing needed fields: %s.' % missing_fields self.save(update_fields=['job_explanation']) return False + extra_data = dict([(field, kwargs[field]) for field in kwargs + if field not in needed]) + self.handle_extra_data(extra_data) task_class().apply_async((self.pk,), opts, link_error=error_callback) return True def signal_start(self, **kwargs): """Notify the task runner system to begin work on this task.""" - # Sanity check: If we are running unit tests, then run synchronously. if getattr(settings, 'CELERY_UNIT_TEST', False): return self.start(None, **kwargs) diff --git a/awx/main/tests/jobs.py b/awx/main/tests/jobs.py index 33ac90686d..3301538c6c 100644 --- a/awx/main/tests/jobs.py +++ b/awx/main/tests/jobs.py @@ -961,6 +961,10 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase): launch_url = reverse('api:job_template_launch', args=(new_jt_id,)) response = self.get(launch_url) self.assertTrue('favorite_color' in response['variables_needed_to_start']) + response = self.post(launch_url, dict(favorite_color="green"), expect=202) + job = Job.objects.get(pk=response["job"]) + job_extra = json.loads(job.extra_vars) + self.assertTrue("favorite_color" in job_extra) with self.current_user(self.user_sue): response = self.post(url, json.loads(TEST_SIMPLE_NONREQUIRED_SURVEY), expect=200)