From cfe011d6e9a9825c6026e5836a3ad62bfa258596 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Wed, 19 Dec 2018 16:11:21 +0800 Subject: [PATCH] mcclient: region tasks client TaskComplete and TaskFailed --- pkg/mcclient/modules/mod_tasks.go | 42 ++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/pkg/mcclient/modules/mod_tasks.go b/pkg/mcclient/modules/mod_tasks.go index 6d0650099c..49040264b2 100644 --- a/pkg/mcclient/modules/mod_tasks.go +++ b/pkg/mcclient/modules/mod_tasks.go @@ -1,11 +1,43 @@ package modules +import ( + "time" + + "yunion.io/x/jsonutils" + "yunion.io/x/log" + + "yunion.io/x/onecloud/pkg/mcclient" +) + var ( Tasks ResourceManager - ComputeTasks ResourceManager + ComputeTasks ComputeTasksManager ) +type ComputeTasksManager struct { + ResourceManager +} + +func (man ComputeTasksManager) TaskComplete(session *mcclient.ClientSession, taskId string, params jsonutils.JSONObject) { + for i := 0; i < 3; i++ { + _, err := man.PerformClassAction(session, taskId, params) + if err == nil { + log.Infof("Sync task %s complete succ", taskId) + break + } + log.Errorf("Sync task %s complete error: %v", taskId, err) + time.Sleep(5 * time.Second) + } +} + +func (man ComputeTasksManager) TaskFailed(session *mcclient.ClientSession, taskId string, err error) { + params := jsonutils.NewDict() + params.Add(jsonutils.NewString("error"), "__status__") + params.Add(jsonutils.NewString(err.Error()), "__reason__") + man.TaskComplete(session, taskId, params) +} + func init() { Tasks = NewITSMManager("task", "taskman", []string{"id", "status", "create_by", "update_by", "delete_by", "gmt_create", "gmt_modified", "gmt_delete", "is_deleted", "project_id", "remark", "instance_id", "business_id", "task_id", "task_type", "task_name", "task_status", "current_approver", "approver_name", "receive_time", "finish_time", "result", "content", "common_start_string"}, @@ -13,8 +45,10 @@ func init() { ) register(&Tasks) - ComputeTasks = NewComputeManager("task", "tasks", - []string{}, - []string{"Id", "Obj_name", "Obj_Id", "Task_name", "Stage", "Created_at"}) + ComputeTasks = ComputeTasksManager{ + ResourceManager: NewComputeManager("task", "tasks", + []string{}, + []string{"Id", "Obj_name", "Obj_Id", "Task_name", "Stage", "Created_at"}), + } registerCompute(&ComputeTasks) }