diff --git a/awx/api/views.py b/awx/api/views.py index f1047b6bfd..b85d8ab903 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -72,6 +72,7 @@ from awx.api.serializers import * # noqa from awx.api.metadata import RoleMetadata from awx.main.consumers import emit_channel_notification from awx.main.models.unified_jobs import ACTIVE_STATES +#from awx.main.scheduler.tasks import run_job_complete logger = logging.getLogger('awx.api.views') @@ -2873,6 +2874,8 @@ class WorkflowJobCancel(RetrieveAPIView): obj = self.get_object() if obj.can_cancel: obj.cancel() + #TODO: Figure out whether an immediate schedule is needed. + #run_job_complete.delay(obj.id) return Response(status=status.HTTP_202_ACCEPTED) else: return self.http_method_not_allowed(request, *args, **kwargs) diff --git a/awx/main/models/workflow.py b/awx/main/models/workflow.py index 892209ea50..ff457fd207 100644 --- a/awx/main/models/workflow.py +++ b/awx/main/models/workflow.py @@ -423,8 +423,3 @@ class WorkflowJob(UnifiedJob, WorkflowJobOptions, JobNotificationMixin, Workflow ''' def start_celery_task(self, opts, error_callback, success_callback): return None - - def cancel(self): - if self.can_cancel: - self.status = 'canceled' - self.save(update_fields=['status']) diff --git a/awx/main/scheduler/__init__.py b/awx/main/scheduler/__init__.py index aa0e223420..6237c6eeb7 100644 --- a/awx/main/scheduler/__init__.py +++ b/awx/main/scheduler/__init__.py @@ -130,8 +130,11 @@ class TaskManager(): def process_finished_workflow_jobs(self, workflow_jobs): for workflow_job in workflow_jobs: dag = WorkflowDAG(workflow_job) - if workflow_job.status == 'canceled': + if workflow_job.cancel_flag: + workflow_job.status = 'canceled' + workflow_job.save() dag.bfs_nodes_to_cancel() + connection.on_commit(lambda: workflow_job.websocket_emit_status(workflow_job.status)) elif dag.is_workflow_done(): if workflow_job._has_failed(): workflow_job.status = 'failed'