From e6209d4d4f286d0660d007ac8b2c201a67da775c Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Thu, 13 Mar 2014 14:43:47 -0400 Subject: [PATCH] Make sure we check arguments passed to signal start before allowing it to proceed. --- awx/main/models/inventory.py | 7 +++++++ awx/main/models/jobs.py | 7 +++++++ awx/main/models/projects.py | 7 +++++++ awx/main/tests/tasks.py | 1 - 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index 606330b939..1c48df5b25 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -765,6 +765,13 @@ class InventoryUpdate(CommonTask): return 50 def signal_start(self, **kwargs): + if not self.can_start: + return False + needed = self._get_passwords_needed_to_start() + opts = dict([(field, kwargs.get(field, '')) for field in needed]) + if not all(opts.values()): + return False + json_args = json.dumps(kwargs) self.start_args = json_args self.save() diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index d621ee1404..55516ea5dc 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -385,6 +385,13 @@ class Job(CommonTask): return dependencies def signal_start(self, **kwargs): + if not self.can_start: + return False + needed = self._get_passwords_needed_to_start() + opts = dict([(field, kwargs.get(field, '')) for field in needed]) + if not all(opts.values()): + return False + json_args = json.dumps(kwargs) self.start_args = json_args self.save() diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index 94ab4d3cb7..37eaa89e67 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -377,6 +377,13 @@ class ProjectUpdate(CommonTask): return 20 def signal_start(self, **kwargs): + if not self.can_start: + return False + needed = self._get_passwords_needed_to_start() + opts = dict([(field, kwargs.get(field, '')) for field in needed]) + if not all(opts.values()): + return False + json_args = json.dumps(kwargs) self.start_args = json_args self.save() diff --git a/awx/main/tests/tasks.py b/awx/main/tests/tasks.py index a33513975b..3bbc4c7843 100644 --- a/awx/main/tests/tasks.py +++ b/awx/main/tests/tasks.py @@ -648,7 +648,6 @@ class RunJobTest(BaseCeleryTest): self.assertFalse(job.passwords_needed_to_start) self.build_args_callback = self._cancel_job_callback self.assertTrue(job.signal_start()) - self.assertEqual(job.status, 'waiting') job = Job.objects.get(pk=job.pk) self.check_job_result(job, 'canceled') self.assertEqual(job.cancel_flag, True)