From b941cb047027133d4b7e537b082d6b0598c88c89 Mon Sep 17 00:00:00 2001 From: Adam Ruzicka Date: Fri, 28 Jan 2022 15:42:00 +0100 Subject: [PATCH] Fixes #34344 - Add support for halting Requires https://github.com/Dynflow/dynflow/pull/406 --- .../foreman_tasks/tasks_controller.rb | 17 ++++++++--------- app/models/foreman_tasks/task/dynflow_task.rb | 4 ++++ foreman-tasks.gemspec | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/controllers/foreman_tasks/tasks_controller.rb b/app/controllers/foreman_tasks/tasks_controller.rb index 3c295b7bf..b972cb47c 100644 --- a/app/controllers/foreman_tasks/tasks_controller.rb +++ b/app/controllers/foreman_tasks/tasks_controller.rb @@ -69,7 +69,7 @@ def resume def unlock if @dynflow_task.paused? - unlock_task(@dynflow_task) + @dynflow_task.halt render json: { statusText: 'OK' } else render json: {}, status: :bad_request @@ -77,8 +77,13 @@ def unlock end def force_unlock - unlock_task(@dynflow_task) - render json: { statusText: 'OK' } + if @dynflow_task.pending? + @dynflow_task.halt + render json: { statusText: 'OK' } + else + # Cannot halt an already stopped task + render json: {}, status: :bad_request + end end # we need do this to make the Foreman helpers working properly @@ -92,12 +97,6 @@ def resource_class private - def unlock_task(task) - task.state = :stopped - task.locks.destroy_all - task.save! - end - def respond_with_tasks(scope) @tasks = filter(scope, paginate: false).with_duration csv_response(@tasks, [:id, :action, :state, :result, 'started_at.in_time_zone', 'ended_at.in_time_zone', :duration, :username], ['Id', 'Action', 'State', 'Result', 'Started At', 'Ended At', 'Duration', 'User']) diff --git a/app/models/foreman_tasks/task/dynflow_task.rb b/app/models/foreman_tasks/task/dynflow_task.rb index 80b0b3d74..a23f9210c 100644 --- a/app/models/foreman_tasks/task/dynflow_task.rb +++ b/app/models/foreman_tasks/task/dynflow_task.rb @@ -246,6 +246,10 @@ def self.model_name superclass.model_name end + def halt + ::ForemanTasks.dynflow.world.halt(external_id) + end + private def string_to_time(zone, time) diff --git a/foreman-tasks.gemspec b/foreman-tasks.gemspec index 8bde4470d..c3133d4e1 100644 --- a/foreman-tasks.gemspec +++ b/foreman-tasks.gemspec @@ -26,7 +26,7 @@ same resource. It also optionally provides Dynflow infrastructure for using it f s.test_files = `git ls-files test`.split("\n") s.extra_rdoc_files = Dir['README*', 'LICENSE'] - s.add_dependency "dynflow", '>= 1.6.0' + s.add_dependency "dynflow", '>= 1.7.0' s.add_dependency "get_process_mem" # for memory polling s.add_dependency "parse-cron", '~> 0.1.4' s.add_dependency "sinatra" # for Dynflow web console