diff --git a/pkg/cloudcommon/db/taskman/interface.go b/pkg/cloudcommon/db/taskman/interface.go index e849c49032..be89a8c804 100644 --- a/pkg/cloudcommon/db/taskman/interface.go +++ b/pkg/cloudcommon/db/taskman/interface.go @@ -37,7 +37,7 @@ type ITask interface { GetTaskRequestHeader() http.Header SetStageComplete(ctx context.Context, data *jsonutils.JSONDict) - SetStageFailed(ctx context.Context, reason string) + SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) GetPendingUsage(quota quotas.IQuota, index int) error ClearPendingUsage(index int) error diff --git a/pkg/cloudcommon/db/taskman/tasks.go b/pkg/cloudcommon/db/taskman/tasks.go index 4df261c97b..1d0da83b87 100644 --- a/pkg/cloudcommon/db/taskman/tasks.go +++ b/pkg/cloudcommon/db/taskman/tasks.go @@ -398,18 +398,29 @@ func execITask(taskValue reflect.Value, task *STask, odata jsonutils.JSONObject, taskFailed := false - data := odata - if data != nil { - taskStatus, _ := data.GetString("__status__") - if len(taskStatus) > 0 && taskStatus != "OK" { - taskFailed = true - if vdata, ok := data.(*jsonutils.JSONDict); ok { - reason, err := vdata.Get("__reason__") // only dict support Get - if err != nil { - reason = jsonutils.NewString(fmt.Sprintf("Task failed due to unknown remote errors! %s", odata)) - vdata.Set("__reason__", reason) + var data jsonutils.JSONObject + if odata != nil { + switch dictdata := odata.(type) { + case *jsonutils.JSONDict: + taskStatus, _ := data.GetString("__status__") + if len(taskStatus) > 0 && taskStatus != "OK" { + taskFailed = true + dictdata.Set("__stage__", jsonutils.NewString(task.Stage)) + if !dictdata.Contains("__reason__") { + reasonJson := dictdata.CopyExcludes("__status__", "__stage__") + dictdata.Set("__reason__", reasonJson) } + /*if vdata, ok := data.(*jsonutils.JSONDict); ok { + reason, err := vdata.Get("__reason__") // only dict support Get + if err != nil { + reason = jsonutils.NewString(fmt.Sprintf("Task failed due to unknown remote errors! %s", odata)) + vdata.Set("__reason__", reason) + } + }*/ } + data = dictdata + default: + data = odata } } else { data = jsonutils.NewDict() @@ -441,7 +452,7 @@ func execITask(taskValue reflect.Value, task *STask, odata jsonutils.JSONObject, } else { log.Errorf(msg) } - task.SetStageFailed(ctx, msg) + task.SetStageFailed(ctx, jsonutils.NewString(msg)) task.SaveRequestContext(&ctxData) return } @@ -451,16 +462,16 @@ func execITask(taskValue reflect.Value, task *STask, odata jsonutils.JSONObject, if objManager == nil { msg := fmt.Sprintf("model %s not found??? ...", task.ObjName) log.Errorf(msg) - task.SetStageFailed(ctx, msg) + task.SetStageFailed(ctx, jsonutils.NewString(msg)) task.SaveRequestContext(&ctxData) return } // log.Debugf("objManager: %s", objManager) objResManager, ok := objManager.(db.IStandaloneModelManager) if !ok { - msg := fmt.Sprintf("mode %s is not a resource??? ...", task.ObjName) + msg := fmt.Sprintf("model %s is not a resource??? ...", task.ObjName) log.Errorf(msg) - task.SetStageFailed(ctx, msg) + task.SetStageFailed(ctx, jsonutils.NewString(msg)) task.SaveRequestContext(&ctxData) return } @@ -476,7 +487,7 @@ func execITask(taskValue reflect.Value, task *STask, odata jsonutils.JSONObject, if err != nil { msg := fmt.Sprintf("fail to find %s object %s", task.ObjName, objId) log.Errorf(msg) - task.SetStageFailed(ctx, msg) + task.SetStageFailed(ctx, jsonutils.NewString(msg)) task.SaveRequestContext(&ctxData) return } @@ -493,7 +504,7 @@ func execITask(taskValue reflect.Value, task *STask, odata jsonutils.JSONObject, if err != nil { msg := fmt.Sprintf("fail to find %s object %s", task.ObjName, task.ObjId) log.Errorf(msg) - task.SetStageFailed(ctx, msg) + task.SetStageFailed(ctx, jsonutils.NewString(msg)) task.SaveRequestContext(&ctxData) return } @@ -637,18 +648,30 @@ func (self *STask) SetStageComplete(ctx context.Context, data *jsonutils.JSONDic self.NotifyParentTaskComplete(ctx, data, false) } -func (self *STask) SetStageFailed(ctx context.Context, reason string) { +func (self *STask) SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) { if self.Stage == TASK_STAGE_FAILED { log.Warningf("Task %s has been failed", self.TaskName) return } log.Infof("XXX TASK %s failed: %s on stage %s", self.TaskName, reason, self.Stage) - prevFailed, _ := self.Params.GetString("__failed_reason") - if len(prevFailed) > 0 { - reason = prevFailed + ";" + reason + reasonDict := jsonutils.NewDict() + reasonDict.Add(jsonutils.NewString(self.Stage), "stage") + if reason != nil { + reasonDict.Add(reason, "reason") + } + reason = reasonDict + prevFailed, _ := self.Params.Get("__failed_reason") + if prevFailed != nil { + switch prevFailed.(type) { + case *jsonutils.JSONArray: + prevFailed.(*jsonutils.JSONArray).Add(reason) + reason = prevFailed + default: + reason = jsonutils.NewArray(prevFailed, reason) + } } data := jsonutils.NewDict() - data.Add(jsonutils.NewString(reason), "__failed_reason") + data.Add(reason, "__failed_reason") self.SetStage(TASK_STAGE_FAILED, data) self.NotifyParentTaskFailure(ctx, reason) } @@ -700,10 +723,11 @@ func notifyRemoteTask(ctx context.Context, notifyUrl string, taskid string, body log.Infof("Notify remote URL %s(%s) get acked: %s!", notifyUrl, taskid, body.String()) } -func (self *STask) NotifyParentTaskFailure(ctx context.Context, reason string) { +func (self *STask) NotifyParentTaskFailure(ctx context.Context, reason jsonutils.JSONObject) { body := jsonutils.NewDict() body.Add(jsonutils.NewString("error"), "__status__") - body.Add(jsonutils.NewString(fmt.Sprintf("Subtask %s failed: %s", self.TaskName, reason)), "__reason__") + body.Add(jsonutils.NewString(self.TaskName), "__task_name__") + body.Add(reason, "__reason__") self.NotifyParentTaskComplete(ctx, body, true) } diff --git a/pkg/cloudevent/tasks/cloudevent_sync_task.go b/pkg/cloudevent/tasks/cloudevent_sync_task.go index 84398e3f3a..0f83120b6a 100644 --- a/pkg/cloudevent/tasks/cloudevent_sync_task.go +++ b/pkg/cloudevent/tasks/cloudevent_sync_task.go @@ -38,9 +38,9 @@ func init() { taskman.RegisterTask(CloudeventSyncTask{}) } -func (self *CloudeventSyncTask) taskFailed(ctx context.Context, cloudprovider *models.SCloudprovider, err error) { +func (self *CloudeventSyncTask) taskFailed(ctx context.Context, cloudprovider *models.SCloudprovider, err jsonutils.JSONObject) { cloudprovider.MarkEndSync(self.UserCred) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *CloudeventSyncTask) taskComplete(ctx context.Context, cloudprovider *models.SCloudprovider) { @@ -53,19 +53,19 @@ func (self *CloudeventSyncTask) OnInit(ctx context.Context, obj db.IStandaloneMo factory, err := provider.GetProviderFactory() if err != nil { - self.taskFailed(ctx, provider, errors.Wrap(err, "cloudprovider.GetProviderFactory")) + self.taskFailed(ctx, provider, jsonutils.NewString(errors.Wrap(err, "cloudprovider.GetProviderFactory").Error())) return } iProvider, err := provider.GetProvider() if err != nil { - self.taskFailed(ctx, provider, errors.Wrap(err, "cloudprovider.GetProvider")) + self.taskFailed(ctx, provider, jsonutils.NewString(errors.Wrap(err, "cloudprovider.GetProvider").Error())) return } start, end, err := provider.GetNextTimeRange() if err != nil { - self.taskFailed(ctx, provider, errors.Wrap(err, "provider.GetNextTimeRange")) + self.taskFailed(ctx, provider, jsonutils.NewString(errors.Wrap(err, "provider.GetNextTimeRange").Error())) return } @@ -87,7 +87,7 @@ func (self *CloudeventSyncTask) OnInit(ctx context.Context, obj db.IStandaloneMo if err == cloudprovider.ErrNotSupported { continue } - self.taskFailed(ctx, provider, errors.Wrapf(err, "regions[%d].GetICloudEvents", i)) + self.taskFailed(ctx, provider, jsonutils.NewString(errors.Wrapf(err, "regions[%d].GetICloudEvents", i).Error())) return } events = append(events, _events...) diff --git a/pkg/cloudid/tasks/cloudgroup_delete_task.go b/pkg/cloudid/tasks/cloudgroup_delete_task.go index a7bd67a05f..49d9a2cf62 100644 --- a/pkg/cloudid/tasks/cloudgroup_delete_task.go +++ b/pkg/cloudid/tasks/cloudgroup_delete_task.go @@ -36,10 +36,10 @@ func init() { taskman.RegisterTask(CloudgroupDeleteTask{}) } -func (self *CloudgroupDeleteTask) taskFailed(ctx context.Context, group *models.SCloudgroup, err error) { - group.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_DELETE_FAILED, err.Error()) +func (self *CloudgroupDeleteTask) taskFailed(ctx context.Context, group *models.SCloudgroup, err jsonutils.JSONObject) { + group.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_DELETE_FAILED, err.String()) logclient.AddActionLogWithStartable(self, group, logclient.ACT_DELETE, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *CloudgroupDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -47,20 +47,20 @@ func (self *CloudgroupDeleteTask) OnInit(ctx context.Context, obj db.IStandalone caches, err := group.GetCloudgroupcaches() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetCloudgroupcaches")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetCloudgroupcaches").Error())) return } for i := range caches { iGroup, err := caches[i].GetICloudgroup() if err != nil && errors.Cause(err) != cloudprovider.ErrNotFound { - self.taskFailed(ctx, group, errors.Wrap(err, "caches[i].GetICloudgroup")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "caches[i].GetICloudgroup").Error())) return } if err == nil { err = iGroup.Delete() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "iGroup.Delete")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "iGroup.Delete").Error())) return } } @@ -69,7 +69,7 @@ func (self *CloudgroupDeleteTask) OnInit(ctx context.Context, obj db.IStandalone cnt, err := group.GetCloudgroupcacheCount() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetCloudgroupcacheCount")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetCloudgroupcacheCount").Error())) return } if cnt == 0 { diff --git a/pkg/cloudid/tasks/cloudgroup_sync_policies_task.go b/pkg/cloudid/tasks/cloudgroup_sync_policies_task.go index 0e7c9d25dc..fb71237720 100644 --- a/pkg/cloudid/tasks/cloudgroup_sync_policies_task.go +++ b/pkg/cloudid/tasks/cloudgroup_sync_policies_task.go @@ -36,10 +36,10 @@ func init() { taskman.RegisterTask(CloudgroupSyncPoliciesTask{}) } -func (self *CloudgroupSyncPoliciesTask) taskFailed(ctx context.Context, group *models.SCloudgroup, err error) { - group.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_SYNC_POLICIES, err.Error()) +func (self *CloudgroupSyncPoliciesTask) taskFailed(ctx context.Context, group *models.SCloudgroup, err jsonutils.JSONObject) { + group.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_SYNC_POLICIES, err.String()) logclient.AddActionLogWithStartable(self, group, logclient.ACT_SYNC_POLICIES, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *CloudgroupSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -47,7 +47,7 @@ func (self *CloudgroupSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStan factory, err := group.GetProviderFactory() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "group.GetProviderFactory")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "group.GetProviderFactory").Error())) return } @@ -55,7 +55,7 @@ func (self *CloudgroupSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStan if factory.IsSupportClouduserPolicy() { users, err := group.GetCloudusers() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "group.GetCloudusers")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "group.GetCloudusers").Error())) return } for i := range users { @@ -67,7 +67,7 @@ func (self *CloudgroupSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStan log.Infof("Sync cloudpolicies for user %s(%s) result: %s", users[i].Name, users[i].Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, group, result.AllError()) + self.taskFailed(ctx, group, jsonutils.NewString(result.AllError().Error())) return } } @@ -75,7 +75,7 @@ func (self *CloudgroupSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStan } else { caches, err := group.GetCloudgroupcaches() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetCloudgroupcaches")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetCloudgroupcaches").Error())) return } @@ -88,7 +88,7 @@ func (self *CloudgroupSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStan log.Infof("Sync cloudpolicies for group cache %s(%s) result: %s", caches[i].Name, caches[i].Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, group, result.AllError()) + self.taskFailed(ctx, group, jsonutils.NewString(result.AllError().Error())) return } } diff --git a/pkg/cloudid/tasks/cloudgroup_sync_users_task.go b/pkg/cloudid/tasks/cloudgroup_sync_users_task.go index d108a116e2..cc13e3a3cd 100644 --- a/pkg/cloudid/tasks/cloudgroup_sync_users_task.go +++ b/pkg/cloudid/tasks/cloudgroup_sync_users_task.go @@ -36,10 +36,10 @@ func init() { taskman.RegisterTask(CloudgroupSyncUsersTask{}) } -func (self *CloudgroupSyncUsersTask) taskFailed(ctx context.Context, group *models.SCloudgroup, err error) { - group.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_SYNC_POLICIES, err.Error()) +func (self *CloudgroupSyncUsersTask) taskFailed(ctx context.Context, group *models.SCloudgroup, err jsonutils.JSONObject) { + group.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_SYNC_POLICIES, err.String()) logclient.AddActionLogWithStartable(self, group, logclient.ACT_SYNC_POLICIES, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *CloudgroupSyncUsersTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -47,13 +47,13 @@ func (self *CloudgroupSyncUsersTask) OnInit(ctx context.Context, obj db.IStandal factory, err := group.GetProviderFactory() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetProviderFactory")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetProviderFactory").Error())) return } users, err := group.GetCloudusers() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetCloudusers")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetCloudusers").Error())) return } @@ -67,14 +67,14 @@ func (self *CloudgroupSyncUsersTask) OnInit(ctx context.Context, obj db.IStandal log.Infof("Sync cloudpolicies for user %s(%s) result: %s", users[i].Name, users[i].Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, group, result.AllError()) + self.taskFailed(ctx, group, jsonutils.NewString(result.AllError().Error())) return } } } else { caches, err := group.GetCloudgroupcaches() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetCloudgroupcaches")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetCloudgroupcaches").Error())) return } @@ -95,7 +95,7 @@ func (self *CloudgroupSyncUsersTask) OnInit(ctx context.Context, obj db.IStandal log.Infof("Sync cloudpolicies for group cache %s(%s) result: %s", caches[i].Name, caches[i].Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, group, result.AllError()) + self.taskFailed(ctx, group, jsonutils.NewString(result.AllError().Error())) return } } @@ -104,19 +104,19 @@ func (self *CloudgroupSyncUsersTask) OnInit(ctx context.Context, obj db.IStandal if _, ok := accounts[user.CloudaccountId]; !ok { account, err := user.GetCloudaccount() if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetCloudaccount")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetCloudaccount").Error())) return } cache, err := models.CloudgroupcacheManager.Register(group, account) if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "CloudgroupcacheManager.Register")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "CloudgroupcacheManager.Register").Error())) return } _, err = cache.GetOrCreateICloudgroup(ctx, self.GetUserCred()) if err != nil { - self.taskFailed(ctx, group, errors.Wrap(err, "GetOrCreateICloudgroup")) + self.taskFailed(ctx, group, jsonutils.NewString(errors.Wrap(err, "GetOrCreateICloudgroup").Error())) return } @@ -128,7 +128,7 @@ func (self *CloudgroupSyncUsersTask) OnInit(ctx context.Context, obj db.IStandal log.Infof("Sync cloudpolicies for group cache %s(%s) result: %s", cache.Name, cache.Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, group, result.AllError()) + self.taskFailed(ctx, group, jsonutils.NewString(result.AllError().Error())) return } } diff --git a/pkg/cloudid/tasks/cloudgroupcache_delete_task.go b/pkg/cloudid/tasks/cloudgroupcache_delete_task.go index b15665bb50..865819c1f1 100644 --- a/pkg/cloudid/tasks/cloudgroupcache_delete_task.go +++ b/pkg/cloudid/tasks/cloudgroupcache_delete_task.go @@ -36,10 +36,10 @@ func init() { taskman.RegisterTask(CloudgroupcacheDeleteTask{}) } -func (self *CloudgroupcacheDeleteTask) taskFailed(ctx context.Context, cache *models.SCloudgroupcache, err error) { - cache.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_DELETE_FAILED, err.Error()) +func (self *CloudgroupcacheDeleteTask) taskFailed(ctx context.Context, cache *models.SCloudgroupcache, err jsonutils.JSONObject) { + cache.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_STATUS_DELETE_FAILED, err.String()) logclient.AddActionLogWithStartable(self, cache, logclient.ACT_DELETE, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *CloudgroupcacheDeleteTask) taskComplete(ctx context.Context, cache *models.SCloudgroupcache) { @@ -60,12 +60,12 @@ func (self *CloudgroupcacheDeleteTask) OnInit(ctx context.Context, obj db.IStand self.taskComplete(ctx, cache) return } - self.taskFailed(ctx, cache, errors.Wrap(err, "GetICloudgroup")) + self.taskFailed(ctx, cache, jsonutils.NewString(errors.Wrap(err, "GetICloudgroup").Error())) return } err = iGroup.Delete() if err != nil { - self.taskFailed(ctx, cache, errors.Wrap(err, "iGroup.Delete")) + self.taskFailed(ctx, cache, jsonutils.NewString(errors.Wrap(err, "iGroup.Delete").Error())) return } self.taskComplete(ctx, cache) diff --git a/pkg/cloudid/tasks/cloudgroupcache_sync_status_task.go b/pkg/cloudid/tasks/cloudgroupcache_sync_status_task.go index 6173c9ece7..ba3476339e 100644 --- a/pkg/cloudid/tasks/cloudgroupcache_sync_status_task.go +++ b/pkg/cloudid/tasks/cloudgroupcache_sync_status_task.go @@ -35,17 +35,17 @@ func init() { taskman.RegisterTask(CloudgroupcacheSyncstatusTask{}) } -func (self *CloudgroupcacheSyncstatusTask) taskFailed(ctx context.Context, cache *models.SCloudgroupcache, err error) { - cache.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_CACHE_STATUS_UNKNOWN, err.Error()) +func (self *CloudgroupcacheSyncstatusTask) taskFailed(ctx context.Context, cache *models.SCloudgroupcache, err jsonutils.JSONObject) { + cache.SetStatus(self.GetUserCred(), api.CLOUD_GROUP_CACHE_STATUS_UNKNOWN, err.String()) logclient.AddActionLogWithStartable(self, cache, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *CloudgroupcacheSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { cache := obj.(*models.SCloudgroupcache) _, err := cache.GetICloudgroup() if err != nil { - self.taskFailed(ctx, cache, errors.Wrap(err, "GetICloudgroup")) + self.taskFailed(ctx, cache, jsonutils.NewString(errors.Wrap(err, "GetICloudgroup").Error())) return } self.SetStageComplete(ctx, nil) diff --git a/pkg/cloudid/tasks/clouduser_delete_task.go b/pkg/cloudid/tasks/clouduser_delete_task.go index 4d001b8724..300d835cb6 100644 --- a/pkg/cloudid/tasks/clouduser_delete_task.go +++ b/pkg/cloudid/tasks/clouduser_delete_task.go @@ -36,10 +36,10 @@ func init() { taskman.RegisterTask(ClouduserDeleteTask{}) } -func (self *ClouduserDeleteTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err error) { - clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_DELETE_FAILED, err.Error()) +func (self *ClouduserDeleteTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err jsonutils.JSONObject) { + clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_DELETE_FAILED, err.String()) logclient.AddActionLogWithStartable(self, clouduser, logclient.ACT_DELETE, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *ClouduserDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -58,13 +58,13 @@ func (self *ClouduserDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneM self.SetStageComplete(ctx, nil) return } - self.taskFailed(ctx, clouduser, errors.Wrap(err, "GetIClouduser")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "GetIClouduser").Error())) return } err = iUser.Delete() if err != nil { - self.taskFailed(ctx, clouduser, errors.Wrap(err, "user.Delete")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "user.Delete").Error())) return } clouduser.RealDelete(ctx, self.GetUserCred()) diff --git a/pkg/cloudid/tasks/clouduser_reset_password_task.go b/pkg/cloudid/tasks/clouduser_reset_password_task.go index 8d03958884..77dcca419a 100644 --- a/pkg/cloudid/tasks/clouduser_reset_password_task.go +++ b/pkg/cloudid/tasks/clouduser_reset_password_task.go @@ -35,10 +35,10 @@ func init() { taskman.RegisterTask(ClouduserResetPasswordTask{}) } -func (self *ClouduserResetPasswordTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err error) { - clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_RESET_PASSWORD_FAILED, err.Error()) +func (self *ClouduserResetPasswordTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err jsonutils.JSONObject) { + clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_RESET_PASSWORD_FAILED, err.String()) logclient.AddActionLogWithStartable(self, clouduser, logclient.ACT_RESET_PASSWORD, err, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *ClouduserResetPasswordTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -47,26 +47,26 @@ func (self *ClouduserResetPasswordTask) OnInit(ctx context.Context, obj db.IStan account, err := clouduser.GetCloudaccount() if err != nil { - self.taskFailed(ctx, clouduser, errors.Wrap(err, "GetCloudaccount")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "GetCloudaccount").Error())) return } factory, err := account.GetProviderFactory() if err != nil { - self.taskFailed(ctx, clouduser, errors.Wrap(err, "GetProviderFactory")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "GetProviderFactory").Error())) return } iUser, err := clouduser.GetIClouduser() if err != nil { - self.taskFailed(ctx, clouduser, errors.Wrap(err, "GetIClouduser")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "GetIClouduser").Error())) return } if factory.IsSupportResetClouduserPassword() { err = iUser.ResetPassword(password) if err != nil { - self.taskFailed(ctx, clouduser, errors.Wrap(err, "ResetPassword")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "ResetPassword").Error())) return } clouduser.SyncWithClouduser(ctx, self.GetUserCred(), iUser, clouduser.CloudproviderId) diff --git a/pkg/cloudid/tasks/clouduser_sync_groups_task.go b/pkg/cloudid/tasks/clouduser_sync_groups_task.go index 96f3e5fd77..91010df146 100644 --- a/pkg/cloudid/tasks/clouduser_sync_groups_task.go +++ b/pkg/cloudid/tasks/clouduser_sync_groups_task.go @@ -35,9 +35,9 @@ func init() { taskman.RegisterTask(ClouduserSyncGroupsTask{}) } -func (self *ClouduserSyncGroupsTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err error) { - clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_SYNC_GROUPS_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *ClouduserSyncGroupsTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err jsonutils.JSONObject) { + clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_SYNC_GROUPS_FAILED, err.String()) + self.SetStageFailed(ctx, err) } func (self *ClouduserSyncGroupsTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -45,54 +45,54 @@ func (self *ClouduserSyncGroupsTask) OnInit(ctx context.Context, obj db.IStandal account, err := user.GetCloudaccount() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "GetCloudaccount")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "GetCloudaccount").Error())) return } factory, err := account.GetProviderFactory() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "GetCloudaccount")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "GetCloudaccount").Error())) return } if factory.IsSupportCreateCloudgroup() { groups, err := user.GetCloudgroups() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "GetCloudgroups")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "GetCloudgroups").Error())) return } for i := range groups { cache, err := models.CloudgroupcacheManager.Register(&groups[i], account) if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "CloudgroupcacheManager.Register")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "CloudgroupcacheManager.Register").Error())) return } _, err = cache.GetOrCreateICloudgroup(ctx, self.GetUserCred()) if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "GetOrCreateICloudgroup")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "GetOrCreateICloudgroup").Error())) return } result, err := cache.SyncCloudusersForCloud(ctx) if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "SyncCloudusersForCloud")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "SyncCloudusersForCloud").Error())) return } log.Infof("sync cloudusers for cache %s(%s) result: %s", cache.Name, cache.Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, user, result.AllError()) + self.taskFailed(ctx, user, jsonutils.NewString(result.AllError().Error())) return } result, err = cache.SyncCloudpoliciesForCloud(ctx) if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "SyncCloudpoliciesForCloud")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "SyncCloudpoliciesForCloud").Error())) return } if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, user, result.AllError()) + self.taskFailed(ctx, user, jsonutils.NewString(result.AllError().Error())) return } log.Infof("sync cloudpolicies for cache %s(%s) result: %s", cache.Name, cache.Id, result.Result()) @@ -100,13 +100,13 @@ func (self *ClouduserSyncGroupsTask) OnInit(ctx context.Context, obj db.IStandal } else if factory.IsSupportClouduserPolicy() { result, err := user.SyncCloudpoliciesForCloud(ctx) if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "SyncCloudpoliciesForCloud")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "SyncCloudpoliciesForCloud").Error())) return } log.Infof("sync cloudpolicies for user %s(%s) result: %s", user.Name, user.Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, user, result.AllError()) + self.taskFailed(ctx, user, jsonutils.NewString(result.AllError().Error())) return } } diff --git a/pkg/cloudid/tasks/clouduser_sync_policies_task.go b/pkg/cloudid/tasks/clouduser_sync_policies_task.go index db9e1a68df..23eed06a47 100644 --- a/pkg/cloudid/tasks/clouduser_sync_policies_task.go +++ b/pkg/cloudid/tasks/clouduser_sync_policies_task.go @@ -35,9 +35,9 @@ func init() { taskman.RegisterTask(ClouduserSyncPoliciesTask{}) } -func (self *ClouduserSyncPoliciesTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err error) { - clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_SYNC_POLICIES_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *ClouduserSyncPoliciesTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err jsonutils.JSONObject) { + clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_SYNC_POLICIES_FAILED, err.String()) + self.SetStageFailed(ctx, err) } func (self *ClouduserSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -45,26 +45,26 @@ func (self *ClouduserSyncPoliciesTask) OnInit(ctx context.Context, obj db.IStand account, err := user.GetCloudaccount() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "GetCloudaccount")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "GetCloudaccount").Error())) return } factory, err := account.GetProviderFactory() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "account.GetProviderFactory")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "account.GetProviderFactory").Error())) return } if factory.IsSupportClouduserPolicy() { result, err := user.SyncCloudpoliciesForCloud(ctx) if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "SyncCloudpoliciesForCloud")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "SyncCloudpoliciesForCloud").Error())) return } log.Infof("sync cloudpolicies for user %s(%s) result: %s", user.Name, user.Id, result.Result()) if result.AddErrCnt+result.DelErrCnt > 0 { - self.taskFailed(ctx, user, result.AllError()) + self.taskFailed(ctx, user, jsonutils.NewString(result.AllError().Error())) return } } diff --git a/pkg/cloudid/tasks/clouduser_sync_task.go b/pkg/cloudid/tasks/clouduser_sync_task.go index 0cdf5a32cb..4c7c599a75 100644 --- a/pkg/cloudid/tasks/clouduser_sync_task.go +++ b/pkg/cloudid/tasks/clouduser_sync_task.go @@ -34,9 +34,9 @@ func init() { taskman.RegisterTask(ClouduserSyncTask{}) } -func (self *ClouduserSyncTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err error) { - clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_SYNC_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *ClouduserSyncTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err jsonutils.JSONObject) { + clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_SYNC_FAILED, err.String()) + self.SetStageFailed(ctx, err) } func (self *ClouduserSyncTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -49,12 +49,12 @@ func (self *ClouduserSyncTask) OnInit(ctx context.Context, obj db.IStandaloneMod func (self *ClouduserSyncTask) OnSyncCloudpoliciesComplete(ctx context.Context, user *models.SClouduser, body jsonutils.JSONObject) { account, err := user.GetCloudaccount() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "user.GetCloudaccount")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "user.GetCloudaccount").Error())) return } factory, err := account.GetProviderFactory() if err != nil { - self.taskFailed(ctx, user, errors.Wrap(err, "GetProviderFactory")) + self.taskFailed(ctx, user, jsonutils.NewString(errors.Wrap(err, "GetProviderFactory").Error())) return } @@ -69,7 +69,7 @@ func (self *ClouduserSyncTask) OnSyncCloudpoliciesComplete(ctx context.Context, } func (self *ClouduserSyncTask) OnSyncCloudpoliciesCompleteFailed(ctx context.Context, user *models.SClouduser, data jsonutils.JSONObject) { - self.taskFailed(ctx, user, errors.Error(data.String())) + self.taskFailed(ctx, user, data) } func (self *ClouduserSyncTask) OnSyncCloudgroupsComplete(ctx context.Context, user *models.SClouduser, body jsonutils.JSONObject) { @@ -78,5 +78,5 @@ func (self *ClouduserSyncTask) OnSyncCloudgroupsComplete(ctx context.Context, us } func (self *ClouduserSyncTask) OnSyncCloudgroupsCompleteFailed(ctx context.Context, user *models.SClouduser, data jsonutils.JSONObject) { - self.taskFailed(ctx, user, errors.Error(data.String())) + self.taskFailed(ctx, user, data) } diff --git a/pkg/cloudid/tasks/clouduser_syncstatus_task.go b/pkg/cloudid/tasks/clouduser_syncstatus_task.go index 46d85ce727..ca0d6ec00f 100644 --- a/pkg/cloudid/tasks/clouduser_syncstatus_task.go +++ b/pkg/cloudid/tasks/clouduser_syncstatus_task.go @@ -34,9 +34,9 @@ func init() { taskman.RegisterTask(ClouduserSyncstatusTask{}) } -func (self *ClouduserSyncstatusTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err error) { - clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *ClouduserSyncstatusTask) taskFailed(ctx context.Context, clouduser *models.SClouduser, err jsonutils.JSONObject) { + clouduser.SetStatus(self.GetUserCred(), api.CLOUD_USER_STATUS_UNKNOWN, err.String()) + self.SetStageFailed(ctx, err) } func (self *ClouduserSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -44,7 +44,7 @@ func (self *ClouduserSyncstatusTask) OnInit(ctx context.Context, obj db.IStandal _, err := clouduser.GetIClouduser() if err != nil { - self.taskFailed(ctx, clouduser, errors.Wrap(err, "GetIClouduser")) + self.taskFailed(ctx, clouduser, jsonutils.NewString(errors.Wrap(err, "GetIClouduser").Error())) return } diff --git a/pkg/cloudid/tasks/sync_cloudpolicies_task.go b/pkg/cloudid/tasks/sync_cloudpolicies_task.go index cfee2df718..2debca103a 100644 --- a/pkg/cloudid/tasks/sync_cloudpolicies_task.go +++ b/pkg/cloudid/tasks/sync_cloudpolicies_task.go @@ -34,8 +34,8 @@ func init() { taskman.RegisterTask(SyncCloudIdResourcesTask{}) } -func (self *SyncCloudIdResourcesTask) taskFailed(ctx context.Context, cloudaccount *models.SCloudaccount, err error) { - self.SetStageFailed(ctx, err.Error()) +func (self *SyncCloudIdResourcesTask) taskFailed(ctx context.Context, cloudaccount *models.SCloudaccount, err jsonutils.JSONObject) { + self.SetStageFailed(ctx, err) } func (self *SyncCloudIdResourcesTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -43,7 +43,7 @@ func (self *SyncCloudIdResourcesTask) OnInit(ctx context.Context, obj db.IStanda provider, err := account.GetProvider() if err != nil { - self.taskFailed(ctx, account, errors.Wrap(err, "GetProvider")) + self.taskFailed(ctx, account, jsonutils.NewString(errors.Wrap(err, "GetProvider").Error())) return } @@ -73,5 +73,5 @@ func (self *SyncCloudIdResourcesTask) OnSyncCloudusersComplete(ctx context.Conte } func (self *SyncCloudIdResourcesTask) OnClouduserSyncCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/cloudid/tasks/sync_cloudusers_task.go b/pkg/cloudid/tasks/sync_cloudusers_task.go index 1265b93284..a8e2b901e2 100644 --- a/pkg/cloudid/tasks/sync_cloudusers_task.go +++ b/pkg/cloudid/tasks/sync_cloudusers_task.go @@ -121,5 +121,5 @@ func (self *SyncCloudusersTask) OnClouduserSyncComplete(ctx context.Context, obj } func (self *SyncCloudusersTask) OnClouduserSyncCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/baremetal_cdrom_task.go b/pkg/compute/tasks/baremetal_cdrom_task.go index b7e7d8a768..ac692d6507 100644 --- a/pkg/compute/tasks/baremetal_cdrom_task.go +++ b/pkg/compute/tasks/baremetal_cdrom_task.go @@ -47,16 +47,16 @@ func (self *BaremetalCdromTask) OnInit(ctx context.Context, obj db.IStandaloneMo self.SetStage("OnSyncConfigComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) if err != nil { - self.OnFailure(ctx, baremetal, err.Error()) + self.OnFailure(ctx, baremetal, jsonutils.Marshal(err)) } } -func (self *BaremetalCdromTask) OnFailure(ctx context.Context, baremetal *models.SHost, reason string) { +func (self *BaremetalCdromTask) OnFailure(ctx context.Context, baremetal *models.SHost, reason jsonutils.JSONObject) { action, _ := self.Params.GetString("action") if action == api.BAREMETAL_CDROM_ACTION_INSERT { - baremetal.SetStatus(self.UserCred, api.BAREMETAL_INSERT_FAIL, reason) + baremetal.SetStatus(self.UserCred, api.BAREMETAL_INSERT_FAIL, reason.String()) } else { - baremetal.SetStatus(self.UserCred, api.BAREMETAL_EJECT_FAIL, reason) + baremetal.SetStatus(self.UserCred, api.BAREMETAL_EJECT_FAIL, reason.String()) } self.SetStageFailed(ctx, reason) } @@ -66,6 +66,5 @@ func (self *BaremetalCdromTask) OnSyncConfigComplete(ctx context.Context, bareme } func (self *BaremetalCdromTask) OnSyncConfigCompleteFailed(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - reason, _ := body.GetString("__reason__") - self.OnFailure(ctx, baremetal, reason) + self.OnFailure(ctx, baremetal, body) } diff --git a/pkg/compute/tasks/baremetal_convert_hypervisor_task.go b/pkg/compute/tasks/baremetal_convert_hypervisor_task.go index 9c9a04ec04..cbbd7b16b8 100644 --- a/pkg/compute/tasks/baremetal_convert_hypervisor_task.go +++ b/pkg/compute/tasks/baremetal_convert_hypervisor_task.go @@ -60,7 +60,7 @@ func (self *BaremetalConvertHypervisorTask) OnInit(ctx context.Context, obj db.I paramsDict := params.(*jsonutils.JSONDict) input, err := cmdline.FetchServerCreateInputByJSON(paramsDict) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) return } input.ParentTaskId = self.GetTaskId() @@ -74,7 +74,7 @@ func (self *BaremetalConvertHypervisorTask) OnGuestDeployComplete(ctx context.Co hypervisor := self.getHypervisor() driver := models.GetHostDriver(hypervisor) if driver == nil { - self.SetStageFailed(ctx, fmt.Sprintf("Get Host Driver error %s", hypervisor)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("Get Host Driver error %s", hypervisor))) } err := driver.FinishConvert(self.UserCred, baremetal, guest, driver.GetHostType()) if err != nil { @@ -105,5 +105,5 @@ func (self *BaremetalConvertHypervisorTask) OnGuestDeleteComplete(ctx context.Co } func (self *BaremetalConvertHypervisorTask) OnFailedSyncstatusComplete(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - self.SetStageFailed(ctx, "convert failed") + self.SetStageFailed(ctx, body) } diff --git a/pkg/compute/tasks/baremetal_delete_task.go b/pkg/compute/tasks/baremetal_delete_task.go index 1411954f68..f3d6c87dc2 100644 --- a/pkg/compute/tasks/baremetal_delete_task.go +++ b/pkg/compute/tasks/baremetal_delete_task.go @@ -67,6 +67,6 @@ func (self *BaremetalDeleteTask) OnDeleteBaremetalCompleteFailed(ctx context.Con } func (self *BaremetalDeleteTask) OnFailure(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - baremetal.SetStatus(self.UserCred, api.BAREMETAL_DELETE_FAIL, "") - self.SetStageFailed(ctx, "") + baremetal.SetStatus(self.UserCred, api.BAREMETAL_DELETE_FAIL, body.String()) + self.SetStageFailed(ctx, body) } diff --git a/pkg/compute/tasks/baremetal_ipmi_probe_task.go b/pkg/compute/tasks/baremetal_ipmi_probe_task.go index 930eca7b0c..8eb557ea8d 100644 --- a/pkg/compute/tasks/baremetal_ipmi_probe_task.go +++ b/pkg/compute/tasks/baremetal_ipmi_probe_task.go @@ -43,13 +43,13 @@ func (self *BaremetalIpmiProbeTask) OnInit(ctx context.Context, obj db.IStandalo self.SetStage("OnSyncConfigComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) if err != nil { - self.OnFailure(ctx, baremetal, err.Error()) + self.OnFailure(ctx, baremetal, jsonutils.Marshal(err)) } } -func (self *BaremetalIpmiProbeTask) OnFailure(ctx context.Context, baremetal *models.SHost, reason string) { +func (self *BaremetalIpmiProbeTask) OnFailure(ctx context.Context, baremetal *models.SHost, reason jsonutils.JSONObject) { logclient.AddActionLogWithStartable(self, baremetal, logclient.ACT_PROBE, reason, self.UserCred, false) - baremetal.SetStatus(self.UserCred, api.BAREMETAL_PROBE_FAIL, reason) + baremetal.SetStatus(self.UserCred, api.BAREMETAL_PROBE_FAIL, reason.String()) self.SetStageFailed(ctx, reason) } @@ -59,6 +59,5 @@ func (self *BaremetalIpmiProbeTask) OnSyncConfigComplete(ctx context.Context, ba } func (self *BaremetalIpmiProbeTask) OnSyncConfigCompleteFailed(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - reason, _ := body.GetString("__reason__") - self.OnFailure(ctx, baremetal, reason) + self.OnFailure(ctx, baremetal, body) } diff --git a/pkg/compute/tasks/baremetal_maintenance_task.go b/pkg/compute/tasks/baremetal_maintenance_task.go index 5ba9a712b2..a23ec9a387 100644 --- a/pkg/compute/tasks/baremetal_maintenance_task.go +++ b/pkg/compute/tasks/baremetal_maintenance_task.go @@ -73,7 +73,7 @@ func (self *BaremetalMaintenanceTask) OnEnterMaintenantModeSucc(ctx context.Cont } func (self *BaremetalMaintenanceTask) OnEnterMaintenantModeSuccFailed(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - self.SetStageFailed(ctx, body.String()) + self.SetStageFailed(ctx, body) baremetal.StartSyncstatus(ctx, self.UserCred, "") guest := baremetal.GetBaremetalServer() if guest != nil { @@ -81,6 +81,6 @@ func (self *BaremetalMaintenanceTask) OnEnterMaintenantModeSuccFailed(ctx contex } action := self.Action() if len(action) > 0 { - logclient.AddActionLogWithStartable(self, baremetal, action, body.String(), self.UserCred, false) + logclient.AddActionLogWithStartable(self, baremetal, action, body, self.UserCred, false) } } diff --git a/pkg/compute/tasks/baremetal_prepare_task.go b/pkg/compute/tasks/baremetal_prepare_task.go index 0b40da0b77..3bb4c92a92 100644 --- a/pkg/compute/tasks/baremetal_prepare_task.go +++ b/pkg/compute/tasks/baremetal_prepare_task.go @@ -41,12 +41,12 @@ func (self *BaremetalPrepareTask) OnInit(ctx context.Context, obj db.IStandalone self.SetStage("OnSyncConfigComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) if err != nil { - self.OnFailure(ctx, baremetal, err.Error()) + self.OnFailure(ctx, baremetal, jsonutils.Marshal(err)) } } -func (self *BaremetalPrepareTask) OnFailure(ctx context.Context, baremetal *models.SHost, reason string) { - baremetal.SetStatus(self.UserCred, api.BAREMETAL_PREPARE_FAIL, reason) +func (self *BaremetalPrepareTask) OnFailure(ctx context.Context, baremetal *models.SHost, reason jsonutils.JSONObject) { + baremetal.SetStatus(self.UserCred, api.BAREMETAL_PREPARE_FAIL, reason.String()) self.SetStageFailed(ctx, reason) } @@ -56,6 +56,5 @@ func (self *BaremetalPrepareTask) OnSyncConfigComplete(ctx context.Context, bare } func (self *BaremetalPrepareTask) OnSyncConfigCompleteFailed(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - reason, _ := body.GetString("__reason__") - self.OnFailure(ctx, baremetal, reason) + self.OnFailure(ctx, baremetal, body) } diff --git a/pkg/compute/tasks/baremetal_server_reset_task.go b/pkg/compute/tasks/baremetal_server_reset_task.go index 25ac41513e..d9d1658b46 100644 --- a/pkg/compute/tasks/baremetal_server_reset_task.go +++ b/pkg/compute/tasks/baremetal_server_reset_task.go @@ -33,7 +33,7 @@ func (self *BaremetalServerResetTask) OnInit(ctx context.Context, obj db.IStanda guest := obj.(*models.SGuest) baremetal := guest.GetHost() if baremetal == nil { - self.SetStageFailed(ctx, "Baremetal is None") + self.SetStageFailed(ctx, jsonutils.NewString("Baremetal is not found")) return } url := fmt.Sprintf("/baremetals/%s/servers/%s/reset", baremetal.Id, guest.Id) @@ -41,7 +41,7 @@ func (self *BaremetalServerResetTask) OnInit(ctx context.Context, obj db.IStanda _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err != nil { log.Errorln(err) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } else { self.SetStageComplete(ctx, nil) } diff --git a/pkg/compute/tasks/baremetal_server_start_task.go b/pkg/compute/tasks/baremetal_server_start_task.go index b371ef5db4..b07d6e6860 100644 --- a/pkg/compute/tasks/baremetal_server_start_task.go +++ b/pkg/compute/tasks/baremetal_server_start_task.go @@ -65,10 +65,9 @@ func (self *BaremetalServerStartTask) OnStartComplete(ctx context.Context, guest } func (self *BaremetalServerStartTask) OnStartCompleteFailed(ctx context.Context, guest *models.SGuest, body jsonutils.JSONObject) { - reason := body.String() - guest.SetStatus(self.UserCred, api.VM_START_FAILED, reason) - db.OpsLog.LogEvent(guest, db.ACT_START_FAIL, reason, self.UserCred) + guest.SetStatus(self.UserCred, api.VM_START_FAILED, body.String()) + db.OpsLog.LogEvent(guest, db.ACT_START_FAIL, body, self.UserCred) baremetal := guest.GetHost() - baremetal.SetStatus(self.UserCred, api.BAREMETAL_START_FAIL, reason) - self.SetStageFailed(ctx, reason) + baremetal.SetStatus(self.UserCred, api.BAREMETAL_START_FAIL, body.String()) + self.SetStageFailed(ctx, body) } diff --git a/pkg/compute/tasks/baremetal_server_stop_task.go b/pkg/compute/tasks/baremetal_server_stop_task.go index 1ef1842970..5647282ba5 100644 --- a/pkg/compute/tasks/baremetal_server_stop_task.go +++ b/pkg/compute/tasks/baremetal_server_stop_task.go @@ -80,10 +80,10 @@ func (self *BaremetalServerStopTask) OnGuestStopTaskComplete(ctx context.Context func (self *BaremetalServerStopTask) OnGuestStopTaskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guest.SetStatus(self.UserCred, db.ACT_STOP_FAIL, data.String()) - db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, data.String(), self.UserCred) + db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, data, self.UserCred) baremetal := guest.GetHost() - baremetal.SetStatus(self.UserCred, api.BAREMETAL_READY, "") - self.SetStageFailed(ctx, data.String()) + baremetal.SetStatus(self.UserCred, api.BAREMETAL_READY, data.String()) + self.SetStageFailed(ctx, data) } func (self *BaremetalServerStopTask) OnStopGuestFail(ctx context.Context, guest *models.SGuest, reason string) { diff --git a/pkg/compute/tasks/baremetal_sync_config_task.go b/pkg/compute/tasks/baremetal_sync_config_task.go index 08214d0266..fc438fff43 100644 --- a/pkg/compute/tasks/baremetal_sync_config_task.go +++ b/pkg/compute/tasks/baremetal_sync_config_task.go @@ -49,7 +49,7 @@ func (self *BaremetalSyncConfigTask) DoSyncConfig(ctx context.Context, baremetal headers := self.GetTaskRequestHeader() _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } diff --git a/pkg/compute/tasks/baremetal_sync_status_task.go b/pkg/compute/tasks/baremetal_sync_status_task.go index 2de923c0ea..9a360f08d0 100644 --- a/pkg/compute/tasks/baremetal_sync_status_task.go +++ b/pkg/compute/tasks/baremetal_sync_status_task.go @@ -47,7 +47,7 @@ func (self *BaremetalSyncStatusTask) DoSyncStatus(ctx context.Context, baremetal headers := self.GetTaskRequestHeader() _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } diff --git a/pkg/compute/tasks/baremetal_unconvert_hypervisor_task.go b/pkg/compute/tasks/baremetal_unconvert_hypervisor_task.go index 51536fa50a..951ce41241 100644 --- a/pkg/compute/tasks/baremetal_unconvert_hypervisor_task.go +++ b/pkg/compute/tasks/baremetal_unconvert_hypervisor_task.go @@ -40,7 +40,7 @@ func (self *BaremetalUnconvertHypervisorTask) OnInit(ctx context.Context, obj db baremetal.SetStatus(self.UserCred, api.BAREMETAL_CONVERTING, "") guests := baremetal.GetGuests() if len(guests) > 1 { - self.SetStageFailed(ctx, "Host guest conut > 1") + self.SetStageFailed(ctx, jsonutils.NewString("Host guest conut > 1")) } if len(guests) == 1 { guest := guests[0] @@ -68,7 +68,7 @@ func (self *BaremetalUnconvertHypervisorTask) OnGuestDeleteCompleteFailed(ctx co db.OpsLog.LogEvent(baremetal, db.ACT_UNCONVERT_FAIL, body, self.UserCred) self.SetStage("OnFailSyncstatusComplete", nil) baremetal.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) - logclient.AddActionLogWithStartable(self, baremetal, logclient.ACT_BM_UNCONVERT_HYPER, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, baremetal, logclient.ACT_BM_UNCONVERT_HYPER, body, self.UserCred, false) } func (self *BaremetalUnconvertHypervisorTask) OnPrepareComplete(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { @@ -76,5 +76,5 @@ func (self *BaremetalUnconvertHypervisorTask) OnPrepareComplete(ctx context.Cont } func (self *BaremetalUnconvertHypervisorTask) OnFailSyncstatusComplete(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) { - self.SetStageFailed(ctx, "Delete server failed") + self.SetStageFailed(ctx, jsonutils.NewString("Delete server failed")) } diff --git a/pkg/compute/tasks/baremetal_unmaintenance_task.go b/pkg/compute/tasks/baremetal_unmaintenance_task.go index b7c7d35f8f..0d6a8a14a9 100644 --- a/pkg/compute/tasks/baremetal_unmaintenance_task.go +++ b/pkg/compute/tasks/baremetal_unmaintenance_task.go @@ -43,10 +43,9 @@ func (self *BaremetalUnmaintenanceTask) OnInit(ctx context.Context, obj db.IStan _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) if err != nil { if len(action) > 0 { - msg := fmt.Sprintf("unmaintenance error %s", err.Error()) - logclient.AddActionLogWithStartable(self, baremetal, action, msg, self.UserCred, false) + logclient.AddActionLogWithStartable(self, baremetal, action, err, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } else { if len(action) > 0 { logclient.AddActionLogWithStartable(self, baremetal, action, "", self.UserCred, true) diff --git a/pkg/compute/tasks/bucket_create_task.go b/pkg/compute/tasks/bucket_create_task.go index 32ec6acb80..ebef5a8691 100644 --- a/pkg/compute/tasks/bucket_create_task.go +++ b/pkg/compute/tasks/bucket_create_task.go @@ -36,9 +36,9 @@ func init() { func (task *BucketCreateTask) taskFailed(ctx context.Context, bucket *models.SBucket, err error) { bucket.SetStatus(task.UserCred, api.BUCKET_STATUS_CREATE_FAIL, err.Error()) - db.OpsLog.LogEvent(bucket, db.ACT_ALLOCATE_FAIL, err.Error(), task.UserCred) - logclient.AddActionLogWithStartable(task, bucket, logclient.ACT_ALLOCATE, err.Error(), task.UserCred, false) - task.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(bucket, db.ACT_ALLOCATE_FAIL, err, task.UserCred) + logclient.AddActionLogWithStartable(task, bucket, logclient.ACT_ALLOCATE, err, task.UserCred, false) + task.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (task *BucketCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/bucket_delete_task.go b/pkg/compute/tasks/bucket_delete_task.go index 86a059ae06..72c25b49b7 100644 --- a/pkg/compute/tasks/bucket_delete_task.go +++ b/pkg/compute/tasks/bucket_delete_task.go @@ -38,7 +38,7 @@ func (task *BucketDeleteTask) taskFailed(ctx context.Context, bucket *models.SBu bucket.SetStatus(task.UserCred, api.VPC_STATUS_DELETE_FAILED, err.Error()) db.OpsLog.LogEvent(bucket, db.ACT_DELOCATE_FAIL, err.Error(), task.UserCred) logclient.AddActionLogWithStartable(task, bucket, logclient.ACT_DELETE, err.Error(), task.UserCred, false) - task.SetStageFailed(ctx, err.Error()) + task.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (task *BucketDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/bucket_syncstatus_task.go b/pkg/compute/tasks/bucket_syncstatus_task.go index 1f3ae47394..7c13376cb8 100644 --- a/pkg/compute/tasks/bucket_syncstatus_task.go +++ b/pkg/compute/tasks/bucket_syncstatus_task.go @@ -38,7 +38,7 @@ func init() { func (self *BucketSyncstatusTask) taskFailed(ctx context.Context, bucket *models.SBucket, err error) { bucket.SetStatus(self.GetUserCred(), api.BUCKET_STATUS_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) db.OpsLog.LogEvent(bucket, db.ACT_SYNC_STATUS, bucket.GetShortDesc(ctx), self.GetUserCred()) logclient.AddActionLogWithContext(ctx, bucket, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) } diff --git a/pkg/compute/tasks/cloud_account_delete_task.go b/pkg/compute/tasks/cloud_account_delete_task.go index bbd8f3cd05..9b95eda2f3 100644 --- a/pkg/compute/tasks/cloud_account_delete_task.go +++ b/pkg/compute/tasks/cloud_account_delete_task.go @@ -53,7 +53,7 @@ func (self *CloudAccountDeleteTask) OnInit(ctx context.Context, obj db.IStandalo if err != nil { // very unlikely account.SetStatus(self.UserCred, api.CLOUD_PROVIDER_DELETE_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) return } } @@ -73,7 +73,7 @@ func (self *CloudAccountDeleteTask) OnAllCloudProviderDeleteCompleteFailed(ctx c account := obj.(*models.SCloudaccount) account.SetStatus(self.UserCred, api.CLOUD_PROVIDER_DELETE_FAILED, body.String()) - self.SetStageFailed(ctx, body.String()) + self.SetStageFailed(ctx, body) logclient.AddActionLogWithStartable(self, account, logclient.ACT_DELETE, body, self.UserCred, false) } diff --git a/pkg/compute/tasks/cloud_account_sync_skus_task.go b/pkg/compute/tasks/cloud_account_sync_skus_task.go index 6f30eca947..1f7d98864e 100644 --- a/pkg/compute/tasks/cloud_account_sync_skus_task.go +++ b/pkg/compute/tasks/cloud_account_sync_skus_task.go @@ -41,8 +41,8 @@ func init() { func (self *CloudAccountSyncSkusTask) taskFailed(ctx context.Context, account *models.SCloudaccount, err error) { account.SetStatus(self.UserCred, api.CLOUD_PROVIDER_SYNC_STATUS_ERROR, err.Error()) db.OpsLog.LogEvent(account, db.ACT_SYNC_CLOUD_SKUS, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_CLOUD_SYNC, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_CLOUD_SYNC, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *CloudAccountSyncSkusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/cloud_account_sync_task.go b/pkg/compute/tasks/cloud_account_sync_task.go index 9ad5c3162b..4b52b213ca 100644 --- a/pkg/compute/tasks/cloud_account_sync_task.go +++ b/pkg/compute/tasks/cloud_account_sync_task.go @@ -64,7 +64,7 @@ func (self *CloudAccountSyncInfoTask) OnInit(ctx context.Context, obj db.IStanda func (self *CloudAccountSyncInfoTask) OnCloudaccountSyncReadyFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { cloudaccount := obj.(*models.SCloudaccount) db.OpsLog.LogEvent(cloudaccount, db.ACT_SYNC_HOST_FAILED, err, self.UserCred) - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) logclient.AddActionLogWithStartable(self, cloudaccount, logclient.ACT_CLOUD_SYNC, err, self.UserCred, false) } @@ -75,7 +75,7 @@ func (self *CloudAccountSyncInfoTask) OnCloudaccountSyncReady(ctx context.Contex if err != nil { cloudaccount.MarkEndSyncWithLock(ctx, self.UserCred) db.OpsLog.LogEvent(cloudaccount, db.ACT_SYNC_HOST_FAILED, err, self.UserCred) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) logclient.AddActionLogWithStartable(self, cloudaccount, logclient.ACT_CLOUD_SYNC, err, self.UserCred, false) return } @@ -129,6 +129,6 @@ func (self *CloudAccountSyncInfoTask) OnCloudaccountSyncCompleteFailed(ctx conte cloudaccount := obj.(*models.SCloudaccount) cloudaccount.MarkEndSyncWithLock(ctx, self.UserCred) db.OpsLog.LogEvent(cloudaccount, db.ACT_SYNC_HOST_FAILED, err, self.UserCred) - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, err) logclient.AddActionLogWithStartable(self, cloudaccount, logclient.ACT_CLOUD_SYNC, err, self.UserCred, false) } diff --git a/pkg/compute/tasks/cloud_provider_delete_task.go b/pkg/compute/tasks/cloud_provider_delete_task.go index 4cecc20a4b..47740eb927 100644 --- a/pkg/compute/tasks/cloud_provider_delete_task.go +++ b/pkg/compute/tasks/cloud_provider_delete_task.go @@ -42,8 +42,8 @@ func (self *CloudProviderDeleteTask) OnInit(ctx context.Context, obj db.IStandal err := provider.RealDelete(ctx, self.UserCred) if err != nil { provider.SetStatus(self.UserCred, api.CLOUD_PROVIDER_DELETE_FAILED, "StartDiskCloudproviderTask") - self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLogWithStartable(self, provider, logclient.ACT_DELETE, err.Error(), self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) + logclient.AddActionLogWithStartable(self, provider, logclient.ACT_DELETE, err, self.UserCred, false) return } diff --git a/pkg/compute/tasks/cloud_provider_sync_info_task.go b/pkg/compute/tasks/cloud_provider_sync_info_task.go index c656327d75..cad171557b 100644 --- a/pkg/compute/tasks/cloud_provider_sync_info_task.go +++ b/pkg/compute/tasks/cloud_provider_sync_info_task.go @@ -58,11 +58,6 @@ func getAction(params *jsonutils.JSONDict) string { return action } -func taskFail(ctx context.Context, task *CloudProviderSyncInfoTask, provider *models.SCloudprovider, reason string) { - logclient.AddActionLogWithStartable(task, provider, getAction(task.Params), reason, task.UserCred, false) - task.SetStageFailed(ctx, reason) -} - func (self *CloudProviderSyncInfoTask) GetSyncRange() models.SSyncRange { syncRange := models.SSyncRange{} syncRangeJson, _ := self.Params.Get("sync_range") diff --git a/pkg/compute/tasks/dbinstance_account_create_task.go b/pkg/compute/tasks/dbinstance_account_create_task.go index 0fb1d0e6d9..c095a7f9d8 100644 --- a/pkg/compute/tasks/dbinstance_account_create_task.go +++ b/pkg/compute/tasks/dbinstance_account_create_task.go @@ -40,8 +40,8 @@ func init() { func (self *DBInstanceAccountCreateTask) taskFailed(ctx context.Context, account *models.SDBInstanceAccount, err error) { account.SetStatus(self.UserCred, api.DBINSTANCE_USER_CREATE_FAILED, err.Error()) db.OpsLog.LogEvent(account, db.ACT_CREATE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_CREATE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_CREATE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceAccountCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_account_delete_task.go b/pkg/compute/tasks/dbinstance_account_delete_task.go index 5076527687..9ca413ee96 100644 --- a/pkg/compute/tasks/dbinstance_account_delete_task.go +++ b/pkg/compute/tasks/dbinstance_account_delete_task.go @@ -38,8 +38,8 @@ func init() { func (self *DBInstanceAccountDeleteTask) taskFailed(ctx context.Context, account *models.SDBInstanceAccount, err error) { account.SetStatus(self.UserCred, api.DBINSTANCE_USER_DELETE_FAILED, err.Error()) db.OpsLog.LogEvent(account, db.ACT_DELETE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_DELETE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_DELETE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceAccountDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_account_grant_privilege_task.go b/pkg/compute/tasks/dbinstance_account_grant_privilege_task.go index b9669c2fd5..9271b68936 100644 --- a/pkg/compute/tasks/dbinstance_account_grant_privilege_task.go +++ b/pkg/compute/tasks/dbinstance_account_grant_privilege_task.go @@ -40,8 +40,8 @@ func init() { func (self *DBInstanceAccountGrantPrivilegeTask) taskFailed(ctx context.Context, account *models.SDBInstanceAccount, err error) { account.SetStatus(self.UserCred, api.DBINSTANCE_USER_AVAILABLE, err.Error()) db.OpsLog.LogEvent(account, db.ACT_GRANT_PRIVILEGE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_GRANT_PRIVILEGE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_GRANT_PRIVILEGE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceAccountGrantPrivilegeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_account_reset_password_task.go b/pkg/compute/tasks/dbinstance_account_reset_password_task.go index be76f1ae24..2568c28cbf 100644 --- a/pkg/compute/tasks/dbinstance_account_reset_password_task.go +++ b/pkg/compute/tasks/dbinstance_account_reset_password_task.go @@ -37,9 +37,9 @@ func init() { func (self *DBInstanceAccountResetPasswordTask) taskFailed(ctx context.Context, account *models.SDBInstanceAccount, err error) { account.SetStatus(self.UserCred, api.DBINSTANCE_USER_RESET_PASSWD_FAILED, err.Error()) - db.OpsLog.LogEvent(account, db.ACT_RESET_PASSWORD, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_RESET_PASSWORD, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(account, db.ACT_RESET_PASSWORD, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_RESET_PASSWORD, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceAccountResetPasswordTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_account_revoke_privilege_task.go b/pkg/compute/tasks/dbinstance_account_revoke_privilege_task.go index 03b2c02949..f07212178a 100644 --- a/pkg/compute/tasks/dbinstance_account_revoke_privilege_task.go +++ b/pkg/compute/tasks/dbinstance_account_revoke_privilege_task.go @@ -39,9 +39,9 @@ func init() { func (self *DBInstanceAccountRevokePrivilegeTask) taskFailed(ctx context.Context, account *models.SDBInstanceAccount, err error) { account.SetStatus(self.UserCred, api.DBINSTANCE_USER_AVAILABLE, err.Error()) - db.OpsLog.LogEvent(account, db.ACT_REVOKE_PRIVILEGE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_REVOKE_PRIVILEGE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(account, db.ACT_REVOKE_PRIVILEGE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_REVOKE_PRIVILEGE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceAccountRevokePrivilegeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_account_set_privileges_task.go b/pkg/compute/tasks/dbinstance_account_set_privileges_task.go index 4eed9756db..7f6e5bf878 100644 --- a/pkg/compute/tasks/dbinstance_account_set_privileges_task.go +++ b/pkg/compute/tasks/dbinstance_account_set_privileges_task.go @@ -40,9 +40,9 @@ func init() { func (self *DBInstanceAccountSetPrivilegesTask) taskFailed(ctx context.Context, account *models.SDBInstanceAccount, err error) { account.SetStatus(self.UserCred, api.DBINSTANCE_USER_AVAILABLE, err.Error()) - db.OpsLog.LogEvent(account, db.ACT_SET_PRIVILEGES, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, account, logclient.ACT_SET_PRIVILEGES, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(account, db.ACT_SET_PRIVILEGES, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, account, logclient.ACT_SET_PRIVILEGES, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceAccountSetPrivilegesTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_backup_create_task.go b/pkg/compute/tasks/dbinstance_backup_create_task.go index a5c7f0dbcd..6650edac79 100644 --- a/pkg/compute/tasks/dbinstance_backup_create_task.go +++ b/pkg/compute/tasks/dbinstance_backup_create_task.go @@ -38,13 +38,13 @@ func init() { func (self *DBInstanceBackupCreateTask) taskFailed(ctx context.Context, backup *models.SDBInstanceBackup, err error) { backup.SetStatus(self.UserCred, api.DBINSTANCE_BACKUP_CREATE_FAILED, err.Error()) - db.OpsLog.LogEvent(backup, db.ACT_CREATE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, backup, logclient.ACT_CREATE, err.Error(), self.UserCred, false) + db.OpsLog.LogEvent(backup, db.ACT_CREATE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, backup, logclient.ACT_CREATE, err, self.UserCred, false) instance, _ := backup.GetDBInstance() if instance != nil { instance.SetStatus(self.UserCred, api.DBINSTANCE_BACKING_UP_FAILED, err.Error()) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceBackupCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_backup_delete.go b/pkg/compute/tasks/dbinstance_backup_delete.go index 307dac9f0c..41dcf7b2c8 100644 --- a/pkg/compute/tasks/dbinstance_backup_delete.go +++ b/pkg/compute/tasks/dbinstance_backup_delete.go @@ -38,9 +38,9 @@ func init() { func (self *DBInstanceBackupDeleteTask) taskFailed(ctx context.Context, backup *models.SDBInstanceBackup, err error) { backup.SetStatus(self.UserCred, api.DBINSTANCE_BACKUP_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(backup, db.ACT_DELETE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, backup, logclient.ACT_DELETE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(backup, db.ACT_DELETE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, backup, logclient.ACT_DELETE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceBackupDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_backup_syncstatus_task.go b/pkg/compute/tasks/dbinstance_backup_syncstatus_task.go index 86949f482d..ae318eb9e0 100644 --- a/pkg/compute/tasks/dbinstance_backup_syncstatus_task.go +++ b/pkg/compute/tasks/dbinstance_backup_syncstatus_task.go @@ -38,7 +38,7 @@ func init() { func (self *DBInstanceBackupSyncstatusTask) taskFailed(ctx context.Context, backup *models.SDBInstanceBackup, err error) { backup.SetStatus(self.GetUserCred(), api.DBINSTANCE_BACKUP_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) db.OpsLog.LogEvent(backup, db.ACT_SYNC_STATUS, backup.GetShortDesc(ctx), self.GetUserCred()) logclient.AddActionLogWithContext(ctx, backup, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) } diff --git a/pkg/compute/tasks/dbinstance_change_config.go b/pkg/compute/tasks/dbinstance_change_config.go index 8c330b23e5..65c25f329a 100644 --- a/pkg/compute/tasks/dbinstance_change_config.go +++ b/pkg/compute/tasks/dbinstance_change_config.go @@ -37,9 +37,9 @@ func init() { func (self *DBInstanceChangeConfigTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_CHANGE_CONFIG_FAILED, err.Error()) - db.OpsLog.LogEvent(dbinstance, db.ACT_CHANGE_CONFIG, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_CHANGE_CONFIG, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(dbinstance, db.ACT_CHANGE_CONFIG, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_CHANGE_CONFIG, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceChangeConfigTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -70,5 +70,5 @@ func (self *DBInstanceChangeConfigTask) OnSyncDBInstanceStatusComplete(ctx conte } func (self *DBInstanceChangeConfigTask) OnSyncDBInstanceStatusCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/dbinstance_create_task.go b/pkg/compute/tasks/dbinstance_create_task.go index 4d5b672d0a..245fb01309 100644 --- a/pkg/compute/tasks/dbinstance_create_task.go +++ b/pkg/compute/tasks/dbinstance_create_task.go @@ -38,9 +38,9 @@ func init() { func (self *DBInstanceCreateTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_CREATE_FAILED, err.Error()) - db.OpsLog.LogEvent(dbinstance, db.ACT_CREATE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_CREATE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(dbinstance, db.ACT_CREATE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_CREATE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -105,5 +105,5 @@ func (self *DBInstanceCreateTask) OnSyncDBInstanceStatusComplete(ctx context.Con } func (self *DBInstanceCreateTask) OnSyncDBInstanceStatusCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/dbinstance_database_create_task.go b/pkg/compute/tasks/dbinstance_database_create_task.go index 7e170a3fac..8d1d7a5f58 100644 --- a/pkg/compute/tasks/dbinstance_database_create_task.go +++ b/pkg/compute/tasks/dbinstance_database_create_task.go @@ -39,9 +39,9 @@ func init() { func (self *DBInstanceDatabaseCreateTask) taskFailed(ctx context.Context, database *models.SDBInstanceDatabase, err error) { database.SetStatus(self.UserCred, api.DBINSTANCE_DATABASE_CREATE_FAILE, err.Error()) - db.OpsLog.LogEvent(database, db.ACT_CREATE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, database, logclient.ACT_CREATE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(database, db.ACT_CREATE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, database, logclient.ACT_CREATE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceDatabaseCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_database_delete_task.go b/pkg/compute/tasks/dbinstance_database_delete_task.go index 06b70c9dc2..d1ec7454e9 100644 --- a/pkg/compute/tasks/dbinstance_database_delete_task.go +++ b/pkg/compute/tasks/dbinstance_database_delete_task.go @@ -37,9 +37,9 @@ func init() { func (self *DBInstanceDatabaseDeleteTask) taskFailed(ctx context.Context, database *models.SDBInstanceDatabase, err error) { database.SetStatus(self.UserCred, api.DBINSTANCE_DATABASE_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(database, db.ACT_DELETE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, database, logclient.ACT_DELETE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(database, db.ACT_DELETE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, database, logclient.ACT_DELETE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceDatabaseDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_delete_task.go b/pkg/compute/tasks/dbinstance_delete_task.go index 4ba591ea24..693d91ed22 100644 --- a/pkg/compute/tasks/dbinstance_delete_task.go +++ b/pkg/compute/tasks/dbinstance_delete_task.go @@ -38,9 +38,9 @@ func init() { func (self *DBInstanceDeleteTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(dbinstance, db.ACT_DELETE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_DELETE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(dbinstance, db.ACT_DELETE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_DELETE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_public_connection_task.go b/pkg/compute/tasks/dbinstance_public_connection_task.go index c792036de5..48ae5d4534 100644 --- a/pkg/compute/tasks/dbinstance_public_connection_task.go +++ b/pkg/compute/tasks/dbinstance_public_connection_task.go @@ -47,8 +47,8 @@ func (self *DBInstancePublicConnectionTask) getAction() string { func (self *DBInstancePublicConnectionTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_FAILE, err.Error()) - logclient.AddActionLogWithStartable(self, dbinstance, self.getAction(), err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLogWithStartable(self, dbinstance, self.getAction(), err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstancePublicConnectionTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_reboot_task.go b/pkg/compute/tasks/dbinstance_reboot_task.go index a7bcbd131c..efab136843 100644 --- a/pkg/compute/tasks/dbinstance_reboot_task.go +++ b/pkg/compute/tasks/dbinstance_reboot_task.go @@ -39,9 +39,9 @@ func init() { func (self *DBInstanceRebootTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_REBOOT_FAILED, err.Error()) - db.OpsLog.LogEvent(dbinstance, db.ACT_REBOOT, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_REBOOT, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(dbinstance, db.ACT_REBOOT, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_REBOOT, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceRebootTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_recovery_task.go b/pkg/compute/tasks/dbinstance_recovery_task.go index ee832f1d20..c80bba278a 100644 --- a/pkg/compute/tasks/dbinstance_recovery_task.go +++ b/pkg/compute/tasks/dbinstance_recovery_task.go @@ -40,9 +40,9 @@ func init() { func (self *DBInstanceRecoveryTask) taskFailed(ctx context.Context, instance *models.SDBInstance, err error) { instance.SetStatus(self.UserCred, api.DBINSTANCE_RESTORE_FAILED, err.Error()) - db.OpsLog.LogEvent(instance, db.ACT_RESTORE, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, instance, logclient.ACT_RESTORE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(instance, db.ACT_RESTORE, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, instance, logclient.ACT_RESTORE, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceRecoveryTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_renew_task.go b/pkg/compute/tasks/dbinstance_renew_task.go index b30f294f93..6ecb75364b 100644 --- a/pkg/compute/tasks/dbinstance_renew_task.go +++ b/pkg/compute/tasks/dbinstance_renew_task.go @@ -45,12 +45,12 @@ func (self *DBInstanceRenewTask) OnInit(ctx context.Context, obj db.IStandaloneM exp, err := instance.GetRegion().GetDriver().RequestRenewDBInstance(instance, bc) if err != nil { - msg := fmt.Sprintf("RequestRenewDBInstance failed %s", err) - log.Errorf(msg) - db.OpsLog.LogEvent(instance, db.ACT_REW_FAIL, msg, self.UserCred) - logclient.AddActionLogWithStartable(self, instance, logclient.ACT_RENEW, msg, self.UserCred, false) - instance.SetStatus(self.GetUserCred(), api.DBINSTANCE_RENEW_FAILED, msg) - self.SetStageFailed(ctx, msg) + // msg := fmt.Sprintf("RequestRenewDBInstance failed %s", err) + // log.Errorf(msg) + db.OpsLog.LogEvent(instance, db.ACT_REW_FAIL, err, self.UserCred) + logclient.AddActionLogWithStartable(self, instance, logclient.ACT_RENEW, err, self.UserCred, false) + instance.SetStatus(self.GetUserCred(), api.DBINSTANCE_RENEW_FAILED, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) return } @@ -58,7 +58,7 @@ func (self *DBInstanceRenewTask) OnInit(ctx context.Context, obj db.IStandaloneM if err != nil { msg := fmt.Sprintf("SaveRenewInfo fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } diff --git a/pkg/compute/tasks/dbinstance_sync_status_task.go b/pkg/compute/tasks/dbinstance_sync_status_task.go index f727d1b012..81c579d3a9 100644 --- a/pkg/compute/tasks/dbinstance_sync_status_task.go +++ b/pkg/compute/tasks/dbinstance_sync_status_task.go @@ -37,9 +37,9 @@ func init() { func (self *DBInstanceSyncStatusTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_UNKNOWN, err.Error()) - db.OpsLog.LogEvent(dbinstance, db.ACT_SYNC_STATUS, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_SYNC_STATUS, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(dbinstance, db.ACT_SYNC_STATUS, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceSyncStatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/dbinstance_sync_task.go b/pkg/compute/tasks/dbinstance_sync_task.go index 3cb7f40998..d677acb6ab 100644 --- a/pkg/compute/tasks/dbinstance_sync_task.go +++ b/pkg/compute/tasks/dbinstance_sync_task.go @@ -37,9 +37,9 @@ func init() { func (self *DBInstanceSyncTask) taskFailed(ctx context.Context, dbinstance *models.SDBInstance, err error) { dbinstance.SetStatus(self.UserCred, api.DBINSTANCE_UNKNOWN, err.Error()) - db.OpsLog.LogEvent(dbinstance, db.ACT_SYNC_CONF, err.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_SYNC_CONF, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + db.OpsLog.LogEvent(dbinstance, db.ACT_SYNC_CONF, err, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_SYNC_CONF, err, self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } func (self *DBInstanceSyncTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/disk_base_task.go b/pkg/compute/tasks/disk_base_task.go index bd2c2b0368..847dd17284 100644 --- a/pkg/compute/tasks/disk_base_task.go +++ b/pkg/compute/tasks/disk_base_task.go @@ -17,6 +17,8 @@ package tasks import ( "context" + "yunion.io/x/jsonutils" + "yunion.io/x/onecloud/pkg/cloudcommon/db/quotas" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" @@ -31,7 +33,7 @@ func (self *SDiskBaseTask) getDisk() *models.SDisk { return obj.(*models.SDisk) } -func (self *SDiskBaseTask) SetStageFailed(ctx context.Context, reason string) { +func (self *SDiskBaseTask) SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) { self.finalReleasePendingUsage(ctx) self.STask.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/disk_batch_create_task.go b/pkg/compute/tasks/disk_batch_create_task.go index e37ad6a7f4..efeb49d4a7 100644 --- a/pkg/compute/tasks/disk_batch_create_task.go +++ b/pkg/compute/tasks/disk_batch_create_task.go @@ -103,7 +103,7 @@ func (self *DiskBatchCreateTask) GetFirstDisk() (*api.DiskConfig, error) { return disks[0], nil } -func (self *DiskBatchCreateTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason string) { +func (self *DiskBatchCreateTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason jsonutils.JSONObject) { self.SSchedTask.OnScheduleFailCallback(ctx, obj, reason) disk := obj.(*models.SDisk) log.Errorf("Schedule disk %s failed", disk.Name) @@ -127,7 +127,7 @@ func (self *DiskBatchCreateTask) SaveScheduleResult(ctx context.Context, obj ISc onError := func(err error) { self.clearPendingUsage(ctx, disk) disk.SetStatus(self.UserCred, api.DISK_ALLOC_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) db.OpsLog.LogEvent(disk, db.ACT_ALLOCATE_FAIL, err, self.UserCred) notifyclient.NotifySystemError(disk.Id, disk.Name, api.DISK_ALLOC_FAILED, err.Error()) } diff --git a/pkg/compute/tasks/disk_clean_overdued_snapshots.go b/pkg/compute/tasks/disk_clean_overdued_snapshots.go index acfae3ea12..e39c11a306 100644 --- a/pkg/compute/tasks/disk_clean_overdued_snapshots.go +++ b/pkg/compute/tasks/disk_clean_overdued_snapshots.go @@ -43,13 +43,13 @@ func (self *DiskCleanOverduedSnapshots) OnInit(ctx context.Context, obj db.IStan spId, _ := self.Params.GetString("snapshotpolicy_id") sp, _ := models.SnapshotPolicyManager.FetchSnapshotPolicyById(spId) if sp == nil { - self.SetStageFailed(ctx, "missing snapshot policy ???") + self.SetStageFailed(ctx, jsonutils.NewString("missing snapshot policy ???")) return } now, err := self.Params.GetTime("start_time") if err != nil { - self.SetStageFailed(ctx, "failed to get start time") + self.SetStageFailed(ctx, jsonutils.NewString("failed to get start time")) return } @@ -71,7 +71,7 @@ func (self *DiskCleanOverduedSnapshots) OnInit(ctx context.Context, obj db.IStan snapCount, err = models.SnapshotManager.Query().Equals("fake_deleted", false).Equals("disk_id", disk.Id). Equals("created_by", compute.SNAPSHOT_AUTO).LT("created_at", t).CountWithError() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } cleanOverdueSnapshots = snapCount > 0 @@ -86,13 +86,13 @@ func (self *DiskCleanOverduedSnapshots) OnInit(ctx context.Context, obj db.IStan err = models.SnapshotManager.Query().Equals("disk_id", disk.Id). Equals("created_by", compute.SNAPSHOT_AUTO).Equals("fake_deleted", false).Asc("created_at").First(snapshot) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } snapshot.SetModelManager(models.SnapshotManager, snapshot) err = snapshot.StartSnapshotDeleteTask(ctx, self.UserCred, false, self.Id) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } } @@ -104,7 +104,7 @@ type SnapshotCleanupTask struct { func (self *SnapshotCleanupTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { now, err := self.Params.GetTime("tick") if err != nil { - self.SetStageFailed(ctx, "failed get tick") + self.SetStageFailed(ctx, jsonutils.NewString("failed get tick")) return } var snapshots = make([]models.SSnapshot, 0) @@ -116,7 +116,7 @@ func (self *SnapshotCleanupTask) OnInit(ctx context.Context, obj db.IStandaloneM self.SetStageComplete(ctx, nil) return } else if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("failed get snapshot %s", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("failed get snapshot %s", err))) return } self.StartSnapshotsDelete(ctx, snapshots) @@ -145,7 +145,7 @@ func (self *SnapshotCleanupTask) OnDeleteSnapshot(ctx context.Context, obj db.IS var snapshots = make([]models.SSnapshot, 0) err := self.Params.Unmarshal(&snapshots, "snapshots") if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } if len(snapshots) > 0 { diff --git a/pkg/compute/tasks/disk_create_task.go b/pkg/compute/tasks/disk_create_task.go index 5d56c5c502..cb13eb082e 100644 --- a/pkg/compute/tasks/disk_create_task.go +++ b/pkg/compute/tasks/disk_create_task.go @@ -71,7 +71,7 @@ func (self *DiskCreateTask) OnStorageCacheImageComplete(ctx context.Context, dis func (self *DiskCreateTask) OnStartAllocateFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { disk.SetStatus(self.UserCred, api.DISK_ALLOC_FAILED, data.String()) logclient.AddActionLogWithStartable(self, disk, logclient.ACT_ALLOCATE, data, self.UserCred, false) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *DiskCreateTask) OnDiskReady(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { @@ -106,7 +106,7 @@ func (self *DiskCreateTask) OnDiskReady(ctx context.Context, disk *models.SDisk, func (self *DiskCreateTask) OnDiskReadyFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { disk.SetStatus(self.UserCred, api.DISK_ALLOC_FAILED, data.String()) logclient.AddActionLogWithStartable(self, disk, logclient.ACT_ALLOCATE, data, self.UserCred, false) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func init() { diff --git a/pkg/compute/tasks/disk_delete_task.go b/pkg/compute/tasks/disk_delete_task.go index 64de1be6c8..b78bbcb19a 100644 --- a/pkg/compute/tasks/disk_delete_task.go +++ b/pkg/compute/tasks/disk_delete_task.go @@ -44,13 +44,13 @@ func (self *DiskDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, cnt, err := disk.GetGuestDiskCount() if err != nil { reason := "Disk GetGuestDiskCount fail: " + err.Error() - self.SetStageFailed(ctx, reason) + self.SetStageFailed(ctx, jsonutils.NewString(reason)) db.OpsLog.LogEvent(disk, db.ACT_DELOCATE_FAIL, reason, self.UserCred) return } if cnt > 0 { reason := "Disk has been attached to server" - self.SetStageFailed(ctx, reason) + self.SetStageFailed(ctx, jsonutils.NewString(reason)) db.OpsLog.LogEvent(disk, db.ACT_DELOCATE_FAIL, reason, self.UserCred) return } @@ -179,7 +179,7 @@ func (self *DiskDeleteTask) OnGuestDiskDeleteComplete(ctx context.Context, obj d func (self *DiskDeleteTask) OnGuestDiskDeleteCompleteFailed(ctx context.Context, disk *models.SDisk, reason jsonutils.JSONObject) { disk.SetStatus(self.GetUserCred(), api.DISK_DEALLOC_FAILED, reason.String()) - self.SetStageFailed(ctx, reason.String()) + self.SetStageFailed(ctx, reason) db.OpsLog.LogEvent(disk, db.ACT_DELOCATE_FAIL, disk.GetShortDesc(ctx), self.GetUserCred()) logclient.AddActionLogWithContext(ctx, disk, logclient.ACT_DELOCATE, reason, self.UserCred, false) } diff --git a/pkg/compute/tasks/disk_reset_task.go b/pkg/compute/tasks/disk_reset_task.go index d3db1d222e..16e48766d0 100644 --- a/pkg/compute/tasks/disk_reset_task.go +++ b/pkg/compute/tasks/disk_reset_task.go @@ -57,7 +57,7 @@ func (self *DiskResetTask) TaskFailed(ctx context.Context, disk *models.SDisk, r if snapshot != nil { logclient.AddActionLogWithStartable(self, snapshot, logclient.ACT_RESET_DISK, reason, self.UserCred, false) } - self.SetStageFailed(ctx, reason.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(reason)) guests := disk.GetGuests() if len(guests) == 1 { guests[0].SetStatus(self.UserCred, api.VM_DISK_RESET_FAIL, reason.Error()) @@ -168,13 +168,13 @@ func (self *DiskCleanUpSnapshotsTask) StartCleanUpSnapshots(ctx context.Context, if len(guests) == 1 { host = guests[0].GetHost() } else { - self.SetStageFailed(ctx, "Disk can't get guest") + self.SetStageFailed(ctx, jsonutils.NewString("Disk can't get guest")) return } self.SetStage("OnCleanUpSnapshots", nil) err := host.GetHostDriver().RequestCleanUpDiskSnapshots(ctx, host, disk, self.Params, self) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } @@ -208,6 +208,6 @@ func (self *DiskCleanUpSnapshotsTask) OnCleanUpSnapshots(ctx context.Context, di } func (self *DiskCleanUpSnapshotsTask) OnCleanUpSnapshotsFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { - db.OpsLog.LogEvent(disk, db.ACT_DISK_CLEAN_UP_SNAPSHOTS_FAIL, data.String(), self.UserCred) - self.SetStageFailed(ctx, data.String()) + db.OpsLog.LogEvent(disk, db.ACT_DISK_CLEAN_UP_SNAPSHOTS_FAIL, data, self.UserCred) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/disk_resize_task.go b/pkg/compute/tasks/disk_resize_task.go index 051681a712..7f1b3ccdf2 100644 --- a/pkg/compute/tasks/disk_resize_task.go +++ b/pkg/compute/tasks/disk_resize_task.go @@ -60,7 +60,7 @@ func (self *DiskResizeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, reason := "Cannot find host for disk" if host == nil || host.HostStatus != api.HOST_ONLINE { self.SetDiskReady(ctx, disk, self.GetUserCred(), reason) - self.SetStageFailed(ctx, reason) + self.SetStageFailed(ctx, jsonutils.NewString(reason)) db.OpsLog.LogEvent(disk, db.ACT_RESIZE_FAIL, reason, self.GetUserCred()) logclient.AddActionLogWithStartable(self, disk, logclient.ACT_RESIZE, reason, self.UserCred, false) return @@ -88,9 +88,9 @@ func (self *DiskResizeTask) OnStartResizeDiskSucc(ctx context.Context, disk *mod func (self *DiskResizeTask) OnStartResizeDiskFailed(ctx context.Context, disk *models.SDisk, reason error) { self.SetDiskReady(ctx, disk, self.GetUserCred(), reason.Error()) - self.SetStageFailed(ctx, reason.Error()) - db.OpsLog.LogEvent(disk, db.ACT_RESIZE_FAIL, reason.Error(), self.GetUserCred()) - logclient.AddActionLogWithStartable(self, disk, logclient.ACT_RESIZE, reason.Error(), self.UserCred, false) + self.SetStageFailed(ctx, jsonutils.Marshal(reason)) + db.OpsLog.LogEvent(disk, db.ACT_RESIZE_FAIL, reason, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, disk, logclient.ACT_RESIZE, reason, self.UserCred, false) } func (self *DiskResizeTask) OnDiskResizeComplete(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { @@ -150,6 +150,6 @@ func (self *DiskResizeTask) OnDiskResized(ctx context.Context, disk *models.SDis func (self *DiskResizeTask) OnDiskResizeCompleteFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { self.SetDiskReady(ctx, disk, self.GetUserCred(), data.String()) db.OpsLog.LogEvent(disk, db.ACT_RESIZE_FAIL, disk.GetShortDesc(ctx), self.UserCred) - logclient.AddActionLogWithStartable(self, disk, logclient.ACT_RESIZE, data.String(), self.UserCred, false) - self.SetStageFailed(ctx, data.String()) + logclient.AddActionLogWithStartable(self, disk, logclient.ACT_RESIZE, data, self.UserCred, false) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/disk_save_task.go b/pkg/compute/tasks/disk_save_task.go index 6d0e16d120..97f9b903e7 100644 --- a/pkg/compute/tasks/disk_save_task.go +++ b/pkg/compute/tasks/disk_save_task.go @@ -55,7 +55,7 @@ func (self *DiskSaveTask) OnInit(ctx context.Context, obj db.IStandaloneModel, d if host := self.GetMasterHost(disk); host == nil { reason := "Cannot find host for disk" disk.SetDiskReady(ctx, self.GetUserCred(), reason) - self.TaskFailed(ctx, reason) + self.TaskFailed(ctx, jsonutils.NewString(reason)) db.OpsLog.LogEvent(disk, db.ACT_SAVE_FAIL, reason, self.GetUserCred()) } else { disk.SetStatus(self.GetUserCred(), api.DISK_START_SAVE, "") @@ -73,15 +73,15 @@ func (self *DiskSaveTask) StartBackupDisk(ctx context.Context, disk *models.SDis if err := host.GetHostDriver().RequestPrepareSaveDiskOnHost(ctx, host, disk, imageId, self); err != nil { log.Errorf("Backup failed: %v", err) disk.SetDiskReady(ctx, self.GetUserCred(), err.Error()) - self.TaskFailed(ctx, err.Error()) + self.TaskFailed(ctx, jsonutils.Marshal(err)) db.OpsLog.LogEvent(disk, db.ACT_SAVE_FAIL, err.Error(), self.GetUserCred()) } } func (self *DiskSaveTask) OnDiskBackupCompleteFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { disk.SetDiskReady(ctx, self.GetUserCred(), data.String()) - db.OpsLog.LogEvent(disk, db.ACT_SAVE_FAIL, data.String(), self.GetUserCred()) - self.SetStageFailed(ctx, data.String()) + db.OpsLog.LogEvent(disk, db.ACT_SAVE_FAIL, data, self.GetUserCred()) + self.SetStageFailed(ctx, data) } func (self *DiskSaveTask) OnDiskBackupComplete(ctx context.Context, disk *models.SDisk, data *jsonutils.JSONDict) { @@ -91,7 +91,7 @@ func (self *DiskSaveTask) OnDiskBackupComplete(ctx context.Context, disk *models imageId, _ := self.GetParams().GetString("image_id") if host := self.GetMasterHost(disk); host == nil { log.Errorf("Saved disk Host mast not be nil") - self.TaskFailed(ctx, "Saved disk Host mast not be nil") + self.TaskFailed(ctx, jsonutils.NewString("Saved disk Host mast not be nil")) } else { if self.Params.Contains("format") { format, _ := self.Params.Get("format") @@ -99,7 +99,7 @@ func (self *DiskSaveTask) OnDiskBackupComplete(ctx context.Context, disk *models } if err := self.UploadDisk(ctx, host, disk, imageId, data); err != nil { log.Errorf("UploadDisk failed: %v", err) - self.TaskFailed(ctx, err.Error()) + self.TaskFailed(ctx, jsonutils.Marshal(err)) } self.RefreshImageCache(ctx, imageId) } @@ -113,7 +113,7 @@ func (self *DiskSaveTask) UploadDisk(ctx context.Context, host *models.SHost, di return host.GetHostDriver().RequestSaveUploadImageOnHost(ctx, host, disk, imageId, self, jsonutils.Marshal(data)) } -func (self *DiskSaveTask) TaskFailed(ctx context.Context, reason string) { +func (self *DiskSaveTask) TaskFailed(ctx context.Context, reason jsonutils.JSONObject) { self.SetStageFailed(ctx, reason) if imageId, err := self.GetParams().GetString("image_id"); err != nil && len(imageId) > 0 { log.Errorf("save disk task failed, set image %s killed", imageId) diff --git a/pkg/compute/tasks/disk_syncstatus_task.go b/pkg/compute/tasks/disk_syncstatus_task.go index 9adb5625e8..474c2cf8e3 100644 --- a/pkg/compute/tasks/disk_syncstatus_task.go +++ b/pkg/compute/tasks/disk_syncstatus_task.go @@ -38,7 +38,7 @@ func init() { func (self *DiskSyncstatusTask) taskFailed(ctx context.Context, disk *models.SDisk, err error) { disk.SetStatus(self.GetUserCred(), api.DISK_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) db.OpsLog.LogEvent(disk, db.ACT_SYNC_STATUS, disk.GetShortDesc(ctx), self.GetUserCred()) logclient.AddActionLogWithContext(ctx, disk, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) } diff --git a/pkg/compute/tasks/eip_allocate_task.go b/pkg/compute/tasks/eip_allocate_task.go index 1a9b8760ab..ae3e8e8b8e 100644 --- a/pkg/compute/tasks/eip_allocate_task.go +++ b/pkg/compute/tasks/eip_allocate_task.go @@ -38,12 +38,12 @@ func init() { taskman.RegisterTask(EipAllocateTask{}) } -func (self *EipAllocateTask) onFailed(ctx context.Context, eip *models.SElasticip, reason string) { +func (self *EipAllocateTask) onFailed(ctx context.Context, eip *models.SElasticip, reason jsonutils.JSONObject) { self.setGuestAllocateEipFailed(eip, reason) self.SetStageFailed(ctx, reason) } -func (self *EipAllocateTask) setGuestAllocateEipFailed(eip *models.SElasticip, reason string) { +func (self *EipAllocateTask) setGuestAllocateEipFailed(eip *models.SElasticip, reason jsonutils.JSONObject) { if eip != nil { db.OpsLog.LogEvent(eip, db.ACT_ALLOCATE_FAIL, reason, self.GetUserCred()) logclient.AddActionLogWithStartable(self, eip, logclient.ACT_ALLOCATE, reason, self.UserCred, false) @@ -56,7 +56,7 @@ func (self *EipAllocateTask) setGuestAllocateEipFailed(eip *models.SElasticip, r return } guest := instance.(*models.SGuest) - guest.SetStatus(self.UserCred, api.VM_ASSOCIATE_EIP_FAILED, reason) + guest.SetStatus(self.UserCred, api.VM_ASSOCIATE_EIP_FAILED, reason.String()) } } @@ -78,7 +78,7 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel _network, err := models.NetworkManager.FetchById(eip.NetworkId) if err != nil { msg := fmt.Sprintf("failed to found network %s error: %v", eip.NetworkId, err) - self.onFailed(ctx, eip, msg) + self.onFailed(ctx, eip, jsonutils.NewString(msg)) return } network := _network.(*models.SNetwork) @@ -89,12 +89,12 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel ipAddr, err := network.GetFreeIP(ctx, self.UserCred, nil, nil, reqIp, api.IPAllocationNone, false) if err != nil { - self.onFailed(ctx, eip, err.Error()) + self.onFailed(ctx, eip, jsonutils.NewString(err.Error())) return } if reqIp != "" && ipAddr != reqIp { msg := fmt.Sprintf("requested ip %s is occupied!", reqIp) - self.onFailed(ctx, eip, msg) + self.onFailed(ctx, eip, jsonutils.NewString(msg)) return } _, err = db.Update(eip, func() error { @@ -102,7 +102,7 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel return nil }) if err != nil { - self.onFailed(ctx, eip, err.Error()) + self.onFailed(ctx, eip, jsonutils.NewString(err.Error())) return } if !eipIsManaged { @@ -125,7 +125,7 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel if err != nil { msg := fmt.Sprintf("fail to find iregion for eip %s", err) eip.SetStatus(self.UserCred, api.EIP_STATUS_ALLOCATE_FAIL, msg) - self.onFailed(ctx, eip, msg) + self.onFailed(ctx, eip, jsonutils.NewString(msg)) return } @@ -133,14 +133,14 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel if err != nil { msg := fmt.Sprintf("create eip fail %s", err) eip.SetStatus(self.UserCred, api.EIP_STATUS_ALLOCATE_FAIL, msg) - self.onFailed(ctx, eip, msg) + self.onFailed(ctx, eip, jsonutils.NewString(msg)) return } if err := eip.SyncWithCloudEip(ctx, self.UserCred, eip.GetCloudprovider(), extEip, nil); err != nil { msg := fmt.Sprintf("sync eip fail %s", err) eip.SetStatus(self.UserCred, api.EIP_STATUS_ALLOCATE_FAIL, msg) - self.onFailed(ctx, eip, msg) + self.onFailed(ctx, eip, jsonutils.NewString(msg)) return } } @@ -149,7 +149,7 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel self.SetStage("on_eip_associate_complete", nil) if err := eip.StartEipAssociateTask(ctx, self.UserCred, self.Params, self.GetId()); err != nil { msg := fmt.Sprintf("start associate task fail %s", err) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) } } else { logclient.AddActionLogWithStartable(self, eip, logclient.ACT_ALLOCATE, nil, self.UserCred, true) @@ -165,6 +165,6 @@ func (self *EipAllocateTask) OnEipAssociateComplete(ctx context.Context, obj db. func (self *EipAllocateTask) OnEipAssociateCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { eip := obj.(*models.SElasticip) - self.setGuestAllocateEipFailed(eip, data.String()) - self.SetStageFailed(ctx, data.String()) + self.setGuestAllocateEipFailed(eip, data) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/eip_associate_task.go b/pkg/compute/tasks/eip_associate_task.go index 14d48a1f73..2ae832b0cb 100644 --- a/pkg/compute/tasks/eip_associate_task.go +++ b/pkg/compute/tasks/eip_associate_task.go @@ -35,11 +35,11 @@ func init() { taskman.RegisterTask(EipAssociateTask{}) } -func (self *EipAssociateTask) TaskFail(ctx context.Context, eip *models.SElasticip, msg string, vm *models.SGuest) { - eip.SetStatus(self.UserCred, api.EIP_STATUS_READY, msg) +func (self *EipAssociateTask) TaskFail(ctx context.Context, eip *models.SElasticip, msg jsonutils.JSONObject, vm *models.SGuest) { + eip.SetStatus(self.UserCred, api.EIP_STATUS_READY, msg.String()) self.SetStageFailed(ctx, msg) if vm != nil { - vm.SetStatus(self.UserCred, api.VM_ASSOCIATE_EIP_FAILED, msg) + vm.SetStatus(self.UserCred, api.VM_ASSOCIATE_EIP_FAILED, msg.String()) db.OpsLog.LogEvent(vm, db.ACT_EIP_ATTACH, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, vm, logclient.ACT_EIP_ASSOCIATE, msg, self.UserCred, false) } @@ -54,20 +54,20 @@ func (self *EipAssociateTask) OnInit(ctx context.Context, obj db.IStandaloneMode if server == nil { msg := fmt.Sprintf("fail to find server for instanceId %s", instanceId) - self.TaskFail(ctx, eip, msg, nil) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), nil) return } driver := server.GetDriver() if driver == nil { msg := fmt.Sprintf("fail to find guest driver for instanceId %s", instanceId) - self.TaskFail(ctx, eip, msg, nil) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), nil) return } self.SetStage("OnAssociateEipComplete", nil) if err := driver.RequestAssociateEip(ctx, self.UserCred, server, eip, self); err != nil { - self.TaskFail(ctx, eip, err.Error(), server) + self.TaskFail(ctx, eip, jsonutils.Marshal(err), server) return } } @@ -87,6 +87,6 @@ func (self *EipAssociateTask) OnAssociateEipCompleteFailed(ctx context.Context, eip := obj.(*models.SElasticip) instanceId, _ := self.Params.GetString("instance_id") server := models.GuestManager.FetchGuestById(instanceId) - self.TaskFail(ctx, eip, data.String(), server) + self.TaskFail(ctx, eip, data, server) return } diff --git a/pkg/compute/tasks/eip_change_bandwidth_task.go b/pkg/compute/tasks/eip_change_bandwidth_task.go index 75ae91c736..3301255487 100644 --- a/pkg/compute/tasks/eip_change_bandwidth_task.go +++ b/pkg/compute/tasks/eip_change_bandwidth_task.go @@ -35,8 +35,8 @@ func init() { taskman.RegisterTask(EipChangeBandwidthTask{}) } -func (self *EipChangeBandwidthTask) TaskFail(ctx context.Context, eip *models.SElasticip, msg string) { - eip.SetStatus(self.UserCred, api.EIP_STATUS_READY, msg) +func (self *EipChangeBandwidthTask) TaskFail(ctx context.Context, eip *models.SElasticip, msg jsonutils.JSONObject) { + eip.SetStatus(self.UserCred, api.EIP_STATUS_READY, msg.String()) db.OpsLog.LogEvent(eip, db.ACT_CHANGE_BANDWIDTH, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, eip, logclient.ACT_CHANGE_BANDWIDTH, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) @@ -47,7 +47,7 @@ func (self *EipChangeBandwidthTask) OnInit(ctx context.Context, obj db.IStandalo bandwidth, _ := self.Params.Int("bandwidth") if bandwidth <= 0 { msg := fmt.Sprintf("invalid bandwidth %d", bandwidth) - self.TaskFail(ctx, eip, msg) + self.TaskFail(ctx, eip, jsonutils.NewString(msg)) return } @@ -55,7 +55,7 @@ func (self *EipChangeBandwidthTask) OnInit(ctx context.Context, obj db.IStandalo extEip, err := eip.GetIEip() if err != nil { msg := fmt.Sprintf("fail to find iEip %s", err) - self.TaskFail(ctx, eip, msg) + self.TaskFail(ctx, eip, jsonutils.NewString(msg)) return } @@ -63,7 +63,7 @@ func (self *EipChangeBandwidthTask) OnInit(ctx context.Context, obj db.IStandalo if err != nil { msg := fmt.Sprintf("fail to find iEip %s", err) - self.TaskFail(ctx, eip, msg) + self.TaskFail(ctx, eip, jsonutils.NewString(msg)) return } @@ -71,7 +71,7 @@ func (self *EipChangeBandwidthTask) OnInit(ctx context.Context, obj db.IStandalo if err := eip.DoChangeBandwidth(self.UserCred, int(bandwidth)); err != nil { msg := fmt.Sprintf("fail to synchronize iEip bandwidth %s", err) - self.TaskFail(ctx, eip, msg) + self.TaskFail(ctx, eip, jsonutils.NewString(msg)) return } logclient.AddActionLogWithStartable(self, eip, logclient.ACT_CHANGE_BANDWIDTH, nil, self.UserCred, true) diff --git a/pkg/compute/tasks/eip_deallocate_task.go b/pkg/compute/tasks/eip_deallocate_task.go index 84f5bb1c25..554301c080 100644 --- a/pkg/compute/tasks/eip_deallocate_task.go +++ b/pkg/compute/tasks/eip_deallocate_task.go @@ -37,8 +37,8 @@ func init() { taskman.RegisterTask(EipDeallocateTask{}) } -func (self *EipDeallocateTask) taskFail(ctx context.Context, eip *models.SElasticip, msg string) { - eip.SetStatus(self.UserCred, api.EIP_STATUS_DEALLOCATE_FAIL, msg) +func (self *EipDeallocateTask) taskFail(ctx context.Context, eip *models.SElasticip, msg jsonutils.JSONObject) { + eip.SetStatus(self.UserCred, api.EIP_STATUS_DEALLOCATE_FAIL, msg.String()) db.OpsLog.LogEvent(eip, db.ACT_DELOCATE, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, eip, logclient.ACT_DELETE, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) @@ -53,14 +53,14 @@ func (self *EipDeallocateTask) OnInit(ctx context.Context, obj db.IStandaloneMod if err != nil { if errors.Cause(err) != cloudprovider.ErrNotFound && errors.Cause(err) != cloudprovider.ErrInvalidProvider { msg := fmt.Sprintf("fail to find iEIP for eip %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } } else { err = expEip.Delete() if err != nil { msg := fmt.Sprintf("fail to delete iEIP %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } } @@ -73,7 +73,7 @@ func (self *EipDeallocateTask) OnInit(ctx context.Context, obj db.IStandaloneMod err := eip.RealDelete(ctx, self.UserCred) if err != nil { msg := fmt.Sprintf("fail to delete EIP %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } diff --git a/pkg/compute/tasks/eip_dissociate_task.go b/pkg/compute/tasks/eip_dissociate_task.go index 03d55d12b6..9f1d11a5fe 100644 --- a/pkg/compute/tasks/eip_dissociate_task.go +++ b/pkg/compute/tasks/eip_dissociate_task.go @@ -38,20 +38,20 @@ func init() { taskman.RegisterTask(EipDissociateTask{}) } -func (self *EipDissociateTask) TaskFail(ctx context.Context, eip *models.SElasticip, msg string, model db.IModel) { - eip.SetStatus(self.UserCred, api.EIP_STATUS_READY, msg) +func (self *EipDissociateTask) TaskFail(ctx context.Context, eip *models.SElasticip, msg jsonutils.JSONObject, model db.IModel) { + eip.SetStatus(self.UserCred, api.EIP_STATUS_READY, msg.String()) self.SetStageFailed(ctx, msg) var logOp string if model != nil { switch srv := model.(type) { case *models.SGuest: - srv.SetStatus(self.UserCred, api.VM_DISSOCIATE_EIP_FAILED, msg) + srv.SetStatus(self.UserCred, api.VM_DISSOCIATE_EIP_FAILED, msg.String()) logOp = logclient.ACT_VM_DISSOCIATE case *models.SNatGateway: - srv.SetStatus(self.UserCred, api.VM_DISSOCIATE_EIP_FAILED, msg) + srv.SetStatus(self.UserCred, api.VM_DISSOCIATE_EIP_FAILED, msg.String()) logOp = logclient.ACT_NATGATEWAY_DISSOCIATE case *models.SLoadbalancer: - srv.SetStatus(self.UserCred, api.VM_DISSOCIATE_EIP_FAILED, msg) + srv.SetStatus(self.UserCred, api.VM_DISSOCIATE_EIP_FAILED, msg.String()) logOp = logclient.ACT_LOADBALANCER_DISSOCIATE } db.OpsLog.LogEvent(model, db.ACT_EIP_DETACH, msg, self.GetUserCred()) @@ -82,7 +82,7 @@ func (self *EipDissociateTask) OnInit(ctx context.Context, obj db.IStandaloneMod model = nat logOp = logclient.ACT_NATGATEWAY_DISSOCIATE } else { - self.TaskFail(ctx, eip, "unsupported associate type", nil) + self.TaskFail(ctx, eip, jsonutils.NewString("unsupported associate type"), nil) return } lockman.LockObject(ctx, model) @@ -92,14 +92,14 @@ func (self *EipDissociateTask) OnInit(ctx context.Context, obj db.IStandaloneMod extEip, err := eip.GetIEip() if err != nil && errors.Cause(err) != cloudprovider.ErrNotFound { msg := fmt.Sprintf("fail to find iEIP for eip %s", err) - self.TaskFail(ctx, eip, msg, model) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), model) return } if err == nil && len(extEip.GetAssociationExternalId()) > 0 { err = extEip.Dissociate() if err != nil { msg := fmt.Sprintf("fail to remote dissociate eip %s", err) - self.TaskFail(ctx, eip, msg, model) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), model) return } } @@ -110,7 +110,7 @@ func (self *EipDissociateTask) OnInit(ctx context.Context, obj db.IStandaloneMod Equals("eip_id", eip.Id) if err := db.FetchModelObjects(models.GuestnetworkManager, q, &guestnics); err != nil { msg := errors.Wrapf(err, "fetch guest nic associated with eip %s(%s)", eip.Name, eip.Id).Error() - self.TaskFail(ctx, eip, msg, model) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), model) return } var errs []error @@ -126,13 +126,13 @@ func (self *EipDissociateTask) OnInit(ctx context.Context, obj db.IStandaloneMod if len(errs) > 0 { err := errors.NewAggregate(errs) msg := errors.Wrapf(err, "disassociate eip %s(%s)", eip.Name, eip.Id).Error() - self.TaskFail(ctx, eip, msg, model) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), model) } } if err := eip.Dissociate(ctx, self.UserCred); err != nil { msg := fmt.Sprintf("fail to local dissociate eip %s", err) - self.TaskFail(ctx, eip, msg, model) + self.TaskFail(ctx, eip, jsonutils.NewString(msg), model) return } diff --git a/pkg/compute/tasks/eip_syncstatus_task.go b/pkg/compute/tasks/eip_syncstatus_task.go index 2d9ded2d09..2dc772b3ef 100644 --- a/pkg/compute/tasks/eip_syncstatus_task.go +++ b/pkg/compute/tasks/eip_syncstatus_task.go @@ -35,8 +35,8 @@ func init() { taskman.RegisterTask(EipSyncstatusTask{}) } -func (self *EipSyncstatusTask) taskFail(ctx context.Context, eip *models.SElasticip, msg string) { - eip.SetStatus(self.UserCred, api.EIP_STATUS_UNKNOWN, msg) +func (self *EipSyncstatusTask) taskFail(ctx context.Context, eip *models.SElasticip, msg jsonutils.JSONObject) { + eip.SetStatus(self.UserCred, api.EIP_STATUS_UNKNOWN, msg.String()) db.OpsLog.LogEvent(eip, db.ACT_SYNC_STATUS, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, eip, logclient.ACT_SYNC_STATUS, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) @@ -48,28 +48,28 @@ func (self *EipSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneMod extEip, err := eip.GetIEip() if err != nil { msg := fmt.Sprintf("fail to find ieip for eip %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } err = extEip.Refresh() if err != nil { msg := fmt.Sprintf("fail to refresh eip status %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } err = eip.SyncWithCloudEip(ctx, self.UserCred, eip.GetCloudprovider(), extEip, nil) if err != nil { msg := fmt.Sprintf("fail to sync eip status %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } err = eip.SyncInstanceWithCloudEip(ctx, self.UserCred, extEip) if err != nil { msg := fmt.Sprintf("fail to sync eip status %s", err) - self.taskFail(ctx, eip, msg) + self.taskFail(ctx, eip, jsonutils.NewString(msg)) return } diff --git a/pkg/compute/tasks/elasticcache_account_create_task.go b/pkg/compute/tasks/elasticcache_account_create_task.go index dcc9f76763..cb358598cb 100644 --- a/pkg/compute/tasks/elasticcache_account_create_task.go +++ b/pkg/compute/tasks/elasticcache_account_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheAccountCreateTask{}) } -func (self *ElasticcacheAccountCreateTask) taskFail(ctx context.Context, elasticcache *models.SElasticcacheAccount, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACCOUNT_STATUS_CREATE_FAILED, reason) +func (self *ElasticcacheAccountCreateTask) taskFail(ctx context.Context, elasticcache *models.SElasticcacheAccount, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACCOUNT_STATUS_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_ACCOUNT_STATUS_CREATE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_ACCOUNT_STATUS_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheAccountCreateTask) OnInit(ctx context.Context, obj db.IS ea := obj.(*models.SElasticcacheAccount) region := ea.GetRegion() if region == nil { - self.taskFail(ctx, ea, fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName())) + self.taskFail(ctx, ea, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName()))) return } self.SetStage("OnElasticcacheAccountCreateComplete", nil) if err := region.GetDriver().RequestCreateElasticcacheAccount(ctx, self.GetUserCred(), ea, self); err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.Marshal(err)) return } } @@ -65,5 +65,5 @@ func (self *ElasticcacheAccountCreateTask) OnElasticcacheAccountCreateComplete(c } func (self *ElasticcacheAccountCreateTask) OnElasticcacheAccountCreateCompleteFailed(ctx context.Context, ea *models.SElasticcacheAccount, data jsonutils.JSONObject) { - self.taskFail(ctx, ea, data.String()) + self.taskFail(ctx, ea, data) } diff --git a/pkg/compute/tasks/elasticcache_account_delete_task.go b/pkg/compute/tasks/elasticcache_account_delete_task.go index 4a5fd9b829..1aa17a5c04 100644 --- a/pkg/compute/tasks/elasticcache_account_delete_task.go +++ b/pkg/compute/tasks/elasticcache_account_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheAccountDeleteTask{}) } -func (self *ElasticcacheAccountDeleteTask) taskFail(ctx context.Context, ea *models.SElasticcacheAccount, reason string) { - ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACCOUNT_STATUS_DELETE_FAILED, reason) +func (self *ElasticcacheAccountDeleteTask) taskFail(ctx context.Context, ea *models.SElasticcacheAccount, reason jsonutils.JSONObject) { + ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACCOUNT_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(ea, db.ACT_DELETE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ea, logclient.ACT_DELETE, reason, self.UserCred, false) - notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACCOUNT_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACCOUNT_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,18 +48,18 @@ func (self *ElasticcacheAccountDeleteTask) OnInit(ctx context.Context, obj db.IS ea := obj.(*models.SElasticcacheAccount) region := ea.GetRegion() if region == nil { - self.taskFail(ctx, ea, fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName())) + self.taskFail(ctx, ea, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName()))) return } self.SetStage("OnElasticcacheAccountDeleteComplete", nil) if err := region.GetDriver().RequestDeleteElasticcacheAccount(ctx, self.GetUserCred(), ea, self); err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.Marshal(err)) return } else { err = db.DeleteModel(ctx, self.GetUserCred(), ea) if err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.NewString(err.Error())) return } diff --git a/pkg/compute/tasks/elasticcache_account_reset_password_task.go b/pkg/compute/tasks/elasticcache_account_reset_password_task.go index a51e801c59..6e777ef8fd 100644 --- a/pkg/compute/tasks/elasticcache_account_reset_password_task.go +++ b/pkg/compute/tasks/elasticcache_account_reset_password_task.go @@ -36,15 +36,15 @@ func init() { taskman.RegisterTask(ElasticcacheAccountResetPasswordTask{}) } -func (self *ElasticcacheAccountResetPasswordTask) taskFail(ctx context.Context, ea *models.SElasticcacheAccount, reason string) { - ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) +func (self *ElasticcacheAccountResetPasswordTask) taskFail(ctx context.Context, ea *models.SElasticcacheAccount, reason jsonutils.JSONObject) { + ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) ec, err := db.FetchById(models.ElasticcacheManager, ea.ElasticcacheId) if err == nil { - ec.(*models.SElasticcache).SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + ec.(*models.SElasticcache).SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) } db.OpsLog.LogEvent(ea, db.ACT_RESET_PASSWORD, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ea, logclient.ACT_RESET_PASSWORD, reason, self.UserCred, false) - notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) + notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -52,13 +52,13 @@ func (self *ElasticcacheAccountResetPasswordTask) OnInit(ctx context.Context, ob ea := obj.(*models.SElasticcacheAccount) region := ea.GetRegion() if region == nil { - self.taskFail(ctx, ea, fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName())) + self.taskFail(ctx, ea, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName()))) return } self.SetStage("OnElasticcacheAccountResetPasswordComplete", nil) if err := region.GetDriver().RequestElasticcacheAccountResetPassword(ctx, self.GetUserCred(), ea, self); err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.Marshal(err)) return } else { logclient.AddActionLogWithStartable(self, ea, logclient.ACT_RESET_PASSWORD, nil, self.UserCred, true) diff --git a/pkg/compute/tasks/elasticcache_acl_create_task.go b/pkg/compute/tasks/elasticcache_acl_create_task.go index 3ae5514e2a..5f87b37935 100644 --- a/pkg/compute/tasks/elasticcache_acl_create_task.go +++ b/pkg/compute/tasks/elasticcache_acl_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheAclCreateTask{}) } -func (self *ElasticcacheAclCreateTask) taskFail(ctx context.Context, ea *models.SElasticcacheAcl, reason string) { - ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACL_STATUS_CREATE_FAILED, reason) +func (self *ElasticcacheAclCreateTask) taskFail(ctx context.Context, ea *models.SElasticcacheAcl, reason jsonutils.JSONObject) { + ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACL_STATUS_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(ea, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ea, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACL_STATUS_CREATE_FAILED, reason) + notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACL_STATUS_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheAclCreateTask) OnInit(ctx context.Context, obj db.IStand ea := obj.(*models.SElasticcacheAcl) region := ea.GetRegion() if region == nil { - self.taskFail(ctx, ea, fmt.Sprintf("failed to find region for elastic cache backup %s", ea.GetName())) + self.taskFail(ctx, ea, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache backup %s", ea.GetName()))) return } self.SetStage("OnElasticcacheAclCreateComplete", nil) if err := region.GetDriver().RequestCreateElasticcacheAcl(ctx, self.GetUserCred(), ea, self); err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.Marshal(err)) return } } @@ -65,5 +65,5 @@ func (self *ElasticcacheAclCreateTask) OnElasticcacheAclCreateComplete(ctx conte } func (self *ElasticcacheAclCreateTask) OnElasticcacheAclCreateCompleteFailed(ctx context.Context, ea *models.SElasticcacheAcl, data jsonutils.JSONObject) { - self.taskFail(ctx, ea, data.String()) + self.taskFail(ctx, ea, data) } diff --git a/pkg/compute/tasks/elasticcache_acl_delete_task.go b/pkg/compute/tasks/elasticcache_acl_delete_task.go index a83392d889..96e63e8cf7 100644 --- a/pkg/compute/tasks/elasticcache_acl_delete_task.go +++ b/pkg/compute/tasks/elasticcache_acl_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheAclDeleteTask{}) } -func (self *ElasticcacheAclDeleteTask) taskFail(ctx context.Context, ea *models.SElasticcacheAcl, reason string) { - ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACL_STATUS_DELETE_FAILED, reason) +func (self *ElasticcacheAclDeleteTask) taskFail(ctx context.Context, ea *models.SElasticcacheAcl, reason jsonutils.JSONObject) { + ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACL_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(ea, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ea, logclient.ACT_DELETE, reason, self.UserCred, false) - notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACL_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACL_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,18 +48,18 @@ func (self *ElasticcacheAclDeleteTask) OnInit(ctx context.Context, obj db.IStand ea := obj.(*models.SElasticcacheAcl) region := ea.GetRegion() if region == nil { - self.taskFail(ctx, ea, fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName())) + self.taskFail(ctx, ea, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache account %s", ea.GetName()))) return } self.SetStage("OnElasticcacheAclDeleteComplete", nil) if err := region.GetDriver().RequestDeleteElasticcacheAcl(ctx, self.GetUserCred(), ea, self); err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.Marshal(err)) return } else { err = db.DeleteModel(ctx, self.GetUserCred(), ea) if err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.NewString(err.Error())) return } logclient.AddActionLogWithStartable(self, ea, logclient.ACT_DELETE, nil, self.UserCred, true) diff --git a/pkg/compute/tasks/elasticcache_acl_update_task.go b/pkg/compute/tasks/elasticcache_acl_update_task.go index ce6dcb2dad..61ecd39ac1 100644 --- a/pkg/compute/tasks/elasticcache_acl_update_task.go +++ b/pkg/compute/tasks/elasticcache_acl_update_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheAclUpdateTask{}) } -func (self *ElasticcacheAclUpdateTask) taskFail(ctx context.Context, ea *models.SElasticcacheAcl, reason string) { - ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACL_STATUS_UPDATE_FAILED, reason) +func (self *ElasticcacheAclUpdateTask) taskFail(ctx context.Context, ea *models.SElasticcacheAcl, reason jsonutils.JSONObject) { + ea.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_ACL_STATUS_UPDATE_FAILED, reason.String()) db.OpsLog.LogEvent(ea, db.ACT_UPDATE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ea, logclient.ACT_UPDATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACL_STATUS_UPDATE_FAILED, reason) + notifyclient.NotifySystemError(ea.Id, ea.Name, api.ELASTIC_CACHE_ACL_STATUS_UPDATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheAclUpdateTask) OnInit(ctx context.Context, obj db.IStand ea := obj.(*models.SElasticcacheAcl) region := ea.GetRegion() if region == nil { - self.taskFail(ctx, ea, fmt.Sprintf("failed to find region for elastic cache backup %s", ea.GetName())) + self.taskFail(ctx, ea, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache backup %s", ea.GetName()))) return } self.SetStage("OnElasticcacheAclUpdateComplete", nil) if err := region.GetDriver().RequestElasticcacheAclUpdate(ctx, self.GetUserCred(), ea, self); err != nil { - self.taskFail(ctx, ea, err.Error()) + self.taskFail(ctx, ea, jsonutils.Marshal(err)) return } } @@ -65,5 +65,5 @@ func (self *ElasticcacheAclUpdateTask) OnElasticcacheAclUpdateComplete(ctx conte } func (self *ElasticcacheAclUpdateTask) OnElasticcacheAclUpdateCompleteFailed(ctx context.Context, ea *models.SElasticcacheAcl, data jsonutils.JSONObject) { - self.taskFail(ctx, ea, data.String()) + self.taskFail(ctx, ea, data) } diff --git a/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go b/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go index 0b6eb8cae2..107a0cf702 100644 --- a/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go +++ b/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheAllocatePublicConnectionTask{}) } -func (self *ElasticcacheAllocatePublicConnectionTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGING, reason) +func (self *ElasticcacheAllocatePublicConnectionTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGING, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_ALLOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheAllocatePublicConnectionTask) OnInit(ctx context.Context elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheAllocatePublicConnectionComplete", nil) if err := region.GetDriver().RequestElasticcacheAllocatePublicConnection(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheAllocatePublicConnectionCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheAllocatePublicConnectionCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheAllocatePublicConnectionTask) OnElasticcacheAllocatePubl self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheAllocatePublicConnectionTask) OnElasticcacheAllocatePublicConnectionCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheAllocatePublicConnectionTask) OnElasticcacheAllocatePublicConnectionCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_backup_create_task.go b/pkg/compute/tasks/elasticcache_backup_create_task.go index 851038ccf0..9d430d6f9f 100644 --- a/pkg/compute/tasks/elasticcache_backup_create_task.go +++ b/pkg/compute/tasks/elasticcache_backup_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheBackupCreateTask{}) } -func (self *ElasticcacheBackupCreateTask) taskFail(ctx context.Context, elasticcache *models.SElasticcacheBackup, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) +func (self *ElasticcacheBackupCreateTask) taskFail(ctx context.Context, elasticcache *models.SElasticcacheBackup, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheBackupCreateTask) OnInit(ctx context.Context, obj db.ISt eb := obj.(*models.SElasticcacheBackup) region := eb.GetRegion() if region == nil { - self.taskFail(ctx, eb, fmt.Sprintf("failed to find region for elastic cache backup %s", eb.GetName())) + self.taskFail(ctx, eb, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache backup %s", eb.GetName()))) return } self.SetStage("OnElasticcacheBackupCreateComplete", nil) if err := region.GetDriver().RequestCreateElasticcacheBackup(ctx, self.GetUserCred(), eb, self); err != nil { - self.taskFail(ctx, eb, err.Error()) + self.taskFail(ctx, eb, jsonutils.Marshal(err)) return } } @@ -65,5 +65,5 @@ func (self *ElasticcacheBackupCreateTask) OnElasticcacheBackupCreateComplete(ctx } func (self *ElasticcacheBackupCreateTask) OnElasticcacheBackupCreateCompleteFailed(ctx context.Context, eb *models.SElasticcacheBackup, data jsonutils.JSONObject) { - self.taskFail(ctx, eb, data.String()) + self.taskFail(ctx, eb, data) } diff --git a/pkg/compute/tasks/elasticcache_backup_restore_instance_task.go b/pkg/compute/tasks/elasticcache_backup_restore_instance_task.go index 05ee6a3182..1ac09d0f6f 100644 --- a/pkg/compute/tasks/elasticcache_backup_restore_instance_task.go +++ b/pkg/compute/tasks/elasticcache_backup_restore_instance_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheBackupRestoreInstanceTask{}) } -func (self *ElasticcacheBackupRestoreInstanceTask) taskFail(ctx context.Context, eb *models.SElasticcacheBackup, reason string) { - eb.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) +func (self *ElasticcacheBackupRestoreInstanceTask) taskFail(ctx context.Context, eb *models.SElasticcacheBackup, reason jsonutils.JSONObject) { + eb.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(eb, db.ACT_CONVERT_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, eb, logclient.ACT_RESTORE, reason, self.UserCred, false) - notifyclient.NotifySystemError(eb.Id, eb.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) + notifyclient.NotifySystemError(eb.Id, eb.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheBackupRestoreInstanceTask) OnInit(ctx context.Context, o eb := obj.(*models.SElasticcacheBackup) region := eb.GetRegion() if region == nil { - self.taskFail(ctx, eb, fmt.Sprintf("failed to find region for elastic cache backup %s", eb.GetName())) + self.taskFail(ctx, eb, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache backup %s", eb.GetName()))) return } self.SetStage("OnElasticcacheBackupRestoreInstanceComplete", nil) if err := region.GetDriver().RequestElasticcacheBackupRestoreInstance(ctx, self.GetUserCred(), eb, self); err != nil { - self.OnElasticcacheBackupRestoreInstanceCompleteFailed(ctx, eb, err.Error()) + self.OnElasticcacheBackupRestoreInstanceCompleteFailed(ctx, eb, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheBackupRestoreInstanceTask) OnElasticcacheBackupRestoreIn self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheBackupRestoreInstanceTask) OnElasticcacheBackupRestoreInstanceCompleteFailed(ctx context.Context, eb *models.SElasticcacheBackup, reason string) { +func (self *ElasticcacheBackupRestoreInstanceTask) OnElasticcacheBackupRestoreInstanceCompleteFailed(ctx context.Context, eb *models.SElasticcacheBackup, reason jsonutils.JSONObject) { self.taskFail(ctx, eb, reason) } diff --git a/pkg/compute/tasks/elasticcache_change_spec_task.go b/pkg/compute/tasks/elasticcache_change_spec_task.go index 530f0de686..142c55358d 100644 --- a/pkg/compute/tasks/elasticcache_change_spec_task.go +++ b/pkg/compute/tasks/elasticcache_change_spec_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheChangeSpecTask{}) } -func (self *ElasticcacheChangeSpecTask) taskFail(ctx context.Context, ec *models.SElasticcache, reason string) { - ec.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) +func (self *ElasticcacheChangeSpecTask) taskFail(ctx context.Context, ec *models.SElasticcache, reason jsonutils.JSONObject) { + ec.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) db.OpsLog.LogEvent(ec, db.ACT_CHANGE_FLAVOR, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ec, logclient.ACT_VM_CHANGE_FLAVOR, reason, self.UserCred, false) - notifyclient.NotifySystemError(ec.Id, ec.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + notifyclient.NotifySystemError(ec.Id, ec.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheChangeSpecTask) OnInit(ctx context.Context, obj db.IStan elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheChangeSpecComplete", nil) if err := region.GetDriver().RequestElasticcacheChangeSpec(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheChangeSpecCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheChangeSpecCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheChangeSpecTask) OnElasticcacheChangeSpecComplete(ctx con self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheChangeSpecTask) OnElasticcacheChangeSpecCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheChangeSpecTask) OnElasticcacheChangeSpecCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_create_task.go b/pkg/compute/tasks/elasticcache_create_task.go index 4f8c0f3ec9..ea6d4e07cf 100644 --- a/pkg/compute/tasks/elasticcache_create_task.go +++ b/pkg/compute/tasks/elasticcache_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheCreateTask{}) } -func (self *ElasticcacheCreateTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) +func (self *ElasticcacheCreateTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,7 +48,7 @@ func (self *ElasticcacheCreateTask) OnInit(ctx context.Context, obj db.IStandalo elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } @@ -61,7 +61,7 @@ func (self *ElasticcacheCreateTask) OnSyncSecurityGroupComplete(ctx context.Cont region := elasticcache.GetRegion() self.SetStage("OnElasticcacheCreateComplete", nil) if err := region.GetDriver().RequestCreateElasticcache(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.taskFail(ctx, elasticcache, err.Error()) + self.taskFail(ctx, elasticcache, jsonutils.Marshal(err)) return } } @@ -73,5 +73,5 @@ func (self *ElasticcacheCreateTask) OnElasticcacheCreateComplete(ctx context.Con } func (self *ElasticcacheCreateTask) OnElasticcacheCreateCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { - self.taskFail(ctx, elasticcache, reason.String()) + self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_delete_task.go b/pkg/compute/tasks/elasticcache_delete_task.go index 69f240d348..85740be192 100644 --- a/pkg/compute/tasks/elasticcache_delete_task.go +++ b/pkg/compute/tasks/elasticcache_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheDeleteTask{}) } -func (self *ElasticcacheDeleteTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_RELEASE_FAILED, reason) +func (self *ElasticcacheDeleteTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_RELEASE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_DELETE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_RELEASE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_RELEASE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheDeleteTask) OnInit(ctx context.Context, obj db.IStandalo ec := obj.(*models.SElasticcache) region := ec.GetRegion() if region == nil { - self.taskFail(ctx, ec, fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName())) + self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return } self.SetStage("OnElasticcacheDeleteComplete", nil) if err := region.GetDriver().RequestDeleteElasticcache(ctx, self.GetUserCred(), ec, self); err != nil { - self.taskFail(ctx, ec, err.Error()) + self.taskFail(ctx, ec, jsonutils.Marshal(err)) return } else { ec.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_RELEASED, "") diff --git a/pkg/compute/tasks/elasticcache_flush_instance.go b/pkg/compute/tasks/elasticcache_flush_instance.go index 1ec623ad38..120b1ec05e 100644 --- a/pkg/compute/tasks/elasticcache_flush_instance.go +++ b/pkg/compute/tasks/elasticcache_flush_instance.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheFlushInstanceTask{}) } -func (self *ElasticcacheFlushInstanceTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_FLUSHING_FAILED, reason) +func (self *ElasticcacheFlushInstanceTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_FLUSHING_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_FLUSH_INSTANCE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_FLUSH_INSTANCE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_FLUSHING_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_FLUSHING_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheFlushInstanceTask) OnInit(ctx context.Context, obj db.IS elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheFlushInstanceComplete", nil) if err := region.GetDriver().RequestElasticcacheFlushInstance(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheFlushInstanceCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheFlushInstanceCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheFlushInstanceTask) OnElasticcacheFlushInstanceComplete(c self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheFlushInstanceTask) OnElasticcacheFlushInstanceCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheFlushInstanceTask) OnElasticcacheFlushInstanceCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_parameter_update_task.go b/pkg/compute/tasks/elasticcache_parameter_update_task.go index 566b45cdef..5701ad8352 100644 --- a/pkg/compute/tasks/elasticcache_parameter_update_task.go +++ b/pkg/compute/tasks/elasticcache_parameter_update_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheParameterUpdateTask{}) } -func (self *ElasticcacheParameterUpdateTask) taskFail(ctx context.Context, ep *models.SElasticcacheParameter, reason string) { - ep.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_PARAMETER_STATUS_UPDATE_FAILED, reason) +func (self *ElasticcacheParameterUpdateTask) taskFail(ctx context.Context, ep *models.SElasticcacheParameter, reason jsonutils.JSONObject) { + ep.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_PARAMETER_STATUS_UPDATE_FAILED, reason.String()) db.OpsLog.LogEvent(ep, db.ACT_UPDATE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, ep, logclient.ACT_UPDATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(ep.Id, ep.Name, api.ELASTIC_CACHE_PARAMETER_STATUS_UPDATE_FAILED, reason) + notifyclient.NotifySystemError(ep.Id, ep.Name, api.ELASTIC_CACHE_PARAMETER_STATUS_UPDATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,19 +48,19 @@ func (self *ElasticcacheParameterUpdateTask) OnInit(ctx context.Context, obj db. ep := obj.(*models.SElasticcacheParameter) region := ep.GetRegion() if region == nil { - self.taskFail(ctx, ep, fmt.Sprintf("failed to find region for elastic cache parameter %s", ep.GetName())) + self.taskFail(ctx, ep, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache parameter %s", ep.GetName()))) return } iec, err := db.FetchById(models.ElasticcacheManager, ep.ElasticcacheId) if err != nil { - self.taskFail(ctx, ep, fmt.Sprintf("failed to find elastic instance for parameter %s", ep.GetName())) + self.taskFail(ctx, ep, jsonutils.NewString(fmt.Sprintf("failed to find elastic instance for parameter %s", ep.GetName()))) return } self.SetStage("OnElasticcacheParameterUpdateComplete", nil) if err := region.GetDriver().RequestElasticcacheUpdateInstanceParameters(ctx, self.GetUserCred(), iec.(*models.SElasticcache), self); err != nil { - self.OnElasticcacheParameterUpdateCompleteFailed(ctx, ep, err.Error()) + self.OnElasticcacheParameterUpdateCompleteFailed(ctx, ep, jsonutils.Marshal(err)) return } @@ -72,6 +72,6 @@ func (self *ElasticcacheParameterUpdateTask) OnElasticcacheParameterUpdateComple self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheParameterUpdateTask) OnElasticcacheParameterUpdateCompleteFailed(ctx context.Context, ep *models.SElasticcacheParameter, reason string) { +func (self *ElasticcacheParameterUpdateTask) OnElasticcacheParameterUpdateCompleteFailed(ctx context.Context, ep *models.SElasticcacheParameter, reason jsonutils.JSONObject) { self.taskFail(ctx, ep, reason) } diff --git a/pkg/compute/tasks/elasticcache_release_public_connection_task.go b/pkg/compute/tasks/elasticcache_release_public_connection_task.go index dcd3d7916d..508f0fadb3 100644 --- a/pkg/compute/tasks/elasticcache_release_public_connection_task.go +++ b/pkg/compute/tasks/elasticcache_release_public_connection_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheReleasePublicConnectionTask{}) } -func (self *ElasticcacheReleasePublicConnectionTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGING, reason) +func (self *ElasticcacheReleasePublicConnectionTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGING, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheReleasePublicConnectionTask) OnInit(ctx context.Context, elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheReleasePublicConnectionComplete", nil) if err := region.GetDriver().RequestElasticcacheReleasePublicConnection(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheReleasePublicConnectionCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheReleasePublicConnectionCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheReleasePublicConnectionTask) OnElasticcacheReleasePublic self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheReleasePublicConnectionTask) OnElasticcacheReleasePublicConnectionCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheReleasePublicConnectionTask) OnElasticcacheReleasePublicConnectionCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_restart_task.go b/pkg/compute/tasks/elasticcache_restart_task.go index d3ad8f6d28..e25557be37 100644 --- a/pkg/compute/tasks/elasticcache_restart_task.go +++ b/pkg/compute/tasks/elasticcache_restart_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheRestartTask{}) } -func (self *ElasticcacheRestartTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_RESTART_FAILED, reason) +func (self *ElasticcacheRestartTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_RESTART_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_RESTART_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_VM_RESTART, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_RESTART_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_RESTART_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheRestartTask) OnInit(ctx context.Context, obj db.IStandal ec := obj.(*models.SElasticcache) region := ec.GetRegion() if region == nil { - self.taskFail(ctx, ec, fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName())) + self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return } self.SetStage("OnElasticcacheRestartComplete", nil) if err := region.GetDriver().RequestRestartElasticcache(ctx, self.GetUserCred(), ec, self); err != nil { - self.taskFail(ctx, ec, err.Error()) + self.taskFail(ctx, ec, jsonutils.Marshal(err)) return } else { logclient.AddActionLogWithStartable(self, ec, logclient.ACT_VM_RESTART, nil, self.UserCred, true) diff --git a/pkg/compute/tasks/elasticcache_set_maintain_time_task.go b/pkg/compute/tasks/elasticcache_set_maintain_time_task.go index 19bed2ca4c..38f8eff737 100644 --- a/pkg/compute/tasks/elasticcache_set_maintain_time_task.go +++ b/pkg/compute/tasks/elasticcache_set_maintain_time_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheSetMaintainTimeTask{}) } -func (self *ElasticcacheSetMaintainTimeTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) +func (self *ElasticcacheSetMaintainTimeTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_UPDATE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_UPDATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheSetMaintainTimeTask) OnInit(ctx context.Context, obj db. elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheSetMaintainTimeComplete", nil) if err := region.GetDriver().RequestElasticcacheSetMaintainTime(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheSetMaintainTimeCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheSetMaintainTimeCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheSetMaintainTimeTask) OnElasticcacheSetMaintainTimeComple self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheSetMaintainTimeTask) OnElasticcacheSetMaintainTimeCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheSetMaintainTimeTask) OnElasticcacheSetMaintainTimeCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_sync_task.go b/pkg/compute/tasks/elasticcache_sync_task.go index aa8540accd..6c06bbf58f 100644 --- a/pkg/compute/tasks/elasticcache_sync_task.go +++ b/pkg/compute/tasks/elasticcache_sync_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheSyncTask{}) } -func (self *ElasticcacheSyncTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_SYNC_FAILED, reason) +func (self *ElasticcacheSyncTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_SYNC_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_SYNC_CONF, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_SYNC_CONF, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_SYNC_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_SYNC_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheSyncTask) OnInit(ctx context.Context, obj db.IStandalone ec := obj.(*models.SElasticcache) region := ec.GetRegion() if region == nil { - self.taskFail(ctx, ec, fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName())) + self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return } self.SetStage("OnElasticcacheSyncComplete", nil) if err := region.GetDriver().RequestSyncElasticcache(ctx, self.GetUserCred(), ec, self); err != nil { - self.taskFail(ctx, ec, err.Error()) + self.taskFail(ctx, ec, jsonutils.Marshal(err)) return } else { logclient.AddActionLogWithStartable(self, ec, logclient.ACT_SYNC_CONF, "", self.UserCred, true) diff --git a/pkg/compute/tasks/elasticcache_syncstatus_task.go b/pkg/compute/tasks/elasticcache_syncstatus_task.go index c74d4ae4f3..54ed3869af 100644 --- a/pkg/compute/tasks/elasticcache_syncstatus_task.go +++ b/pkg/compute/tasks/elasticcache_syncstatus_task.go @@ -19,7 +19,6 @@ import ( "fmt" "yunion.io/x/jsonutils" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -36,9 +35,9 @@ func init() { taskman.RegisterTask(ElasticcacheSyncstatusTask{}) } -func (self *ElasticcacheSyncstatusTask) taskFailed(ctx context.Context, cache *models.SElasticcache, err error) { - cache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *ElasticcacheSyncstatusTask) taskFailed(ctx context.Context, cache *models.SElasticcache, err jsonutils.JSONObject) { + cache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_UNKNOWN, err.String()) + self.SetStageFailed(ctx, err) db.OpsLog.LogEvent(cache, db.ACT_SYNC_STATUS, cache.GetShortDesc(ctx), self.GetUserCred()) logclient.AddActionLogWithContext(ctx, cache, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) } @@ -48,14 +47,14 @@ func (self *ElasticcacheSyncstatusTask) OnInit(ctx context.Context, obj db.IStan region := cache.GetRegion() if region == nil { - self.taskFailed(ctx, cache, fmt.Errorf("failed to found cloudregion for elasticcache %s(%s)", cache.Name, cache.Id)) + self.taskFailed(ctx, cache, jsonutils.NewString(fmt.Sprintf("failed to found cloudregion for elasticcache %s(%s)", cache.Name, cache.Id))) return } self.SetStage("OnElasticcacheSyncStatusComplete", nil) err := region.GetDriver().RequestSyncElasticcacheStatus(ctx, self.GetUserCred(), cache, self) if err != nil { - self.taskFailed(ctx, cache, errors.Wrap(err, "RequestSyncElasticcacheStatus")) + self.taskFailed(ctx, cache, jsonutils.Marshal(err)) return } } @@ -65,5 +64,5 @@ func (self *ElasticcacheSyncstatusTask) OnElasticcacheSyncStatusComplete(ctx con } func (self *ElasticcacheSyncstatusTask) OnElasticcacheSyncStatusCompleteFailed(ctx context.Context, cache *models.SElasticcache, data jsonutils.JSONObject) { - self.taskFailed(ctx, cache, fmt.Errorf(data.String())) + self.taskFailed(ctx, cache, data) } diff --git a/pkg/compute/tasks/elasticcache_update_auth_mode_task.go b/pkg/compute/tasks/elasticcache_update_auth_mode_task.go index 7acc9c652d..744cbef2c5 100644 --- a/pkg/compute/tasks/elasticcache_update_auth_mode_task.go +++ b/pkg/compute/tasks/elasticcache_update_auth_mode_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheUpdateAuthModeTask{}) } -func (self *ElasticcacheUpdateAuthModeTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) +func (self *ElasticcacheUpdateAuthModeTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_UPDATE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_UPDATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheUpdateAuthModeTask) OnInit(ctx context.Context, obj db.I elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.Marshal(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheUpdateAuthModeComplete", nil) if err := region.GetDriver().RequestUpdateElasticcacheAuthMode(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheUpdateAuthModeCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheUpdateAuthModeCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheUpdateAuthModeTask) OnElasticcacheUpdateAuthModeComplete self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheUpdateAuthModeTask) OnElasticcacheUpdateAuthModeCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheUpdateAuthModeTask) OnElasticcacheUpdateAuthModeCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/elasticcache_update_backup_policy_task.go b/pkg/compute/tasks/elasticcache_update_backup_policy_task.go index 001b8222ed..170fd8b3be 100644 --- a/pkg/compute/tasks/elasticcache_update_backup_policy_task.go +++ b/pkg/compute/tasks/elasticcache_update_backup_policy_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(ElasticcacheUpdateBackupPolicyTask{}) } -func (self *ElasticcacheUpdateBackupPolicyTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason string) { - elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) +func (self *ElasticcacheUpdateBackupPolicyTask) taskFail(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { + elasticcache.SetStatus(self.GetUserCred(), api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) db.OpsLog.LogEvent(elasticcache, db.ACT_UPDATE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, elasticcache, logclient.ACT_UPDATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason) + notifyclient.NotifySystemError(elasticcache.Id, elasticcache.Name, api.ELASTIC_CACHE_STATUS_CHANGE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,13 +48,13 @@ func (self *ElasticcacheUpdateBackupPolicyTask) OnInit(ctx context.Context, obj elasticcache := obj.(*models.SElasticcache) region := elasticcache.GetRegion() if region == nil { - self.taskFail(ctx, elasticcache, fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName())) + self.taskFail(ctx, elasticcache, jsonutils.Marshal(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return } self.SetStage("OnElasticcacheUpdateBackupPolicyComplete", nil) if err := region.GetDriver().RequestElasticcacheUpdateBackupPolicy(ctx, self.GetUserCred(), elasticcache, self); err != nil { - self.OnElasticcacheUpdateBackupPolicyCompleteFailed(ctx, elasticcache, err.Error()) + self.OnElasticcacheUpdateBackupPolicyCompleteFailed(ctx, elasticcache, jsonutils.Marshal(err)) return } @@ -68,6 +68,6 @@ func (self *ElasticcacheUpdateBackupPolicyTask) OnElasticcacheUpdateBackupPolicy self.SetStageComplete(ctx, nil) } -func (self *ElasticcacheUpdateBackupPolicyTask) OnElasticcacheUpdateBackupPolicyCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason string) { +func (self *ElasticcacheUpdateBackupPolicyTask) OnElasticcacheUpdateBackupPolicyCompleteFailed(ctx context.Context, elasticcache *models.SElasticcache, reason jsonutils.JSONObject) { self.taskFail(ctx, elasticcache, reason) } diff --git a/pkg/compute/tasks/guest_attach_disk_task.go b/pkg/compute/tasks/guest_attach_disk_task.go index 847ae02835..d2de66d974 100644 --- a/pkg/compute/tasks/guest_attach_disk_task.go +++ b/pkg/compute/tasks/guest_attach_disk_task.go @@ -41,12 +41,12 @@ func (self *GuestAttachDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM diskId, _ := self.Params.GetString("disk_id") objDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.OnTaskFail(ctx, guest, nil, err) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(err.Error())) return } disk := objDisk.(*models.SDisk) if disk == nil { - self.OnTaskFail(ctx, guest, nil, fmt.Errorf("Connot find disk %s", diskId)) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(fmt.Sprintf("Connot find disk %s", diskId))) return } @@ -56,7 +56,7 @@ func (self *GuestAttachDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM err = guest.AttachDisk(ctx, disk, self.UserCred, driver, cache, mountpoint) if err != nil { - self.OnTaskFail(ctx, guest, nil, err) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(err.Error())) return } disk.SetStatus(self.UserCred, api.DISK_ATTACHING, "Disk attach") @@ -68,12 +68,12 @@ func (self *GuestAttachDiskTask) OnSyncConfigComplete(ctx context.Context, guest diskId, _ := self.Params.GetString("disk_id") objDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.OnTaskFail(ctx, guest, nil, err) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(err.Error())) return } disk := objDisk.(*models.SDisk) if disk == nil { - self.OnTaskFail(ctx, guest, nil, fmt.Errorf("Connot find disk %s", diskId)) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(fmt.Sprintf("Connot find disk %s", diskId))) return } disk.SetDiskReady(ctx, self.UserCred, "") @@ -86,22 +86,22 @@ func (self *GuestAttachDiskTask) OnSyncConfigCompleteFailed(ctx context.Context, diskId, _ := self.Params.GetString("disk_id") objDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.OnTaskFail(ctx, guest, nil, err) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(err.Error())) return } disk := objDisk.(*models.SDisk) db.OpsLog.LogEvent(disk, db.ACT_ATTACH, reason.String(), self.UserCred) disk.SetStatus(self.UserCred, api.DISK_READY, "") guest.DetachDisk(ctx, disk, self.UserCred) - self.OnTaskFail(ctx, guest, disk, fmt.Errorf(reason.String())) + self.OnTaskFail(ctx, guest, disk, reason) } -func (self *GuestAttachDiskTask) OnTaskFail(ctx context.Context, guest *models.SGuest, disk *models.SDisk, err error) { +func (self *GuestAttachDiskTask) OnTaskFail(ctx context.Context, guest *models.SGuest, disk *models.SDisk, err jsonutils.JSONObject) { if disk != nil { disk.SetStatus(self.UserCred, api.DISK_READY, "") } - guest.SetStatus(self.UserCred, api.VM_ATTACH_DISK_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) - log.Errorf("Guest %s GuestAttachDiskTask failed %s", guest.Name, err.Error()) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_ATTACH_DISK, err.Error(), self.UserCred, false) + guest.SetStatus(self.UserCred, api.VM_ATTACH_DISK_FAILED, err.String()) + self.SetStageFailed(ctx, err) + log.Errorf("Guest %s GuestAttachDiskTask failed %s", guest.Name, err.String()) + logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_ATTACH_DISK, err, self.UserCred, false) } diff --git a/pkg/compute/tasks/guest_backup_tasks.go b/pkg/compute/tasks/guest_backup_tasks.go index ab5bbeb85f..9444636bae 100644 --- a/pkg/compute/tasks/guest_backup_tasks.go +++ b/pkg/compute/tasks/guest_backup_tasks.go @@ -59,7 +59,7 @@ func (self *GuestSwitchToBackupTask) OnEnsureMasterGuestStoped(ctx context.Conte self.SetStage("OnBackupGuestStoped", nil) err := guest.GetDriver().RequestStopOnHost(ctx, guest, backupHost, self) if err != nil { - self.OnFail(ctx, guest, fmt.Sprintf("Stop backup guest error: %s", err)) + self.OnFail(ctx, guest, jsonutils.Marshal(err)) } } @@ -75,13 +75,13 @@ func (self *GuestSwitchToBackupTask) OnBackupGuestStoped(ctx context.Context, gu disk.SwitchToBackup(self.UserCred) } } - self.OnFail(ctx, guest, fmt.Sprintf("Switch to backup disk error: %s", err)) + self.OnFail(ctx, guest, jsonutils.NewString(fmt.Sprintf("Switch to backup disk error: %s", err))) return } } err := guest.SwitchToBackup(self.UserCred) if err != nil { - self.OnFail(ctx, guest, fmt.Sprintf("Switch to backup guest error: %s", err)) + self.OnFail(ctx, guest, jsonutils.NewString(fmt.Sprintf("Switch to backup guest error: %s", err))) return } db.OpsLog.LogEvent(guest, db.ACT_SWITCHED, "Switch to backup", self.UserCred) @@ -102,8 +102,8 @@ func (self *GuestSwitchToBackupTask) OnNewMasterStarted(ctx context.Context, gue self.OnComplete(ctx, guest, nil) } -func (self *GuestSwitchToBackupTask) OnFail(ctx context.Context, guest *models.SGuest, reason string) { - guest.SetStatus(self.UserCred, api.VM_SWITCH_TO_BACKUP_FAILED, reason) +func (self *GuestSwitchToBackupTask) OnFail(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { + guest.SetStatus(self.UserCred, api.VM_SWITCH_TO_BACKUP_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_SWITCH_FAILED, reason, self.UserCred) logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_SWITCH_TO_BACKUP, reason, self.UserCred, false) self.SetSwitchFiledGuestMetadata(ctx, guest) @@ -191,7 +191,7 @@ func (self *GuestSwitchToBackupTask) OnCreatedBackupFailed(ctx context.Context, } func (self *GuestSwitchToBackupTask) OnSwitchedFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.OnFail(ctx, guest, data.String()) + self.OnFail(ctx, guest, data) } /********************* GuestStartAndSyncToBackupTask *********************/ @@ -212,7 +212,7 @@ func (self *GuestStartAndSyncToBackupTask) checkTemplete(ctx context.Context, gu err := guest.GetDriver().CheckDiskTemplateOnStorage(ctx, self.UserCred, diskCat.Root.GetTemplateId(), diskCat.Root.DiskFormat, diskCat.Root.BackupStorageId, self) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } else { self.OnCheckTemplete(ctx, guest, nil) @@ -223,14 +223,14 @@ func (self *GuestStartAndSyncToBackupTask) OnCheckTemplete(ctx context.Context, self.SetStage("OnStartBackupGuest", nil) host := models.HostManager.FetchHostById(guest.BackupHostId) if _, err := guest.GetDriver().RequestStartOnHost(ctx, guest, host, self.UserCred, self); err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } func (self *GuestStartAndSyncToBackupTask) OnStartBackupGuest(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { nbdServerPort, err := data.Int("nbd_server_port") if err != nil { - self.SetStageFailed(ctx, "Start Backup Guest Missing Nbd Port") + self.SetStageFailed(ctx, jsonutils.NewString("Start Backup Guest Missing Nbd Port")) return } backupHost := models.HostManager.FetchHostById(guest.BackupHostId) @@ -248,7 +248,7 @@ func (self *GuestStartAndSyncToBackupTask) OnStartBackupGuest(ctx context.Contex self.SetStage("OnRequestSyncToBackup", nil) err = guest.GetDriver().RequestSyncToBackup(ctx, guest, self) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("Guest Request Sync to backup failed %s", err)) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } else { self.SetStageComplete(ctx, nil) @@ -258,7 +258,7 @@ func (self *GuestStartAndSyncToBackupTask) OnStartBackupGuest(ctx context.Contex func (self *GuestStartAndSyncToBackupTask) OnStartBackupGuestFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guest.SetMetadata(ctx, "__mirror_job_status", "failed", self.UserCred) db.OpsLog.LogEvent(guest, db.ACT_BACKUP_START_FAILED, data.String(), self.UserCred) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestStartAndSyncToBackupTask) OnRequestSyncToBackup(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -269,7 +269,7 @@ func (self *GuestStartAndSyncToBackupTask) OnRequestSyncToBackup(ctx context.Con func (self *GuestStartAndSyncToBackupTask) OnRequestSyncToBackupFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guest.SetStatus(self.UserCred, api.VM_BLOCK_STREAM_FAIL, "OnSyncToBackup") - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } type GuestCreateBackupTask struct { @@ -297,11 +297,11 @@ func (self *GuestCreateBackupTask) GetSchedParams() (*schedapi.ScheduleInput, er return schedDesc, nil } -func (self *GuestCreateBackupTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason string) { +func (self *GuestCreateBackupTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason jsonutils.JSONObject) { // do nothing } -func (self *GuestCreateBackupTask) OnScheduleFailed(ctx context.Context, reason string) { +func (self *GuestCreateBackupTask) OnScheduleFailed(ctx context.Context, reason jsonutils.JSONObject) { obj := self.GetObject() guest := obj.(*models.SGuest) self.TaskFailed(ctx, guest, reason) @@ -312,7 +312,7 @@ func (self *GuestCreateBackupTask) SaveScheduleResult(ctx context.Context, obj I targetHostId := candidate.HostId targetHost := models.HostManager.FetchHostById(candidate.HostId) if targetHost == nil { - self.TaskFailed(ctx, guest, "target host not found?") + self.TaskFailed(ctx, guest, jsonutils.NewString("target host not found?")) return } guest.SetHostIdWithBackup(self.UserCred, guest.HostId, targetHostId) @@ -330,7 +330,7 @@ func (self *GuestCreateBackupTask) StartCreateBackupDisks(ctx context.Context, g } storage := guest.ChooseHostStorage(host, api.STORAGE_LOCAL, candidateDisk) if storage == nil { - self.TaskFailed(ctx, guest, "Get backup storage error") + self.TaskFailed(ctx, guest, jsonutils.NewString("Get backup storage error")) return } disk := guestDisks[i].GetDisk() @@ -342,7 +342,7 @@ func (self *GuestCreateBackupTask) StartCreateBackupDisks(ctx context.Context, g self.SetStage("OnCreateBackupDisks", nil) err := guest.CreateBackupDisks(ctx, self.UserCred, self.GetTaskId()) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) } } @@ -357,7 +357,7 @@ func (self *GuestCreateBackupTask) OnInsertIso(ctx context.Context, guest *model } func (self *GuestCreateBackupTask) OnInsertIsoFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, fmt.Sprintf("Backup guest insert ISO failed %s", data.String())) + self.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Backup guest insert ISO failed %s", data.String()))) } func (self *GuestCreateBackupTask) OnCreateBackupDisks(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -370,11 +370,11 @@ func (self *GuestCreateBackupTask) OnCreateBackupDisks(ctx context.Context, gues } func (self *GuestCreateBackupTask) OnCreateBackupDisksFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, fmt.Sprintf("Create Backup Disks failed %s", data.String())) + self.TaskFailed(ctx, guest, data) } func (self *GuestCreateBackupTask) OnCreateBackupFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, fmt.Sprintf("Deploy Backup failed %s", data.String())) + self.TaskFailed(ctx, guest, data) } func (self *GuestCreateBackupTask) OnCreateBackup(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -390,7 +390,7 @@ func (self *GuestCreateBackupTask) OnGuestStart(ctx context.Context, guest *mode self.SetStage("OnSyncToBackup", nil) err := guest.GuestStartAndSyncToBackup(ctx, self.UserCred, self.GetTaskId(), guestStatus) if err != nil { - self.TaskFailed(ctx, guest, fmt.Sprintf("Guest sycn to backup error %s", err.Error())) + self.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Guest sycn to backup error %s", err.Error()))) } } @@ -399,7 +399,7 @@ func (self *GuestCreateBackupTask) OnSyncToBackup(ctx context.Context, guest *mo } func (self *GuestCreateBackupTask) OnSyncToBackupFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestCreateBackupTask) TaskCompleted(ctx context.Context, guest *models.SGuest, reason string) { @@ -415,8 +415,8 @@ func (self *GuestCreateBackupTask) TaskCompleted(ctx context.Context, guest *mod guest.StartSyncstatus(ctx, self.UserCred, "") } -func (self *GuestCreateBackupTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason string) { - guest.SetStatus(self.UserCred, api.VM_BACKUP_CREATE_FAILED, reason) +func (self *GuestCreateBackupTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { + guest.SetStatus(self.UserCred, api.VM_BACKUP_CREATE_FAILED, reason.String()) if jsonutils.QueryBoolean(self.Params, "reconcile_backup", false) { if res := guest.GetMetadata("create_backup", self.UserCred); len(res) == 0 { guest.SetMetadata( diff --git a/pkg/compute/tasks/guest_base_task.go b/pkg/compute/tasks/guest_base_task.go index 1c224c837f..cda2c03dd8 100644 --- a/pkg/compute/tasks/guest_base_task.go +++ b/pkg/compute/tasks/guest_base_task.go @@ -17,6 +17,8 @@ package tasks import ( "context" + "yunion.io/x/jsonutils" + "yunion.io/x/onecloud/pkg/cloudcommon/db/quotas" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" @@ -31,7 +33,7 @@ func (self *SGuestBaseTask) getGuest() *models.SGuest { return obj.(*models.SGuest) } -func (self *SGuestBaseTask) SetStageFailed(ctx context.Context, reason string) { +func (self *SGuestBaseTask) SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) { self.finalReleasePendingUsage(ctx) self.STask.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/guest_batch_create_task.go b/pkg/compute/tasks/guest_batch_create_task.go index a343670adf..d5d3bd78e3 100644 --- a/pkg/compute/tasks/guest_batch_create_task.go +++ b/pkg/compute/tasks/guest_batch_create_task.go @@ -84,7 +84,7 @@ func (self *GuestBatchCreateTask) OnInit(ctx context.Context, objs []db.IStandal StartScheduleObjects(ctx, self, objs) } -func (self *GuestBatchCreateTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason string) { +func (self *GuestBatchCreateTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason jsonutils.JSONObject) { guest := obj.(*models.SGuest) if guest.DisableDelete.IsTrue() { guest.SetDisableDelete(self.UserCred, false) @@ -276,9 +276,9 @@ func (self *GuestBatchCreateTask) SaveScheduleResult(ctx context.Context, obj IS if err != nil { self.clearPendingUsage(ctx, guest) db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, err, self.UserCred) - logclient.AddActionLogWithStartable(self, obj, logclient.ACT_ALLOCATE, err.Error(), self.GetUserCred(), false) + logclient.AddActionLogWithStartable(self, obj, logclient.ACT_ALLOCATE, err, self.GetUserCred(), false) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_CREATE_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } diff --git a/pkg/compute/tasks/guest_block_io_throttle_task.go b/pkg/compute/tasks/guest_block_io_throttle_task.go index f08a2d0a51..ac464fd93c 100644 --- a/pkg/compute/tasks/guest_block_io_throttle_task.go +++ b/pkg/compute/tasks/guest_block_io_throttle_task.go @@ -86,8 +86,8 @@ func (self *GuestBlockIoThrottleTask) OnGuestSyncFailed(ctx context.Context, gue } func (self *GuestBlockIoThrottleTask) OnIoThrottleFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - db.OpsLog.LogEvent(guest, db.ACT_VM_IO_THROTTLE_FAIL, data.String(), self.UserCred) - logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_VM_IO_THROTTLE, data.String(), self.UserCred, false) + db.OpsLog.LogEvent(guest, db.ACT_VM_IO_THROTTLE_FAIL, data, self.UserCred) + logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_VM_IO_THROTTLE, data, self.UserCred, false) guest.SetStatus(self.UserCred, api.VM_IO_THROTTLE_FAIL, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/guest_change_config_task.go b/pkg/compute/tasks/guest_change_config_task.go index 4f95694671..30e352e72d 100644 --- a/pkg/compute/tasks/guest_change_config_task.go +++ b/pkg/compute/tasks/guest_change_config_task.go @@ -54,40 +54,40 @@ func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, ob iResizeDisks, err := self.Params.Get("resize") if iResizeDisks == nil || err != nil { - self.markStageFailed(ctx, guest, err.Error()) + self.markStageFailed(ctx, guest, jsonutils.NewString(err.Error())) return } resizeDisks := iResizeDisks.(*jsonutils.JSONArray) for i := 0; i < resizeDisks.Length(); i++ { iResizeSet, err := resizeDisks.GetAt(i) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("resizeDisks.GetAt fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("resizeDisks.GetAt fail %s", err))) return } resizeSet := iResizeSet.(*jsonutils.JSONArray) diskId, err := resizeSet.GetAt(0) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("resizeSet.GetAt(0) fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("resizeSet.GetAt(0) fail %s", err))) return } idStr, err := diskId.GetString() if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("diskId.GetString fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("diskId.GetString fail %s", err))) return } jSize, err := resizeSet.GetAt(1) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("resizeSet.GetAt(1) fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("resizeSet.GetAt(1) fail %s", err))) return } size, err := jSize.Int() if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("jSize.Int fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("jSize.Int fail %s", err))) return } iDisk, err := models.DiskManager.FetchById(idStr) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("models.DiskManager.FetchById(idStr) fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("models.DiskManager.FetchById(idStr) fail %s", err))) return } disk := iDisk.(*models.SDisk) @@ -95,12 +95,12 @@ func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, ob var pendingUsage models.SQuota err = self.GetPendingUsage(&pendingUsage, 0) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("self.GetPendingUsage(&pendingUsage) fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("self.GetPendingUsage(&pendingUsage) fail %s", err))) return } err = guest.StartGuestDiskResizeTask(ctx, self.UserCred, disk.Id, size, self.GetTaskId(), &pendingUsage) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("guest.StartGuestDiskResizeTask fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("guest.StartGuestDiskResizeTask fail %s", err))) return } return @@ -123,7 +123,7 @@ func (self *GuestChangeConfigTask) DoCreateDisksTask(ctx context.Context, guest func (self *GuestChangeConfigTask) OnCreateDisksCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { guest := obj.(*models.SGuest) - self.markStageFailed(ctx, guest, fmt.Sprintf("OnCreateDisksCompleteFailed %s", err)) + self.markStageFailed(ctx, guest, err) } func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -138,7 +138,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob provider := guest.GetDriver().GetProvider() sku, err := models.ServerSkuManager.FetchSkuByNameAndProvider(instanceType, provider, false) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("models.ServerSkuManager.FetchSkuByNameAndProvider error %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("models.ServerSkuManager.FetchSkuByNameAndProvider error %s", err))) return } vcpuCount = int64(sku.CpuCoreCount) @@ -160,7 +160,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob func (self *GuestChangeConfigTask) startGuestChangeCpuMemSpec(ctx context.Context, guest *models.SGuest, instanceType string, vcpuCount int64, vmemSize int64) { err := guest.GetDriver().RequestChangeVmConfig(ctx, guest, self, instanceType, vcpuCount, vmemSize) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("guest.GetDriver().RequestChangeVmConfig fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.Marshal(err)) return } } @@ -195,7 +195,7 @@ func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecComplete(ctx context.C return nil }) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("Update fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Update fail %s", err))) return } changeConfigSpec := jsonutils.NewDict() @@ -214,7 +214,7 @@ func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecComplete(ctx context.C var pendingUsage models.SQuota err = self.GetPendingUsage(&pendingUsage, 0) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("GetPendingUsage %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("GetPendingUsage %s", err))) return } var cancelUsage models.SQuota @@ -232,7 +232,7 @@ func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecComplete(ctx context.C keys, err := guest.GetQuotaKeys() if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("guest.GetQuotaKeys %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("guest.GetQuotaKeys %s", err))) return } cancelUsage.SetKeys(keys) @@ -244,12 +244,12 @@ func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecComplete(ctx context.C if !cancelUsage.IsEmpty() { err = quotas.CancelPendingUsage(ctx, self.UserCred, &pendingUsage, &cancelUsage, true) // success if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("CancelPendingUsage fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("CancelPendingUsage fail %s", err))) return } err = self.SetPendingUsage(&pendingUsage, 0) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("SetPendingUsage fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("SetPendingUsage fail %s", err))) return } } @@ -265,7 +265,7 @@ func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecCompleteFailed(ctx con if err := guest.GetDriver().OnGuestChangeCpuMemFailed(ctx, guest, data.(*jsonutils.JSONDict), self); err != nil { log.Errorln(err) } - self.markStageFailed(ctx, guest, fmt.Sprintf("guest.GetDriver().RequestChangeVmConfig fail %s", data)) + self.markStageFailed(ctx, guest, data) } func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecFinish(ctx context.Context, guest *models.SGuest) { @@ -273,7 +273,7 @@ func (self *GuestChangeConfigTask) OnGuestChangeCpuMemSpecFinish(ctx context.Con self.SetStage("OnSyncConfigComplete", nil) err := guest.StartSyncTaskWithoutSyncstatus(ctx, self.UserCred, false, self.GetTaskId()) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("StartSyncstatus fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("StartSyncstatus fail %s", err))) return } } @@ -284,7 +284,7 @@ func (self *GuestChangeConfigTask) OnSyncConfigComplete(ctx context.Context, obj self.SetStage("on_sync_status_complete", nil) err := guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) if err != nil { - self.markStageFailed(ctx, guest, fmt.Sprintf("StartSyncstatus fail %s", err)) + self.markStageFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("StartSyncstatus fail %s", err))) return } } @@ -310,11 +310,11 @@ func (self *GuestChangeConfigTask) OnGuestStartComplete(ctx context.Context, obj } func (self *GuestChangeConfigTask) OnGuestStartCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } -func (self *GuestChangeConfigTask) markStageFailed(ctx context.Context, guest *models.SGuest, reason string) { - guest.SetStatus(self.UserCred, api.VM_CHANGE_FLAVOR_FAIL, reason) +func (self *GuestChangeConfigTask) markStageFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { + guest.SetStatus(self.UserCred, api.VM_CHANGE_FLAVOR_FAIL, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_CHANGE_FLAVOR_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_CHANGE_FLAVOR, reason, self.UserCred, false) self.SetStageFailed(ctx, reason) diff --git a/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go b/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go index 861e437896..c83d268c46 100644 --- a/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go +++ b/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go @@ -61,15 +61,15 @@ func (self *GuestConvertEsxiToKvmTask) OnStartSchedule(obj IScheduleModel) { db.OpsLog.LogEvent(guest, db.ACT_VM_CONVERTING, "", self.UserCred) } -func (self *GuestConvertEsxiToKvmTask) OnScheduleFailed(ctx context.Context, reason string) { +func (self *GuestConvertEsxiToKvmTask) OnScheduleFailed(ctx context.Context, reason jsonutils.JSONObject) { guest := self.GetObject().(*models.SGuest) self.taskFailed(ctx, guest, reason) } -func (self *GuestConvertEsxiToKvmTask) taskFailed(ctx context.Context, guest *models.SGuest, reason string) { - guest.SetStatus(self.UserCred, api.VM_CONVERT_FAILED, reason) +func (self *GuestConvertEsxiToKvmTask) taskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { + guest.SetStatus(self.UserCred, api.VM_CONVERT_FAILED, reason.String()) targetGuest := self.getTargetGuest() - targetGuest.SetStatus(self.UserCred, api.VM_CONVERT_FAILED, reason) + targetGuest.SetStatus(self.UserCred, api.VM_CONVERT_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_VM_CONVERT_FAIL, reason, self.UserCred) logclient.AddSimpleActionLog(guest, logclient.ACT_VM_CONVERT, reason, self.UserCred, false) logclient.AddSimpleActionLog(targetGuest, logclient.ACT_VM_CONVERT, reason, self.UserCred, false) @@ -100,17 +100,17 @@ func (self *GuestConvertEsxiToKvmTask) SaveScheduleResult(ctx context.Context, o targetGuest := self.getTargetGuest() esxiAccessInfo, err := self.GenerateEsxiAcceessInfo(guest) if err != nil { - self.taskFailed(ctx, guest, fmt.Sprintf("generate esxi access info %s", err)) + self.taskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("generate esxi access info %s", err))) return } err = targetGuest.SetHostId(self.UserCred, target.HostId) if err != nil { - self.taskFailed(ctx, guest, fmt.Sprintf("update guest %s", err)) + self.taskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("update guest %s", err))) return } err = targetGuest.SetMetadata(ctx, api.SERVER_META_CONVERT_FROM_ESXI, guest.Id, self.UserCred) if err != nil { - self.taskFailed(ctx, guest, fmt.Sprintf("guest set metadata %s", err)) + self.taskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("guest set metadata %s", err))) return } host := targetGuest.GetHost() @@ -121,13 +121,13 @@ func (self *GuestConvertEsxiToKvmTask) SaveScheduleResult(ctx context.Context, o err = targetGuest.CreateDisksOnHost(ctx, self.UserCred, host, input.Disks, nil, true, true, target.Disks, nil, true) if err != nil { - self.taskFailed(ctx, guest, fmt.Sprintf("guest create disks %s", err)) + self.taskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("guest create disks %s", err))) return } self.SetStage("OnHostCreateGuest", nil) if err = self.RequestHostCreateGuestFromEsxi(ctx, targetGuest, esxiAccessInfo); err != nil { - self.taskFailed(ctx, guest, err.Error()) + self.taskFailed(ctx, guest, jsonutils.Marshal(err)) return } host.ClearSchedDescCache() @@ -167,13 +167,13 @@ func (self *GuestConvertEsxiToKvmTask) OnHostCreateGuest( err = disk.SetMetadata(ctx, api.DISK_META_ESXI_FLAT_FILE_PATH, esxiFlatFilePath, self.UserCred) if err != nil { log.Errorf("disk set metadata failed %s", err) - self.taskFailed(ctx, guest, err.Error()) + self.taskFailed(ctx, guest, jsonutils.NewString(err.Error())) return } db.OpsLog.LogEvent(disk, db.ACT_ALLOCATE, disk.GetShortDesc(ctx), self.UserCred) } if err := guest.ConvertNetworks(targetGuest); err != nil { - self.taskFailed(ctx, guest, err.Error()) + self.taskFailed(ctx, guest, jsonutils.NewString(err.Error())) return } self.TaskComplete(ctx, guest, targetGuest) @@ -182,7 +182,7 @@ func (self *GuestConvertEsxiToKvmTask) OnHostCreateGuest( func (self *GuestConvertEsxiToKvmTask) OnHostCreateGuestFailed( ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject, ) { - self.taskFailed(ctx, guest, data.String()) + self.taskFailed(ctx, guest, data) } func (self *GuestConvertEsxiToKvmTask) TaskComplete(ctx context.Context, guest, targetGuest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_create_disk_task.go b/pkg/compute/tasks/guest_create_disk_task.go index d6db60f702..6625d9fe3b 100644 --- a/pkg/compute/tasks/guest_create_disk_task.go +++ b/pkg/compute/tasks/guest_create_disk_task.go @@ -38,7 +38,7 @@ func (self *GuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM guest := obj.(*models.SGuest) err := guest.GetDriver().DoGuestCreateDisksTask(ctx, guest, self) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } @@ -47,7 +47,7 @@ func (self *GuestCreateDiskTask) OnDiskPrepared(ctx context.Context, obj db.ISta } func (self *GuestCreateDiskTask) OnDiskPreparedFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } /* --------------------------------------------- */ @@ -67,7 +67,7 @@ func (self *KVMGuestCreateDiskTask) OnKvmDiskPrepared(ctx context.Context, obj d var diskReady = true disks, err := self.GetInputDisks() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } @@ -78,11 +78,11 @@ func (self *KVMGuestCreateDiskTask) OnKvmDiskPrepared(ctx context.Context, obj d } iDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } if iDisk == nil { - self.SetStageFailed(ctx, "Disk not found") + self.SetStageFailed(ctx, jsonutils.NewString("Disk not found")) return } disk := iDisk.(*models.SDisk) @@ -90,7 +90,7 @@ func (self *KVMGuestCreateDiskTask) OnKvmDiskPrepared(ctx context.Context, obj d snapshotId := d.SnapshotId err = disk.StartDiskCreateTask(ctx, self.UserCred, false, snapshotId, self.GetTaskId()) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } diskReady = false @@ -104,11 +104,11 @@ func (self *KVMGuestCreateDiskTask) OnKvmDiskPrepared(ctx context.Context, obj d diskId := d.DiskId iDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } if iDisk == nil { - self.SetStageFailed(ctx, "Disk not found") + self.SetStageFailed(ctx, jsonutils.NewString("Disk not found")) return } disk := iDisk.(*models.SDisk) @@ -118,7 +118,7 @@ func (self *KVMGuestCreateDiskTask) OnKvmDiskPrepared(ctx context.Context, obj d } err = self.attachDisk(ctx, disk, d.Driver, d.Cache, d.Mountpoint) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } } @@ -128,7 +128,7 @@ func (self *KVMGuestCreateDiskTask) OnKvmDiskPrepared(ctx context.Context, obj d self.SetStage("on_config_sync_complete", nil) err := guest.StartSyncTask(ctx, self.UserCred, false, self.GetTaskId()) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } } else { self.SetStageComplete(ctx, nil) @@ -178,7 +178,7 @@ func (self *ManagedGuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStan func (self *ManagedGuestCreateDiskTask) OnManagedDiskPrepared(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { disks, err := self.GetInputDisks() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } @@ -186,7 +186,7 @@ func (self *ManagedGuestCreateDiskTask) OnManagedDiskPrepared(ctx context.Contex diskId := d.DiskId iDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } disk := iDisk.(*models.SDisk) @@ -194,7 +194,7 @@ func (self *ManagedGuestCreateDiskTask) OnManagedDiskPrepared(ctx context.Contex snapshot := d.SnapshotId err = disk.StartDiskCreateTask(ctx, self.UserCred, false, snapshot, self.GetTaskId()) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } return @@ -207,31 +207,31 @@ func (self *ManagedGuestCreateDiskTask) OnManagedDiskPrepared(ctx context.Contex diskId := d.DiskId iDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } disk := iDisk.(*models.SDisk) if disk.Status != api.DISK_READY { - self.SetStageFailed(ctx, fmt.Sprintf("disk %s is not ready", disk.Id)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("disk %s is not ready(status=%s)", disk.Id, disk.Status))) return } iVM, e := guest.GetIVM() if e != nil { - self.SetStageFailed(ctx, "iVM not found") + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("iVM not found: %s", e))) return } err = iVM.AttachDisk(ctx, disk.GetExternalId()) if err != nil { log.Debugf("Attach Disk %s to guest fail: %s", diskId, err) - self.SetStageFailed(ctx, fmt.Sprintf("Attach iDisk to guest fail error: %v", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("Attach iDisk to guest fail error: %v", err))) return } err = self.attachDisk(ctx, disk, d.Driver, d.Cache, d.Mountpoint) if err != nil { log.Debugf("Attach Disk %s to guest fail: %s", diskId, err) - self.SetStageFailed(ctx, fmt.Sprintf("Attach Disk to guest fail error: %v", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("Attach Disk to guest fail error: %v", err))) return } time.Sleep(time.Second * 5) @@ -254,30 +254,30 @@ func (self *ESXiGuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStandal guest := obj.(*models.SGuest) host := guest.GetHost() if host == nil { - self.SetStageFailed(ctx, "no valid host") + self.SetStageFailed(ctx, jsonutils.NewString("no valid host")) return } disks, err := self.GetInputDisks() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } for _, d := range disks { diskId := d.DiskId iDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } disk := iDisk.(*models.SDisk) if disk.Status != api.DISK_INIT { - self.SetStageFailed(ctx, fmt.Sprintf("Disk %s already created??", diskId)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("Disk %s already created??(status=%s)", diskId, disk.Status))) return } ivm, err := guest.GetIVM() if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("fail to find iVM for %s, error: %v", guest.GetName(), err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("fail to find iVM for %s, error: %v", guest.GetName(), err))) return } if len(d.Driver) == 0 { @@ -286,18 +286,18 @@ func (self *ESXiGuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStandal } err = ivm.CreateDisk(ctx, disk.DiskSize, disk.Id, d.Driver) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("ivm.CreateDisk fail %s, error: %v", guest.GetName(), err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("ivm.CreateDisk fail %s, error: %v", guest.GetName(), err))) return } idisks, err := ivm.GetIDisks() if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("ivm.GetIDisks fail %s", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("ivm.GetIDisks fail %s", err))) return } err = self.attachDisk(ctx, disk, d.Driver, d.Cache, d.Mountpoint) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("self.attachDisk fail %v", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("self.attachDisk fail %v", err))) return } @@ -312,7 +312,7 @@ func (self *ESXiGuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStandal return nil }) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("disk.GetModelManager().TableSpec().Update fail %s", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("disk.GetModelManager().TableSpec().Update fail %s", err))) return } @@ -349,7 +349,7 @@ func (self *GuestCreateBackupDisksTask) CreateBackups(ctx context.Context, guest } else { err := guestDisks[diskIndex].GetDisk().StartCreateBackupTask(ctx, self.UserCred, self.GetTaskId()) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } } } diff --git a/pkg/compute/tasks/guest_create_task.go b/pkg/compute/tasks/guest_create_task.go index fff6bfc3ea..d9bc2768dc 100644 --- a/pkg/compute/tasks/guest_create_task.go +++ b/pkg/compute/tasks/guest_create_task.go @@ -70,7 +70,7 @@ func (self *GuestCreateTask) OnDiskPreparedFailed(ctx context.Context, obj db.IS db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_ALLOCATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_DISK_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestCreateTask) OnDiskPrepared(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -99,7 +99,7 @@ func (self *GuestCreateTask) OnCdromPreparedFailed(ctx context.Context, obj db.I db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_ALLOCATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_DISK_FAILED, fmt.Sprintf("cdrom_failed %s", data)) - self.SetStageFailed(ctx, fmt.Sprintf("cdrom_failed %s", data)) + self.SetStageFailed(ctx, data) } func (self *GuestCreateTask) StartDeployGuest(ctx context.Context, guest *models.SGuest) { @@ -153,7 +153,7 @@ func (self *GuestCreateTask) OnDeployGuestDescCompleteFailed(ctx context.Context db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_ALLOCATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_DEPLOY_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestCreateTask) OnDeployEipComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -194,7 +194,7 @@ func (self *GuestCreateTask) OnDeployEipCompleteFailed(ctx context.Context, obj db.OpsLog.LogEvent(guest, db.ACT_EIP_ATTACH, data, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_EIP_ASSOCIATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_ASSOCIATE_EIP_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestCreateTask) OnAutoStartGuest(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_delete_backup_task.go b/pkg/compute/tasks/guest_delete_backup_task.go index a88e566029..915639b893 100644 --- a/pkg/compute/tasks/guest_delete_backup_task.go +++ b/pkg/compute/tasks/guest_delete_backup_task.go @@ -36,10 +36,10 @@ type GuestDeleteBackupTask struct { SGuestBaseTask } -func (self *GuestDeleteBackupTask) OnFail(ctx context.Context, guest *models.SGuest, reason string) { +func (self *GuestDeleteBackupTask) OnFail(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_DELETE_BACKUP, reason, self.UserCred, false) db.OpsLog.LogEvent(guest, db.ACT_DELETE_BACKUP_FAILED, reason, self.UserCred) - guest.SetStatus(self.UserCred, compute.VM_BACKUP_DELETE_FAILED, reason) + guest.SetStatus(self.UserCred, compute.VM_BACKUP_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -47,7 +47,7 @@ func (self *GuestDeleteBackupTask) OnInit(ctx context.Context, obj db.IStandalon guest := obj.(*models.SGuest) host := models.HostManager.FetchHostById(guest.HostId) if host == nil { - self.OnFail(ctx, guest, "Host not found") + self.OnFail(ctx, guest, jsonutils.NewString("Host not found")) return } @@ -56,7 +56,7 @@ func (self *GuestDeleteBackupTask) OnInit(ctx context.Context, obj db.IStandalon _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, self.GetTaskRequestHeader(), nil, false) if err != nil { - self.OnFail(ctx, guest, err.Error()) + self.OnFail(ctx, guest, jsonutils.Marshal(err)) return } } @@ -74,7 +74,7 @@ func (self *GuestDeleteBackupTask) StartDeleteBackupOnHost(ctx context.Context, self.SetStage("OnDeleteOnHost", nil) if task, err := taskman.TaskManager.NewTask( ctx, "GuestDeleteOnHostTask", guest, self.UserCred, taskData, self.GetId(), "", nil); err != nil { - self.OnFail(ctx, guest, err.Error()) + self.OnFail(ctx, guest, jsonutils.NewString(err.Error())) return } else { task.ScheduleRun(nil) @@ -82,7 +82,7 @@ func (self *GuestDeleteBackupTask) StartDeleteBackupOnHost(ctx context.Context, } func (self *GuestDeleteBackupTask) OnCancelBlockJobsFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.OnFail(ctx, guest, data.String()) + self.OnFail(ctx, guest, data) } func (self *GuestDeleteBackupTask) OnDeleteOnHost(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -94,7 +94,7 @@ func (self *GuestDeleteBackupTask) OnDeleteOnHost(ctx context.Context, guest *mo params.Set("reconcile_backup", jsonutils.JSONTrue) _, err := guest.StartGuestCreateBackupTask(ctx, self.UserCred, self.GetId(), params) if err != nil { - self.onCreateNewBackupFailed(ctx, guest, err.Error()) + self.onCreateNewBackupFailed(ctx, guest, jsonutils.NewString(err.Error())) } } else { self.TaskComplete(ctx, guest, data) @@ -108,17 +108,17 @@ func (self *GuestDeleteBackupTask) OnCreateNewBackup(ctx context.Context, guest } func (self *GuestDeleteBackupTask) OnCreateNewBackupFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.onCreateNewBackupFailed(ctx, guest, data.String()) + self.onCreateNewBackupFailed(ctx, guest, data) } -func (self *GuestDeleteBackupTask) onCreateNewBackupFailed(ctx context.Context, guest *models.SGuest, reason string) { +func (self *GuestDeleteBackupTask) onCreateNewBackupFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_CREATE_BACKUP, reason, self.UserCred, false) db.OpsLog.LogEvent(guest, db.ACT_CREATE_BACKUP_FAILED, reason, self.UserCred) self.SetStageFailed(ctx, reason) } func (self *GuestDeleteBackupTask) OnDeleteOnHostFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.OnFail(ctx, guest, data.String()) + self.OnFail(ctx, guest, data) } func (self *GuestDeleteBackupTask) OnDeleteBackupComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_delete_on_host_task.go b/pkg/compute/tasks/guest_delete_on_host_task.go index d2e0648731..e841fb14aa 100644 --- a/pkg/compute/tasks/guest_delete_on_host_task.go +++ b/pkg/compute/tasks/guest_delete_on_host_task.go @@ -38,12 +38,12 @@ func (self *GuestDeleteOnHostTask) OnInit(ctx context.Context, obj db.IStandalon guest := obj.(*models.SGuest) hostId, err := self.Params.GetString("host_id") if err != nil { - self.OnFail(ctx, guest, "Missing param host id") + self.OnFail(ctx, guest, jsonutils.NewString("Missing param host_id")) return } host := models.HostManager.FetchHostById(hostId) if host == nil { - self.OnFail(ctx, guest, "Host is nil") + self.OnFail(ctx, guest, jsonutils.NewString("Host is nil")) return } @@ -68,7 +68,7 @@ func (self *GuestDeleteOnHostTask) OnStopGuest(ctx context.Context, guest *model } func (self *GuestDeleteOnHostTask) OnUnDeployGuestFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.OnFail(ctx, guest, data.String()) + self.OnFail(ctx, guest, data) } func (self *GuestDeleteOnHostTask) OnUnDeployGuest(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -79,7 +79,7 @@ func (self *GuestDeleteOnHostTask) OnUnDeployGuest(ctx context.Context, guest *m return nil }) if err != nil { - self.OnFail(ctx, guest, err.Error()) + self.OnFail(ctx, guest, jsonutils.NewString(err.Error())) return } guestdisks := guest.GetDisks() @@ -90,7 +90,7 @@ func (self *GuestDeleteOnHostTask) OnUnDeployGuest(ctx context.Context, guest *m return nil }) if err != nil { - self.OnFail(ctx, guest, err.Error()) + self.OnFail(ctx, guest, jsonutils.NewString(err.Error())) return } } @@ -105,7 +105,7 @@ func (self *GuestDeleteOnHostTask) OnSync(ctx context.Context, guest *models.SGu self.SetStageComplete(ctx, nil) } -func (self *GuestDeleteOnHostTask) OnFail(ctx context.Context, guest *models.SGuest, reason string) { +func (self *GuestDeleteOnHostTask) OnFail(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { hostId, _ := self.Params.GetString("host_id") if guest.BackupHostId == hostId { logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_DELETE_BACKUP, "GuestDeleteOnHost", self.UserCred, false) @@ -113,7 +113,7 @@ func (self *GuestDeleteOnHostTask) OnFail(ctx context.Context, guest *models.SGu } failedStatus, _ := self.Params.GetString("failed_status") if len(failedStatus) > 0 { - guest.SetStatus(self.UserCred, failedStatus, reason) + guest.SetStatus(self.UserCred, failedStatus, reason.String()) } self.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 6a6397f514..1a61fdda7f 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -285,7 +285,7 @@ func (self *GuestDeleteTask) OnFailed(ctx context.Context, guest *models.SGuest, guest.SetStatus(self.UserCred, api.VM_DELETE_FAIL, err.String()) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE_FAIL, err, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_DELOCATE, err, self.UserCred, false) - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, err) } func (self *GuestDeleteTask) OnGuestDeleteCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_deploy_task.go b/pkg/compute/tasks/guest_deploy_task.go index d93e298c80..3db594cee8 100644 --- a/pkg/compute/tasks/guest_deploy_task.go +++ b/pkg/compute/tasks/guest_deploy_task.go @@ -35,7 +35,7 @@ type GuestDeployTask struct { func (self *GuestDeployTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) if !guest.IsNetworkAllocated() { - self.SetStageFailed(ctx, fmt.Sprintf("Guest %s network not ready!!", guest.Name)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("Guest %s network not ready!!", guest.Name))) } else { self.OnGuestNetworkReady(ctx, guest) } @@ -75,7 +75,7 @@ func (self *GuestDeployTask) DeployOnHost(ctx context.Context, guest *models.SGu func (self *GuestDeployTask) OnDeployGuestFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, api.VM_DEPLOY_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_DEPLOY, err, self.UserCred, false) db.OpsLog.LogEvent(guest, db.ACT_VM_DEPLOY_FAIL, err.Error(), self.UserCred) } @@ -137,7 +137,7 @@ func (self *GuestDeployTask) OnDeployGuestCompleteFailed(ctx context.Context, ob } } guest.SetStatus(self.UserCred, api.VM_DEPLOY_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_DEPLOY, data, self.UserCred, false) db.OpsLog.LogEvent(guest, db.ACT_VM_DEPLOY_FAIL, data, self.UserCred) } @@ -147,7 +147,7 @@ func (self *GuestDeployTask) OnDeployStartGuestComplete(ctx context.Context, obj } func (self *GuestDeployTask) OnDeployStartGuestCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestDeployTask) OnDeployGuestSyncstatusComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -155,7 +155,7 @@ func (self *GuestDeployTask) OnDeployGuestSyncstatusComplete(ctx context.Context } func (self *GuestDeployTask) OnDeployGuestSyncstatusCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func init() { diff --git a/pkg/compute/tasks/guest_detach_all_disks_task.go b/pkg/compute/tasks/guest_detach_all_disks_task.go index ff10f31d7d..5c6cd32497 100644 --- a/pkg/compute/tasks/guest_detach_all_disks_task.go +++ b/pkg/compute/tasks/guest_detach_all_disks_task.go @@ -41,7 +41,7 @@ func (self *GuestDetachAllDisksTask) OnDiskDeleteComplete(ctx context.Context, o guest := obj.(*models.SGuest) cnt, err := guest.DiskCount() if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } if cnt == 0 { @@ -65,7 +65,7 @@ func (self *GuestDetachAllDisksTask) OnDiskDeleteComplete(ctx context.Context, o taskData.Add(jsonutils.JSONFalse, "keep_disk") task, err := taskman.TaskManager.NewTask(ctx, "GuestDetachDiskTask", guest, self.UserCred, taskData, self.GetTaskId(), "", nil) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } else { task.ScheduleRun(nil) } diff --git a/pkg/compute/tasks/guest_detach_disk_task.go b/pkg/compute/tasks/guest_detach_disk_task.go index 71242b5749..3e29aa4099 100644 --- a/pkg/compute/tasks/guest_detach_disk_task.go +++ b/pkg/compute/tasks/guest_detach_disk_task.go @@ -18,8 +18,6 @@ import ( "context" "fmt" - "github.com/pkg/errors" - "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -43,15 +41,10 @@ func (self *GuestDetachDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM diskId, _ := self.Params.GetString("disk_id") objDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.OnTaskFail(ctx, guest, nil, err) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(err.Error())) return } disk := objDisk.(*models.SDisk) - if disk == nil { - self.OnTaskFail(ctx, guest, nil, fmt.Errorf("Connot find disk %s", diskId)) - return - } - guestdisks := disk.GetGuestdisks() if len(guestdisks) > 0 { guestdisk := guestdisks[0] @@ -83,19 +76,15 @@ func (self *GuestDetachDiskTask) OnDetachDiskComplete(ctx context.Context, guest diskId, _ := self.Params.GetString("disk_id") objDisk, err := models.DiskManager.FetchById(diskId) if err != nil { - self.OnTaskFail(ctx, guest, nil, err) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(err.Error())) return } disk := objDisk.(*models.SDisk) - if disk == nil { - self.OnTaskFail(ctx, guest, nil, fmt.Errorf("Connot find disk %s", diskId)) - return - } // detach disk and snapshotpolicy if hypervisor is kvm if guest.Hypervisor == api.HYPERVISOR_KVM { err := disk.DetachAllSnapshotpolicies(ctx, self.UserCred) if err != nil { - self.OnTaskFail(ctx, guest, nil, fmt.Errorf("detach all snapshotpolicies failed: %s", err.Error())) + self.OnTaskFail(ctx, guest, nil, jsonutils.NewString(fmt.Sprintf("detach all snapshotpolicies failed: %s", err.Error()))) return } } @@ -113,7 +102,7 @@ func (self *GuestDetachDiskTask) OnDetachDiskComplete(ctx context.Context, guest db.OpsLog.LogEvent(disk, db.ACT_DELETE, "", self.UserCred) err := guest.GetDriver().RequestDeleteDetachedDisk(ctx, disk, self, purge) if err != nil { - self.OnTaskFail(ctx, guest, disk, err) + self.OnTaskFail(ctx, guest, disk, jsonutils.Marshal(err)) } return } @@ -130,7 +119,7 @@ func (self *GuestDetachDiskTask) OnDetachDiskCompleteFailed(ctx context.Context, objDisk, err := models.DiskManager.FetchById(diskId) if err != nil { log.Warningf("failed to fetch disk by id %s error: %v", diskId, err) - self.OnTaskFail(ctx, guest, nil, errors.New(reason.String())) + self.OnTaskFail(ctx, guest, nil, reason) return } disk := objDisk.(*models.SDisk) @@ -140,17 +129,17 @@ func (self *GuestDetachDiskTask) OnDetachDiskCompleteFailed(ctx context.Context, if err != nil { log.Warningf("recover attach disk %s(%s) for guest %s(%s) error: %v", disk.Name, disk.Id, guest.Name, guest.Id, err) } - self.OnTaskFail(ctx, guest, nil, errors.New(reason.String())) + self.OnTaskFail(ctx, guest, nil, reason) } -func (self *GuestDetachDiskTask) OnTaskFail(ctx context.Context, guest *models.SGuest, disk *models.SDisk, err error) { +func (self *GuestDetachDiskTask) OnTaskFail(ctx context.Context, guest *models.SGuest, disk *models.SDisk, err jsonutils.JSONObject) { if disk != nil { disk.SetStatus(self.UserCred, api.DISK_READY, "") } - guest.SetStatus(self.UserCred, api.VM_DETACH_DISK_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) - log.Errorf("Guest %s GuestDetachDiskTask failed %s", guest.Id, err.Error()) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_DETACH_DISK, err.Error(), self.UserCred, false) + guest.SetStatus(self.UserCred, api.VM_DETACH_DISK_FAILED, err.String()) + self.SetStageFailed(ctx, err) + log.Errorf("Guest %s GuestDetachDiskTask failed %s", guest.Id, err.String()) + logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_DETACH_DISK, err, self.UserCred, false) } func (self *GuestDetachDiskTask) OnDiskDeleteComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_detach_scalinggroup.go b/pkg/compute/tasks/guest_detach_scalinggroup.go index da6a6d72a8..caa96b5dee 100644 --- a/pkg/compute/tasks/guest_detach_scalinggroup.go +++ b/pkg/compute/tasks/guest_detach_scalinggroup.go @@ -38,7 +38,7 @@ func init() { taskman.RegisterTask(GuestDetachScalingGroupTask{}) } -func (self *GuestDetachScalingGroupTask) taskFailed(ctx context.Context, sg *models.SScalingGroup, sgg *models.SScalingGroupGuest, reason string) { +func (self *GuestDetachScalingGroupTask) taskFailed(ctx context.Context, sg *models.SScalingGroup, sgg *models.SScalingGroupGuest, reason jsonutils.JSONObject) { if sg == nil { return } @@ -61,7 +61,7 @@ func (self *GuestDetachScalingGroupTask) OnInit(ctx context.Context, obj db.ISta guestId, _ := self.Params.GetString("guest") guest := models.GuestManager.FetchGuestById(guestId) if guest == nil { - self.taskFailed(ctx, sg, nil, "unable to FetchGuestById") + self.taskFailed(ctx, sg, nil, jsonutils.NewString("unable to FetchGuestById")) return } self.SetStage("OnDetachLoadbalancerComplete", nil) @@ -70,7 +70,7 @@ func (self *GuestDetachScalingGroupTask) OnInit(ctx context.Context, obj db.ISta err := q.First(&lbBackend) if err != nil { if errors.Cause(err) != sql.ErrNoRows { - self.taskFailed(ctx, sg, nil, fmt.Sprintf("Fetch loadbalancer backend failed: %s", err.Error())) + self.taskFailed(ctx, sg, nil, jsonutils.NewString(fmt.Sprintf("Fetch loadbalancer backend failed: %s", err.Error()))) return } self.OnDetachLoadbalancerComplete(ctx, sg, body) @@ -79,7 +79,7 @@ func (self *GuestDetachScalingGroupTask) OnInit(ctx context.Context, obj db.ISta lbBackend.SetModelManager(models.LoadbalancerBackendManager, &lbBackend) lbBackend.SetStatus(self.UserCred, api.LB_STATUS_DELETING, "") if err = lbBackend.StartLoadBalancerBackendDeleteTask(ctx, self.UserCred, jsonutils.NewDict(), self.Id); err != nil { - self.taskFailed(ctx, sg, nil, fmt.Sprintf("Detach guest with loadbalancer group failed: %s", err)) + self.taskFailed(ctx, sg, nil, jsonutils.NewString(fmt.Sprintf("Detach guest with loadbalancer group failed: %s", err))) } } } @@ -93,19 +93,19 @@ func (self *GuestDetachScalingGroupTask) OnDetachLoadbalancerComplete(ctx contex } guest := models.GuestManager.FetchGuestById(guestId) if guest == nil { - self.taskFailed(ctx, sg, nil, "unable to FetchGuestById") + self.taskFailed(ctx, sg, nil, jsonutils.NewString("unable to FetchGuestById")) return } self.Params.Set("guest_name", jsonutils.NewString(guest.GetName())) self.SetStage("OnDeleteGuestComplete", nil) if err := guest.StartDeleteGuestTask(ctx, self.UserCred, self.Id, true, true, true); err != nil { - self.taskFailed(ctx, sg, nil, err.Error()) + self.taskFailed(ctx, sg, nil, jsonutils.NewString(err.Error())) } } func (self *GuestDetachScalingGroupTask) OnDetachLoadbalancerCompleteFailed(ctx context.Context, sg *models.SScalingGroup, data jsonutils.JSONObject) { - self.taskFailed(ctx, sg, nil, "detach loadbalancer failed") + self.taskFailed(ctx, sg, nil, data) } func (self *GuestDetachScalingGroupTask) OnDeleteGuestComplete(ctx context.Context, sg *models.SScalingGroup, data jsonutils.JSONObject) { @@ -150,5 +150,5 @@ func (s SScalingActionDesc) CheckCoolTime() bool { } func (self *GuestDetachScalingGroupTask) OnDeleteGuestCompleteFailed(ctx context.Context, sg *models.SScalingGroup, data jsonutils.JSONObject) { - self.taskFailed(ctx, sg, nil, "delete guest failed") + self.taskFailed(ctx, sg, nil, data) } diff --git a/pkg/compute/tasks/guest_disk_snapshot_task.go b/pkg/compute/tasks/guest_disk_snapshot_task.go index b7ce1caf23..19efd9e200 100644 --- a/pkg/compute/tasks/guest_disk_snapshot_task.go +++ b/pkg/compute/tasks/guest_disk_snapshot_task.go @@ -45,12 +45,12 @@ func (self *GuestDiskSnapshotTask) OnInit(ctx context.Context, obj db.IStandalon func (self *GuestDiskSnapshotTask) DoDiskSnapshot(ctx context.Context, guest *models.SGuest) { diskId, err := self.Params.GetString("disk_id") if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) return } snapshotId, err := self.Params.GetString("snapshot_id") if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) return } params := jsonutils.NewDict() @@ -59,7 +59,7 @@ func (self *GuestDiskSnapshotTask) DoDiskSnapshot(ctx context.Context, guest *mo guest.SetStatus(self.UserCred, api.VM_SNAPSHOT, "") err = guest.GetDriver().RequestDiskSnapshot(ctx, guest, self, snapshotId, diskId) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.Marshal(err)) return } } @@ -85,7 +85,7 @@ func (self *GuestDiskSnapshotTask) OnDiskSnapshotComplete(ctx context.Context, g return nil }) if err != nil { - self.TaskFailed(ctx, guest, fmt.Sprintf("update sanpshot failed: %s", err)) + self.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("update sanpshot failed: %s", err))) return } @@ -94,7 +94,7 @@ func (self *GuestDiskSnapshotTask) OnDiskSnapshotComplete(ctx context.Context, g } func (self *GuestDiskSnapshotTask) OnDiskSnapshotCompleteFailed(ctx context.Context, guest *models.SGuest, err jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, err.String()) + self.TaskFailed(ctx, guest, err) } func (self *GuestDiskSnapshotTask) TaskComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -104,8 +104,8 @@ func (self *GuestDiskSnapshotTask) TaskComplete(ctx context.Context, guest *mode self.SetStageComplete(ctx, nil) } -func (self *GuestDiskSnapshotTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason string) { - guest.SetStatus(self.UserCred, api.VM_SNAPSHOT_FAILED, reason) +func (self *GuestDiskSnapshotTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { + guest.SetStatus(self.UserCred, api.VM_SNAPSHOT_FAILED, reason.String()) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_DISK_CREATE_SNAPSHOT, reason, self.UserCred, false) self.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/guest_insert_iso_task.go b/pkg/compute/tasks/guest_insert_iso_task.go index b12274fa06..26145cd2cb 100644 --- a/pkg/compute/tasks/guest_insert_iso_task.go +++ b/pkg/compute/tasks/guest_insert_iso_task.go @@ -53,7 +53,7 @@ func (self *GuestInsertIsoTask) prepareIsoImage(ctx context.Context, obj db.ISta } else { guest.EjectIso(self.UserCred) db.OpsLog.LogEvent(obj, db.ACT_ISO_PREPARE_FAIL, imageId, self.UserCred) - self.SetStageFailed(ctx, "host no local storage cache") + self.SetStageFailed(ctx, jsonutils.NewString("host no local storage cache")) } } @@ -62,14 +62,14 @@ func (self *GuestInsertIsoTask) OnIsoPrepareCompleteFailed(ctx context.Context, db.OpsLog.LogEvent(obj, db.ACT_ISO_PREPARE_FAIL, imageId, self.UserCred) guest := obj.(*models.SGuest) guest.EjectIso(self.UserCred) - self.SetStageFailed(ctx, "OnIsoPrepareCompleteFailed") + self.SetStageFailed(ctx, data) } func (self *GuestInsertIsoTask) OnIsoPrepareComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { imageId, _ := data.GetString("image_id") size, err := data.Int("size") if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } name, _ := data.GetString("name") @@ -115,7 +115,7 @@ func (self *HaGuestInsertIsoTask) prepareIsoImage(ctx context.Context, obj db.IS } else { guest.EjectIso(self.UserCred) db.OpsLog.LogEvent(obj, db.ACT_ISO_PREPARE_FAIL, imageId, self.UserCred) - self.SetStageFailed(ctx, "host no local storage cache") + self.SetStageFailed(ctx, jsonutils.NewString("host no local storage cache")) } } diff --git a/pkg/compute/tasks/guest_live_migrate_task.go b/pkg/compute/tasks/guest_live_migrate_task.go index 5ea2f21415..a6a45ade80 100644 --- a/pkg/compute/tasks/guest_live_migrate_task.go +++ b/pkg/compute/tasks/guest_live_migrate_task.go @@ -86,11 +86,11 @@ func (self *GuestMigrateTask) OnStartSchedule(obj IScheduleModel) { db.OpsLog.LogEvent(guest, db.ACT_MIGRATING, "", self.UserCred) } -func (self *GuestMigrateTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason string) { +func (self *GuestMigrateTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason jsonutils.JSONObject) { // do nothing } -func (self *GuestMigrateTask) OnScheduleFailed(ctx context.Context, reason string) { +func (self *GuestMigrateTask) OnScheduleFailed(ctx context.Context, reason jsonutils.JSONObject) { obj := self.GetObject() guest := obj.(*models.SGuest) self.TaskFailed(ctx, guest, reason) @@ -101,7 +101,7 @@ func (self *GuestMigrateTask) SaveScheduleResult(ctx context.Context, obj ISched guest := obj.(*models.SGuest) targetHost := models.HostManager.FetchHostById(targetHostId) if targetHost == nil { - self.TaskFailed(ctx, guest, "target host not found?") + self.TaskFailed(ctx, guest, jsonutils.NewString("target host not found?")) return } db.OpsLog.LogEvent(guest, db.ACT_MIGRATING, fmt.Sprintf("guest start migrate from host %s to %s", guest.HostId, targetHostId), self.UserCred) @@ -138,7 +138,7 @@ func (self *GuestMigrateTask) SaveScheduleResult(ctx context.Context, obj ISched err := targetStorageCache.StartImageCacheTask( ctx, self.UserCred, disk.TemplateId, disk.DiskFormat, false, self.GetTaskId()) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) } return } @@ -157,7 +157,7 @@ func (self *GuestMigrateTask) OnCachedImageComplete(ctx context.Context, guest * if targetStorageCache != nil { err := targetStorageCache.StartImageCacheTask(ctx, self.UserCred, cdrom.ImageId, "iso", false, self.GetTaskId()) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) } return } @@ -180,7 +180,7 @@ func (self *GuestMigrateTask) OnCachedCdromComplete(ctx context.Context, guest * _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, header, body, false) if err != nil { - self.TaskFailed(ctx, guest, fmt.Sprintf("Prepare migrage failed: %s", err)) + self.TaskFailed(ctx, guest, jsonutils.Marshal(err)) return } } else { @@ -189,15 +189,15 @@ func (self *GuestMigrateTask) OnCachedCdromComplete(ctx context.Context, guest * } func (self *GuestMigrateTask) OnCachedCdromCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) OnCachedImageCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) OnSrcPrepareCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) OnSrcPrepareComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -225,14 +225,14 @@ func (self *GuestMigrateTask) OnSrcPrepareComplete(ctx context.Context, guest *m _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, headers, body, false) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.Marshal(err)) } } func (self *GuestMigrateTask) OnMigrateConfAndDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { targetHostId, _ := self.Params.GetString("target_host_id") guest.StartUndeployGuestTask(ctx, self.UserCred, "", targetHostId) - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) OnMigrateConfAndDiskComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -271,7 +271,7 @@ func (self *GuestMigrateTask) OnUndeployOldHostSucc(ctx context.Context, guest * } func (self *GuestMigrateTask) OnUndeployOldHostSuccFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, fmt.Sprintf("Undeploy Old Guest Failed %s", data)) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) OnGuestStartSucc(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -279,7 +279,7 @@ func (self *GuestMigrateTask) OnGuestStartSucc(ctx context.Context, guest *model } func (self *GuestMigrateTask) OnGuestStartSuccFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, fmt.Sprintf("Guest Start Failed %s", data)) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) sharedStorageMigrateConf(ctx context.Context, guest *models.SGuest, targetHost *models.SHost) (*jsonutils.JSONDict, bool) { @@ -321,12 +321,12 @@ func (self *GuestMigrateTask) localStorageMigrateConf(ctx context.Context, targetDesc := guest.GetJsonDescAtHypervisor(ctx, targetHost) jsonDisks, _ := targetDesc.Get("disks") if jsonDisks == nil { - self.TaskFailed(ctx, guest, "Get jsonDisks error") + self.TaskFailed(ctx, guest, jsonutils.NewString("Get jsonDisks error")) return nil, true } disksDesc, _ := jsonDisks.GetArray() if len(disksDesc) == 0 { - self.TaskFailed(ctx, guest, "Get disksDesc error") + self.TaskFailed(ctx, guest, jsonutils.NewString("Get disksDesc error")) return nil, true } targetStorages, _ := self.Params.GetArray("target_storages") @@ -344,7 +344,7 @@ func (self *GuestMigrateTask) localStorageMigrateConf(ctx context.Context, func (self *GuestLiveMigrateTask) OnStartDestComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { liveMigrateDestPort, err := data.Get("live_migrate_dest_port") if err != nil { - self.TaskFailed(ctx, guest, fmt.Sprintf("Get migrate port error: %s", err)) + self.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Get migrate port error: %s", err))) return } @@ -365,14 +365,14 @@ func (self *GuestLiveMigrateTask) OnStartDestComplete(ctx context.Context, guest _, _, err = httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, headers, body, false) if err != nil { - self.OnLiveMigrateCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) + self.OnLiveMigrateCompleteFailed(ctx, guest, jsonutils.Marshal(err)) } } func (self *GuestLiveMigrateTask) OnStartDestCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { targetHostId, _ := self.Params.GetString("target_host_id") guest.StartUndeployGuestTask(ctx, self.UserCred, "", targetHostId) - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestMigrateTask) setGuest(ctx context.Context, guest *models.SGuest) error { @@ -408,7 +408,7 @@ func (self *GuestMigrateTask) setGuest(ctx context.Context, guest *models.SGuest func (self *GuestLiveMigrateTask) OnLiveMigrateCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { targetHostId, _ := self.Params.GetString("target_host_id") guest.StartUndeployGuestTask(ctx, self.UserCred, "", targetHostId) - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestLiveMigrateTask) OnLiveMigrateComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -423,7 +423,7 @@ func (self *GuestLiveMigrateTask) OnLiveMigrateComplete(ctx context.Context, gue _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, headers, body, false) if err != nil { - self.OnResumeDestGuestCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) + self.OnResumeDestGuestCompleteFailed(ctx, guest, jsonutils.Marshal(err)) } } @@ -432,19 +432,19 @@ func (self *GuestLiveMigrateTask) OnResumeDestGuestCompleteFailed(ctx context.Co targetHostId, _ := self.Params.GetString("target_host_id") guest.StartUndeployGuestTask(ctx, self.UserCred, "", targetHostId) - self.TaskFailed(ctx, guest, data.String()) + self.TaskFailed(ctx, guest, data) } func (self *GuestLiveMigrateTask) OnResumeDestGuestComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { oldHostId := guest.HostId err := self.setGuest(ctx, guest) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) } self.SetStage("OnUndeploySrcGuestComplete", nil) err = guest.StartUndeployGuestTask(ctx, self.UserCred, self.GetTaskId(), oldHostId) if err != nil { - self.TaskFailed(ctx, guest, err.Error()) + self.TaskFailed(ctx, guest, jsonutils.NewString(err.Error())) } } @@ -470,12 +470,12 @@ func (self *GuestMigrateTask) TaskComplete(ctx context.Context, guest *models.SG logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_MIGRATE, "", self.UserCred, true) } -func (self *GuestMigrateTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason string) { - guest.SetStatus(self.UserCred, api.VM_MIGRATE_FAILED, reason) +func (self *GuestMigrateTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { + guest.SetStatus(self.UserCred, api.VM_MIGRATE_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_MIGRATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_MIGRATE, reason, self.UserCred, false) self.SetStageFailed(ctx, reason) - notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_MIGRATE_FAILED, reason) + notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_MIGRATE_FAILED, reason.String()) } //ManagedGuestMigrateTask @@ -515,18 +515,18 @@ func (self *ManagedGuestMigrateTask) OnGuestSyncStatus(ctx context.Context, gues } func (self *ManagedGuestMigrateTask) OnGuestSyncStatusFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, "Guest SyncStatus Failed") + self.SetStageFailed(ctx, data) } func (self *ManagedGuestMigrateTask) OnGuestStartSuccFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, "Guest Start Failed") + self.SetStageFailed(ctx, data) } func (self *ManagedGuestMigrateTask) OnMigrateCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guest.SetStatus(self.UserCred, api.VM_MIGRATE_FAILED, "") db.OpsLog.LogEvent(guest, db.ACT_MIGRATE_FAIL, data, self.UserCred) logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_MIGRATE, data, self.UserCred, false) - self.SetStageFailed(ctx, api.VM_MIGRATE_FAILED) + self.SetStageFailed(ctx, data) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_MIGRATE_FAILED, data.String()) } @@ -557,13 +557,13 @@ func (self *ManagedGuestLiveMigrateTask) OnGuestSyncStatus(ctx context.Context, } func (self *ManagedGuestLiveMigrateTask) OnGuestSyncStatusFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, "Guest SyncStatus Failed") + self.SetStageFailed(ctx, data) } func (self *ManagedGuestLiveMigrateTask) OnMigrateCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guest.SetStatus(self.UserCred, api.VM_MIGRATE_FAILED, "") db.OpsLog.LogEvent(guest, db.ACT_MIGRATE_FAIL, data, self.UserCred) logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_MIGRATE, data, self.UserCred, false) - self.SetStageFailed(ctx, db.ACT_MIGRATE_FAIL) + self.SetStageFailed(ctx, data) notifyclient.NotifySystemError(guest.Id, guest.Name, api.VM_MIGRATE_FAILED, data.String()) } diff --git a/pkg/compute/tasks/guest_publicip_to_eip_task.go b/pkg/compute/tasks/guest_publicip_to_eip_task.go index d06bf0f5fb..d3ac535f04 100644 --- a/pkg/compute/tasks/guest_publicip_to_eip_task.go +++ b/pkg/compute/tasks/guest_publicip_to_eip_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" @@ -41,11 +40,10 @@ func (self *GuestPublicipToEipTask) OnInit(ctx context.Context, obj db.IStandalo self.SetStage("OnEipConvertComplete", nil) err := guest.GetDriver().RequestConvertPublicipToEip(ctx, self.GetUserCred(), guest, self) if err != nil { - msg := fmt.Sprintf("RequestConvertPublicipToEip failed %s", err) - db.OpsLog.LogEvent(guest, db.ACT_EIP_CONVERT_FAIL, msg, self.UserCred) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_EIP_CONVERT, msg, self.UserCred, false) - guest.SetStatus(self.GetUserCred(), api.VM_EIP_CONVERT_FAILED, msg) - self.SetStageFailed(ctx, msg) + db.OpsLog.LogEvent(guest, db.ACT_EIP_CONVERT_FAIL, err, self.UserCred) + logclient.AddActionLogWithStartable(self, guest, logclient.ACT_EIP_CONVERT, err, self.UserCred, false) + guest.SetStatus(self.GetUserCred(), api.VM_EIP_CONVERT_FAILED, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) return } } @@ -59,7 +57,7 @@ func (self *GuestPublicipToEipTask) OnEipConvertComplete(ctx context.Context, gu func (self *GuestPublicipToEipTask) OnEipConvertCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { logclient.AddActionLogWithStartable(self, guest, logclient.ACT_EIP_CONVERT, data, self.UserCred, false) guest.SetStatus(self.UserCred, api.VM_EIP_CONVERT_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestPublicipToEipTask) OnGuestSyncstatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -72,7 +70,7 @@ func (self *GuestPublicipToEipTask) OnGuestSyncstatusComplete(ctx context.Contex } func (self *GuestPublicipToEipTask) OnGuestSyncstatusCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestPublicipToEipTask) OnGuestStartSucc(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -80,5 +78,5 @@ func (self *GuestPublicipToEipTask) OnGuestStartSucc(ctx context.Context, guest } func (self *GuestPublicipToEipTask) OnGuestStartSuccFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/guest_rebuild_root_task.go b/pkg/compute/tasks/guest_rebuild_root_task.go index 6f49c7ade8..3d27733ef4 100644 --- a/pkg/compute/tasks/guest_rebuild_root_task.go +++ b/pkg/compute/tasks/guest_rebuild_root_task.go @@ -55,9 +55,9 @@ func (self *GuestRebuildRootTask) OnStopServerComplete(ctx context.Context, gues self.StartRebuildRootDisk(ctx, guest) } -func (self *GuestRebuildRootTask) markFailed(ctx context.Context, guest *models.SGuest, reason string) { +func (self *GuestRebuildRootTask) markFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_REBUILD, reason, self.UserCred, false) - guest.SetStatus(self.GetUserCred(), api.VM_REBUILD_ROOT_FAIL, reason) + guest.SetStatus(self.GetUserCred(), api.VM_REBUILD_ROOT_FAIL, reason.String()) self.SGuestBaseTask.SetStageFailed(ctx, reason) gds := guest.CategorizeDisks() imageId, _ := self.Params.GetString("origin_image_id") @@ -82,7 +82,7 @@ func (self *GuestRebuildRootTask) StartRebuildRootDisk(ctx context.Context, gues return nil }) if err != nil { - self.markFailed(ctx, guest, err.Error()) + self.markFailed(ctx, guest, jsonutils.NewString(err.Error())) return } else { db.OpsLog.LogEvent(gds.Root, db.ACT_UPDATE_STATUS, @@ -152,17 +152,17 @@ func (self *GuestRebuildRootTask) OnRebuildAllDisksComplete(ctx context.Context, imgId, _ := self.Params.GetString("image_id") imginfo, err := models.CachedimageManager.GetImageById(ctx, self.UserCred, imgId, false) if err != nil { - self.markFailed(ctx, guest, err.Error()) + self.markFailed(ctx, guest, jsonutils.NewString(err.Error())) return } osprof, err := osprofile.GetOSProfileFromImageProperties(imginfo.Properties, guest.Hypervisor) if err != nil { - self.markFailed(ctx, guest, err.Error()) + self.markFailed(ctx, guest, jsonutils.NewString(err.Error())) return } err = guest.SetMetadata(ctx, "__os_profile__", osprof, self.UserCred) if err != nil { - self.markFailed(ctx, guest, err.Error()) + self.markFailed(ctx, guest, jsonutils.NewString(err.Error())) return } if guest.OsType != osprof.OSType { @@ -171,7 +171,7 @@ func (self *GuestRebuildRootTask) OnRebuildAllDisksComplete(ctx context.Context, return nil }) if err != nil { - self.markFailed(ctx, guest, err.Error()) + self.markFailed(ctx, guest, jsonutils.NewString(err.Error())) return } } @@ -189,7 +189,7 @@ func (self *GuestRebuildRootTask) OnRebuildAllDisksComplete(ctx context.Context, func (self *GuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data, self.UserCred) guest.SetStatus(self.UserCred, api.VM_REBUILD_ROOT_FAIL, "OnRebuildRootDiskCompleteFailed") - self.markFailed(ctx, guest, data.String()) + self.markFailed(ctx, guest, data) } func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -232,7 +232,7 @@ func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Conte } func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *KVMGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -242,7 +242,7 @@ func (self *KVMGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Context, } func (self *KVMGuestRebuildRootTask) OnGuestDeployCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } type ManagedGuestRebuildRootTask struct { @@ -267,7 +267,7 @@ func (self *ManagedGuestRebuildRootTask) OnHostCacheImageComplete(ctx context.Co func (self *ManagedGuestRebuildRootTask) OnHostCacheImageCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { // guest := obj.(*models.SGuest) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) // logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_REBUILD, data, self.UserCred, false) } @@ -276,5 +276,5 @@ func (self *ManagedGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Conte } func (self *ManagedGuestRebuildRootTask) OnGuestDeployCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/guest_renew_task.go b/pkg/compute/tasks/guest_renew_task.go index 4fd3b1d07b..e792be8332 100644 --- a/pkg/compute/tasks/guest_renew_task.go +++ b/pkg/compute/tasks/guest_renew_task.go @@ -48,10 +48,10 @@ func (self *GuestRenewTask) OnInit(ctx context.Context, obj db.IStandaloneModel, if err != nil { msg := fmt.Sprintf("RequestRenewInstance failed %s", err) log.Errorf(msg) - db.OpsLog.LogEvent(guest, db.ACT_REW_FAIL, msg, self.UserCred) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_RENEW, msg, self.UserCred, false) + db.OpsLog.LogEvent(guest, db.ACT_REW_FAIL, err, self.UserCred) + logclient.AddActionLogWithStartable(self, guest, logclient.ACT_RENEW, err, self.UserCred, false) guest.SetStatus(self.GetUserCred(), api.VM_RENEW_FAILED, msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) return } @@ -59,7 +59,7 @@ func (self *GuestRenewTask) OnInit(ctx context.Context, obj db.IStandaloneModel, if err != nil { msg := fmt.Sprintf("SaveRenewInfo fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } @@ -83,7 +83,7 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta if err != nil { msg := fmt.Sprintf("host.GetIHost fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } @@ -91,7 +91,7 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta if err != nil { msg := fmt.Sprintf("ihost.GetIVMById fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } @@ -101,7 +101,7 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta if err != nil { msg := fmt.Sprintf("iVM.Renew fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } @@ -109,7 +109,7 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta if err != nil { msg := fmt.Sprintf("refresh after renew fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } @@ -121,7 +121,7 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta if err != nil { msg := fmt.Sprintf("SaveRenewInfo fail %s", err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } diff --git a/pkg/compute/tasks/guest_reset_task.go b/pkg/compute/tasks/guest_reset_task.go index 76af11c753..620c14ce93 100644 --- a/pkg/compute/tasks/guest_reset_task.go +++ b/pkg/compute/tasks/guest_reset_task.go @@ -41,7 +41,7 @@ func (self *GuestSoftResetTask) OnInit(ctx context.Context, obj db.IStandaloneMo if err == nil { self.SetStageComplete(ctx, nil) } else { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } diff --git a/pkg/compute/tasks/guest_resize_disk_task.go b/pkg/compute/tasks/guest_resize_disk_task.go index a88f261517..46b2ff9637 100644 --- a/pkg/compute/tasks/guest_resize_disk_task.go +++ b/pkg/compute/tasks/guest_resize_disk_task.go @@ -46,14 +46,14 @@ func (task *GuestResizeDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM diskObj, err := models.DiskManager.FetchById(diskId) if err != nil { - task.OnTaskFailed(ctx, guest, err.Error()) + task.OnTaskFailed(ctx, guest, jsonutils.NewString(err.Error())) return } pendingUsage := models.SQuota{} err = task.GetPendingUsage(&pendingUsage, 0) if err != nil { - task.OnTaskFailed(ctx, guest, err.Error()) + task.OnTaskFailed(ctx, guest, jsonutils.NewString(err.Error())) return } @@ -62,9 +62,9 @@ func (task *GuestResizeDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM diskObj.(*models.SDisk).StartDiskResizeTask(ctx, task.UserCred, sizeMb, task.GetId(), &pendingUsage) } -func (task *GuestResizeDiskTask) OnTaskFailed(ctx context.Context, guest *models.SGuest, reason string) { +func (task *GuestResizeDiskTask) OnTaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { log.Errorf("GuestResizeDiskTask fail: %s", reason) - guest.SetStatus(task.UserCred, api.VM_RESIZE_DISK_FAILED, reason) + guest.SetStatus(task.UserCred, api.VM_RESIZE_DISK_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_RESIZE_FAIL, reason, task.UserCred) logclient.AddActionLogWithStartable(task, guest, logclient.ACT_RESIZE, reason, task.UserCred, false) task.SetStageFailed(ctx, reason) @@ -84,7 +84,7 @@ func (task *GuestResizeDiskTask) OnDiskResizeComplete(ctx context.Context, obj d func (task *GuestResizeDiskTask) OnDiskResizeCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - task.OnTaskFailed(ctx, guest, data.String()) + task.OnTaskFailed(ctx, guest, data) } func (task *GuestResizeDiskTask) TaskComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -93,5 +93,5 @@ func (task *GuestResizeDiskTask) TaskComplete(ctx context.Context, obj db.IStand } func (task *GuestResizeDiskTask) TaskCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - task.SetStageFailed(ctx, data.String()) + task.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/guest_resume_task.go b/pkg/compute/tasks/guest_resume_task.go index 09dbbb2e80..d8db78791e 100644 --- a/pkg/compute/tasks/guest_resume_task.go +++ b/pkg/compute/tasks/guest_resume_task.go @@ -55,7 +55,7 @@ func (self *GuestResumeTask) OnResumeCompleteFailed(ctx context.Context, obj db. guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, api.VM_SUSPEND, "") db.OpsLog.LogEvent(guest, db.ACT_RESUME_FAIL, err.String(), self.UserCred) - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, err) } func (self *GuestResumeTask) OnResumeGuestFail(guest *models.SGuest, reason string) { diff --git a/pkg/compute/tasks/guest_save_image_task.go b/pkg/compute/tasks/guest_save_image_task.go index c98ba71cfd..5ae0645d19 100644 --- a/pkg/compute/tasks/guest_save_image_task.go +++ b/pkg/compute/tasks/guest_save_image_task.go @@ -49,7 +49,7 @@ func (self *GuestSaveImageTask) OnStopServerComplete(ctx context.Context, guest self.SetStage("OnSaveRootImageComplete", nil) disks := guest.CategorizeDisks() if err := disks.Root.StartDiskSaveTask(ctx, self.GetUserCred(), self.GetParams(), self.GetTaskId()); err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } } @@ -64,8 +64,8 @@ func (self *GuestSaveImageTask) OnSaveRootImageComplete(ctx context.Context, gue func (self *GuestSaveImageTask) OnSaveRootImageCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { log.Errorf("Guest save root image failed: %s", data.PrettyString()) - guest.SetStatus(self.GetUserCred(), api.VM_SAVE_DISK_FAILED, data.PrettyString()) - self.SetStageFailed(ctx, data.PrettyString()) + guest.SetStatus(self.GetUserCred(), api.VM_SAVE_DISK_FAILED, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestSaveImageTask) OnStartServerComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_save_instance_image_task.go b/pkg/compute/tasks/guest_save_instance_image_task.go index 79feb82fdd..e7daaa17f1 100644 --- a/pkg/compute/tasks/guest_save_instance_image_task.go +++ b/pkg/compute/tasks/guest_save_instance_image_task.go @@ -49,13 +49,13 @@ func (self *GuestSaveGuestImageTask) OnInit(ctx context.Context, obj db.IStandal params := jsonutils.DeepCopy(self.Params).(*jsonutils.JSONDict) params.Add(imageIds[index], "image_id") if err := dataDisk.StartDiskSaveTask(ctx, self.UserCred, params, self.GetTaskId()); err != nil { - self.taskFailed(ctx, guest, err.Error()) + self.taskFailed(ctx, guest, jsonutils.NewString(err.Error())) } } self.Params.Add(imageIds[len(imageIds)-1], "image_id") if err := disks.Root.StartDiskSaveTask(ctx, self.UserCred, self.Params, self.GetTaskId()); err != nil { - self.taskFailed(ctx, guest, err.Error()) + self.taskFailed(ctx, guest, jsonutils.NewString(err.Error())) } } @@ -63,7 +63,8 @@ func (self *GuestSaveGuestImageTask) OnSaveRootImageComplete(ctx context.Context subTasks := taskman.SubTaskManager.GetTotalSubtasks(self.Id, "on_save_root_image_complete", taskman.SUBTASK_FAIL) if len(subTasks) > 0 { - self.taskFailed(ctx, guest, "subtask failed") + self.taskFailed(ctx, guest, jsonutils.NewString("subtask failed")) + // ??? return ??? } if restart, _ := self.GetParams().Bool("auto_start"); restart { @@ -77,7 +78,7 @@ func (self *GuestSaveGuestImageTask) OnSaveRootImageComplete(ctx context.Context func (self *GuestSaveGuestImageTask) OnSaveRootImageCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { log.Errorf("Guest save image failed: %s", data.PrettyString()) - self.taskFailed(ctx, guest, "") + self.taskFailed(ctx, guest, data) } func (self *GuestSaveGuestImageTask) OnStartServerComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -93,9 +94,9 @@ func (self *GuestSaveGuestImageTask) taskSuc(ctx context.Context, guest *models. self.SetStageComplete(ctx, nil) } -func (self *GuestSaveGuestImageTask) taskFailed(ctx context.Context, guest *models.SGuest, reason string) { +func (self *GuestSaveGuestImageTask) taskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { - guest.SetStatus(self.UserCred, api.VM_SAVE_DISK_FAILED, reason) + guest.SetStatus(self.UserCred, api.VM_SAVE_DISK_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_GUEST_SAVE_GUEST_IMAGE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_IMAGE_SAVE, reason, self.UserCred, false) diff --git a/pkg/compute/tasks/guest_save_template_task.go b/pkg/compute/tasks/guest_save_template_task.go index da9235a6a8..8c5e4e2fe1 100644 --- a/pkg/compute/tasks/guest_save_template_task.go +++ b/pkg/compute/tasks/guest_save_template_task.go @@ -38,8 +38,8 @@ func init() { taskman.RegisterTask(GuestSaveTemplateTask{}) } -func (self *GuestSaveTemplateTask) taskFailed(ctx context.Context, g *models.SGuest, reason string) { - g.SetStatus(self.UserCred, api.VM_TEMPLATE_SAVE_FAILED, reason) +func (self *GuestSaveTemplateTask) taskFailed(ctx context.Context, g *models.SGuest, reason jsonutils.JSONObject) { + g.SetStatus(self.UserCred, api.VM_TEMPLATE_SAVE_FAILED, reason.String()) logclient.AddActionLogWithStartable(self, g, logclient.ACT_SAVE_TO_TEMPLATE, reason, self.UserCred, false) self.SetStageFailed(ctx, reason) } @@ -66,7 +66,7 @@ func (self *GuestSaveTemplateTask) OnInit(ctx context.Context, obj db.IStandalon session := auth.GetSession(ctx, self.UserCred, "", "") _, err := modules.GuestTemplate.Create(session, dict) if err != nil { - self.taskFailed(ctx, g, err.Error()) + self.taskFailed(ctx, g, jsonutils.NewString(err.Error())) return } logclient.AddActionLogWithStartable(self, g, logclient.ACT_SAVE_TO_TEMPLATE, "", self.UserCred, true) diff --git a/pkg/compute/tasks/guest_set_auto_renew_task.go b/pkg/compute/tasks/guest_set_auto_renew_task.go index 1fa66d6189..683c1e0dad 100644 --- a/pkg/compute/tasks/guest_set_auto_renew_task.go +++ b/pkg/compute/tasks/guest_set_auto_renew_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" @@ -42,11 +41,11 @@ func (self *GuestSetAutoRenewTask) OnInit(ctx context.Context, obj db.IStandalon autoRenew, _ := self.GetParams().Bool("auto_renew") err := guest.GetDriver().RequestSetAutoRenewInstance(ctx, self.UserCred, guest, autoRenew, self) if err != nil { - msg := fmt.Sprintf("RequestSetAutoRenewInstance failed %s", err) - db.OpsLog.LogEvent(guest, db.ACT_SET_AUTO_RENEW_FAIL, msg, self.UserCred) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_SET_AUTO_RENEW, msg, self.UserCred, false) - guest.SetStatus(self.GetUserCred(), api.VM_SET_AUTO_RENEW_FAILED, msg) - self.SetStageFailed(ctx, msg) + // msg := fmt.Sprintf("RequestSetAutoRenewInstance failed %s", err) + db.OpsLog.LogEvent(guest, db.ACT_SET_AUTO_RENEW_FAIL, err, self.UserCred) + logclient.AddActionLogWithStartable(self, guest, logclient.ACT_SET_AUTO_RENEW, err, self.UserCred, false) + guest.SetStatus(self.GetUserCred(), api.VM_SET_AUTO_RENEW_FAILED, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) return } } @@ -60,7 +59,7 @@ func (self *GuestSetAutoRenewTask) OnSetAutoRenewComplete(ctx context.Context, g func (self *GuestSetAutoRenewTask) OnSetAutoRenewCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { logclient.AddActionLogWithStartable(self, guest, logclient.ACT_SET_AUTO_RENEW, data, self.UserCred, false) guest.SetStatus(self.GetUserCred(), api.VM_SET_AUTO_RENEW_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestSetAutoRenewTask) OnGuestSyncstatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -68,5 +67,5 @@ func (self *GuestSetAutoRenewTask) OnGuestSyncstatusComplete(ctx context.Context } func (self *GuestSetAutoRenewTask) OnGuestSyncstatusCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index 51ceda7a2a..8836aedc16 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" @@ -81,7 +80,7 @@ func (self *GuestStartTask) OnStartCompleteFailed(ctx context.Context, obj db.IS guest.SetStatus(self.UserCred, api.VM_START_FAILED, err.String()) db.OpsLog.LogEvent(guest, db.ACT_START_FAIL, err, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_START, err, self.UserCred, false) - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, err) } func (self *GuestStartTask) taskComplete(ctx context.Context, guest *models.SGuest) { @@ -101,7 +100,7 @@ func (self *GuestSchedStartTask) OnInit(ctx context.Context, obj db.IStandaloneM func (self *GuestSchedStartTask) StartScheduler(ctx context.Context, guest *models.SGuest) { host := guest.GetHost() if guestsMem := host.GetRunningGuestMemorySize(); guestsMem < 0 { - self.TaskFailed(ctx, guest, "Guest Start Failed: Can't Get Host Guests Memory") + self.TaskFailed(ctx, guest, jsonutils.NewString("Guest Start Failed: Can't Get Host Guests Memory")) } else { if float32(guestsMem+guest.VmemSize) > host.GetVirtualMemorySize() { self.ScheduleFailed(ctx, guest) @@ -122,7 +121,7 @@ func (self *GuestSchedStartTask) OnGuestMigrate(ctx context.Context, guest *mode } func (self *GuestSchedStartTask) OnGuestMigrateFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.TaskFailed(ctx, guest, fmt.Sprintf("OnGuestMigrateFailed %s", data)) + self.TaskFailed(ctx, guest, data) } func (self *GuestSchedStartTask) ScheduleSucc(ctx context.Context, guest *models.SGuest) { @@ -130,9 +129,9 @@ func (self *GuestSchedStartTask) ScheduleSucc(ctx context.Context, guest *models guest.GuestNonSchedStartTask(ctx, self.UserCred, nil, "") } -func (self *GuestSchedStartTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason string) { +func (self *GuestSchedStartTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) { self.SetStageFailed(ctx, reason) - guest.SetStatus(self.UserCred, api.VM_START_FAILED, reason) + guest.SetStatus(self.UserCred, api.VM_START_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_START_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable( self, guest, logclient.ACT_VM_START, reason, self.UserCred, false) diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index 0ee7ffef1a..9c12c1549c 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -77,6 +77,6 @@ func (self *GuestStopTask) OnGuestStopTaskCompleteFailed(ctx context.Context, gu guest.SetStatus(self.UserCred, api.VM_STOP_FAILED, reason.String()) } db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, reason.String(), self.UserCred) - self.SetStageFailed(ctx, reason.String()) + self.SetStageFailed(ctx, reason) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_STOP, reason.String(), self.UserCred, false) } diff --git a/pkg/compute/tasks/guest_suspend_task.go b/pkg/compute/tasks/guest_suspend_task.go index 38a9ba2554..ab9b4d4b12 100644 --- a/pkg/compute/tasks/guest_suspend_task.go +++ b/pkg/compute/tasks/guest_suspend_task.go @@ -55,7 +55,7 @@ func (self *GuestSuspendTask) OnSuspendCompleteFailed(ctx context.Context, obj d guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, api.VM_RUNNING, "") db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, err.String(), self.UserCred) - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, err) } func (self *GuestSuspendTask) OnSuspendGuestFail(guest *models.SGuest, reason string) { diff --git a/pkg/compute/tasks/guest_sync_task.go b/pkg/compute/tasks/guest_sync_task.go index 12ae75eb07..66eb632d8f 100644 --- a/pkg/compute/tasks/guest_sync_task.go +++ b/pkg/compute/tasks/guest_sync_task.go @@ -39,12 +39,12 @@ func (self *GuestSyncConfTask) OnInit(ctx context.Context, obj db.IStandaloneMod guest := obj.(*models.SGuest) db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF, nil, self.UserCred) if host := guest.GetHost(); host == nil { - self.SetStageFailed(ctx, "No host for sync") + self.SetStageFailed(ctx, jsonutils.NewString("No host for sync")) return } else { self.SetStage("on_sync_complete", nil) if err := guest.GetDriver().RequestSyncConfigOnHost(ctx, guest, host, self); err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) log.Errorf("SyncConfTask faled %v", err) } } @@ -74,9 +74,9 @@ func (self *GuestSyncConfTask) OnDiskSyncComplete(ctx context.Context, guest *mo func (self *GuestSyncConfTask) OnDiskSyncCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF_FAIL, data.String(), self.UserCred) + db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF_FAIL, data, self.UserCred) logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_SYNC_CONF, data, self.UserCred, false) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *GuestSyncConfTask) OnSyncCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -85,8 +85,8 @@ func (self *GuestSyncConfTask) OnSyncCompleteFailed(ctx context.Context, obj db. guest.SetStatus(self.GetUserCred(), api.VM_SYNC_FAIL, data.String()) } logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_SYNC_CONF, data, self.UserCred, false) - db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF_FAIL, data.String(), self.UserCred) - self.SetStageFailed(ctx, data.String()) + db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF_FAIL, data, self.UserCred) + self.SetStageFailed(ctx, data) } func (self *GuestSyncConfTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -94,5 +94,5 @@ func (self *GuestSyncConfTask) OnSyncStatusComplete(ctx context.Context, guest * } func (self *GuestSyncConfTask) OnSyncStatusCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/guest_undeploy_task.go b/pkg/compute/tasks/guest_undeploy_task.go index ea954f0fca..b5534a3d8c 100644 --- a/pkg/compute/tasks/guest_undeploy_task.go +++ b/pkg/compute/tasks/guest_undeploy_task.go @@ -82,5 +82,5 @@ func (self *GuestUndeployTask) OnStartDeleteGuestFail(ctx context.Context, err e return } } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } diff --git a/pkg/compute/tasks/ha_disk_create_task.go b/pkg/compute/tasks/ha_disk_create_task.go index 516af3e718..468188e962 100644 --- a/pkg/compute/tasks/ha_disk_create_task.go +++ b/pkg/compute/tasks/ha_disk_create_task.go @@ -73,7 +73,7 @@ func (self *HADiskCreateTask) OnDiskReady( func (self *HADiskCreateTask) OnBackupAllocateFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { disk.SetStatus(self.UserCred, api.DISK_BACKUP_ALLOC_FAILED, data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } func (self *HADiskCreateTask) OnSlaveDiskReady( diff --git a/pkg/compute/tasks/host_guests_migrate_task.go b/pkg/compute/tasks/host_guests_migrate_task.go index d28827b27e..55b6c2a721 100644 --- a/pkg/compute/tasks/host_guests_migrate_task.go +++ b/pkg/compute/tasks/host_guests_migrate_task.go @@ -38,7 +38,7 @@ func (self *HostGuestsMigrateTask) OnInit(ctx context.Context, obj db.IStandalon guests := make([]*api.GuestBatchMigrateParams, 0) err := self.Params.Unmarshal(&guests, "guests") if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } preferHostId, _ := self.Params.GetString("prefer_host_id") @@ -73,7 +73,7 @@ func (self *HostGuestsMigrateTask) OnInit(ctx context.Context, obj db.IStandalon } if !guestMigrating { if jsonutils.QueryBoolean(self.Params, "some_guest_migrate_failed", false) { - self.SetStageFailed(ctx, "some guest migrate failed") + self.SetStageFailed(ctx, jsonutils.NewString("some guest migrate failed")) } else { self.SetStageComplete(ctx, nil) } diff --git a/pkg/compute/tasks/host_import_libvirt_servers_task.go b/pkg/compute/tasks/host_import_libvirt_servers_task.go index 80efe36f58..302a238a39 100644 --- a/pkg/compute/tasks/host_import_libvirt_servers_task.go +++ b/pkg/compute/tasks/host_import_libvirt_servers_task.go @@ -53,7 +53,7 @@ func (self *HostImportLibvirtServersTask) RequestHostPrepareImport( header := self.GetTaskRequestHeader() if _, err := host.Request(ctx, self.UserCred, "POST", "/servers/prepare-import-from-libvirt", header, self.Params); err != nil { - self.TaskFailed(ctx, host, err.Error()) + self.TaskFailed(ctx, host, jsonutils.Marshal(err)) } } @@ -70,13 +70,13 @@ func (self *HostImportLibvirtServersTask) OnRequestHostPrepareImport( serversMatched, _ := body.Get("servers_matched") if serversMatched == nil { - self.TaskFailed(ctx, host, "No matched server found") + self.TaskFailed(ctx, host, jsonutils.NewString("No matched server found")) return } guestsDesc := []compute.SImportGuestDesc{} if err := serversMatched.Unmarshal(&guestsDesc); err != nil { - self.TaskFailed(ctx, host, fmt.Sprintf("Unmarshal matched servers failed: %s", err)) + self.TaskFailed(ctx, host, jsonutils.NewString(fmt.Sprintf("Unmarshal matched servers failed: %s", err))) return } self.StartImportServers(ctx, host, guestsDesc) @@ -183,7 +183,7 @@ func (self *HostImportLibvirtServersTask) CreateImportedLibvirtGuestOnHost( } func (self *HostImportLibvirtServersTask) TaskFailed( - ctx context.Context, host *models.SHost, reason string, + ctx context.Context, host *models.SHost, reason jsonutils.JSONObject, ) { self.SetStageFailed(ctx, reason) db.OpsLog.LogEvent(host, db.ACT_HOST_IMPORT_LIBVIRT_SERVERS_FAIL, reason, self.UserCred) @@ -201,13 +201,13 @@ func (self *CreateImportedLibvirtGuestTask) OnInit( guest := obj.(*models.SGuest) disksPath, err := body.GetMap("disks_path") if err != nil { - self.TaskFailed(ctx, guest, "guest create on host no disk access path feedback") + self.TaskFailed(ctx, guest, jsonutils.NewString("guest create on host no disk access path feedback")) } guestDisks := guest.GetDisks() for i := 0; i < len(guestDisks); i++ { disk := guestDisks[i].GetDisk() if accessPath, ok := disksPath[disk.Id]; !ok { - self.TaskFailed(ctx, guest, fmt.Sprintf("Guest missing disk %s access path", disk.Id)) + self.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Guest missing disk %s access path", disk.Id))) return } else { _, err := db.Update(disk, func() error { @@ -218,7 +218,7 @@ func (self *CreateImportedLibvirtGuestTask) OnInit( return nil }) if err != nil { - self.TaskFailed(ctx, guest, fmt.Sprintf("Guest set disk access path error %s", err)) + self.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Guest set disk access path error %s", err))) return } } @@ -240,19 +240,19 @@ func (self *CreateImportedLibvirtGuestTask) OnGuestSync( func (self *CreateImportedLibvirtGuestTask) OnGuestSyncFailed( ctx context.Context, guest *models.SGuest, body jsonutils.JSONObject, ) { - self.TaskFailed(ctx, guest, body.String()) + self.TaskFailed(ctx, guest, body) } func (self *CreateImportedLibvirtGuestTask) OnInitFailed( ctx context.Context, guest *models.SGuest, body jsonutils.JSONObject, ) { - self.TaskFailed(ctx, guest, body.String()) + self.TaskFailed(ctx, guest, body) } func (self *CreateImportedLibvirtGuestTask) TaskFailed( - ctx context.Context, guest *models.SGuest, reason string, + ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject, ) { - guest.SetStatus(self.UserCred, compute.VM_IMPORT_FAILED, reason) + guest.SetStatus(self.UserCred, compute.VM_IMPORT_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_GUEST_CREATE_FROM_IMPORT_FAIL, reason, self.UserCred) logclient.AddActionLogWithContext(ctx, guest, logclient.ACT_GUEST_CREATE_FROM_IMPORT, reason, self.UserCred, false) diff --git a/pkg/compute/tasks/host_maintenance_task.go b/pkg/compute/tasks/host_maintenance_task.go index 3c182638f1..3c5de73fbe 100644 --- a/pkg/compute/tasks/host_maintenance_task.go +++ b/pkg/compute/tasks/host_maintenance_task.go @@ -46,7 +46,7 @@ func (self *HostMaintainTask) OnInit(ctx context.Context, obj db.IStandaloneMode self.SetStage("OnGuestsMigrate", nil) err := models.GuestManager.StartHostGuestsMigrateTask(ctx, self.UserCred, host, self.Params, self.Id) if err != nil { - self.TaskFailed(ctx, host, err.Error()) + self.TaskFailed(ctx, host, jsonutils.NewString(err.Error())) return } } @@ -59,10 +59,10 @@ func (self *HostMaintainTask) OnGuestsMigrate(ctx context.Context, host *models. } func (self *HostMaintainTask) OnGuestsMigrateFailed(ctx context.Context, host *models.SHost, data jsonutils.JSONObject) { - self.TaskFailed(ctx, host, data.String()) + self.TaskFailed(ctx, host, data) } -func (self *HostMaintainTask) TaskFailed(ctx context.Context, host *models.SHost, reason string) { +func (self *HostMaintainTask) TaskFailed(ctx context.Context, host *models.SHost, reason jsonutils.JSONObject) { host.PerformDisable(ctx, self.UserCred, nil, apis.PerformDisableInput{}) host.SetStatus(self.UserCred, api.BAREMETAL_MAINTAIN_FAIL, "On host maintain task complete failed") logclient.AddSimpleActionLog(host, logclient.ACT_HOST_MAINTAINING, reason, self.UserCred, false) diff --git a/pkg/compute/tasks/host_storage_attach_task.go b/pkg/compute/tasks/host_storage_attach_task.go index 7b287540a8..4b582f3008 100644 --- a/pkg/compute/tasks/host_storage_attach_task.go +++ b/pkg/compute/tasks/host_storage_attach_task.go @@ -34,7 +34,7 @@ func init() { taskman.RegisterTask(HostStorageAttachTask{}) } -func (self *HostStorageAttachTask) taskFail(ctx context.Context, host *models.SHost, reason string) { +func (self *HostStorageAttachTask) taskFail(ctx context.Context, host *models.SHost, reason jsonutils.JSONObject) { if hoststorage := self.getHoststorage(host); hoststorage != nil { storage := hoststorage.GetStorage() hoststorage.Detach(ctx, self.GetUserCred()) @@ -60,14 +60,14 @@ func (self *HostStorageAttachTask) OnInit(ctx context.Context, obj db.IStandalon host := obj.(*models.SHost) hoststorage := self.getHoststorage(host) if hoststorage == nil { - self.taskFail(ctx, host, "failed to find hoststorage") + self.taskFail(ctx, host, jsonutils.NewString("failed to find hoststorage")) return } storage := hoststorage.GetStorage() self.SetStage("OnAttachStorageComplete", nil) err := host.GetHostDriver().RequestAttachStorage(ctx, hoststorage, host, storage, self) if err != nil { - self.taskFail(ctx, host, err.Error()) + self.taskFail(ctx, host, jsonutils.Marshal(err)) } } @@ -83,5 +83,5 @@ func (self *HostStorageAttachTask) OnAttachStorageComplete(ctx context.Context, } func (self *HostStorageAttachTask) OnAttachStorageCompleteFailed(ctx context.Context, host *models.SHost, reason jsonutils.JSONObject) { - self.taskFail(ctx, host, reason.String()) + self.taskFail(ctx, host, reason) } diff --git a/pkg/compute/tasks/host_storage_detach_task.go b/pkg/compute/tasks/host_storage_detach_task.go index 937a92d0a7..b53bb17d59 100644 --- a/pkg/compute/tasks/host_storage_detach_task.go +++ b/pkg/compute/tasks/host_storage_detach_task.go @@ -34,15 +34,15 @@ func init() { taskman.RegisterTask(HostStorageDetachTask{}) } -func (self *HostStorageDetachTask) taskFail(ctx context.Context, host *models.SHost, reason string) { +func (self *HostStorageDetachTask) taskFail(ctx context.Context, host *models.SHost, reason jsonutils.JSONObject) { var hoststorage = new(models.SHoststorage) storageId, _ := self.GetParams().GetString("storage_id") err := models.HoststorageManager.Query().Equals("host_id", host.Id).Equals("storage_id", storageId).First(hoststorage) if err == nil { storage := hoststorage.GetStorage() - note := fmt.Sprintf("detach host %s failed: %s", host.Name, reason) - db.OpsLog.LogEvent(storage, db.ACT_DETACH_FAIL, note, self.GetUserCred()) - logclient.AddActionLogWithContext(ctx, storage, logclient.ACT_DETACH_HOST, note, self.GetUserCred(), false) + // note := fmt.Sprintf("detach host %s failed: %s", host.Name, reason) + db.OpsLog.LogEvent(storage, db.ACT_DETACH_FAIL, reason, self.GetUserCred()) + logclient.AddActionLogWithContext(ctx, storage, logclient.ACT_DETACH_HOST, reason, self.GetUserCred(), false) } self.SetStageFailed(ctx, reason) } @@ -52,14 +52,14 @@ func (self *HostStorageDetachTask) OnInit(ctx context.Context, obj db.IStandalon storageId, _ := self.GetParams().GetString("storage_id") _storage, err := models.StorageManager.FetchById(storageId) if err != nil { - self.taskFail(ctx, host, err.Error()) + self.taskFail(ctx, host, jsonutils.NewString(err.Error())) return } storage := _storage.(*models.SStorage) self.SetStage("OnDetachStorageComplete", nil) err = host.GetHostDriver().RequestDetachStorage(ctx, host, storage, self) if err != nil { - self.taskFail(ctx, host, err.Error()) + self.taskFail(ctx, host, jsonutils.Marshal(err)) } } @@ -75,5 +75,5 @@ func (self *HostStorageDetachTask) OnDetachStorageComplete(ctx context.Context, } func (self *HostStorageDetachTask) OnDetachStorageCompleteFailed(ctx context.Context, host *models.SHost, reason jsonutils.JSONObject) { - self.taskFail(ctx, host, reason.String()) + self.taskFail(ctx, host, reason) } diff --git a/pkg/compute/tasks/instance_snapshot_and_clone_task.go b/pkg/compute/tasks/instance_snapshot_and_clone_task.go index 4f0ca1afb5..482c51bfae 100644 --- a/pkg/compute/tasks/instance_snapshot_and_clone_task.go +++ b/pkg/compute/tasks/instance_snapshot_and_clone_task.go @@ -38,9 +38,9 @@ func init() { } func (self *InstanceSnapshotAndCloneTask) taskFailed( - ctx context.Context, isp *models.SInstanceSnapshot, reason string) { + ctx context.Context, isp *models.SInstanceSnapshot, reason jsonutils.JSONObject) { guest := models.GuestManager.FetchGuestById(isp.GuestId) - guest.SetStatus(self.UserCred, compute.VM_SNAPSHOT_AND_CLONE_FAILED, reason) + guest.SetStatus(self.UserCred, compute.VM_SNAPSHOT_AND_CLONE_FAILED, reason.String()) logclient.AddActionLogWithContext( ctx, guest, logclient.ACT_VM_SNAPSHOT_AND_CLONE, reason, self.UserCred, false, ) @@ -59,7 +59,7 @@ func (self *InstanceSnapshotAndCloneTask) taskComplete( self.SetStageComplete(ctx, nil) } -func (self *InstanceSnapshotAndCloneTask) SetStageFailed(ctx context.Context, reason string) { +func (self *InstanceSnapshotAndCloneTask) SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) { self.finalReleasePendingUsage(ctx, false) self.STask.SetStageFailed(ctx, reason) } @@ -85,7 +85,7 @@ func (self *InstanceSnapshotAndCloneTask) OnInit( self.SetStage("OnCreateInstanceSnapshot", nil) err := isp.StartCreateInstanceSnapshotTask(ctx, self.UserCred, nil, self.Id) if err != nil { - self.taskFailed(ctx, isp, err.Error()) + self.taskFailed(ctx, isp, jsonutils.NewString(err.Error())) return } } @@ -95,7 +95,7 @@ func (self *InstanceSnapshotAndCloneTask) OnCreateInstanceSnapshot( // start create server params, err := self.Params.Get("guest_params") if err != nil { - self.taskFailed(ctx, isp, "Failed get new guest params") + self.taskFailed(ctx, isp, jsonutils.NewString("Failed get new guest params")) return } count, _ := params.Int("count") @@ -104,7 +104,7 @@ func (self *InstanceSnapshotAndCloneTask) OnCreateInstanceSnapshot( } err = self.doGuestCreate(ctx, isp, params, int(count)) if err != nil { - self.taskFailed(ctx, isp, err.Error()) + self.taskFailed(ctx, isp, jsonutils.NewString(err.Error())) return } self.taskComplete(ctx, isp, nil) @@ -136,5 +136,5 @@ func (self *InstanceSnapshotAndCloneTask) doGuestCreate( func (self *InstanceSnapshotAndCloneTask) OnCreateInstanceSnapshotFailed( ctx context.Context, isp *models.SInstanceSnapshot, data jsonutils.JSONObject) { - self.taskFailed(ctx, isp, data.String()) + self.taskFailed(ctx, isp, data) } diff --git a/pkg/compute/tasks/instance_snapshot_create_task.go b/pkg/compute/tasks/instance_snapshot_create_task.go index 7a0b17143e..f6d2fddd71 100644 --- a/pkg/compute/tasks/instance_snapshot_create_task.go +++ b/pkg/compute/tasks/instance_snapshot_create_task.go @@ -40,7 +40,7 @@ func init() { taskman.RegisterTask(InstanceSnapshotCreateTask{}) } -func (self *InstanceSnapshotCreateTask) SetStageFailed(ctx context.Context, reason string) { +func (self *InstanceSnapshotCreateTask) SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) { self.finalReleasePendingUsage(ctx) self.STask.SetStageFailed(ctx, reason) } @@ -54,17 +54,17 @@ func (self *InstanceSnapshotCreateTask) finalReleasePendingUsage(ctx context.Con } func (self *InstanceSnapshotCreateTask) taskFail( - ctx context.Context, isp *models.SInstanceSnapshot, guest *models.SGuest, reason string) { + ctx context.Context, isp *models.SInstanceSnapshot, guest *models.SGuest, reason jsonutils.JSONObject) { if guest == nil { guest = models.GuestManager.FetchGuestById(isp.GuestId) } - isp.SetStatus(self.UserCred, compute.INSTANCE_SNAPSHOT_FAILED, reason) - guest.SetStatus(self.UserCred, compute.VM_INSTANCE_SNAPSHOT_FAILED, reason) + isp.SetStatus(self.UserCred, compute.INSTANCE_SNAPSHOT_FAILED, reason.String()) + guest.SetStatus(self.UserCred, compute.VM_INSTANCE_SNAPSHOT_FAILED, reason.String()) db.OpsLog.LogEvent(isp, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, isp, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(isp.GetId(), isp.Name, compute.INSTANCE_SNAPSHOT_FAILED, reason) + notifyclient.NotifySystemError(isp.GetId(), isp.Name, compute.INSTANCE_SNAPSHOT_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -107,7 +107,7 @@ func (self *InstanceSnapshotCreateTask) GuestDiskCreateSnapshot( snapshotName, err := db.GenerateName(models.SnapshotManager, self.UserCred, fmt.Sprintf("%s-%s", isp.Name, rand.String(8))) if err != nil { - self.taskFail(ctx, isp, guest, fmt.Sprintf("Generate snapshot name %s", err)) + self.taskFail(ctx, isp, guest, jsonutils.NewString(fmt.Sprintf("Generate snapshot name %s", err))) return } @@ -115,13 +115,13 @@ func (self *InstanceSnapshotCreateTask) GuestDiskCreateSnapshot( ctx, self.UserCred, compute.SNAPSHOT_MANUAL, disks[diskIndex].DiskId, guest.Id, "", snapshotName, -1) if err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } err = models.InstanceSnapshotJointManager.CreateJoint(ctx, isp.Id, snapshot.Id, int8(diskIndex)) if err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } @@ -131,7 +131,7 @@ func (self *InstanceSnapshotCreateTask) GuestDiskCreateSnapshot( self.SetStage("OnDiskSnapshot", params) if err := snapshot.StartSnapshotCreateTask(ctx, self.UserCred, nil, self.Id); err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } } @@ -143,7 +143,7 @@ func (self *InstanceSnapshotCreateTask) OnDiskSnapshot( diskIndex, err := self.Params.Int("disk_index") if err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } @@ -152,5 +152,5 @@ func (self *InstanceSnapshotCreateTask) OnDiskSnapshot( func (self *InstanceSnapshotCreateTask) OnDiskSnapshotFailed( ctx context.Context, isp *models.SInstanceSnapshot, data jsonutils.JSONObject) { - self.taskFail(ctx, isp, nil, data.String()) + self.taskFail(ctx, isp, nil, data) } diff --git a/pkg/compute/tasks/instance_snapshot_delete_task.go b/pkg/compute/tasks/instance_snapshot_delete_task.go index 2956e40c8e..782f43e89f 100644 --- a/pkg/compute/tasks/instance_snapshot_delete_task.go +++ b/pkg/compute/tasks/instance_snapshot_delete_task.go @@ -35,7 +35,7 @@ func init() { } func (self *InstanceSnapshotDeleteTask) taskFail( - ctx context.Context, isp *models.SInstanceSnapshot, reason string) { + ctx context.Context, isp *models.SInstanceSnapshot, reason jsonutils.JSONObject) { isp.SetStatus(self.UserCred, compute.INSTANCE_SNAPSHOT_DELETE_FAILED, "on delete failed") db.OpsLog.LogEvent(isp, db.ACT_DELETE_FAIL, reason, self.UserCred) @@ -63,7 +63,7 @@ func (self *InstanceSnapshotDeleteTask) StartSnapshotDelete( snapshots, err := isp.GetSnapshots() if err != nil { - self.taskFail(ctx, isp, err.Error()) + self.taskFail(ctx, isp, jsonutils.NewString(err.Error())) return } if len(snapshots) == 0 { @@ -76,7 +76,7 @@ func (self *InstanceSnapshotDeleteTask) StartSnapshotDelete( self.SetStage("OnSnapshotDelete", params) err = snapshots[0].StartSnapshotDeleteTask(ctx, self.UserCred, false, self.Id) if err != nil { - self.taskFail(ctx, isp, err.Error()) + self.taskFail(ctx, isp, jsonutils.NewString(err.Error())) return } } @@ -89,13 +89,13 @@ func (self *InstanceSnapshotDeleteTask) OnSnapshotDelete( err := models.InstanceSnapshotJointManager.Query(). Equals("instance_snapshot_id", isp.Id).Equals("snapshot_id", snapshotId).First(isjp) if err != nil { - self.taskFail(ctx, isp, err.Error()) + self.taskFail(ctx, isp, jsonutils.NewString(err.Error())) return } isjp.SetModelManager(models.InstanceSnapshotJointManager, isjp) err = isjp.Delete(ctx, self.UserCred) if err != nil { - self.taskFail(ctx, isp, err.Error()) + self.taskFail(ctx, isp, jsonutils.NewString(err.Error())) return } self.StartSnapshotDelete(ctx, isp) @@ -104,5 +104,5 @@ func (self *InstanceSnapshotDeleteTask) OnSnapshotDelete( func (self *InstanceSnapshotDeleteTask) OnSnapshotDeleteFailed( ctx context.Context, isp *models.SInstanceSnapshot, data jsonutils.JSONObject) { - self.taskFail(ctx, isp, data.String()) + self.taskFail(ctx, isp, data) } diff --git a/pkg/compute/tasks/instance_snapshot_reset_task.go b/pkg/compute/tasks/instance_snapshot_reset_task.go index 74415779d5..ff426b3f02 100644 --- a/pkg/compute/tasks/instance_snapshot_reset_task.go +++ b/pkg/compute/tasks/instance_snapshot_reset_task.go @@ -36,16 +36,16 @@ func init() { } func (self *InstanceSnapshotResetTask) taskFail( - ctx context.Context, isp *models.SInstanceSnapshot, guest *models.SGuest, reason string) { + ctx context.Context, isp *models.SInstanceSnapshot, guest *models.SGuest, reason jsonutils.JSONObject) { if guest == nil { guest = models.GuestManager.FetchGuestById(isp.GuestId) } - guest.SetStatus(self.UserCred, compute.VM_SNAPSHOT_RESET_FAILED, reason) + guest.SetStatus(self.UserCred, compute.VM_SNAPSHOT_RESET_FAILED, reason.String()) db.OpsLog.LogEvent(guest, db.ACT_VM_RESET_SNAPSHOT_FAILED, reason, self.UserCred) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_RESET, false, self.UserCred, false) - notifyclient.NotifySystemError(guest.GetId(), isp.Name, compute.VM_SNAPSHOT_RESET_FAILED, reason) + logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_RESET, reason, self.UserCred, false) + notifyclient.NotifySystemError(guest.GetId(), isp.Name, compute.VM_SNAPSHOT_RESET_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -82,7 +82,7 @@ func (self *InstanceSnapshotResetTask) GuestDiskResetTask( isj, err := isp.GetInstanceSnapshotJointAt(diskIndex) if err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } @@ -93,7 +93,7 @@ func (self *InstanceSnapshotResetTask) GuestDiskResetTask( disk := disks[diskIndex].GetDisk() err = disk.StartResetDisk(ctx, self.UserCred, isj.SnapshotId, false, guest, self.Id) if err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } } @@ -105,7 +105,7 @@ func (self *InstanceSnapshotResetTask) OnDiskReset( diskIndex, err := self.Params.Int("disk_index") if err != nil { - self.taskFail(ctx, isp, guest, err.Error()) + self.taskFail(ctx, isp, guest, jsonutils.NewString(err.Error())) return } self.GuestDiskResetTask(ctx, isp, guest, int(diskIndex+1)) @@ -113,5 +113,5 @@ func (self *InstanceSnapshotResetTask) OnDiskReset( func (self *InstanceSnapshotResetTask) OnDiskResetFailed( ctx context.Context, isp *models.SInstanceSnapshot, data jsonutils.JSONObject) { - self.taskFail(ctx, isp, nil, data.String()) + self.taskFail(ctx, isp, nil, data) } diff --git a/pkg/compute/tasks/loadbalancer_acl_create_task.go b/pkg/compute/tasks/loadbalancer_acl_create_task.go index 052506becb..60041fcee9 100644 --- a/pkg/compute/tasks/loadbalancer_acl_create_task.go +++ b/pkg/compute/tasks/loadbalancer_acl_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerAclCreateTask{}) } -func (self *LoadbalancerAclCreateTask) taskFail(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason string) { - lbacl.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerAclCreateTask) taskFail(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason jsonutils.JSONObject) { + lbacl.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lbacl, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbacl, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerAclCreateTask) OnInit(ctx context.Context, obj db.IStand lbacl := obj.(*models.SCachedLoadbalancerAcl) region := lbacl.GetRegion() if region == nil { - self.taskFail(ctx, lbacl, fmt.Sprintf("failed to find region for lbacl %s", lbacl.Name)) + self.taskFail(ctx, lbacl, jsonutils.NewString(fmt.Sprintf("failed to find region for lbacl %s", lbacl.Name))) return } self.SetStage("OnLoadbalancerAclCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerAcl(ctx, self.GetUserCred(), lbacl, self); err != nil { - self.taskFail(ctx, lbacl, err.Error()) + self.taskFail(ctx, lbacl, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerAclCreateTask) OnLoadbalancerAclCreateComplete(ctx conte } func (self *LoadbalancerAclCreateTask) OnLoadbalancerAclCreateCompleteFailed(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbacl, reason.String()) + self.taskFail(ctx, lbacl, reason) } diff --git a/pkg/compute/tasks/loadbalancer_acl_delete_task.go b/pkg/compute/tasks/loadbalancer_acl_delete_task.go index e060e1ff50..37d77ba5ac 100644 --- a/pkg/compute/tasks/loadbalancer_acl_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_acl_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerAclDeleteTask{}) } -func (self *LoadbalancerAclDeleteTask) taskFail(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason string) { - lbacl.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerAclDeleteTask) taskFail(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason jsonutils.JSONObject) { + lbacl.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lbacl, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbacl, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerAclDeleteTask) OnInit(ctx context.Context, obj db.IStand lbacl := obj.(*models.SCachedLoadbalancerAcl) region := lbacl.GetRegion() if region == nil { - self.taskFail(ctx, lbacl, fmt.Sprintf("failed to find region for lbacl %s", lbacl.Name)) + self.taskFail(ctx, lbacl, jsonutils.NewString(fmt.Sprintf("failed to find region for lbacl %s", lbacl.Name))) return } self.SetStage("OnLoadbalancerAclDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancerAcl(ctx, self.GetUserCred(), lbacl, self); err != nil { - self.taskFail(ctx, lbacl, err.Error()) + self.taskFail(ctx, lbacl, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerAclDeleteTask) OnLoadbalancerAclDeleteComplete(ctx conte } func (self *LoadbalancerAclDeleteTask) OnLoadbalancerAclDeleteCompleteFailed(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbacl, reason.String()) + self.taskFail(ctx, lbacl, reason) } diff --git a/pkg/compute/tasks/loadbalancer_acl_sync_task.go b/pkg/compute/tasks/loadbalancer_acl_sync_task.go index bea291aca3..356b026ef1 100644 --- a/pkg/compute/tasks/loadbalancer_acl_sync_task.go +++ b/pkg/compute/tasks/loadbalancer_acl_sync_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerAclSyncTask{}) } -func (self *LoadbalancerAclSyncTask) taskFail(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason string) { - lbacl.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason) +func (self *LoadbalancerAclSyncTask) taskFail(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason jsonutils.JSONObject) { + lbacl.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason.String()) db.OpsLog.LogEvent(lbacl, db.ACT_SYNC_CONF, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbacl, logclient.ACT_SYNC_CONF, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_SYNC_CONF_FAILED, reason) + notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_SYNC_CONF_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerAclSyncTask) OnInit(ctx context.Context, obj db.IStandal lbacl := obj.(*models.SCachedLoadbalancerAcl) region := lbacl.GetRegion() if region == nil { - self.taskFail(ctx, lbacl, fmt.Sprintf("failed to find region for lbacl %s", lbacl.Name)) + self.taskFail(ctx, lbacl, jsonutils.NewString(fmt.Sprintf("failed to find region for lbacl %s", lbacl.Name))) return } self.SetStage("OnLoadbalancerAclSyncComplete", nil) if err := region.GetDriver().RequestSyncLoadbalancerAcl(ctx, self.GetUserCred(), lbacl, self); err != nil { - self.taskFail(ctx, lbacl, err.Error()) + self.taskFail(ctx, lbacl, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerAclSyncTask) OnLoadbalancerAclSyncComplete(ctx context.C } func (self *LoadbalancerAclSyncTask) OnLoadbalancerAclSyncCompleteFailed(ctx context.Context, lbacl *models.SCachedLoadbalancerAcl, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbacl, reason.String()) + self.taskFail(ctx, lbacl, reason) } diff --git a/pkg/compute/tasks/loadbalancer_backend_create_task.go b/pkg/compute/tasks/loadbalancer_backend_create_task.go index ee941a0b40..9a0c5e59eb 100644 --- a/pkg/compute/tasks/loadbalancer_backend_create_task.go +++ b/pkg/compute/tasks/loadbalancer_backend_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerBackendCreateTask{}) } -func (self *LoadbalancerBackendCreateTask) taskFail(ctx context.Context, lbb *models.SLoadbalancerBackend, reason string) { - lbb.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerBackendCreateTask) taskFail(ctx context.Context, lbb *models.SLoadbalancerBackend, reason jsonutils.JSONObject) { + lbb.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lbb, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbb, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbb.Id, lbb.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lbb.Id, lbb.Name, api.LB_CREATE_FAILED, reason.String()) lbbg := lbb.GetLoadbalancerBackendGroup() if lbbg != nil { logclient.AddActionLogWithStartable(self, lbbg, logclient.ACT_LB_ADD_BACKEND, reason, self.UserCred, false) @@ -52,13 +52,13 @@ func (self *LoadbalancerBackendCreateTask) OnInit(ctx context.Context, obj db.IS lbb := obj.(*models.SLoadbalancerBackend) region := lbb.GetRegion() if region == nil { - self.taskFail(ctx, lbb, fmt.Sprintf("failed to find region for lbb %s", lbb.Name)) + self.taskFail(ctx, lbb, jsonutils.NewString(fmt.Sprintf("failed to find region for lbb %s", lbb.Name))) return } self.SetStage("OnLoadbalancerBackendCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerBackend(ctx, self.GetUserCred(), lbb, self); err != nil { - self.taskFail(ctx, lbb, err.Error()) + self.taskFail(ctx, lbb, jsonutils.Marshal(err)) } } @@ -74,5 +74,5 @@ func (self *LoadbalancerBackendCreateTask) OnLoadbalancerBackendCreateComplete(c } func (self *LoadbalancerBackendCreateTask) OnLoadbalancerBackendCreateCompleteFailed(ctx context.Context, lbb *models.SLoadbalancerBackend, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbb, reason.String()) + self.taskFail(ctx, lbb, reason) } diff --git a/pkg/compute/tasks/loadbalancer_backend_delete_task.go b/pkg/compute/tasks/loadbalancer_backend_delete_task.go index 4dee96ef21..30ddfeac4a 100644 --- a/pkg/compute/tasks/loadbalancer_backend_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_backend_delete_task.go @@ -35,8 +35,8 @@ func init() { taskman.RegisterTask(LoadbalancerBackendDeleteTask{}) } -func (self *LoadbalancerBackendDeleteTask) taskFail(ctx context.Context, lbb *models.SLoadbalancerBackend, reason string) { - lbb.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerBackendDeleteTask) taskFail(ctx context.Context, lbb *models.SLoadbalancerBackend, reason jsonutils.JSONObject) { + lbb.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lbb, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbb, logclient.ACT_DELOCATE, reason, self.UserCred, false) lbbg := lbb.GetLoadbalancerBackendGroup() @@ -50,12 +50,12 @@ func (self *LoadbalancerBackendDeleteTask) OnInit(ctx context.Context, obj db.IS lbb := obj.(*models.SLoadbalancerBackend) region := lbb.GetRegion() if region == nil { - self.taskFail(ctx, lbb, fmt.Sprintf("failed to find region for lbb %s", lbb.Name)) + self.taskFail(ctx, lbb, jsonutils.NewString(fmt.Sprintf("failed to find region for lbb %s", lbb.Name))) return } self.SetStage("OnLoadbalancerBackendDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancerBackend(ctx, self.GetUserCred(), lbb, self); err != nil { - self.taskFail(ctx, lbb, err.Error()) + self.taskFail(ctx, lbb, jsonutils.Marshal(err)) } } @@ -71,5 +71,5 @@ func (self *LoadbalancerBackendDeleteTask) OnLoadbalancerBackendDeleteComplete(c } func (self *LoadbalancerBackendDeleteTask) OnLoadbalancerBackendDeleteCompleteFailed(ctx context.Context, lbb *models.SLoadbalancerBackend, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbb, reason.String()) + self.taskFail(ctx, lbb, reason) } diff --git a/pkg/compute/tasks/loadbalancer_backend_sync_task.go b/pkg/compute/tasks/loadbalancer_backend_sync_task.go index 1128c08ced..6de94683b8 100644 --- a/pkg/compute/tasks/loadbalancer_backend_sync_task.go +++ b/pkg/compute/tasks/loadbalancer_backend_sync_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerBackendSyncTask{}) } -func (self *LoadbalancerBackendSyncTask) taskFail(ctx context.Context, lbb *models.SLoadbalancerBackend, reason string) { - lbb.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason) +func (self *LoadbalancerBackendSyncTask) taskFail(ctx context.Context, lbb *models.SLoadbalancerBackend, reason jsonutils.JSONObject) { + lbb.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason.String()) db.OpsLog.LogEvent(lbb, db.ACT_SYNC_CONF, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbb, logclient.ACT_SYNC_CONF, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbb.Id, lbb.Name, api.LB_SYNC_CONF_FAILED, reason) + notifyclient.NotifySystemError(lbb.Id, lbb.Name, api.LB_SYNC_CONF_FAILED, reason.String()) lbbg := lbb.GetLoadbalancerBackendGroup() if lbbg != nil { logclient.AddActionLogWithStartable(self, lbbg, logclient.ACL_LB_SYNC_BACKEND_CONF, reason, self.UserCred, false) @@ -52,12 +52,12 @@ func (self *LoadbalancerBackendSyncTask) OnInit(ctx context.Context, obj db.ISta lbb := obj.(*models.SLoadbalancerBackend) region := lbb.GetRegion() if region == nil { - self.taskFail(ctx, lbb, fmt.Sprintf("failed to find region for lbb %s", lbb.Name)) + self.taskFail(ctx, lbb, jsonutils.NewString(fmt.Sprintf("failed to find region for lbb %s", lbb.Name))) return } self.SetStage("OnLoadbalancerBackendCreateComplete", nil) if err := region.GetDriver().RequestSyncLoadbalancerBackend(ctx, self.GetUserCred(), lbb, self); err != nil { - self.taskFail(ctx, lbb, err.Error()) + self.taskFail(ctx, lbb, jsonutils.Marshal(err)) } } @@ -73,5 +73,5 @@ func (self *LoadbalancerBackendSyncTask) OnLoadbalancerBackendCreateComplete(ctx } func (self *LoadbalancerBackendSyncTask) OnLoadbalancerBackendCreateCompleteFailed(ctx context.Context, lbb *models.SLoadbalancerBackend, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbb, reason.String()) + self.taskFail(ctx, lbb, reason) } diff --git a/pkg/compute/tasks/loadbalancer_backendgroup_create_task.go b/pkg/compute/tasks/loadbalancer_backendgroup_create_task.go index 6bc1c1fcb2..908d40d224 100644 --- a/pkg/compute/tasks/loadbalancer_backendgroup_create_task.go +++ b/pkg/compute/tasks/loadbalancer_backendgroup_create_task.go @@ -47,11 +47,11 @@ func init() { taskman.RegisterTask(AwsLoadbalancerLoadbalancerBackendGroupCreateTask{}) } -func (self *LoadbalancerLoadbalancerBackendGroupCreateTask) taskFail(ctx context.Context, lbacl *models.SLoadbalancerBackendGroup, reason string) { - lbacl.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerLoadbalancerBackendGroupCreateTask) taskFail(ctx context.Context, lbacl *models.SLoadbalancerBackendGroup, reason jsonutils.JSONObject) { + lbacl.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lbacl, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbacl, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lbacl.Id, lbacl.Name, api.LB_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -59,7 +59,7 @@ func (self *LoadbalancerLoadbalancerBackendGroupCreateTask) OnInit(ctx context.C lbbg := obj.(*models.SLoadbalancerBackendGroup) region := lbbg.GetRegion() if region == nil { - self.taskFail(ctx, lbbg, fmt.Sprintf("failed to find region for lb backendgroup %s", lbbg.Name)) + self.taskFail(ctx, lbbg, jsonutils.NewString(fmt.Sprintf("failed to find region for lb backendgroup %s", lbbg.Name))) return } backends := []cloudprovider.SLoadbalancerBackend{} @@ -67,7 +67,7 @@ func (self *LoadbalancerLoadbalancerBackendGroupCreateTask) OnInit(ctx context.C self.SetStage("OnLoadbalancerBackendGroupCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerBackendGroup(ctx, self.GetUserCred(), lbbg, backends, self); err != nil { - self.taskFail(ctx, lbbg, err.Error()) + self.taskFail(ctx, lbbg, jsonutils.Marshal(err)) } } @@ -79,20 +79,20 @@ func (self *LoadbalancerLoadbalancerBackendGroupCreateTask) OnLoadbalancerBacken } func (self *LoadbalancerLoadbalancerBackendGroupCreateTask) OnLoadbalancerBackendGroupCreateCompleteFailed(ctx context.Context, lbbg *models.SLoadbalancerBackendGroup, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbbg, reason.String()) + self.taskFail(ctx, lbbg, reason) } func (self *HuaweiLoadbalancerLoadbalancerBackendGroupCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { lbbg := obj.(*models.SLoadbalancerBackendGroup) region := lbbg.GetRegion() if region == nil { - self.taskFail(ctx, lbbg, fmt.Sprintf("failed to find region for lb backendgroup %s", lbbg.Name)) + self.taskFail(ctx, lbbg, jsonutils.NewString(fmt.Sprintf("failed to find region for lb backendgroup %s", lbbg.Name))) return } backends, err := lbbg.GetBackendsParams() if err != nil { - self.taskFail(ctx, lbbg, err.Error()) + self.taskFail(ctx, lbbg, jsonutils.NewString(err.Error())) return } @@ -100,13 +100,13 @@ func (self *HuaweiLoadbalancerLoadbalancerBackendGroupCreateTask) OnInit(ctx con listenerId, _ := self.GetParams().GetString("listenerId") ruleId, _ := self.GetParams().GetString("ruleId") if len(listenerId) == 0 && len(ruleId) == 0 { - self.taskFail(ctx, lbbg, fmt.Sprintf("CreateLoadbalancerBackendGroup listener/rule id should not be emtpy")) + self.taskFail(ctx, lbbg, jsonutils.NewString(fmt.Sprintf("CreateLoadbalancerBackendGroup listener/rule id should not be emtpy"))) return } self.SetStage("OnLoadbalancerBackendGroupCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerBackendGroup(ctx, self.GetUserCred(), lbbg, backends, self); err != nil { - self.taskFail(ctx, lbbg, err.Error()) + self.taskFail(ctx, lbbg, jsonutils.Marshal(err)) } } @@ -114,25 +114,25 @@ func (self *AwsLoadbalancerLoadbalancerBackendGroupCreateTask) OnInit(ctx contex lbbg := obj.(*models.SLoadbalancerBackendGroup) region := lbbg.GetRegion() if region == nil { - self.taskFail(ctx, lbbg, fmt.Sprintf("failed to find region for lb backendgroup %s", lbbg.Name)) + self.taskFail(ctx, lbbg, jsonutils.NewString(fmt.Sprintf("failed to find region for lb backendgroup %s", lbbg.Name))) return } backends, err := lbbg.GetBackendsParams() if err != nil { - self.taskFail(ctx, lbbg, err.Error()) + self.taskFail(ctx, lbbg, jsonutils.NewString(err.Error())) return } // 必须指定listenerId listenerId, _ := self.GetParams().GetString("listener_id") if len(listenerId) == 0 { - self.taskFail(ctx, lbbg, fmt.Sprintf("CreateLoadbalancerBackendGroup listener id should not be emtpy")) + self.taskFail(ctx, lbbg, jsonutils.NewString(fmt.Sprintf("CreateLoadbalancerBackendGroup listener id should not be emtpy"))) return } self.SetStage("OnLoadbalancerBackendGroupCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerBackendGroup(ctx, self.GetUserCred(), lbbg, backends, self); err != nil { - self.taskFail(ctx, lbbg, err.Error()) + self.taskFail(ctx, lbbg, jsonutils.Marshal(err)) } } diff --git a/pkg/compute/tasks/loadbalancer_backendgroup_delete_task.go b/pkg/compute/tasks/loadbalancer_backendgroup_delete_task.go index b315ef38c7..88df0aff1d 100644 --- a/pkg/compute/tasks/loadbalancer_backendgroup_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_backendgroup_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerBackendGroupDeleteTask{}) } -func (self *LoadbalancerBackendGroupDeleteTask) taskFail(ctx context.Context, lbbg *models.SLoadbalancerBackendGroup, reason string) { - lbbg.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerBackendGroupDeleteTask) taskFail(ctx context.Context, lbbg *models.SLoadbalancerBackendGroup, reason jsonutils.JSONObject) { + lbbg.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lbbg, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbbg, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbbg.Id, lbbg.Name, api.LB_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(lbbg.Id, lbbg.Name, api.LB_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerBackendGroupDeleteTask) OnInit(ctx context.Context, obj lbbg := obj.(*models.SLoadbalancerBackendGroup) region := lbbg.GetRegion() if region == nil { - self.taskFail(ctx, lbbg, fmt.Sprintf("failed to find region for lb %s", lbbg.Name)) + self.taskFail(ctx, lbbg, jsonutils.NewString(fmt.Sprintf("failed to find region for lb %s", lbbg.Name))) return } self.SetStage("OnLoadbalancerBackendGroupDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancerBackendGroup(ctx, self.GetUserCred(), lbbg, self); err != nil { - self.taskFail(ctx, lbbg, err.Error()) + self.taskFail(ctx, lbbg, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerBackendGroupDeleteTask) OnLoadbalancerBackendGroupDelete } func (self *LoadbalancerBackendGroupDeleteTask) OnLoadbalancerBackendGroupDeleteCompleteFailed(ctx context.Context, lbbg *models.SLoadbalancerBackendGroup, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbbg, reason.String()) + self.taskFail(ctx, lbbg, reason) } diff --git a/pkg/compute/tasks/loadbalancer_certificate_create_task.go b/pkg/compute/tasks/loadbalancer_certificate_create_task.go index 83264b945c..c624c2a094 100644 --- a/pkg/compute/tasks/loadbalancer_certificate_create_task.go +++ b/pkg/compute/tasks/loadbalancer_certificate_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerCertificateCreateTask{}) } -func (self *LoadbalancerCertificateCreateTask) taskFail(ctx context.Context, lbcert *models.SCachedLoadbalancerCertificate, reason string) { - lbcert.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerCertificateCreateTask) taskFail(ctx context.Context, lbcert *models.SCachedLoadbalancerCertificate, reason jsonutils.JSONObject) { + lbcert.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lbcert, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbcert, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbcert.Id, lbcert.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lbcert.Id, lbcert.Name, api.LB_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerCertificateCreateTask) OnInit(ctx context.Context, obj d lbcert := obj.(*models.SCachedLoadbalancerCertificate) region := lbcert.GetRegion() if region == nil { - self.taskFail(ctx, lbcert, fmt.Sprintf("failed to find region for lbcert %s", lbcert.Name)) + self.taskFail(ctx, lbcert, jsonutils.NewString(fmt.Sprintf("failed to find region for lbcert %s", lbcert.Name))) return } self.SetStage("OnLoadbalancerCertificateCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerCertificate(ctx, self.GetUserCred(), lbcert, self); err != nil { - self.taskFail(ctx, lbcert, err.Error()) + self.taskFail(ctx, lbcert, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerCertificateCreateTask) OnLoadbalancerCertificateCreateCo } func (self *LoadbalancerCertificateCreateTask) OnLoadbalancerCertificateCreateCompleteFailed(ctx context.Context, lbcert *models.SCachedLoadbalancerCertificate, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbcert, reason.String()) + self.taskFail(ctx, lbcert, reason) } diff --git a/pkg/compute/tasks/loadbalancer_certificate_delete_task.go b/pkg/compute/tasks/loadbalancer_certificate_delete_task.go index 3db749661d..9edeca2745 100644 --- a/pkg/compute/tasks/loadbalancer_certificate_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_certificate_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerCertificateDeleteTask{}) } -func (self *LoadbalancerCertificateDeleteTask) taskFail(ctx context.Context, lbcert *models.SCachedLoadbalancerCertificate, reason string) { - lbcert.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerCertificateDeleteTask) taskFail(ctx context.Context, lbcert *models.SCachedLoadbalancerCertificate, reason jsonutils.JSONObject) { + lbcert.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lbcert, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbcert, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbcert.Id, lbcert.Name, api.LB_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(lbcert.Id, lbcert.Name, api.LB_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerCertificateDeleteTask) OnInit(ctx context.Context, obj d lbcert := obj.(*models.SCachedLoadbalancerCertificate) region := lbcert.GetRegion() if region == nil { - self.taskFail(ctx, lbcert, fmt.Sprintf("failed to find region for lbcert %s", lbcert.Name)) + self.taskFail(ctx, lbcert, jsonutils.NewString(fmt.Sprintf("failed to find region for lbcert %s", lbcert.Name))) return } self.SetStage("OnLoadbalancerCertificateDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancerCertificate(ctx, self.GetUserCred(), lbcert, self); err != nil { - self.taskFail(ctx, lbcert, err.Error()) + self.taskFail(ctx, lbcert, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerCertificateDeleteTask) OnLoadbalancerCertificateDeleteCo } func (self *LoadbalancerCertificateDeleteTask) OnLoadbalancerCertificateDeleteCompleteFailed(ctx context.Context, lbcert *models.SCachedLoadbalancerCertificate, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbcert, reason.String()) + self.taskFail(ctx, lbcert, reason) } diff --git a/pkg/compute/tasks/loadbalancer_create_task.go b/pkg/compute/tasks/loadbalancer_create_task.go index 7d3afbac16..245b278c25 100644 --- a/pkg/compute/tasks/loadbalancer_create_task.go +++ b/pkg/compute/tasks/loadbalancer_create_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerCreateTask{}) } -func (self *LoadbalancerCreateTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason string) { - lb.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerCreateTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { + lb.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lb, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lb, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerCreateTask) OnInit(ctx context.Context, obj db.IStandalo lb := obj.(*models.SLoadbalancer) region := lb.GetRegion() if region == nil { - self.taskFail(ctx, lb, fmt.Sprintf("failed to find region for lb %s", lb.Name)) + self.taskFail(ctx, lb, jsonutils.NewString(fmt.Sprintf("failed to find region for lb %s", lb.Name))) return } self.SetStage("OnLoadbalancerCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancer(ctx, self.GetUserCred(), lb, self); err != nil { - self.taskFail(ctx, lb, err.Error()) + self.taskFail(ctx, lb, jsonutils.Marshal(err)) } } @@ -66,7 +66,7 @@ func (self *LoadbalancerCreateTask) OnLoadbalancerCreateComplete(ctx context.Con } func (self *LoadbalancerCreateTask) OnLoadbalancerCreateCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { - self.taskFail(ctx, lb, reason.String()) + self.taskFail(ctx, lb, reason) } func (self *LoadbalancerCreateTask) OnLoadbalancerStartComplete(ctx context.Context, lb *models.SLoadbalancer, data jsonutils.JSONObject) { @@ -76,5 +76,5 @@ func (self *LoadbalancerCreateTask) OnLoadbalancerStartComplete(ctx context.Cont func (self *LoadbalancerCreateTask) OnLoadbalancerStartCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { lb.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, reason.String()) - self.SetStageFailed(ctx, reason.String()) + self.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/loadbalancer_delete_task.go b/pkg/compute/tasks/loadbalancer_delete_task.go index 45046b4184..87e53613f9 100644 --- a/pkg/compute/tasks/loadbalancer_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerDeleteTask{}) } -func (self *LoadbalancerDeleteTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason string) { - lb.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerDeleteTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { + lb.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lb, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lb, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerDeleteTask) OnInit(ctx context.Context, obj db.IStandalo lb := obj.(*models.SLoadbalancer) region := lb.GetRegion() if region == nil { - self.taskFail(ctx, lb, fmt.Sprintf("failed to find region for lb %s", lb.Name)) + self.taskFail(ctx, lb, jsonutils.NewString(fmt.Sprintf("failed to find region for lb %s", lb.Name))) return } self.SetStage("OnLoadbalancerDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancer(ctx, self.GetUserCred(), lb, self); err != nil { - self.taskFail(ctx, lb, err.Error()) + self.taskFail(ctx, lb, jsonutils.Marshal(err)) } } @@ -66,5 +66,5 @@ func (self *LoadbalancerDeleteTask) OnLoadbalancerDeleteComplete(ctx context.Con } func (self *LoadbalancerDeleteTask) OnLoadbalancerDeleteCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { - self.taskFail(ctx, lb, reason.String()) + self.taskFail(ctx, lb, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_create_task.go b/pkg/compute/tasks/loadbalancer_listener_create_task.go index 1bcfaee6db..0a35f9ec18 100644 --- a/pkg/compute/tasks/loadbalancer_listener_create_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_create_task.go @@ -54,13 +54,13 @@ func onLoadbalancerListenerCreateComplete(ctx context.Context, lblis *models.SLo func onHuaweiLoadbalancerListenerCreateComplete(ctx context.Context, lblis *models.SLoadbalancerListener, data jsonutils.JSONObject, self *LoadbalancerListenerCreateTask) { lbbg := lblis.GetLoadbalancerBackendGroup() if lbbg == nil { - self.taskFail(ctx, lblis, "huawei loadbalancer listener releated backend group not found") + self.taskFail(ctx, lblis, jsonutils.NewString("huawei loadbalancer listener releated backend group not found")) return } groupParams, err := lbbg.GetHuaweiBackendGroupParams(lblis, nil) if err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.NewString(err.Error())) return } @@ -68,7 +68,7 @@ func onHuaweiLoadbalancerListenerCreateComplete(ctx context.Context, lblis *mode params.Set("listenerId", jsonutils.NewString(lblis.GetId())) group, err := models.HuaweiCachedLbbgManager.GetCachedBackendGroupByAssociateId(lblis.GetId()) if err != nil && err != sql.ErrNoRows { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.NewString(err.Error())) return } @@ -76,12 +76,12 @@ func onHuaweiLoadbalancerListenerCreateComplete(ctx context.Context, lblis *mode // 服务器组存在 ilbbg, err := group.GetICloudLoadbalancerBackendGroup() if err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.NewString(err.Error())) return } // 服务器组已经存在,直接同步即可 if err := ilbbg.Sync(ctx, groupParams); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.NewString(err.Error())) return } else { if _, err := db.UpdateWithLock(ctx, group, func() error { @@ -89,7 +89,7 @@ func onHuaweiLoadbalancerListenerCreateComplete(ctx context.Context, lblis *mode group.AssociatedType = api.LB_ASSOCIATE_TYPE_LISTENER return nil }); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.NewString(err.Error())) return } @@ -102,11 +102,11 @@ func onHuaweiLoadbalancerListenerCreateComplete(ctx context.Context, lblis *mode } } -func (self *LoadbalancerListenerCreateTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason string) { - lblis.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerListenerCreateTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { + lblis.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lblis, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_CREATE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -114,12 +114,12 @@ func (self *LoadbalancerListenerCreateTask) OnInit(ctx context.Context, obj db.I lblis := obj.(*models.SLoadbalancerListener) region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } self.SetStage("OnLoadbalancerListenerCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerListener(ctx, self.GetUserCred(), lblis, self); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } @@ -133,7 +133,7 @@ func (self *LoadbalancerListenerCreateTask) OnPrepareLoadbalancerBackendgroup(ct func (self *LoadbalancerListenerCreateTask) OnPrepareLoadbalancerBackendgroupFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, "") - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } func (self *LoadbalancerListenerCreateTask) OnLoadbalancerListenerCreateComplete(ctx context.Context, lblis *models.SLoadbalancerListener, data jsonutils.JSONObject) { @@ -142,7 +142,7 @@ func (self *LoadbalancerListenerCreateTask) OnLoadbalancerListenerCreateComplete } func (self *LoadbalancerListenerCreateTask) OnLoadbalancerListenerCreateCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } func (self *LoadbalancerListenerCreateTask) OnLoadbalancerListenerStartComplete(ctx context.Context, lblis *models.SLoadbalancerListener, data jsonutils.JSONObject) { @@ -152,5 +152,5 @@ func (self *LoadbalancerListenerCreateTask) OnLoadbalancerListenerStartComplete( func (self *LoadbalancerListenerCreateTask) OnLoadbalancerListenerStartCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, reason.String()) - self.SetStageFailed(ctx, reason.String()) + self.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_delete_task.go b/pkg/compute/tasks/loadbalancer_listener_delete_task.go index acecea154e..9a1c284f15 100644 --- a/pkg/compute/tasks/loadbalancer_listener_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerListenerDeleteTask{}) } -func (self *LoadbalancerListenerDeleteTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason string) { - lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerListenerDeleteTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { + lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lblis, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerListenerDeleteTask) OnInit(ctx context.Context, obj db.I lblis := obj.(*models.SLoadbalancerListener) region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } self.SetStage("OnLoadbalancerListenerDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancerListener(ctx, self.GetUserCred(), lblis, self); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerListenerDeleteTask) OnLoadbalancerListenerDeleteComplete } func (self *LoadbalancerListenerDeleteTask) OnLoadbalancerListenerDeleteCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go b/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go index 55287a8529..dc8cf250db 100644 --- a/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go @@ -55,13 +55,13 @@ func onPrepareLoadbalancerBackendgroup(ctx context.Context, region *models.SClou func onHuaiweiPrepareLoadbalancerBackendgroup(ctx context.Context, region *models.SCloudregion, lbr *models.SLoadbalancerListenerRule, data jsonutils.JSONObject, self *LoadbalancerListenerRuleCreateTask) { lbbg := lbr.GetLoadbalancerBackendGroup() if lbbg == nil { - self.taskFail(ctx, lbr, "huawei loadbalancer listener rule releated backend group not found") + self.taskFail(ctx, lbr, jsonutils.NewString("huawei loadbalancer listener rule releated backend group not found")) return } lblis := lbr.GetLoadbalancerListener() if lblis == nil { - self.taskFail(ctx, lbr, "huawei loadbalancer listener rule releated listener not found") + self.taskFail(ctx, lbr, jsonutils.NewString("huawei loadbalancer listener rule releated listener not found")) return } @@ -71,19 +71,19 @@ func onHuaiweiPrepareLoadbalancerBackendgroup(ctx context.Context, region *model if group != nil { ilbbg, err := group.GetICloudLoadbalancerBackendGroup() if err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } groupParams, err := lbbg.GetHuaweiBackendGroupParams(lblis, lbr) if err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } groupParams.ListenerID = "" // 服务器组已经存在,直接同步即可 if err := ilbbg.Sync(ctx, groupParams); err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } else { group.SetModelManager(models.HuaweiCachedLbbgManager, group) @@ -92,7 +92,7 @@ func onHuaiweiPrepareLoadbalancerBackendgroup(ctx context.Context, region *model group.AssociatedType = api.LB_ASSOCIATE_TYPE_RULE return nil }); err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } @@ -108,19 +108,19 @@ func onHuaiweiPrepareLoadbalancerBackendgroup(ctx context.Context, region *model func onAwsPrepareLoadbalancerBackendgroup(ctx context.Context, region *models.SCloudregion, lbr *models.SLoadbalancerListenerRule, data jsonutils.JSONObject, self *LoadbalancerListenerRuleCreateTask) { lbbg := lbr.GetLoadbalancerBackendGroup() if lbbg == nil { - self.taskFail(ctx, lbr, "aws loadbalancer listener rule releated backend group not found") + self.taskFail(ctx, lbr, jsonutils.NewString("aws loadbalancer listener rule releated backend group not found")) return } lblis := lbr.GetLoadbalancerListener() if lblis == nil { - self.taskFail(ctx, lbr, "aws loadbalancer listener rule releated listener not found") + self.taskFail(ctx, lbr, jsonutils.NewString("aws loadbalancer listener rule releated listener not found")) return } params, err := lbbg.GetAwsBackendGroupParams(lblis, lbr) if err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } @@ -128,13 +128,13 @@ func onAwsPrepareLoadbalancerBackendgroup(ctx context.Context, region *models.SC if group != nil { ilbbg, err := group.GetICloudLoadbalancerBackendGroup() if err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } // 服务器组已经存在,直接同步即可 if err := ilbbg.Sync(ctx, params); err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.NewString(err.Error())) return } @@ -147,11 +147,11 @@ func onAwsPrepareLoadbalancerBackendgroup(ctx context.Context, region *models.SC } } -func (self *LoadbalancerListenerRuleCreateTask) taskFail(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason string) { - lbr.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason) +func (self *LoadbalancerListenerRuleCreateTask) taskFail(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason jsonutils.JSONObject) { + lbr.SetStatus(self.GetUserCred(), api.LB_CREATE_FAILED, reason.String()) db.OpsLog.LogEvent(lbr, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbr, logclient.ACT_CREATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbr.Id, lbr.Name, api.LB_CREATE_FAILED, reason) + notifyclient.NotifySystemError(lbr.Id, lbr.Name, api.LB_CREATE_FAILED, reason.String()) lblis := lbr.GetLoadbalancerListener() if lblis != nil { logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_LB_ADD_LISTENER_RULE, reason, self.UserCred, false) @@ -163,7 +163,7 @@ func (self *LoadbalancerListenerRuleCreateTask) OnInit(ctx context.Context, obj lbr := obj.(*models.SLoadbalancerListenerRule) region := lbr.GetRegion() if region == nil { - self.taskFail(ctx, lbr, fmt.Sprintf("failed to find region for lbr %s", lbr.Name)) + self.taskFail(ctx, lbr, jsonutils.NewString(fmt.Sprintf("failed to find region for lbr %s", lbr.Name))) return } @@ -178,17 +178,17 @@ func (self *LoadbalancerListenerRuleCreateTask) OnPrepareLoadbalancerBackendgrou func (self *LoadbalancerListenerRuleCreateTask) OnCreateLoadbalancerListenerRule(ctx context.Context, lbr *models.SLoadbalancerListenerRule, data jsonutils.JSONObject) { region := lbr.GetRegion() if region == nil { - self.taskFail(ctx, lbr, fmt.Sprintf("failed to find region for lbr %s", lbr.Name)) + self.taskFail(ctx, lbr, jsonutils.NewString(fmt.Sprintf("failed to find region for lbr %s", lbr.Name))) return } self.SetStage("OnLoadbalancerListenerRuleCreateComplete", nil) if err := region.GetDriver().RequestCreateLoadbalancerListenerRule(ctx, self.GetUserCred(), lbr, self); err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.Marshal(err)) } } func (self *LoadbalancerListenerRuleCreateTask) OnCreateLoadbalancerListenerRuleFailed(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbr, reason.String()) + self.taskFail(ctx, lbr, reason) } func (self *LoadbalancerListenerRuleCreateTask) OnLoadbalancerListenerRuleCreateComplete(ctx context.Context, lbr *models.SLoadbalancerListenerRule, data jsonutils.JSONObject) { @@ -203,5 +203,5 @@ func (self *LoadbalancerListenerRuleCreateTask) OnLoadbalancerListenerRuleCreate } func (self *LoadbalancerListenerRuleCreateTask) OnLoadbalancerListenerRuleCreateCompleteFailed(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbr, reason.String()) + self.taskFail(ctx, lbr, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_rule_delete_task.go b/pkg/compute/tasks/loadbalancer_listener_rule_delete_task.go index e79ce4f687..668b3ced70 100644 --- a/pkg/compute/tasks/loadbalancer_listener_rule_delete_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_rule_delete_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerListenerRuleDeleteTask{}) } -func (self *LoadbalancerListenerRuleDeleteTask) taskFail(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason string) { - lbr.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason) +func (self *LoadbalancerListenerRuleDeleteTask) taskFail(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason jsonutils.JSONObject) { + lbr.SetStatus(self.GetUserCred(), api.LB_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(lbr, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lbr, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lbr.Id, lbr.Name, api.LB_STATUS_DELETE_FAILED, reason) + notifyclient.NotifySystemError(lbr.Id, lbr.Name, api.LB_STATUS_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerListenerRuleDeleteTask) OnInit(ctx context.Context, obj lbr := obj.(*models.SLoadbalancerListenerRule) region := lbr.GetRegion() if region == nil { - self.taskFail(ctx, lbr, fmt.Sprintf("failed to find region for lbr %s", lbr.Name)) + self.taskFail(ctx, lbr, jsonutils.NewString(fmt.Sprintf("failed to find region for lbr %s", lbr.Name))) return } self.SetStage("OnLoadbalancerListenerRuleDeleteComplete", nil) if err := region.GetDriver().RequestDeleteLoadbalancerListenerRule(ctx, self.GetUserCred(), lbr, self); err != nil { - self.taskFail(ctx, lbr, err.Error()) + self.taskFail(ctx, lbr, jsonutils.Marshal(err)) } } @@ -69,5 +69,5 @@ func (self *LoadbalancerListenerRuleDeleteTask) OnLoadbalancerListenerRuleDelete } func (self *LoadbalancerListenerRuleDeleteTask) OnLoadbalancerListenerRuleDeleteCompleteFailed(ctx context.Context, lbr *models.SLoadbalancerListenerRule, reason jsonutils.JSONObject) { - self.taskFail(ctx, lbr, reason.String()) + self.taskFail(ctx, lbr, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_start_task.go b/pkg/compute/tasks/loadbalancer_listener_start_task.go index 5ea0a0af5a..1afe81e111 100644 --- a/pkg/compute/tasks/loadbalancer_listener_start_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_start_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerListenerStartTask{}) } -func (self *LoadbalancerListenerStartTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason string) { - lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, reason) +func (self *LoadbalancerListenerStartTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { + lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, reason.String()) db.OpsLog.LogEvent(lblis, db.ACT_ENABLE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_ENABLE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_STATUS_DISABLED, reason) + notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_STATUS_DISABLED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerListenerStartTask) OnInit(ctx context.Context, obj db.IS lblis := obj.(*models.SLoadbalancerListener) region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } self.SetStage("OnLoadbalancerListenerStartComplete", nil) if err := region.GetDriver().RequestStartLoadbalancerListener(ctx, self.GetUserCred(), lblis, self); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerListenerStartTask) OnLoadbalancerListenerStartComplete(c } func (self *LoadbalancerListenerStartTask) OnLoadbalancerListenerStartCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_stop_task.go b/pkg/compute/tasks/loadbalancer_listener_stop_task.go index f07ca22b5b..701de1c9bc 100644 --- a/pkg/compute/tasks/loadbalancer_listener_stop_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_stop_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerListenerStopTask{}) } -func (self *LoadbalancerListenerStopTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason string) { - lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_ENABLED, reason) +func (self *LoadbalancerListenerStopTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { + lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_ENABLED, reason.String()) db.OpsLog.LogEvent(lblis, db.ACT_DISABLE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_DISABLE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_STATUS_ENABLED, reason) + notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_STATUS_ENABLED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerListenerStopTask) OnInit(ctx context.Context, obj db.ISt lblis := obj.(*models.SLoadbalancerListener) region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } self.SetStage("OnLoadbalancerListenerStopComplete", nil) if err := region.GetDriver().RequestStopLoadbalancerListener(ctx, self.GetUserCred(), lblis, self); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerListenerStopTask) OnLoadbalancerListenerStopComplete(ctx } func (self *LoadbalancerListenerStopTask) OnLoadbalancerListenerStopCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_sync_task.go b/pkg/compute/tasks/loadbalancer_listener_sync_task.go index b97f6d60ce..39918df64e 100644 --- a/pkg/compute/tasks/loadbalancer_listener_sync_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_sync_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerListenerSyncTask{}) } -func (self *LoadbalancerListenerSyncTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason string) { - lblis.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason) +func (self *LoadbalancerListenerSyncTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { + lblis.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason.String()) db.OpsLog.LogEvent(lblis, db.ACT_SYNC_CONF, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_SYNC_CONF, reason, self.UserCred, false) - notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_SYNC_CONF_FAILED, reason) + notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_SYNC_CONF_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,7 +48,7 @@ func (self *LoadbalancerListenerSyncTask) OnInit(ctx context.Context, obj db.ISt lblis := obj.(*models.SLoadbalancerListener) region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } @@ -57,25 +57,25 @@ func (self *LoadbalancerListenerSyncTask) OnInit(ctx context.Context, obj db.ISt userCred := self.GetUserCred() err := driver.RequestSyncLoadbalancerBackendGroup(ctx, userCred, lblis, self) if err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } func (self *LoadbalancerListenerSyncTask) OnLoadbalancerBackendgroupSyncComplete(ctx context.Context, lblis *models.SLoadbalancerListener, data jsonutils.JSONObject) { region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } self.SetStage("OnLoadbalancerListenerSyncComplete", nil) if err := region.GetDriver().RequestSyncLoadbalancerListener(ctx, self.GetUserCred(), lblis, self); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } func (self *LoadbalancerListenerSyncTask) OnLoadbalancerBackendgroupSyncCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { lblis.SetStatus(self.GetUserCred(), api.LB_SYNC_CONF_FAILED, reason.String()) - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } func (self *LoadbalancerListenerSyncTask) OnLoadbalancerListenerSyncComplete(ctx context.Context, lblis *models.SLoadbalancerListener, data jsonutils.JSONObject) { @@ -86,7 +86,7 @@ func (self *LoadbalancerListenerSyncTask) OnLoadbalancerListenerSyncComplete(ctx } func (self *LoadbalancerListenerSyncTask) OnLoadbalancerListenerSyncCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } func (self *LoadbalancerListenerSyncTask) OnLoadbalancerListenerSyncStatusComplete(ctx context.Context, lblis *models.SLoadbalancerListener, data jsonutils.JSONObject) { @@ -95,5 +95,5 @@ func (self *LoadbalancerListenerSyncTask) OnLoadbalancerListenerSyncStatusComple func (self *LoadbalancerListenerSyncTask) OnLoadbalancerListenerSyncStatusCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_UNKNOWN, reason.String()) - self.SetStageFailed(ctx, reason.String()) + self.SetStageFailed(ctx, reason) } diff --git a/pkg/compute/tasks/loadbalancer_listener_syncstatus_task.go b/pkg/compute/tasks/loadbalancer_listener_syncstatus_task.go index 3851877ba3..b2085ea274 100644 --- a/pkg/compute/tasks/loadbalancer_listener_syncstatus_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_syncstatus_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerListenerSyncstatusTask{}) } -func (self *LoadbalancerListenerSyncstatusTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason string) { - lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_UNKNOWN, reason) +func (self *LoadbalancerListenerSyncstatusTask) taskFail(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { + lblis.SetStatus(self.GetUserCred(), api.LB_STATUS_UNKNOWN, reason.String()) db.OpsLog.LogEvent(lblis, db.ACT_SYNC_STATUS, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lblis, logclient.ACT_SYNC_STATUS, reason, self.UserCred, false) - notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_SYNC_CONF_FAILED, reason) + notifyclient.NotifySystemError(lblis.Id, lblis.Name, api.LB_SYNC_CONF_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerListenerSyncstatusTask) OnInit(ctx context.Context, obj lblis := obj.(*models.SLoadbalancerListener) region := lblis.GetRegion() if region == nil { - self.taskFail(ctx, lblis, fmt.Sprintf("failed to find region for lblis %s", lblis.Name)) + self.taskFail(ctx, lblis, jsonutils.NewString(fmt.Sprintf("failed to find region for lblis %s", lblis.Name))) return } self.SetStage("OnLoadbalancerListenerSyncstatusComplete", nil) if err := region.GetDriver().RequestSyncstatusLoadbalancerListener(ctx, self.GetUserCred(), lblis, self); err != nil { - self.taskFail(ctx, lblis, err.Error()) + self.taskFail(ctx, lblis, jsonutils.Marshal(err)) } } @@ -64,5 +64,5 @@ func (self *LoadbalancerListenerSyncstatusTask) OnLoadbalancerListenerSyncstatus } func (self *LoadbalancerListenerSyncstatusTask) OnLoadbalancerListenerSyncstatusCompleteFailed(ctx context.Context, lblis *models.SLoadbalancerListener, reason jsonutils.JSONObject) { - self.taskFail(ctx, lblis, reason.String()) + self.taskFail(ctx, lblis, reason) } diff --git a/pkg/compute/tasks/loadbalancer_start_task.go b/pkg/compute/tasks/loadbalancer_start_task.go index 612fc95bfe..2595a3877d 100644 --- a/pkg/compute/tasks/loadbalancer_start_task.go +++ b/pkg/compute/tasks/loadbalancer_start_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerStartTask{}) } -func (self *LoadbalancerStartTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason string) { - lb.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, reason) +func (self *LoadbalancerStartTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { + lb.SetStatus(self.GetUserCred(), api.LB_STATUS_DISABLED, reason.String()) db.OpsLog.LogEvent(lb, db.ACT_ENABLE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lb, logclient.ACT_ENABLE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_STATUS_DISABLED, reason) + notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_STATUS_DISABLED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerStartTask) OnInit(ctx context.Context, obj db.IStandalon lb := obj.(*models.SLoadbalancer) region := lb.GetRegion() if region == nil { - self.taskFail(ctx, lb, fmt.Sprintf("failed to find region for lb %s", lb.Name)) + self.taskFail(ctx, lb, jsonutils.NewString(fmt.Sprintf("failed to find region for lb %s", lb.Name))) return } self.SetStage("OnLoadbalancerStartComplete", nil) if err := region.GetDriver().RequestStartLoadbalancer(ctx, self.GetUserCred(), lb, self); err != nil { - self.taskFail(ctx, lb, err.Error()) + self.taskFail(ctx, lb, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerStartTask) OnLoadbalancerStartComplete(ctx context.Conte } func (self *LoadbalancerStartTask) OnLoadbalancerStartCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { - self.taskFail(ctx, lb, reason.String()) + self.taskFail(ctx, lb, reason) } diff --git a/pkg/compute/tasks/loadbalancer_stop_task.go b/pkg/compute/tasks/loadbalancer_stop_task.go index 04b8be1f7f..01c651c534 100644 --- a/pkg/compute/tasks/loadbalancer_stop_task.go +++ b/pkg/compute/tasks/loadbalancer_stop_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerStopTask{}) } -func (self *LoadbalancerStopTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason string) { - lb.SetStatus(self.GetUserCred(), api.LB_STATUS_ENABLED, reason) +func (self *LoadbalancerStopTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { + lb.SetStatus(self.GetUserCred(), api.LB_STATUS_ENABLED, reason.String()) db.OpsLog.LogEvent(lb, db.ACT_DISABLE, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lb, logclient.ACT_DISABLE, reason, self.UserCred, false) - notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_STATUS_ENABLED, reason) + notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_STATUS_ENABLED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerStopTask) OnInit(ctx context.Context, obj db.IStandalone lb := obj.(*models.SLoadbalancer) region := lb.GetRegion() if region == nil { - self.taskFail(ctx, lb, fmt.Sprintf("failed to find region for lb %s", lb.Name)) + self.taskFail(ctx, lb, jsonutils.NewString(fmt.Sprintf("failed to find region for lb %s", lb.Name))) return } self.SetStage("OnLoadbalancerStopComplete", nil) if err := region.GetDriver().RequestStopLoadbalancer(ctx, self.GetUserCred(), lb, self); err != nil { - self.taskFail(ctx, lb, err.Error()) + self.taskFail(ctx, lb, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *LoadbalancerStopTask) OnLoadbalancerStopComplete(ctx context.Context } func (self *LoadbalancerStopTask) OnLoadbalancerStopCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { - self.taskFail(ctx, lb, reason.String()) + self.taskFail(ctx, lb, reason) } diff --git a/pkg/compute/tasks/loadbalancer_syncstatus_task.go b/pkg/compute/tasks/loadbalancer_syncstatus_task.go index d43fd07699..4713419869 100644 --- a/pkg/compute/tasks/loadbalancer_syncstatus_task.go +++ b/pkg/compute/tasks/loadbalancer_syncstatus_task.go @@ -36,11 +36,11 @@ func init() { taskman.RegisterTask(LoadbalancerSyncstatusTask{}) } -func (self *LoadbalancerSyncstatusTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason string) { - lb.SetStatus(self.GetUserCred(), api.LB_STATUS_UNKNOWN, reason) +func (self *LoadbalancerSyncstatusTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { + lb.SetStatus(self.GetUserCred(), api.LB_STATUS_UNKNOWN, reason.String()) db.OpsLog.LogEvent(lb, db.ACT_SYNC_STATUS, reason, self.UserCred) logclient.AddActionLogWithStartable(self, lb, logclient.ACT_SYNC_STATUS, reason, self.UserCred, false) - notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_SYNC_CONF_FAILED, reason) + notifyclient.NotifySystemError(lb.Id, lb.Name, api.LB_SYNC_CONF_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -48,12 +48,12 @@ func (self *LoadbalancerSyncstatusTask) OnInit(ctx context.Context, obj db.IStan lb := obj.(*models.SLoadbalancer) region := lb.GetRegion() if region == nil { - self.taskFail(ctx, lb, fmt.Sprintf("failed to find region for lb %s", lb.Name)) + self.taskFail(ctx, lb, jsonutils.NewString(fmt.Sprintf("failed to find region for lb %s", lb.Name))) return } self.SetStage("OnLoadbalancerSyncstatusComplete", nil) if err := region.GetDriver().RequestSyncstatusLoadbalancer(ctx, self.GetUserCred(), lb, self); err != nil { - self.taskFail(ctx, lb, err.Error()) + self.taskFail(ctx, lb, jsonutils.Marshal(err)) } } @@ -64,5 +64,5 @@ func (self *LoadbalancerSyncstatusTask) OnLoadbalancerSyncstatusComplete(ctx con } func (self *LoadbalancerSyncstatusTask) OnLoadbalancerSyncstatusCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) { - self.taskFail(ctx, lb, reason.String()) + self.taskFail(ctx, lb, reason) } diff --git a/pkg/compute/tasks/nat_common.go b/pkg/compute/tasks/nat_common.go index 2233214509..adb37034ba 100644 --- a/pkg/compute/tasks/nat_common.go +++ b/pkg/compute/tasks/nat_common.go @@ -16,7 +16,9 @@ package tasks import ( "context" + "fmt" + "yunion.io/x/jsonutils" "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -26,14 +28,14 @@ import ( type iTask interface { taskman.ITask - TaskFailed(ctx context.Context, nat models.INatHelper, err error) + TaskFailed(ctx context.Context, nat models.INatHelper, err jsonutils.JSONObject) } func NatToBindIPStage(ctx context.Context, task iTask, nat models.INatHelper) { nat.SetStatus(task.GetUserCred(), api.NAT_STATUS_ALLOCATE, "") natgateway, err := nat.GetNatgateway() if err != nil { - task.TaskFailed(ctx, nat, errors.Wrap(err, "fetch natgateway failed")) + task.TaskFailed(ctx, nat, jsonutils.NewString(fmt.Sprintf("fetch natgateway failed: %s", err))) return } task.SetStage("OnBindIPComplete", nil) @@ -44,7 +46,7 @@ func NatToBindIPStage(ctx context.Context, task iTask, nat models.INatHelper) { eipId, _ := task.GetParams().GetString("eip_id") if err := natgateway.GetRegion().GetDriver().RequestBindIPToNatgateway(ctx, task, natgateway, eipId); err != nil { - task.TaskFailed(ctx, nat, err) + task.TaskFailed(ctx, nat, jsonutils.Marshal(err)) return } } diff --git a/pkg/compute/tasks/natdentry_create_task.go b/pkg/compute/tasks/natdentry_create_task.go index 99d81eab32..8e2cb04115 100644 --- a/pkg/compute/tasks/natdentry_create_task.go +++ b/pkg/compute/tasks/natdentry_create_task.go @@ -21,7 +21,6 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -39,16 +38,16 @@ func init() { taskman.RegisterTask(SNatDEntryCreateTask{}) } -func (self *SNatDEntryCreateTask) TaskFailed(ctx context.Context, dnatEntry models.INatHelper, err error) { - dnatEntry.SetStatus(self.UserCred, api.NAT_STATUS_FAILED, err.Error()) - db.OpsLog.LogEvent(dnatEntry, db.ACT_ALLOCATE_FAIL, err.Error(), self.UserCred) +func (self *SNatDEntryCreateTask) TaskFailed(ctx context.Context, dnatEntry models.INatHelper, reason jsonutils.JSONObject) { + dnatEntry.SetStatus(self.UserCred, api.NAT_STATUS_FAILED, reason.String()) + db.OpsLog.LogEvent(dnatEntry, db.ACT_ALLOCATE_FAIL, reason.String(), self.UserCred) natgateway, err := dnatEntry.GetNatgateway() if err == nil { - logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_CREATE_DNAT, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_CREATE_DNAT, reason, self.UserCred, false) } else { - logclient.AddActionLogWithStartable(self, dnatEntry, logclient.ACT_ALLOCATE, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, dnatEntry, logclient.ACT_ALLOCATE, reason, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, reason) } func (self *SNatDEntryCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -59,7 +58,7 @@ func (self *SNatDEntryCreateTask) OnInit(ctx context.Context, obj db.IStandalone func (self *SNatDEntryCreateTask) OnBindIPCompleteFailed(ctx context.Context, dnatEntry *models.SNatDEntry, reason jsonutils.JSONObject) { - self.TaskFailed(ctx, dnatEntry, fmt.Errorf(reason.String())) + self.TaskFailed(ctx, dnatEntry, reason) } func (self *SNatDEntryCreateTask) OnBindIPComplete(ctx context.Context, dnatEntry *models.SNatDEntry, @@ -67,7 +66,7 @@ func (self *SNatDEntryCreateTask) OnBindIPComplete(ctx context.Context, dnatEntr cloudNatGateway, err := dnatEntry.GetINatGateway() if err != nil { - self.TaskFailed(ctx, dnatEntry, errors.Wrap(err, "Get NatGateway failed")) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("Get NatGateway failed: %s", err))) return } @@ -90,19 +89,19 @@ func (self *SNatDEntryCreateTask) OnBindIPComplete(ctx context.Context, dnatEntr log.Errorf("roll back after failing to create dnat in cloud so that eip %s need to sync with cloud", eip_id) } } - self.TaskFailed(ctx, dnatEntry, errors.Wrapf(err, "Create DNat Entry '%s' failed", dnatEntry.ExternalId)) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("Create DNat Entry '%s' failed: %s", dnatEntry.ExternalId, err))) return } err = cloudprovider.WaitStatus(extDnat, api.NAT_STAUTS_AVAILABLE, 10*time.Second, 300*time.Second) if err != nil { - self.TaskFailed(ctx, dnatEntry, err) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(err.Error())) return } err = db.SetExternalId(dnatEntry, self.UserCred, extDnat.GetGlobalId()) if err != nil { - self.TaskFailed(ctx, dnatEntry, errors.Wrap(err, "set external id failed")) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("set external id failed: %s", err))) return } diff --git a/pkg/compute/tasks/natdentry_delete_task.go b/pkg/compute/tasks/natdentry_delete_task.go index c18e0e836c..f07a83a7fc 100644 --- a/pkg/compute/tasks/natdentry_delete_task.go +++ b/pkg/compute/tasks/natdentry_delete_task.go @@ -16,11 +16,11 @@ package tasks import ( "context" + "fmt" "time" "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -38,14 +38,16 @@ func init() { taskman.RegisterTask(SNatDEntryDeleteTask{}) } -func (self *SNatDEntryDeleteTask) TaskFailed(ctx context.Context, dnatEntry *models.SNatDEntry, err error) { - dnatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(dnatEntry, db.ACT_DELOCATE_FAIL, err.Error(), self.UserCred) +func (self *SNatDEntryDeleteTask) TaskFailed(ctx context.Context, dnatEntry *models.SNatDEntry, reason jsonutils.JSONObject) { + dnatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETE_FAILED, reason.String()) + db.OpsLog.LogEvent(dnatEntry, db.ACT_DELOCATE_FAIL, reason, self.UserCred) natgateway, err := dnatEntry.GetNatgateway() - if err != nil { - logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_DELETE_DNAT, nil, self.UserCred, false) + if err == nil { + logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_DELETE_DNAT, reason, self.UserCred, false) + } else { + logclient.AddActionLogWithStartable(self, dnatEntry, logclient.ACT_NAT_DELETE_DNAT, reason, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, reason) } func (self *SNatDEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -53,11 +55,11 @@ func (self *SNatDEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone dnatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETING, "") natgateway, err := dnatEntry.GetNatgateway() if err != nil { - self.TaskFailed(ctx, dnatEntry, err) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(err.Error())) } cloudNatGateway, err := dnatEntry.GetINatGateway() if err != nil { - self.TaskFailed(ctx, dnatEntry, errors.Wrap(err, "Get NatGateway failed")) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("Get NatGateway failed: %s", err))) return } @@ -65,25 +67,25 @@ func (self *SNatDEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone if err == cloudprovider.ErrNotFound { // already delete } else if err != nil { - self.TaskFailed(ctx, dnatEntry, errors.Wrapf(err, "Get DNat Entry by ID '%s' failed", dnatEntry.ExternalId)) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("Get DNat Entry by ID '%s' failed", dnatEntry.ExternalId))) return } else if cloudNatDEntry != nil { err = cloudNatDEntry.Delete() if err != nil { - self.TaskFailed(ctx, dnatEntry, errors.Wrapf(err, "Delete DNat Entry '%s' failed", dnatEntry.ExternalId)) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("Delete DNat Entry '%s' failed: %s", dnatEntry.ExternalId, err))) return } err = cloudprovider.WaitDeleted(cloudNatDEntry, 10*time.Second, 300*time.Second) if err != nil { - self.TaskFailed(ctx, dnatEntry, err) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(err.Error())) return } } err = dnatEntry.Purge(ctx, self.UserCred) if err != nil { - self.TaskFailed(ctx, dnatEntry, err) + self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(err.Error())) return } diff --git a/pkg/compute/tasks/natgateway_syncstatus_task.go b/pkg/compute/tasks/natgateway_syncstatus_task.go index fdd6b52d4c..33e69f26ad 100644 --- a/pkg/compute/tasks/natgateway_syncstatus_task.go +++ b/pkg/compute/tasks/natgateway_syncstatus_task.go @@ -19,7 +19,6 @@ import ( "fmt" "yunion.io/x/jsonutils" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -36,11 +35,11 @@ func init() { taskman.RegisterTask(NatGatewaySyncstatusTask{}) } -func (self *NatGatewaySyncstatusTask) taskFailed(ctx context.Context, natgateway *models.SNatGateway, err error) { - natgateway.SetStatus(self.GetUserCred(), api.NAT_STATUS_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *NatGatewaySyncstatusTask) taskFailed(ctx context.Context, natgateway *models.SNatGateway, reason jsonutils.JSONObject) { + natgateway.SetStatus(self.GetUserCred(), api.NAT_STATUS_UNKNOWN, reason.String()) + self.SetStageFailed(ctx, reason) db.OpsLog.LogEvent(natgateway, db.ACT_SYNC_STATUS, natgateway.GetShortDesc(ctx), self.GetUserCred()) - logclient.AddActionLogWithContext(ctx, natgateway, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) + logclient.AddActionLogWithContext(ctx, natgateway, logclient.ACT_SYNC_STATUS, reason, self.UserCred, false) } func (self *NatGatewaySyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -48,14 +47,14 @@ func (self *NatGatewaySyncstatusTask) OnInit(ctx context.Context, obj db.IStanda region := natgateway.GetRegion() if region == nil { - self.taskFailed(ctx, natgateway, fmt.Errorf("failed to found cloudregion for natgateway %s(%s)", natgateway.Name, natgateway.Id)) + self.taskFailed(ctx, natgateway, jsonutils.NewString(fmt.Sprintf("failed to found cloudregion for natgateway %s(%s)", natgateway.Name, natgateway.Id))) return } self.SetStage("OnNatGatewaySyncStatusComplete", nil) err := region.GetDriver().RequestSyncNatGatewayStatus(ctx, self.GetUserCred(), natgateway, self) if err != nil { - self.taskFailed(ctx, natgateway, errors.Wrap(err, "RequestSyncNatGatewayStatus")) + self.taskFailed(ctx, natgateway, jsonutils.Marshal(err)) return } } @@ -65,5 +64,5 @@ func (self *NatGatewaySyncstatusTask) OnNatGatewaySyncStatusComplete(ctx context } func (self *NatGatewaySyncstatusTask) OnNatGatewaySyncStatusCompleteFailed(ctx context.Context, natgateway *models.SNatGateway, data jsonutils.JSONObject) { - self.taskFailed(ctx, natgateway, fmt.Errorf(data.String())) + self.taskFailed(ctx, natgateway, data) } diff --git a/pkg/compute/tasks/natsentry_create_task.go b/pkg/compute/tasks/natsentry_create_task.go index 320b009d70..30398908a1 100644 --- a/pkg/compute/tasks/natsentry_create_task.go +++ b/pkg/compute/tasks/natsentry_create_task.go @@ -21,7 +21,6 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -39,16 +38,16 @@ func init() { taskman.RegisterTask(SNatSEntryCreateTask{}) } -func (self *SNatSEntryCreateTask) TaskFailed(ctx context.Context, snatEntry models.INatHelper, err error) { - snatEntry.SetStatus(self.UserCred, api.NAT_STATUS_FAILED, err.Error()) - db.OpsLog.LogEvent(snatEntry, db.ACT_ALLOCATE_FAIL, err.Error(), self.UserCred) +func (self *SNatSEntryCreateTask) TaskFailed(ctx context.Context, snatEntry models.INatHelper, reason jsonutils.JSONObject) { + snatEntry.SetStatus(self.UserCred, api.NAT_STATUS_FAILED, reason.String()) + db.OpsLog.LogEvent(snatEntry, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) natgateway, err := snatEntry.GetNatgateway() if err == nil { - logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_CREATE_SNAT, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_CREATE_SNAT, reason, self.UserCred, false) } else { - logclient.AddActionLogWithStartable(self, snatEntry, logclient.ACT_ALLOCATE, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, snatEntry, logclient.ACT_ALLOCATE, reason, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, reason) } func (self *SNatSEntryCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -59,7 +58,7 @@ func (self *SNatSEntryCreateTask) OnInit(ctx context.Context, obj db.IStandalone func (self *SNatSEntryCreateTask) OnBindIPCompleteFailed(ctx context.Context, snatEntry *models.SNatSEntry, reason jsonutils.JSONObject) { - self.TaskFailed(ctx, snatEntry, fmt.Errorf(reason.String())) + self.TaskFailed(ctx, snatEntry, reason) } func (self *SNatSEntryCreateTask) OnBindIPComplete(ctx context.Context, snatEntry *models.SNatSEntry, @@ -67,7 +66,7 @@ func (self *SNatSEntryCreateTask) OnBindIPComplete(ctx context.Context, snatEntr cloudNatGateway, err := snatEntry.GetINatGateway() if err != nil { - self.TaskFailed(ctx, snatEntry, errors.Wrap(err, "Get NatGateway failed")) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("Get NatGateway failed: %s", err))) return } @@ -93,19 +92,19 @@ func (self *SNatSEntryCreateTask) OnBindIPComplete(ctx context.Context, snatEntr log.Errorf("roll back after failing to create snat in cloud so that eip %s need to sync with cloud", eip_id) } } - self.TaskFailed(ctx, snatEntry, errors.Wrapf(err, "Create SNat Entry '%s' failed", snatEntry.ExternalId)) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("Create SNat Entry '%s' failed: %s", snatEntry.ExternalId, err))) return } err = cloudprovider.WaitStatus(extSnat, api.NAT_STAUTS_AVAILABLE, 10*time.Second, 300*time.Second) if err != nil { - self.TaskFailed(ctx, snatEntry, err) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(err.Error())) return } err = db.SetExternalId(snatEntry, self.UserCred, extSnat.GetGlobalId()) if err != nil { - self.TaskFailed(ctx, snatEntry, errors.Wrap(err, "set external id failed")) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("set external id failed: %s", err))) return } diff --git a/pkg/compute/tasks/natsentry_delete_task.go b/pkg/compute/tasks/natsentry_delete_task.go index 809ece6474..abbda2b53d 100644 --- a/pkg/compute/tasks/natsentry_delete_task.go +++ b/pkg/compute/tasks/natsentry_delete_task.go @@ -16,11 +16,11 @@ package tasks import ( "context" + "fmt" "time" "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -38,16 +38,16 @@ func init() { taskman.RegisterTask(SNatSEntryDeleteTask{}) } -func (self *SNatSEntryDeleteTask) TaskFailed(ctx context.Context, snatEntry *models.SNatSEntry, err error) { - snatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(snatEntry, db.ACT_DELOCATE_FAIL, err.Error(), self.UserCred) +func (self *SNatSEntryDeleteTask) TaskFailed(ctx context.Context, snatEntry *models.SNatSEntry, reason jsonutils.JSONObject) { + snatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETE_FAILED, reason.String()) + db.OpsLog.LogEvent(snatEntry, db.ACT_DELOCATE_FAIL, reason, self.UserCred) natgateway, err := snatEntry.GetNatgateway() if err == nil { - logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_DELETE_SNAT, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, natgateway, logclient.ACT_NAT_DELETE_SNAT, reason, self.UserCred, false) } else { - logclient.AddActionLogWithStartable(self, snatEntry, logclient.ACT_DELETE, nil, self.UserCred, false) + logclient.AddActionLogWithStartable(self, snatEntry, logclient.ACT_DELETE, reason, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, reason) } func (self *SNatSEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -55,36 +55,37 @@ func (self *SNatSEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone snatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETING, "") natgateway, err := snatEntry.GetNatgateway() if err != nil { - self.TaskFailed(ctx, snatEntry, err) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(err.Error())) + return } cloudNatGateway, err := snatEntry.GetINatGateway() if err != nil { - self.TaskFailed(ctx, snatEntry, errors.Wrap(err, "Get NatGateway failed")) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("Get NatGateway failed: %s", err))) return } cloudNatSEntry, err := cloudNatGateway.GetINatSEntryByID(snatEntry.ExternalId) if err == cloudprovider.ErrNotFound { //already delete } else if err != nil { - self.TaskFailed(ctx, snatEntry, errors.Wrapf(err, "Get SNat Entry by ID '%s' failed", snatEntry.ExternalId)) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("Get SNat Entry by ID '%s' failed: %s", snatEntry.ExternalId, err))) return } else if cloudNatSEntry != nil { err = cloudNatSEntry.Delete() if err != nil { - self.TaskFailed(ctx, snatEntry, errors.Wrapf(err, "Delete SNat Entry '%s' failed", snatEntry.ExternalId)) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("Delete SNat Entry '%s' failed: %s", snatEntry.ExternalId, err))) return } err = cloudprovider.WaitDeleted(cloudNatSEntry, 10*time.Second, 300*time.Second) if err != nil { - self.TaskFailed(ctx, snatEntry, err) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(err.Error())) return } } err = snatEntry.Purge(ctx, self.UserCred) if err != nil { - self.TaskFailed(ctx, snatEntry, err) + self.TaskFailed(ctx, snatEntry, jsonutils.NewString(err.Error())) return } diff --git a/pkg/compute/tasks/network_create_task.go b/pkg/compute/tasks/network_create_task.go index e962df1153..f2c626d981 100644 --- a/pkg/compute/tasks/network_create_task.go +++ b/pkg/compute/tasks/network_create_task.go @@ -39,11 +39,14 @@ func init() { } func (self *NetworkCreateTask) taskFailed(ctx context.Context, network *models.SNetwork, event string, err error) { - log.Errorf("network create task fail on %s: %s", event, err) - network.SetStatus(self.UserCred, api.NETWORK_STATUS_FAILED, err.Error()) - db.OpsLog.LogEvent(network, db.ACT_ALLOCATE_FAIL, err.Error(), self.UserCred) - logclient.AddActionLogWithStartable(self, network, logclient.ACT_CREATE, event, self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + log.Errorf("network create task fail on %s: %s", event, err.Error()) + reason := jsonutils.NewDict() + reason.Set("event", jsonutils.NewString(event)) + reason.Set("reason", jsonutils.NewString(err.Error())) + network.SetStatus(self.UserCred, api.NETWORK_STATUS_FAILED, reason.String()) + db.OpsLog.LogEvent(network, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) + logclient.AddActionLogWithStartable(self, network, logclient.ACT_CREATE, reason, self.UserCred, false) + self.SetStageFailed(ctx, reason) } func (self *NetworkCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/network_delete_task.go b/pkg/compute/tasks/network_delete_task.go index 9898f97171..acadf6887f 100644 --- a/pkg/compute/tasks/network_delete_task.go +++ b/pkg/compute/tasks/network_delete_task.go @@ -36,12 +36,12 @@ func init() { taskman.RegisterTask(NetworkDeleteTask{}) } -func (self *NetworkDeleteTask) taskFailed(ctx context.Context, network *models.SNetwork, err error) { - log.Errorf("network delete task fail: %s", err) - network.SetStatus(self.UserCred, api.NETWORK_STATUS_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(network, db.ACT_ALLOCATE_FAIL, err.Error(), self.UserCred) - logclient.AddActionLogWithStartable(self, network, logclient.ACT_DELETE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) +func (self *NetworkDeleteTask) taskFailed(ctx context.Context, network *models.SNetwork, reason jsonutils.JSONObject) { + log.Errorf("network delete task fail: %s", reason) + network.SetStatus(self.UserCred, api.NETWORK_STATUS_DELETE_FAILED, reason.String()) + db.OpsLog.LogEvent(network, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) + logclient.AddActionLogWithStartable(self, network, logclient.ACT_DELETE, reason, self.UserCred, false) + self.SetStageFailed(ctx, reason) } func (self *NetworkDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -54,13 +54,13 @@ func (self *NetworkDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneMod if inet != nil { err = inet.Delete() if err != nil { - self.taskFailed(ctx, network, err) + self.taskFailed(ctx, network, jsonutils.NewString(err.Error())) return } } else if err == cloudprovider.ErrNotFound { // already deleted, do nothing } else { - self.taskFailed(ctx, network, err) + self.taskFailed(ctx, network, jsonutils.NewString(err.Error())) return } diff --git a/pkg/compute/tasks/network_syncstatus_task.go b/pkg/compute/tasks/network_syncstatus_task.go index 05c9a89ded..4c473ec9f9 100644 --- a/pkg/compute/tasks/network_syncstatus_task.go +++ b/pkg/compute/tasks/network_syncstatus_task.go @@ -35,11 +35,11 @@ func init() { taskman.RegisterTask(NetworkSyncstatusTask{}) } -func (self *NetworkSyncstatusTask) taskFail(ctx context.Context, net *models.SNetwork, msg string) { - net.SetStatus(self.UserCred, api.NETWORK_STATUS_UNKNOWN, msg) - db.OpsLog.LogEvent(net, db.ACT_SYNC_STATUS, msg, self.GetUserCred()) - logclient.AddActionLogWithStartable(self, net, logclient.ACT_SYNC_STATUS, msg, self.UserCred, false) - self.SetStageFailed(ctx, msg) +func (self *NetworkSyncstatusTask) taskFail(ctx context.Context, net *models.SNetwork, reason jsonutils.JSONObject) { + net.SetStatus(self.UserCred, api.NETWORK_STATUS_UNKNOWN, reason.String()) + db.OpsLog.LogEvent(net, db.ACT_SYNC_STATUS, reason, self.GetUserCred()) + logclient.AddActionLogWithStartable(self, net, logclient.ACT_SYNC_STATUS, reason, self.UserCred, false) + self.SetStageFailed(ctx, reason) } func (self *NetworkSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -48,21 +48,21 @@ func (self *NetworkSyncstatusTask) OnInit(ctx context.Context, obj db.IStandalon extNet, err := net.GetINetwork() if err != nil { msg := fmt.Sprintf("fail to find ICloudNetwork for network %s", err) - self.taskFail(ctx, net, msg) + self.taskFail(ctx, net, jsonutils.NewString(msg)) return } err = extNet.Refresh() if err != nil { msg := fmt.Sprintf("fail to refresh ICloudNetwork status %s", err) - self.taskFail(ctx, net, msg) + self.taskFail(ctx, net, jsonutils.NewString(msg)) return } err = net.SyncWithCloudNetwork(ctx, self.UserCred, extNet, nil, nil) if err != nil { msg := fmt.Sprintf("fail to sync network status %s", err) - self.taskFail(ctx, net, msg) + self.taskFail(ctx, net, jsonutils.NewString(msg)) return } diff --git a/pkg/compute/tasks/scaling_group_delete_task.go b/pkg/compute/tasks/scaling_group_delete_task.go index 16d0c84d2c..6e8ced9f58 100644 --- a/pkg/compute/tasks/scaling_group_delete_task.go +++ b/pkg/compute/tasks/scaling_group_delete_task.go @@ -38,9 +38,9 @@ func init() { taskman.RegisterTask(ScalingGroupDeleteTask{}) } -func (self *ScalingGroupDeleteTask) taskFailed(ctx context.Context, sg *models.SScalingGroup, reason string) { +func (self *ScalingGroupDeleteTask) taskFailed(ctx context.Context, sg *models.SScalingGroup, reason jsonutils.JSONObject) { log.Errorf("scaling group delete task fail: %s", reason) - sg.SetStatus(self.UserCred, api.SG_STATUS_DELETE_FAILED, reason) + sg.SetStatus(self.UserCred, api.SG_STATUS_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(sg, db.ACT_DELETE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, sg, logclient.ACT_DELETE, reason, self.UserCred, false) self.SetStageFailed(ctx, reason) @@ -53,7 +53,7 @@ func (self *ScalingGroupDeleteTask) OnInit(ctx context.Context, obj db.IStandalo // Set all scaling policy's status as deleting sps, err := sg.ScalingPolicies() if err != nil { - self.taskFailed(ctx, sg, err.Error()) + self.taskFailed(ctx, sg, jsonutils.NewString(err.Error())) return } spids := make([]string, len(sps)) @@ -62,8 +62,8 @@ func (self *ScalingGroupDeleteTask) OnInit(ctx context.Context, obj db.IStandalo lockman.LockObject(ctx, &sps[i]) err := sps[i].SetStatus(self.UserCred, api.SP_STATUS_DELETING, "delete scaling group") if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("set scaling policy %s as deleting status failed: %s", - sps[i].GetId(), err)) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("set scaling policy %s as deleting status failed: %s", + sps[i].GetId(), err))) return } lockman.ReleaseObject(ctx, &sps[i]) @@ -93,34 +93,34 @@ func (self *ScalingGroupDeleteTask) OnInit(ctx context.Context, obj db.IStandalo time.Sleep(time.Duration(interval) * time.Second) } if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("wait for all scaling activities finished: %s", err)) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("wait for all scaling activities finished: %s", err))) return } if !allReady { - self.taskFailed(ctx, sg, "some scaling activities are still in progress") + self.taskFailed(ctx, sg, jsonutils.NewString("some scaling activities are still in progress")) return } count, err := sg.GuestNumber() if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("SScalingGroup.GuestNumber: %s", err)) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("SScalingGroup.GuestNumber: %s", err))) return } if count != 0 { - self.taskFailed(ctx, sg, fmt.Sprintf("There are some guests in ScalingGroup, please delete them firstly")) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("There are some guests in ScalingGroup, please delete them firstly"))) return } // delete SScalingPolicies policies, err := sg.ScalingPolicies() if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("SScalingGroup.ScalingPolicies: %s", err.Error())) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("SScalingGroup.ScalingPolicies: %s", err.Error()))) return } for i := range policies { err := policies[i].RealDelete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("delete scaling group '%s' failed: %s", policies[i].GetId(), err.Error())) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("delete scaling group '%s' failed: %s", policies[i].GetId(), err.Error()))) return } } @@ -128,18 +128,18 @@ func (self *ScalingGroupDeleteTask) OnInit(ctx context.Context, obj db.IStandalo // delete SScalingAvtivities activities, err := sg.Activities() if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("ScalingGroup.Activities: %s", err.Error())) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("ScalingGroup.Activities: %s", err.Error()))) } for i := range activities { err := activities[i].Delete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("delete scaling activity '%s' failed: %s", activities[i].Id, err.Error())) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("delete scaling activity '%s' failed: %s", activities[i].Id, err.Error()))) return } } err = sg.RealDelete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, sg, fmt.Sprintf("ScalingGroup.RealDelete: %s", err.Error())) + self.taskFailed(ctx, sg, jsonutils.NewString(fmt.Sprintf("ScalingGroup.RealDelete: %s", err.Error()))) } } diff --git a/pkg/compute/tasks/schedule.go b/pkg/compute/tasks/schedule.go index 93ece147b5..0325e5b9d5 100644 --- a/pkg/compute/tasks/schedule.go +++ b/pkg/compute/tasks/schedule.go @@ -46,14 +46,14 @@ type IScheduleTask interface { GetSchedParams() (*schedapi.ScheduleInput, error) GetPendingUsage(quota quotas.IQuota, index int) error SetStage(stageName string, data *jsonutils.JSONDict) error - SetStageFailed(ctx context.Context, reason string) + SetStageFailed(ctx context.Context, reason jsonutils.JSONObject) OnStartSchedule(obj IScheduleModel) - OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason string) + OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason jsonutils.JSONObject) // OnScheduleComplete(ctx context.Context, items []db.IStandaloneModel, data *jsonutils.JSONDict) SaveScheduleResult(ctx context.Context, obj IScheduleModel, candidate *schedapi.CandidateResource) SaveScheduleResultWithBackup(ctx context.Context, obj IScheduleModel, master, slave *schedapi.CandidateResource) - OnScheduleFailed(ctx context.Context, reason string) + OnScheduleFailed(ctx context.Context, reason jsonutils.JSONObject) } type SSchedTask struct { @@ -66,11 +66,11 @@ func (self *SSchedTask) OnStartSchedule(obj IScheduleModel) { obj.SetStatus(self.GetUserCred(), api.VM_SCHEDULE, "") } -func (self *SSchedTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason string) { - obj.SetStatus(self.GetUserCred(), api.VM_SCHEDULE_FAILED, reason) +func (self *SSchedTask) OnScheduleFailCallback(ctx context.Context, obj IScheduleModel, reason jsonutils.JSONObject) { + obj.SetStatus(self.GetUserCred(), api.VM_SCHEDULE_FAILED, reason.String()) db.OpsLog.LogEvent(obj, db.ACT_ALLOCATE_FAIL, reason, self.GetUserCred()) logclient.AddActionLogWithStartable(self, obj, logclient.ACT_ALLOCATE, reason, self.GetUserCred(), false) - notifyclient.NotifySystemError(obj.GetId(), obj.GetName(), api.VM_SCHEDULE_FAILED, reason) + notifyclient.NotifySystemError(obj.GetId(), obj.GetName(), api.VM_SCHEDULE_FAILED, reason.String()) } func (self *SSchedTask) OnScheduleComplete(ctx context.Context, items []db.IStandaloneModel, data *jsonutils.JSONDict) { @@ -85,7 +85,7 @@ func (self *SSchedTask) SaveScheduleResultWithBackup(ctx context.Context, obj IS // ... } -func (self *SSchedTask) OnScheduleFailed(ctx context.Context, reason string) { +func (self *SSchedTask) OnScheduleFailed(ctx context.Context, reason jsonutils.JSONObject) { self.SetStageFailed(ctx, reason) } @@ -110,7 +110,7 @@ func doScheduleObjects( ) { schedInput, err := task.GetSchedParams() if err != nil { - onSchedulerRequestFail(ctx, task, objs, fmt.Sprintf("Scheduler fail: %s", err)) + onSchedulerRequestFail(ctx, task, objs, jsonutils.NewString(fmt.Sprintf("GetSchedParams fail: %s", err))) return } //schedInput = models.ApplySchedPolicies(schedInput) @@ -132,7 +132,7 @@ func doScheduleObjects( s := auth.GetAdminSession(ctx, options.Options.Region, "") output, err := modules.SchedManager.DoSchedule(s, schedInput, len(objs)) if err != nil { - onSchedulerRequestFail(ctx, task, objs, fmt.Sprintf("Scheduler fail: %s", err)) + onSchedulerRequestFail(ctx, task, objs, jsonutils.Marshal(err)) return } onSchedulerResults(ctx, task, objs, output.Candidates) @@ -147,12 +147,12 @@ func onSchedulerRequestFail( ctx context.Context, task IScheduleTask, objs []IScheduleModel, - reason string, + reason jsonutils.JSONObject, ) { for _, obj := range objs { onObjScheduleFail(ctx, task, obj, reason) } - task.OnScheduleFailed(ctx, fmt.Sprintf("Schedule failed: %s", reason)) + task.OnScheduleFailed(ctx, reason) cancelPendingUsage(ctx, task) } @@ -160,14 +160,15 @@ func onObjScheduleFail( ctx context.Context, task IScheduleTask, obj IScheduleModel, - msg string, + msg jsonutils.JSONObject, ) { lockman.LockObject(ctx, obj) defer lockman.ReleaseObject(ctx, obj) - reason := "No matching resources" - if len(msg) > 0 { - reason = fmt.Sprintf("%s: %s", reason, msg) + var reason jsonutils.JSONObject + reason = jsonutils.NewString("No matching resources") + if msg != nil { + reason = jsonutils.NewArray(reason, msg) } task.OnScheduleFailCallback(ctx, obj, reason) } @@ -184,7 +185,7 @@ func onSchedulerResults( result := results[idx] if len(result.Error) != 0 { - onObjScheduleFail(ctx, task, obj, fmt.Sprintf("%s", result.Error)) + onObjScheduleFail(ctx, task, obj, jsonutils.NewString(result.Error)) continue } @@ -198,7 +199,7 @@ func onSchedulerResults( succCount += 1 } if succCount == 0 { - task.OnScheduleFailed(ctx, "Schedule failed") + task.OnScheduleFailed(ctx, jsonutils.NewString("Schedule failed")) } cancelPendingUsage(ctx, task) } diff --git a/pkg/compute/tasks/secgroup_group_cache_task.go b/pkg/compute/tasks/secgroup_group_cache_task.go index 6f85daca3d..9d57d19141 100644 --- a/pkg/compute/tasks/secgroup_group_cache_task.go +++ b/pkg/compute/tasks/secgroup_group_cache_task.go @@ -34,8 +34,8 @@ func init() { taskman.RegisterTask(SecurityGroupCacheTask{}) } -func (self *SecurityGroupCacheTask) taskFailed(ctx context.Context, secgroup *models.SSecurityGroup, err error) { - self.SetStageFailed(ctx, err.Error()) +func (self *SecurityGroupCacheTask) taskFailed(ctx context.Context, secgroup *models.SSecurityGroup, reason jsonutils.JSONObject) { + self.SetStageFailed(ctx, reason) } func (self *SecurityGroupCacheTask) getVpc() (*models.SVpc, error) { @@ -55,13 +55,13 @@ func (self *SecurityGroupCacheTask) OnInit(ctx context.Context, obj db.IStandalo vpc, err := self.getVpc() if err != nil { - self.taskFailed(ctx, secgroup, errors.Wrap(err, "self.getVpc()")) + self.taskFailed(ctx, secgroup, jsonutils.NewString(errors.Wrap(err, "self.getVpc()").Error())) return } region, err := vpc.GetRegion() if err != nil { - self.taskFailed(ctx, secgroup, errors.Wrap(err, "vpc.GetRegion")) + self.taskFailed(ctx, secgroup, jsonutils.NewString(errors.Wrap(err, "vpc.GetRegion").Error())) return } @@ -71,7 +71,7 @@ func (self *SecurityGroupCacheTask) OnInit(ctx context.Context, obj db.IStandalo err = region.GetDriver().RequestCacheSecurityGroup(ctx, self.UserCred, region, vpc, secgroup, classic, self) if err != nil { - self.taskFailed(ctx, secgroup, errors.Wrap(err, "RequestCacheSecgroup")) + self.taskFailed(ctx, secgroup, jsonutils.Marshal(err)) return } } @@ -81,5 +81,5 @@ func (self *SecurityGroupCacheTask) OnCacheSecurityGroupComplete(ctx context.Con } func (self *SecurityGroupCacheTask) OnCacheSecurityGroupCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { - self.SetStageFailed(ctx, err.String()) + self.SetStageFailed(ctx, err) } diff --git a/pkg/compute/tasks/security_group_cache_delete_task.go b/pkg/compute/tasks/security_group_cache_delete_task.go index bab8c0d7cf..38c0041b37 100644 --- a/pkg/compute/tasks/security_group_cache_delete_task.go +++ b/pkg/compute/tasks/security_group_cache_delete_task.go @@ -37,13 +37,13 @@ func init() { taskman.RegisterTask(SecurityGroupCacheDeleteTask{}) } -func (self *SecurityGroupCacheDeleteTask) taskFailed(ctx context.Context, cache *models.SSecurityGroupCache, err error) { - cache.SetStatus(self.UserCred, api.SECGROUP_CACHE_STATUS_DELETE_FAILED, err.Error()) +func (self *SecurityGroupCacheDeleteTask) taskFailed(ctx context.Context, cache *models.SSecurityGroupCache, err jsonutils.JSONObject) { + cache.SetStatus(self.UserCred, api.SECGROUP_CACHE_STATUS_DELETE_FAILED, err.String()) secgroup, _ := cache.GetSecgroup() if secgroup != nil { logclient.AddActionLogWithStartable(self, secgroup, logclient.ACT_DELETE, err, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, err) } func (self *SecurityGroupCacheDeleteTask) taskComplete(ctx context.Context, cache *models.SSecurityGroupCache) { @@ -71,7 +71,7 @@ func (self *SecurityGroupCacheDeleteTask) OnInit(ctx context.Context, obj db.ISt self.taskComplete(ctx, cache) return } - self.taskFailed(ctx, cache, errors.Wrap(err, "cache.GetIRegion")) + self.taskFailed(ctx, cache, jsonutils.NewString(errors.Wrap(err, "cache.GetIRegion").Error())) return } iSecgroup, err := iRegion.GetISecurityGroupById(cache.ExternalId) @@ -80,12 +80,12 @@ func (self *SecurityGroupCacheDeleteTask) OnInit(ctx context.Context, obj db.ISt self.taskComplete(ctx, cache) return } - self.taskFailed(ctx, cache, errors.Wrap(err, "iRegion.GetIStoragecacheById")) + self.taskFailed(ctx, cache, jsonutils.NewString(errors.Wrap(err, "iRegion.GetIStoragecacheById").Error())) return } err = iSecgroup.Delete() if err != nil { - self.taskFailed(ctx, cache, err) + self.taskFailed(ctx, cache, jsonutils.NewString(err.Error())) return } self.taskComplete(ctx, cache) diff --git a/pkg/compute/tasks/server_sku_cache_task.go b/pkg/compute/tasks/server_sku_cache_task.go index 84db3e88f0..8be0c2ac5e 100644 --- a/pkg/compute/tasks/server_sku_cache_task.go +++ b/pkg/compute/tasks/server_sku_cache_task.go @@ -34,8 +34,8 @@ func init() { taskman.RegisterTask(ServerSkuCacheTask{}) } -func (self *ServerSkuCacheTask) taskFailed(ctx context.Context, sku *models.SServerSku, err error) { - self.SetStageFailed(ctx, err.Error()) +func (self *ServerSkuCacheTask) taskFailed(ctx context.Context, sku *models.SServerSku, err jsonutils.JSONObject) { + self.SetStageFailed(ctx, err) } func (self *ServerSkuCacheTask) getCloudregion() (*models.SCloudregion, error) { @@ -55,30 +55,30 @@ func (self *ServerSkuCacheTask) OnInit(ctx context.Context, obj db.IStandaloneMo cloudregion, err := self.getCloudregion() if err != nil { - self.taskFailed(ctx, sku, errors.Wrap(err, "self.getCloudregion()")) + self.taskFailed(ctx, sku, jsonutils.NewString(errors.Wrap(err, "self.getCloudregion()").Error())) return } cloudprovider := cloudregion.GetCloudprovider() if cloudprovider == nil { - self.taskFailed(ctx, sku, fmt.Errorf("failed to found cloudprovider for cloudregion %s(%s)", cloudregion.Name, cloudregion.Id)) + self.taskFailed(ctx, sku, jsonutils.NewString(fmt.Sprintf("failed to found cloudprovider for cloudregion %s(%s)", cloudregion.Name, cloudregion.Id))) return } provider, err := cloudprovider.GetProvider() if err != nil { - self.taskFailed(ctx, sku, errors.Wrap(err, "cloudprovider.GetProvider")) + self.taskFailed(ctx, sku, jsonutils.NewString(errors.Wrap(err, "cloudprovider.GetProvider").Error())) return } iRegion, err := provider.GetIRegionById(cloudregion.ExternalId) if err != nil { - self.taskFailed(ctx, sku, errors.Wrap(err, "provider.GetIRegionById")) + self.taskFailed(ctx, sku, jsonutils.NewString(errors.Wrap(err, "provider.GetIRegionById").Error())) return } iskus, err := iRegion.GetISkus() if err != nil { - self.taskFailed(ctx, sku, errors.Wrap(err, "provider.GetIRegionById")) + self.taskFailed(ctx, sku, jsonutils.NewString(errors.Wrap(err, "provider.GetIRegionById").Error())) return } @@ -91,7 +91,7 @@ func (self *ServerSkuCacheTask) OnInit(ctx context.Context, obj db.IStandaloneMo err = iRegion.CreateISku(sku.Name, sku.CpuCoreCount, sku.MemorySizeMB) if err != nil { - self.taskFailed(ctx, sku, errors.Wrap(err, "provider.GetIRegionById")) + self.taskFailed(ctx, sku, jsonutils.NewString(errors.Wrap(err, "provider.GetIRegionById").Error())) return } self.SetStageComplete(ctx, nil) diff --git a/pkg/compute/tasks/server_sku_delete_task.go b/pkg/compute/tasks/server_sku_delete_task.go index 1ed047a3a2..dc778f1f51 100644 --- a/pkg/compute/tasks/server_sku_delete_task.go +++ b/pkg/compute/tasks/server_sku_delete_task.go @@ -37,12 +37,11 @@ func init() { taskman.RegisterTask(ServerSkuDeleteTask{}) } -func (self *ServerSkuDeleteTask) taskFail(ctx context.Context, sku *models.SServerSku, msg string) { - sku.SetStatus(self.UserCred, api.SkuStatusDeleteFailed, msg) +func (self *ServerSkuDeleteTask) taskFail(ctx context.Context, sku *models.SServerSku, msg jsonutils.JSONObject) { + sku.SetStatus(self.UserCred, api.SkuStatusDeleteFailed, msg.String()) db.OpsLog.LogEvent(sku, db.ACT_DELOCATE, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, sku, logclient.ACT_DELETE, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) - return } func (self *ServerSkuDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -51,7 +50,7 @@ func (self *ServerSkuDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneM if !jsonutils.QueryBoolean(self.Params, "purge", false) { cloudproviders, err := sku.GetPrivateCloudproviders() if err != nil { - self.taskFail(ctx, sku, err.Error()) + self.taskFail(ctx, sku, jsonutils.NewString(err.Error())) return } @@ -83,7 +82,7 @@ func (self *ServerSkuDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneM err := sku.RealDelete(ctx, self.UserCred) if err != nil { err = errors.Wrapf(err, "sku.RealDelete") - self.taskFail(ctx, sku, err.Error()) + self.taskFail(ctx, sku, jsonutils.NewString(err.Error())) return } diff --git a/pkg/compute/tasks/snapshot_create_task.go b/pkg/compute/tasks/snapshot_create_task.go index d8cd7666c7..7614bffa11 100644 --- a/pkg/compute/tasks/snapshot_create_task.go +++ b/pkg/compute/tasks/snapshot_create_task.go @@ -39,8 +39,8 @@ func (self *SnapshotCreateTask) OnInit(ctx context.Context, obj db.IStandaloneMo self.DoDiskSnapshot(ctx, snapshot) } -func (self *SnapshotCreateTask) TaskFailed(ctx context.Context, snapshot *models.SSnapshot, reason string) { - snapshot.SetStatus(self.UserCred, api.SNAPSHOT_FAILED, reason) +func (self *SnapshotCreateTask) TaskFailed(ctx context.Context, snapshot *models.SSnapshot, reason jsonutils.JSONObject) { + snapshot.SetStatus(self.UserCred, api.SNAPSHOT_FAILED, reason.String()) db.OpsLog.LogEvent(snapshot, db.ACT_SNAPSHOT_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, snapshot, logclient.ACT_CREATE, reason, self.UserCred, false) self.SetStageFailed(ctx, reason) @@ -56,7 +56,7 @@ func (self *SnapshotCreateTask) TaskComplete(ctx context.Context, snapshot *mode func (self *SnapshotCreateTask) DoDiskSnapshot(ctx context.Context, snapshot *models.SSnapshot) { self.SetStage("OnCreateSnapshot", nil) if err := snapshot.GetRegionDriver().RequestCreateSnapshot(ctx, snapshot, self); err != nil { - self.TaskFailed(ctx, snapshot, err.Error()) + self.TaskFailed(ctx, snapshot, jsonutils.Marshal(err)) } } @@ -65,5 +65,5 @@ func (self *SnapshotCreateTask) OnCreateSnapshot(ctx context.Context, snapshot * } func (self *SnapshotCreateTask) OnCreateSnapshotFailed(ctx context.Context, snapshot *models.SSnapshot, data jsonutils.JSONObject) { - self.TaskFailed(ctx, snapshot, data.String()) + self.TaskFailed(ctx, snapshot, data) } diff --git a/pkg/compute/tasks/snapshot_delete_task.go b/pkg/compute/tasks/snapshot_delete_task.go index c6ada5d351..9799ba495f 100644 --- a/pkg/compute/tasks/snapshot_delete_task.go +++ b/pkg/compute/tasks/snapshot_delete_task.go @@ -41,13 +41,13 @@ type SnapshotDeleteTask struct { } func (self *SnapshotDeleteTask) OnRequestSnapshotFailed(ctx context.Context, snapshot *models.SSnapshot, data jsonutils.JSONObject) { - self.TaskFailed(ctx, snapshot, data.String()) + self.TaskFailed(ctx, snapshot, data) } func (self *SnapshotDeleteTask) OnRequestSnapshot(ctx context.Context, snapshot *models.SSnapshot, data jsonutils.JSONObject) { err := snapshot.GetRegionDriver().OnSnapshotDelete(ctx, snapshot, self, data) if err != nil { - self.TaskFailed(ctx, snapshot, err.Error()) + self.TaskFailed(ctx, snapshot, jsonutils.NewString(err.Error())) } } @@ -73,7 +73,7 @@ func (self *SnapshotDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneMo self.SetStage("OnRequestSnapshot", nil) if err := regionDriver.RequestDeleteSnapshot(ctx, snapshot, self); err != nil { - self.TaskFailed(ctx, snapshot, err.Error()) + self.TaskFailed(ctx, snapshot, jsonutils.Marshal(err)) } } @@ -104,7 +104,7 @@ func (self *SnapshotDeleteTask) OnDeleteSnapshot(ctx context.Context, snapshot * } func (self *SnapshotDeleteTask) OnDeleteSnapshotFailed(ctx context.Context, snapshot *models.SSnapshot, data jsonutils.JSONObject) { - self.TaskFailed(ctx, snapshot, data.String()) + self.TaskFailed(ctx, snapshot, data) } func (self *SnapshotDeleteTask) OnReloadDiskSnapshot(ctx context.Context, snapshot *models.SSnapshot, data jsonutils.JSONObject) { @@ -115,7 +115,7 @@ func (self *SnapshotDeleteTask) OnReloadDiskSnapshot(ctx context.Context, snapsh guest, err := snapshot.GetGuest() if err != nil { - self.TaskFailed(ctx, snapshot, err.Error()) + self.TaskFailed(ctx, snapshot, jsonutils.NewString(err.Error())) return } if snapshot.FakeDeleted { @@ -126,7 +126,7 @@ func (self *SnapshotDeleteTask) OnReloadDiskSnapshot(ctx context.Context, snapsh self.SetStage("OnDeleteSnapshot", nil) err = guest.GetDriver().RequestDeleteSnapshot(ctx, guest, self, params) if err != nil { - self.TaskFailed(ctx, snapshot, err.Error()) + self.TaskFailed(ctx, snapshot, jsonutils.Marshal(err)) } } else { self.TaskComplete(ctx, snapshot, nil) @@ -145,7 +145,7 @@ func (self *SnapshotDeleteTask) TaskComplete(ctx context.Context, snapshot *mode guest.StartSyncstatus(ctx, self.UserCred, "") } -func (self *SnapshotDeleteTask) TaskFailed(ctx context.Context, snapshot *models.SSnapshot, reason string) { +func (self *SnapshotDeleteTask) TaskFailed(ctx context.Context, snapshot *models.SSnapshot, reason jsonutils.JSONObject) { if snapshot.Status == api.SNAPSHOT_DELETING { snapshot.SetStatus(self.UserCred, api.SNAPSHOT_READY, "On SnapshotDeleteTask TaskFailed") } @@ -174,13 +174,13 @@ func (self *BatchSnapshotsDeleteTask) OnInit(ctx context.Context, obj db.IStanda func (self *BatchSnapshotsDeleteTask) StartStorageDeleteSnapshot(ctx context.Context, snapshot *models.SSnapshot) { host := snapshot.GetHost() if host == nil { - self.SetStageFailed(ctx, "Cannot found snapshot host") + self.SetStageFailed(ctx, jsonutils.NewString("Cannot found snapshot host")) return } self.SetStage("OnStorageDeleteSnapshot", nil) err := host.GetHostDriver().RequestDeleteSnapshotsWithStorage(ctx, host, snapshot, self) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } } @@ -289,5 +289,5 @@ func (self *DiskDeleteSnapshotsTask) OnSnapshotDelete(ctx context.Context, disk func (self *DiskDeleteSnapshotsTask) OnSnapshotDeleteFailed(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { log.Errorf("Delete disk snapshots failed %s", data.String()) - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/snapshot_policy_cache_delete_task.go b/pkg/compute/tasks/snapshot_policy_cache_delete_task.go index 31817934e9..c83a7e5d51 100644 --- a/pkg/compute/tasks/snapshot_policy_cache_delete_task.go +++ b/pkg/compute/tasks/snapshot_policy_cache_delete_task.go @@ -34,10 +34,10 @@ func init() { } func (self *SnapshotPolicyCacheDeleteTask) taskFailed(ctx context.Context, cache *models.SSnapshotPolicyCache, - err error) { + err jsonutils.JSONObject) { - cache.SetStatus(self.UserCred, api.SNAPSHOT_POLICY_CACHE_STATUS_DELETE_FAILED, err.Error()) - self.SetStageFailed(ctx, err.Error()) + cache.SetStatus(self.UserCred, api.SNAPSHOT_POLICY_CACHE_STATUS_DELETE_FAILED, err.String()) + self.SetStageFailed(ctx, err) } func (self *SnapshotPolicyCacheDeleteTask) taskComplete(ctx context.Context, cache *models.SSnapshotPolicyCache) { @@ -57,7 +57,7 @@ func (self *SnapshotPolicyCacheDeleteTask) OnInit(ctx context.Context, obj db.IS err := cache.DeleteCloudSnapshotPolicy() if err != nil { - self.taskFailed(ctx, cache, err) + self.taskFailed(ctx, cache, jsonutils.NewString(err.Error())) return } self.taskComplete(ctx, cache) diff --git a/pkg/compute/tasks/snapshot_policy_delete_task.go b/pkg/compute/tasks/snapshot_policy_delete_task.go index 152216590b..19d2d0fb93 100644 --- a/pkg/compute/tasks/snapshot_policy_delete_task.go +++ b/pkg/compute/tasks/snapshot_policy_delete_task.go @@ -35,11 +35,11 @@ func init() { taskman.RegisterTask(SnapshotPolicyDeleteTask{}) } -func (self *SnapshotPolicyDeleteTask) taskFail(ctx context.Context, sp *models.SSnapshotPolicy, reason string) { - sp.SetStatus(self.GetUserCred(), api.SNAPSHOT_POLICY_DELETE_FAILED, reason) +func (self *SnapshotPolicyDeleteTask) taskFail(ctx context.Context, sp *models.SSnapshotPolicy, reason jsonutils.JSONObject) { + sp.SetStatus(self.GetUserCred(), api.SNAPSHOT_POLICY_DELETE_FAILED, reason.String()) db.OpsLog.LogEvent(sp, db.ACT_DELOCATE_FAIL, reason, self.UserCred) logclient.AddActionLogWithStartable(self, sp, logclient.ACT_DELOCATE, reason, self.UserCred, false) - notifyclient.NotifySystemError(sp.Id, sp.Name, api.SNAPSHOT_POLICY_DELETE_FAILED, reason) + notifyclient.NotifySystemError(sp.Id, sp.Name, api.SNAPSHOT_POLICY_DELETE_FAILED, reason.String()) self.SetStageFailed(ctx, reason) } @@ -47,7 +47,7 @@ func (self *SnapshotPolicyDeleteTask) OnInit(ctx context.Context, obj db.IStanda sp := obj.(*models.SSnapshotPolicy) err := models.SnapshotPolicyCacheManager.DeleteCloudSnapshotPolices(ctx, self.UserCred, sp.GetId()) if err != nil { - self.taskFail(ctx, sp, err.Error()) + self.taskFail(ctx, sp, jsonutils.NewString(err.Error())) return } self.OnSnapshotPolicyDeleteComplete(ctx, sp, data) @@ -61,5 +61,5 @@ func (self *SnapshotPolicyDeleteTask) OnSnapshotPolicyDeleteComplete(ctx context } func (self *SnapshotPolicyDeleteTask) OnSnapshotPolicyDeleteCompleteFailed(ctx context.Context, sp *models.SSnapshotPolicy, data jsonutils.JSONObject) { - self.taskFail(ctx, sp, data.String()) + self.taskFail(ctx, sp, data) } diff --git a/pkg/compute/tasks/snapshot_syncstatus_task.go b/pkg/compute/tasks/snapshot_syncstatus_task.go index 0858d5d35d..e9fd1062c2 100644 --- a/pkg/compute/tasks/snapshot_syncstatus_task.go +++ b/pkg/compute/tasks/snapshot_syncstatus_task.go @@ -19,7 +19,6 @@ import ( "fmt" "yunion.io/x/jsonutils" - "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -36,9 +35,9 @@ func init() { taskman.RegisterTask(SnapshotSyncstatusTask{}) } -func (self *SnapshotSyncstatusTask) taskFailed(ctx context.Context, snapshot *models.SSnapshot, err error) { - snapshot.SetStatus(self.GetUserCred(), api.DISK_UNKNOWN, err.Error()) - self.SetStageFailed(ctx, err.Error()) +func (self *SnapshotSyncstatusTask) taskFailed(ctx context.Context, snapshot *models.SSnapshot, err jsonutils.JSONObject) { + snapshot.SetStatus(self.GetUserCred(), api.DISK_UNKNOWN, err.String()) + self.SetStageFailed(ctx, err) db.OpsLog.LogEvent(snapshot, db.ACT_SYNC_STATUS, snapshot.GetShortDesc(ctx), self.GetUserCred()) logclient.AddActionLogWithContext(ctx, snapshot, logclient.ACT_SYNC_STATUS, err, self.UserCred, false) } @@ -48,14 +47,14 @@ func (self *SnapshotSyncstatusTask) OnInit(ctx context.Context, obj db.IStandalo region := snapshot.GetRegion() if region == nil { - self.taskFailed(ctx, snapshot, fmt.Errorf("failed to found cloudregion for snapshot %s(%s)", snapshot.Name, snapshot.Id)) + self.taskFailed(ctx, snapshot, jsonutils.NewString(fmt.Sprintf("failed to found cloudregion for snapshot %s(%s)", snapshot.Name, snapshot.Id))) return } self.SetStage("OnSnapshotSyncStatusComplete", nil) err := region.GetDriver().RequestSyncSnapshotStatus(ctx, self.GetUserCred(), snapshot, self) if err != nil { - self.taskFailed(ctx, snapshot, errors.Wrap(err, "RequestSyncSnapshotStatus")) + self.taskFailed(ctx, snapshot, jsonutils.Marshal(err)) return } } @@ -65,5 +64,5 @@ func (self *SnapshotSyncstatusTask) OnSnapshotSyncStatusComplete(ctx context.Con } func (self *SnapshotSyncstatusTask) OnSnapshotSyncStatusCompleteFailed(ctx context.Context, snapshot *models.SSnapshot, data jsonutils.JSONObject) { - self.taskFailed(ctx, snapshot, fmt.Errorf(data.String())) + self.taskFailed(ctx, snapshot, data) } diff --git a/pkg/compute/tasks/snapshotpolicy_disk_task.go b/pkg/compute/tasks/snapshotpolicy_disk_task.go index 272aab7134..074569f18a 100644 --- a/pkg/compute/tasks/snapshotpolicy_disk_task.go +++ b/pkg/compute/tasks/snapshotpolicy_disk_task.go @@ -39,7 +39,7 @@ type SnapshotPolicyApplyTask struct { } func (self *SnapshotPolicyApplyTask) taskFail(ctx context.Context, disk *models.SDisk, - spd *models.SSnapshotPolicyDisk, reason string) { + spd *models.SSnapshotPolicyDisk, reason jsonutils.JSONObject) { if spd != nil { err := spd.RealDetach(ctx, self.UserCred) @@ -53,11 +53,11 @@ func (self *SnapshotPolicyApplyTask) taskFail(ctx context.Context, disk *models. } } - disk.SetStatus(self.UserCred, compute.DISK_APPLY_SNAPSHOT_FAIL, reason) + disk.SetStatus(self.UserCred, compute.DISK_APPLY_SNAPSHOT_FAIL, reason.String()) db.OpsLog.LogEvent(disk, db.ACT_APPLY_SNAPSHOT_POLICY_FAILED, reason, self.UserCred) logclient.AddActionLogWithStartable(self, disk, logclient.ACT_APPLY_SNAPSHOT_POLICY, reason, self.UserCred, false) - notifyclient.NotifySystemError(disk.GetId(), disk.Name, compute.DISK_APPLY_SNAPSHOT_FAIL, reason) + notifyclient.NotifySystemError(disk.GetId(), disk.Name, compute.DISK_APPLY_SNAPSHOT_FAIL, reason.String()) self.SetStageFailed(ctx, reason) } @@ -71,7 +71,7 @@ func (self *SnapshotPolicyApplyTask) OnInit(ctx context.Context, obj db.IStandal snapshotPolicyID, _ := data.GetString("need_detach") model, err := models.SnapshotPolicyManager.FetchById(snapshotPolicyID) if err != nil { - self.taskFail(ctx, disk, &spd, err.Error()) + self.taskFail(ctx, disk, &spd, jsonutils.NewString(err.Error())) return } snapshotPolicy = model.(*models.SSnapshotPolicy) @@ -83,7 +83,7 @@ func (self *SnapshotPolicyApplyTask) OnInit(ctx context.Context, obj db.IStandal if err := disk.GetStorage().GetRegion().GetDriver().RequestPreSnapshotPolicyApply(ctx, self.UserCred, self, disk, snapshotPolicy, data); err != nil { - self.taskFail(ctx, disk, &spd, err.Error()) + self.taskFail(ctx, disk, &spd, jsonutils.Marshal(err)) return } } @@ -94,10 +94,10 @@ func (self *SnapshotPolicyApplyTask) OnPreSnapshotPolicyApplyCompleteFailed(ctx spId, _ := self.Params.GetString("snapshotpolicy_id") spd, err := models.SnapshotPolicyDiskManager.FetchBySnapshotPolicyDisk(spId, disk.GetId()) if err != nil { - self.taskFail(ctx, disk, nil, reason.String()) + self.taskFail(ctx, disk, nil, reason) return } - self.taskFail(ctx, disk, spd, reason.String()) + self.taskFail(ctx, disk, spd, reason) } func (self *SnapshotPolicyApplyTask) OnPreSnapshotPolicyApplyComplete(ctx context.Context, disk *models.SDisk, @@ -112,7 +112,7 @@ func (self *SnapshotPolicyApplyTask) OnPreSnapshotPolicyApplyComplete(ctx contex snapshotPolicyID, _ := data.GetString("need_detach") spd1, err := models.SnapshotPolicyDiskManager.FetchBySnapshotPolicyDisk(snapshotPolicyID, disk.GetId()) if err != nil { - self.taskFail(ctx, disk, &spd, err.Error()) + self.taskFail(ctx, disk, &spd, jsonutils.NewString(err.Error())) return } if spd1 != nil { @@ -125,7 +125,7 @@ func (self *SnapshotPolicyApplyTask) OnPreSnapshotPolicyApplyComplete(ctx contex if err := disk.GetStorage().GetRegion().GetDriver(). RequestApplySnapshotPolicy(ctx, self.UserCred, self, disk, &snapshotPolicy, data); err != nil { - self.taskFail(ctx, disk, &spd, err.Error()) + self.taskFail(ctx, disk, &spd, jsonutils.Marshal(err)) } } @@ -135,10 +135,10 @@ func (self *SnapshotPolicyApplyTask) OnSnapshotPolicyApplyFailed(ctx context.Con spId, _ := self.Params.GetString("snapshotpolicy_id") spd, err := models.SnapshotPolicyDiskManager.FetchBySnapshotPolicyDisk(spId, disk.GetId()) if err != nil { - self.taskFail(ctx, disk, nil, reason.String()) + self.taskFail(ctx, disk, nil, reason) return } - self.taskFail(ctx, disk, spd, reason.String()) + self.taskFail(ctx, disk, spd, reason) } func (self *SnapshotPolicyApplyTask) OnSnapshotPolicyApply(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { @@ -165,7 +165,7 @@ type SnapshotPolicyCancelTask struct { taskman.STask } -func (self *SnapshotPolicyCancelTask) taskFail(ctx context.Context, disk *models.SDisk, spd *models.SSnapshotPolicyDisk, reason string) { +func (self *SnapshotPolicyCancelTask) taskFail(ctx context.Context, disk *models.SDisk, spd *models.SSnapshotPolicyDisk, reason jsonutils.JSONObject) { if spd != nil { spd.SetStatus(self.UserCred, compute.SNAPSHOT_POLICY_DISK_DELETE_FAILED, "") snapshotpolicy, err := models.SnapshotPolicyManager.FetchSnapshotPolicyById(spd.SnapshotpolicyId) @@ -174,7 +174,7 @@ func (self *SnapshotPolicyCancelTask) taskFail(ctx context.Context, disk *models logclient.AddActionLogWithStartable(self, snapshotpolicy, logclient.ACT_UNBIND_DISK, "", self.UserCred, false) } } - disk.SetStatus(self.UserCred, compute.DISK_CALCEL_SNAPSHOT_FAIL, reason) + disk.SetStatus(self.UserCred, compute.DISK_CALCEL_SNAPSHOT_FAIL, reason.String()) db.OpsLog.LogEvent(disk, db.ACT_CANCEL_SNAPSHOT_POLICY_FAILED, reason, self.UserCred) logclient.AddActionLogWithStartable(self, disk, logclient.ACT_CANCEL_SNAPSHOT_POLICY, reason, self.UserCred, false) @@ -190,15 +190,15 @@ func (self *SnapshotPolicyCancelTask) OnInit(ctx context.Context, obj db.IStanda model, err := models.SnapshotPolicyManager.FetchById(snapshotPolicyID) if err != nil { - self.taskFail(ctx, disk, &spd, fmt.Sprintf("failed to fetch disk by id %s: %s", snapshotPolicyID, err.Error())) + self.taskFail(ctx, disk, &spd, jsonutils.NewString(fmt.Sprintf("failed to fetch disk by id %s: %s", snapshotPolicyID, err.Error()))) return } snapshotPolicy := model.(*models.SSnapshotPolicy) self.SetStage("OnSnapshotPolicyCancel", nil) if err := disk.GetStorage().GetRegion().GetDriver().RequestCancelSnapshotPolicy(ctx, self.UserCred, self, disk, snapshotPolicy, data); err != nil { - self.taskFail(ctx, disk, &spd, fmt.Sprintf("faile to detach snapshot policy %s and disk %s: %s", - snapshotPolicy.Id, disk.Id, err.Error())) + self.taskFail(ctx, disk, &spd, jsonutils.Marshal(err)) + // fmt.Sprintf("faile to detach snapshot policy %s and disk %s: %s", snapshotPolicy.Id, disk.Id, err.Error())) } } @@ -208,10 +208,10 @@ func (self *SnapshotPolicyCancelTask) OnSnapshotPolicyCancelFailed(ctx context.C spId, _ := self.Params.GetString("snapshotpolicy_id") spd, err := models.SnapshotPolicyDiskManager.FetchBySnapshotPolicyDisk(spId, disk.GetId()) if err != nil { - self.taskFail(ctx, disk, nil, reason.String()) + self.taskFail(ctx, disk, nil, reason) return } - self.taskFail(ctx, disk, spd, reason.String()) + self.taskFail(ctx, disk, spd, reason) } func (self *SnapshotPolicyCancelTask) OnSnapshotPolicyCancel(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/storage_cache_image_task.go b/pkg/compute/tasks/storage_cache_image_task.go index e8267ec106..3c78bf5e5d 100644 --- a/pkg/compute/tasks/storage_cache_image_task.go +++ b/pkg/compute/tasks/storage_cache_image_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" @@ -91,25 +90,24 @@ func (self *StorageCacheImageTask) OnImageCacheCompleteFailed(ctx context.Contex storageCache := obj.(*models.SStoragecache) imageId, _ := self.Params.GetString("image_id") scimg := models.StoragecachedimageManager.Register(ctx, self.UserCred, storageCache.Id, imageId, "") - err := fmt.Errorf(data.String()) extImgId, _ := data.GetString("image_id") - self.OnCacheFailed(ctx, storageCache, imageId, scimg, err, extImgId) + self.OnCacheFailed(ctx, storageCache, imageId, scimg, data, extImgId) } -func (self *StorageCacheImageTask) OnCacheFailed(ctx context.Context, cache *models.SStoragecache, imageId string, scimg *models.SStoragecachedimage, err error, extImgId string) { - scimg.SetStatus(self.UserCred, api.CACHED_IMAGE_STATUS_CACHE_FAILED, err.Error()) +func (self *StorageCacheImageTask) OnCacheFailed(ctx context.Context, cache *models.SStoragecache, imageId string, scimg *models.SStoragecachedimage, reason jsonutils.JSONObject, extImgId string) { + scimg.SetStatus(self.UserCred, api.CACHED_IMAGE_STATUS_CACHE_FAILED, reason.String()) if len(extImgId) > 0 && scimg.ExternalId != extImgId { scimg.SetExternalId(extImgId) } body := jsonutils.NewDict() - body.Add(jsonutils.NewString(err.Error()), "reason") + body.Add(reason, "reason") body.Add(jsonutils.NewString(imageId), "image_id") db.OpsLog.LogEvent(cache, db.ACT_CACHE_IMAGE_FAIL, body, self.UserCred) ci := scimg.GetCachedimage() if ci != nil { logclient.AddActionLogWithStartable(self, ci, logclient.ACT_CACHED_IMAGE, body, self.UserCred, false) } - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, body) } func (self *StorageCacheImageTask) OnCacheSucc(ctx context.Context, cache *models.SStoragecache, data *jsonutils.JSONDict) { diff --git a/pkg/compute/tasks/storage_uncache_image_task.go b/pkg/compute/tasks/storage_uncache_image_task.go index a2db288b69..13804fb5af 100644 --- a/pkg/compute/tasks/storage_uncache_image_task.go +++ b/pkg/compute/tasks/storage_uncache_image_task.go @@ -58,7 +58,7 @@ func (self *StorageUncacheImageTask) OnInit(ctx context.Context, obj db.IStandal host, err := storageCache.GetHost() if err != nil { - self.OnTaskFailed(ctx, storageCache, fmt.Sprintf("fail to get host %s", err)) + self.OnTaskFailed(ctx, storageCache, jsonutils.NewString(fmt.Sprintf("fail to get host %s", err))) return } @@ -72,13 +72,13 @@ func (self *StorageUncacheImageTask) OnInit(ctx context.Context, obj db.IStandal err = host.GetHostDriver().RequestUncacheImage(ctx, host, storageCache, self) if err != nil { - self.OnTaskFailed(ctx, storageCache, fmt.Sprintf("fail to uncache image %s", err)) + self.OnTaskFailed(ctx, storageCache, jsonutils.Marshal(err)) } } -func (self *StorageUncacheImageTask) OnTaskFailed(ctx context.Context, storageCache *models.SStoragecache, reason string) { +func (self *StorageUncacheImageTask) OnTaskFailed(ctx context.Context, storageCache *models.SStoragecache, reason jsonutils.JSONObject) { body := jsonutils.NewDict() - body.Add(jsonutils.NewString(reason), "reason") + body.Add(reason, "reason") imageId, _ := self.Params.GetString("image_id") body.Add(jsonutils.NewString(imageId), "image_id") @@ -86,13 +86,13 @@ func (self *StorageUncacheImageTask) OnTaskFailed(ctx context.Context, storageCa logclient.AddActionLogWithStartable(self, storageCache, logclient.ACT_UNCACHED_IMAGE, body, self.UserCred, false) - self.SetStageFailed(ctx, reason) + self.SetStageFailed(ctx, body) } func (self *StorageUncacheImageTask) OnImageUncacheCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { storageCache := obj.(*models.SStoragecache) - self.OnTaskFailed(ctx, storageCache, data.String()) + self.OnTaskFailed(ctx, storageCache, data) } func (self *StorageUncacheImageTask) OnImageUncacheComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/storage_update_task.go b/pkg/compute/tasks/storage_update_task.go index d1fe2c714e..b4d33ae772 100644 --- a/pkg/compute/tasks/storage_update_task.go +++ b/pkg/compute/tasks/storage_update_task.go @@ -44,7 +44,7 @@ func (self *StorageUpdateTask) OnInit(ctx context.Context, obj db.IStandaloneMod if dirver != nil { err := dirver.DoStorageUpdateTask(ctx, self.UserCred, storage, self) if err != nil { - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } } self.SetStageComplete(ctx, nil) @@ -55,7 +55,7 @@ func (self *StorageUpdateTask) OnStorageUpdate(ctx context.Context, obj db.IStan } func (self *StorageUpdateTask) OnStorageUpdateFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } type RbdStorageUpdateTask struct { diff --git a/pkg/compute/tasks/vpc_create_task.go b/pkg/compute/tasks/vpc_create_task.go index e0e786532c..8d6c87ed81 100644 --- a/pkg/compute/tasks/vpc_create_task.go +++ b/pkg/compute/tasks/vpc_create_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -37,12 +36,12 @@ func init() { taskman.RegisterTask(VpcCreateTask{}) } -func (self *VpcCreateTask) TaskFailed(ctx context.Context, vpc *models.SVpc, err error) { +func (self *VpcCreateTask) TaskFailed(ctx context.Context, vpc *models.SVpc, err jsonutils.JSONObject) { log.Errorf("vpc create task fail: %s", err) - vpc.SetStatus(self.UserCred, api.VPC_STATUS_FAILED, err.Error()) - db.OpsLog.LogEvent(vpc, db.ACT_ALLOCATE_FAIL, err.Error(), self.UserCred) - logclient.AddActionLogWithStartable(self, vpc, logclient.ACT_ALLOCATE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + vpc.SetStatus(self.UserCred, api.VPC_STATUS_FAILED, err.String()) + db.OpsLog.LogEvent(vpc, db.ACT_ALLOCATE_FAIL, err, self.UserCred) + logclient.AddActionLogWithStartable(self, vpc, logclient.ACT_ALLOCATE, err, self.UserCred, false) + self.SetStageFailed(ctx, err) } func (self *VpcCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -51,13 +50,13 @@ func (self *VpcCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, region, err := vpc.GetRegion() if err != nil { - self.TaskFailed(ctx, vpc, errors.Wrap(err, "vpc.GetRegion")) + self.TaskFailed(ctx, vpc, jsonutils.NewString(errors.Wrap(err, "vpc.GetRegion").Error())) return } self.SetStage("OnCreateVpcComplete", nil) err = region.GetDriver().RequestCreateVpc(ctx, self.UserCred, region, vpc, self) if err != nil { - self.TaskFailed(ctx, vpc, err) + self.TaskFailed(ctx, vpc, jsonutils.Marshal(err)) return } } @@ -68,5 +67,5 @@ func (self *VpcCreateTask) OnCreateVpcComplete(ctx context.Context, vpc *models. } func (self *VpcCreateTask) OnCreateVpcCompleteFailed(ctx context.Context, vpc *models.SVpc, data jsonutils.JSONObject) { - self.TaskFailed(ctx, vpc, fmt.Errorf("%s", data.String())) + self.TaskFailed(ctx, vpc, data) } diff --git a/pkg/compute/tasks/vpc_delete_task.go b/pkg/compute/tasks/vpc_delete_task.go index 6cb2a2c000..f2db20c473 100644 --- a/pkg/compute/tasks/vpc_delete_task.go +++ b/pkg/compute/tasks/vpc_delete_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -37,12 +36,12 @@ func init() { taskman.RegisterTask(VpcDeleteTask{}) } -func (self *VpcDeleteTask) taskFailed(ctx context.Context, vpc *models.SVpc, err error) { +func (self *VpcDeleteTask) taskFailed(ctx context.Context, vpc *models.SVpc, err jsonutils.JSONObject) { log.Errorf("vpc delete task fail: %s", err) - vpc.SetStatus(self.UserCred, api.VPC_STATUS_DELETE_FAILED, err.Error()) - db.OpsLog.LogEvent(vpc, db.ACT_DELOCATE_FAIL, err.Error(), self.UserCred) - logclient.AddActionLogWithStartable(self, vpc, logclient.ACT_DELETE, err.Error(), self.UserCred, false) - self.SetStageFailed(ctx, err.Error()) + vpc.SetStatus(self.UserCred, api.VPC_STATUS_DELETE_FAILED, err.String()) + db.OpsLog.LogEvent(vpc, db.ACT_DELOCATE_FAIL, err, self.UserCred) + logclient.AddActionLogWithStartable(self, vpc, logclient.ACT_DELETE, err, self.UserCred, false) + self.SetStageFailed(ctx, err) } func (self *VpcDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { @@ -50,14 +49,14 @@ func (self *VpcDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, vpc.SetStatus(self.UserCred, api.VPC_STATUS_DELETING, "") region, err := vpc.GetRegion() if err != nil { - self.taskFailed(ctx, vpc, errors.Wrap(err, "vpc.GetRegion")) + self.taskFailed(ctx, vpc, jsonutils.NewString(errors.Wrap(err, "vpc.GetRegion").Error())) return } self.SetStage("OnDeleteVpcComplete", nil) err = region.GetDriver().RequestDeleteVpc(ctx, self.UserCred, region, vpc, self) if err != nil { - self.taskFailed(ctx, vpc, errors.Wrap(err, "RequestDeleteVpc")) + self.taskFailed(ctx, vpc, jsonutils.Marshal(err)) return } } @@ -65,7 +64,7 @@ func (self *VpcDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, func (self *VpcDeleteTask) OnDeleteVpcComplete(ctx context.Context, vpc *models.SVpc, body jsonutils.JSONObject) { err := vpc.Purge(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, vpc, errors.Wrap(err, "vpc.Purge")) + self.taskFailed(ctx, vpc, jsonutils.NewString(errors.Wrap(err, "vpc.Purge").Error())) return } db.OpsLog.LogEvent(vpc, db.ACT_DELOCATING, vpc.GetShortDesc(ctx), self.UserCred) @@ -74,5 +73,5 @@ func (self *VpcDeleteTask) OnDeleteVpcComplete(ctx context.Context, vpc *models. } func (self *VpcDeleteTask) OnDeleteVpcCompleteFailed(ctx context.Context, vpc *models.SVpc, reason jsonutils.JSONObject) { - self.taskFailed(ctx, vpc, fmt.Errorf("%s", reason)) + self.taskFailed(ctx, vpc, reason) } diff --git a/pkg/compute/tasks/vpc_syncstatus_task.go b/pkg/compute/tasks/vpc_syncstatus_task.go index 43f3e03037..1fd2ef0cf0 100644 --- a/pkg/compute/tasks/vpc_syncstatus_task.go +++ b/pkg/compute/tasks/vpc_syncstatus_task.go @@ -35,8 +35,8 @@ func init() { taskman.RegisterTask(VpcSyncstatusTask{}) } -func (self *VpcSyncstatusTask) taskFail(ctx context.Context, vpc *models.SVpc, msg string) { - vpc.SetStatus(self.UserCred, api.VPC_STATUS_UNKNOWN, msg) +func (self *VpcSyncstatusTask) taskFail(ctx context.Context, vpc *models.SVpc, msg jsonutils.JSONObject) { + vpc.SetStatus(self.UserCred, api.VPC_STATUS_UNKNOWN, msg.String()) db.OpsLog.LogEvent(vpc, db.ACT_SYNC_STATUS, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, vpc, logclient.ACT_SYNC_STATUS, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) @@ -48,21 +48,21 @@ func (self *VpcSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneMod extVpc, err := vpc.GetIVpc() if err != nil { msg := fmt.Sprintf("fail to find ICloudVpc for vpc %s", err) - self.taskFail(ctx, vpc, msg) + self.taskFail(ctx, vpc, jsonutils.NewString(msg)) return } err = extVpc.Refresh() if err != nil { msg := fmt.Sprintf("fail to refresh ICloudVpc status %s", err) - self.taskFail(ctx, vpc, msg) + self.taskFail(ctx, vpc, jsonutils.NewString(msg)) return } err = vpc.SyncWithCloudVpc(ctx, self.UserCred, extVpc, nil) if err != nil { msg := fmt.Sprintf("fail to sync vpc status %s", err) - self.taskFail(ctx, vpc, msg) + self.taskFail(ctx, vpc, jsonutils.NewString(msg)) return } diff --git a/pkg/devtool/tasks/template_binding_servers.go b/pkg/devtool/tasks/template_binding_servers.go index fad5adf61f..52415824bf 100644 --- a/pkg/devtool/tasks/template_binding_servers.go +++ b/pkg/devtool/tasks/template_binding_servers.go @@ -30,7 +30,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" @@ -52,7 +51,7 @@ func (self *TemplateBindingServers) OnInit(ctx context.Context, obj db.IStandalo template := obj.(*models.SDevtoolTemplate) _, err := template.Binding(ctx, self.UserCred, nil, self.Params) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("TemplateUpdate failed %s", err)) + self.SetStageFailed(ctx, jsonutils.Marshal(err)) } else { self.SetStageComplete(ctx, nil) } diff --git a/pkg/devtool/tasks/template_unbinding_servers.go b/pkg/devtool/tasks/template_unbinding_servers.go index ad0f623d69..1705a2e529 100644 --- a/pkg/devtool/tasks/template_unbinding_servers.go +++ b/pkg/devtool/tasks/template_unbinding_servers.go @@ -52,7 +52,7 @@ func (self *TemplateUnbindingServers) OnInit(ctx context.Context, obj db.IStanda template := obj.(*models.SDevtoolTemplate) _, err := template.Unbinding(ctx, self.UserCred, nil, self.Params) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("TemplateUnBindingServers failed %s", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("TemplateUnBindingServers failed %s", err))) } else { self.SetStageComplete(ctx, nil) } diff --git a/pkg/devtool/tasks/template_update.go b/pkg/devtool/tasks/template_update.go index c44dc70f30..b2aa4f2b01 100644 --- a/pkg/devtool/tasks/template_update.go +++ b/pkg/devtool/tasks/template_update.go @@ -52,7 +52,7 @@ func (self *TemplateUpdate) OnInit(ctx context.Context, obj db.IStandaloneModel, template := obj.(*models.SDevtoolTemplate) _, err := template.TaskUpdate(ctx, self.UserCred, nil, self.Params) if err != nil { - self.SetStageFailed(ctx, fmt.Sprintf("TemplateUpdate failed %s", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("TemplateUpdate failed %s", err))) } else { self.SetStageComplete(ctx, nil) } diff --git a/pkg/image/models/images.go b/pkg/image/models/images.go index 9b7f5e60b2..d167bed142 100644 --- a/pkg/image/models/images.go +++ b/pkg/image/models/images.go @@ -426,12 +426,12 @@ func (self *SImage) OnJointFailed(ctx context.Context, userCred mcclient.TokenCr self.unprotectImage() } -func (self *SImage) OnSaveFailed(ctx context.Context, userCred mcclient.TokenCredential, msg string) { +func (self *SImage) OnSaveFailed(ctx context.Context, userCred mcclient.TokenCredential, msg jsonutils.JSONObject) { self.saveFailed(userCred, msg) logclient.AddActionLogWithContext(ctx, self, logclient.ACT_IMAGE_SAVE, msg, userCred, false) } -func (self *SImage) OnSaveTaskFailed(task taskman.ITask, userCred mcclient.TokenCredential, msg string) { +func (self *SImage) OnSaveTaskFailed(task taskman.ITask, userCred mcclient.TokenCredential, msg jsonutils.JSONObject) { self.saveFailed(userCred, msg) logclient.AddActionLogWithStartable(task, self, logclient.ACT_IMAGE_SAVE, msg, userCred, false) } @@ -452,9 +452,9 @@ func (self *SImage) saveSuccess(userCred mcclient.TokenCredential, msg string) { db.OpsLog.LogEvent(self, db.ACT_SAVE, msg, userCred) } -func (self *SImage) saveFailed(userCred mcclient.TokenCredential, msg string) { - log.Errorf(msg) - self.SetStatus(userCred, api.IMAGE_STATUS_KILLED, msg) +func (self *SImage) saveFailed(userCred mcclient.TokenCredential, msg jsonutils.JSONObject) { + log.Errorf("saveFailed: %s", msg.String()) + self.SetStatus(userCred, api.IMAGE_STATUS_KILLED, msg.String()) self.unprotectImage() db.OpsLog.LogEvent(self, db.ACT_SAVE_FAIL, msg, userCred) } @@ -563,7 +563,7 @@ func (self *SImage) PostCreate(ctx context.Context, userCred mcclient.TokenCrede err := self.SaveImageFromStream(appParams.Request.Body, false) if err != nil { - self.OnSaveFailed(ctx, userCred, fmt.Sprintf("create upload fail %s", err)) + self.OnSaveFailed(ctx, userCred, jsonutils.NewString(fmt.Sprintf("create upload fail %s", err))) return } @@ -616,7 +616,7 @@ func (self *SImage) ValidateUpdateData(ctx context.Context, userCred mcclient.To // otherwise, it is needed. err := self.SaveImageFromStream(appParams.Request.Body, !isProbe) if err != nil { - self.OnSaveFailed(ctx, userCred, fmt.Sprintf("update upload failed %s", err)) + self.OnSaveFailed(ctx, userCred, jsonutils.NewString(fmt.Sprintf("update upload failed %s", err))) return nil, httperrors.NewGeneralError(err) } self.OnSaveSuccess(ctx, userCred, "update upload success") @@ -637,7 +637,7 @@ func (self *SImage) ValidateUpdateData(ctx context.Context, userCred mcclient.To if len(copyFrom) > 0 { err := self.startImageCopyFromUrlTask(ctx, userCred, copyFrom, "") if err != nil { - self.OnSaveFailed(ctx, userCred, fmt.Sprintf("update copy from url failed %s", err)) + self.OnSaveFailed(ctx, userCred, jsonutils.NewString(fmt.Sprintf("update copy from url failed %s", err))) return nil, httperrors.NewGeneralError(err) } } diff --git a/pkg/image/tasks/guest_image_delete_task.go b/pkg/image/tasks/guest_image_delete_task.go index 55d0a55446..9ead356340 100644 --- a/pkg/image/tasks/guest_image_delete_task.go +++ b/pkg/image/tasks/guest_image_delete_task.go @@ -55,19 +55,19 @@ func (self *GuestImageDeleteTask) OnInit(ctx context.Context, obj db.IStandalone func (self *GuestImageDeleteTask) startPendingDelete(ctx context.Context, guestImage *models.SGuestImage) { images, err := models.GuestImageJointManager.GetImagesByGuestImageId(guestImage.GetId()) if err != nil { - self.taskFailed(ctx, guestImage, err.Error()) + self.taskFailed(ctx, guestImage, jsonutils.NewString(err.Error())) } for i := range images { images[i].StopTorrents() err := images[i].DoPendingDelete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("image %s pending delete failed", images[i].GetId())) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("image %s pending delete failed", images[i].GetId()))) return } } err = guestImage.DoPendingDelete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("guest image %s pending delete failed", guestImage.GetId())) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("guest image %s pending delete failed", guestImage.GetId()))) } self.SetStageComplete(ctx, nil) } @@ -75,37 +75,37 @@ func (self *GuestImageDeleteTask) startPendingDelete(ctx context.Context, guestI func (self *GuestImageDeleteTask) startDelete(ctx context.Context, guestImage *models.SGuestImage) { images, err := models.GuestImageJointManager.GetImagesByGuestImageId(guestImage.GetId()) if err != nil { - self.taskFailed(ctx, guestImage, err.Error()) + self.taskFailed(ctx, guestImage, jsonutils.NewString(err.Error())) } for i := range images { err := images[i].RemoveFiles() if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("fail to remove %s: %s", images[i].GetPath(""), err)) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("fail to remove %s: %s", images[i].GetPath(""), err))) return } err = images[i].SetStatus(self.UserCred, api.IMAGE_STATUS_DELETED, "delete") if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("fail to set image %s status ", images[i].GetId())) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("fail to set image %s status ", images[i].GetId()))) return } err = images[i].RealDelete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("fail to real delete image %s", images[i].GetId())) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("fail to real delete image %s", images[i].GetId()))) return } } err = guestImage.SetStatus(self.UserCred, api.IMAGE_STATUS_DELETED, "delete") if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("fail to set guest image status %s", guestImage.GetId())) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("fail to set guest image status %s", guestImage.GetId()))) } err = guestImage.RealDelete(ctx, self.UserCred) if err != nil { - self.taskFailed(ctx, guestImage, fmt.Sprintf("fail to real delete guest image %s", guestImage.GetId())) + self.taskFailed(ctx, guestImage, jsonutils.NewString(fmt.Sprintf("fail to real delete guest image %s", guestImage.GetId()))) } self.SetStageComplete(ctx, nil) } -func (self *GuestImageDeleteTask) taskFailed(ctx context.Context, guestImage *models.SGuestImage, reason string) { +func (self *GuestImageDeleteTask) taskFailed(ctx context.Context, guestImage *models.SGuestImage, reason jsonutils.JSONObject) { log.Errorf("Guest Image %s delete failed: %s", guestImage.Id, reason) db.OpsLog.LogEvent(guestImage, db.ACT_IMAGE_DELETE_FAIL, reason, self.UserCred) logclient.AddActionLogWithContext(ctx, guestImage, logclient.ACT_DELETE, reason, self.UserCred, false) diff --git a/pkg/image/tasks/image_check_task.go b/pkg/image/tasks/image_check_task.go index 85d7a1847e..46508e2e00 100644 --- a/pkg/image/tasks/image_check_task.go +++ b/pkg/image/tasks/image_check_task.go @@ -50,5 +50,5 @@ func (self *ImageCheckTask) OnCheckComplete(ctx context.Context, obj db.IStandal } func (self *ImageCheckTask) OnCheckCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/image/tasks/image_convert_task.go b/pkg/image/tasks/image_convert_task.go index 0d688f87be..de3b30c224 100644 --- a/pkg/image/tasks/image_convert_task.go +++ b/pkg/image/tasks/image_convert_task.go @@ -73,5 +73,5 @@ func (self *ImageConvertTask) OnConvertComplete(ctx context.Context, obj db.ISta } func (self *ImageConvertTask) OnConvertCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, data.String()) + self.SetStageFailed(ctx, data) } diff --git a/pkg/image/tasks/image_copy_from_url_task.go b/pkg/image/tasks/image_copy_from_url_task.go index b1633af290..ffe1f9a116 100644 --- a/pkg/image/tasks/image_copy_from_url_task.go +++ b/pkg/image/tasks/image_copy_from_url_task.go @@ -16,7 +16,6 @@ package tasks import ( "context" - "fmt" "net/http" "yunion.io/x/jsonutils" @@ -80,7 +79,9 @@ func (self *ImageCopyFromUrlTask) OnImageImportComplete(ctx context.Context, obj func (self *ImageCopyFromUrlTask) OnImageImportCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { image := obj.(*models.SImage) copyFrom, _ := self.Params.GetString("copy_from") - msg := fmt.Sprintf("copy from url %s request fail %s", copyFrom, err) + msg := jsonutils.NewDict() + msg.Add(err, "reason") + msg.Add(jsonutils.NewString(copyFrom), "copy_from") image.OnSaveTaskFailed(self, self.UserCred, msg) self.SetStageFailed(ctx, msg) } diff --git a/pkg/image/tasks/image_delete_task.go b/pkg/image/tasks/image_delete_task.go index 7530875429..22b07eda54 100644 --- a/pkg/image/tasks/image_delete_task.go +++ b/pkg/image/tasks/image_delete_task.go @@ -66,7 +66,7 @@ func (self *ImageDeleteTask) startDeleteImage(ctx context.Context, image *models if err != nil { msg := fmt.Sprintf("fail to remove %s %s", image.GetPath(""), err) log.Errorf(msg) - self.SetStageFailed(ctx, msg) + self.SetStageFailed(ctx, jsonutils.NewString(msg)) return } diff --git a/pkg/image/tasks/image_probe_task.go b/pkg/image/tasks/image_probe_task.go index 252584ea68..81bd1a4375 100644 --- a/pkg/image/tasks/image_probe_task.go +++ b/pkg/image/tasks/image_probe_task.go @@ -50,11 +50,11 @@ func (self *ImageProbeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, } if e := self.updateImageMetadata(ctx, image); e != nil { image.SetStatus(self.UserCred, api.IMAGE_STATUS_KILLED, fmt.Sprintf("Image update failed %s", e)) - self.SetStageFailed(ctx, e.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(e.Error())) return } if err != nil { - self.OnProbeFailed(ctx, image, err.Error()) + self.OnProbeFailed(ctx, image, jsonutils.NewString(err.Error())) } else { self.OnProbeSuccess(ctx, image) } @@ -68,14 +68,14 @@ func (self *ImageProbeTask) StartImageProbe(ctx context.Context, image *models.S if err := self.updateImageMetadata(ctx, image); err != nil { image.SetStatus(self.UserCred, api.IMAGE_STATUS_KILLED, fmt.Sprintf("Image update failed after probe %s", err)) - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) return } if probeErr == nil { self.OnProbeSuccess(ctx, image) } else { - self.OnProbeFailed(ctx, image, probeErr.Error()) + self.OnProbeFailed(ctx, image, jsonutils.NewString(probeErr.Error())) } } @@ -164,7 +164,7 @@ type sImageInfo struct { IsInstalledCloudInit bool } -func (self *ImageProbeTask) OnProbeFailed(ctx context.Context, image *models.SImage, reason string) { +func (self *ImageProbeTask) OnProbeFailed(ctx context.Context, image *models.SImage, reason jsonutils.JSONObject) { log.Infof("Image %s Probe Failed: %s", image.Name, reason) db.OpsLog.LogEvent(image, db.ACT_PROBE_FAIL, reason, self.UserCred) logclient.AddActionLogWithContext(ctx, image, logclient.ACT_IMAGE_PROBE, reason, self.UserCred, false) @@ -173,7 +173,7 @@ func (self *ImageProbeTask) OnProbeFailed(ctx context.Context, image *models.SIm self.SetStage("OnConvertComplete", nil) if err := image.StartImageConvertTask(ctx, self.UserCred, self.GetId()); err != nil { image.SetStatus(self.UserCred, api.IMAGE_STATUS_ACTIVE, "") - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } } else { image.SetStatus(self.UserCred, api.IMAGE_STATUS_ACTIVE, "") @@ -191,7 +191,7 @@ func (self *ImageProbeTask) OnProbeSuccess(ctx context.Context, image *models.SI self.SetStage("OnConvertComplete", nil) if err := image.StartImageConvertTask(ctx, self.UserCred, self.GetId()); err != nil { image.SetStatus(self.UserCred, api.IMAGE_STATUS_ACTIVE, "") - self.SetStageFailed(ctx, err.Error()) + self.SetStageFailed(ctx, jsonutils.NewString(err.Error())) } } else { image.SetStatus(self.UserCred, api.IMAGE_STATUS_ACTIVE, "") diff --git a/pkg/keystone/driver/cas/cas.go b/pkg/keystone/driver/cas/cas.go index c0fcaacc14..f8a2ed8737 100644 --- a/pkg/keystone/driver/cas/cas.go +++ b/pkg/keystone/driver/cas/cas.go @@ -87,7 +87,7 @@ func (self *SCASDriver) request(ctx context.Context, method httputils.THttpMetho cli := httputils.GetDefaultClient() urlStr := httputils.JoinPath(self.casConfig.CASServerURL, path) resp, err := httputils.Request(cli, ctx, method, urlStr, nil, nil, self.isDebug) - _, body, err := httputils.ParseResponse(resp, err, self.isDebug) + _, body, err := httputils.ParseResponse("", resp, err, self.isDebug) return body, err } diff --git a/pkg/keystone/tasks/identity_provider_delete_task.go b/pkg/keystone/tasks/identity_provider_delete_task.go index e5f220a41d..bd2d5eea82 100644 --- a/pkg/keystone/tasks/identity_provider_delete_task.go +++ b/pkg/keystone/tasks/identity_provider_delete_task.go @@ -41,7 +41,7 @@ func (self *IdentityProviderDeleteTask) OnInit(ctx context.Context, obj db.IStan err := idp.Purge(ctx, self.UserCred) if err != nil { idp.SetStatus(self.UserCred, api.IdentityDriverStatusDeleteFailed, err.Error()) - self.SetStageFailed(ctx, fmt.Sprintf("purge failed %s", err)) + self.SetStageFailed(ctx, jsonutils.NewString(fmt.Sprintf("purge failed %s", err))) logclient.AddActionLogWithStartable(self, idp, logclient.ACT_DELETE, err, self.UserCred, false) return } diff --git a/pkg/mcclient/modules/mod_buckets.go b/pkg/mcclient/modules/mod_buckets.go index f26263fe94..55b8bd8f51 100644 --- a/pkg/mcclient/modules/mod_buckets.go +++ b/pkg/mcclient/modules/mod_buckets.go @@ -56,7 +56,7 @@ func (manager *SBucketManager) Upload(s *mcclient.ClientSession, bucketId string return errors.Wrap(err, "rawRequest") } - _, _, err = s.ParseJSONResponse(resp, err) + _, _, err = s.ParseJSONResponse("", resp, err) if err != nil { return err } diff --git a/pkg/mcclient/modules/mod_images.go b/pkg/mcclient/modules/mod_images.go index 500f283b3b..c4fdd2278f 100644 --- a/pkg/mcclient/modules/mod_images.go +++ b/pkg/mcclient/modules/mod_images.go @@ -466,7 +466,7 @@ func (this *ImageManager) _create(s *mcclient.ClientSession, params jsonutils.JS } } resp, err := modulebase.RawRequest(this.ResourceManager, s, method, path, headers, body) - _, json, err := s.ParseJSONResponse(resp, err) + _, json, err := s.ParseJSONResponse("", resp, err) if err != nil { return nil, err } @@ -506,7 +506,7 @@ func (this *ImageManager) _update(s *mcclient.ClientSession, id string, params j } path := fmt.Sprintf("/%s/%s", this.URLPath(), url.PathEscape(id)) resp, err := modulebase.RawRequest(this.ResourceManager, s, "PUT", path, headers, body) - _, json, err := s.ParseJSONResponse(resp, err) + _, json, err := s.ParseJSONResponse("", resp, err) if err != nil { return nil, err } @@ -560,7 +560,7 @@ func (this *ImageManager) Download(s *mcclient.ClientSession, id string, format } return FetchImageMeta(resp.Header), resp.Body, sizeBytes, nil } else { - _, _, err = s.ParseJSONResponse(resp, err) + _, _, err = s.ParseJSONResponse("", resp, err) return nil, nil, -1, err } } diff --git a/pkg/mcclient/modules/mod_infos.go b/pkg/mcclient/modules/mod_infos.go index 98baa48d98..9ffa0cea45 100644 --- a/pkg/mcclient/modules/mod_infos.go +++ b/pkg/mcclient/modules/mod_infos.go @@ -36,7 +36,7 @@ var ( func (this *InfoManager) Update(s *mcclient.ClientSession, header http.Header, body io.Reader) (jsonutils.JSONObject, error) { path := fmt.Sprintf("/%s", this.URLPath()) resp, err := modulebase.RawRequest(this.ResourceManager, s, "POST", path, header, body) - _, json, err := s.ParseJSONResponse(resp, err) + _, json, err := s.ParseJSONResponse("", resp, err) if err != nil { return nil, err } diff --git a/pkg/mcclient/modules/mod_itsm_process_instances.go b/pkg/mcclient/modules/mod_itsm_process_instances.go index 7362d6681d..3084dc2606 100644 --- a/pkg/mcclient/modules/mod_itsm_process_instances.go +++ b/pkg/mcclient/modules/mod_itsm_process_instances.go @@ -36,7 +36,7 @@ var ( func (self *ProcessInstanceManager) Upload(s *mcclient.ClientSession, header http.Header, body io.Reader) (jsonutils.JSONObject, error) { path := fmt.Sprintf("/%s", self.URLPath()) resp, err := modulebase.RawRequest(self.ResourceManager, s, "POST", path, header, body) - _, json, err := s.ParseJSONResponse(resp, err) + _, json, err := s.ParseJSONResponse("", resp, err) if err != nil { return nil, err } diff --git a/pkg/mcclient/modules/mod_license.go b/pkg/mcclient/modules/mod_license.go index e1fb66526a..4e525e292f 100644 --- a/pkg/mcclient/modules/mod_license.go +++ b/pkg/mcclient/modules/mod_license.go @@ -36,7 +36,7 @@ var ( func (this *LicenseManager) Upload(s *mcclient.ClientSession, header http.Header, body io.Reader) (jsonutils.JSONObject, error) { path := fmt.Sprintf("/%s", this.URLPath()) resp, err := modulebase.RawRequest(this.ResourceManager, s, "POST", path, header, body) - _, json, err := s.ParseJSONResponse(resp, err) + _, json, err := s.ParseJSONResponse("", resp, err) if err != nil { return nil, err } diff --git a/pkg/mcclient/session.go b/pkg/mcclient/session.go index 9951bfd668..76e25336e5 100644 --- a/pkg/mcclient/session.go +++ b/pkg/mcclient/session.go @@ -258,8 +258,8 @@ func (this *ClientSession) JSONRequest(service, endpointType string, method http return this.JSONVersionRequest(service, endpointType, method, url, headers, body, "") } -func (this *ClientSession) ParseJSONResponse(resp *http.Response, err error) (http.Header, jsonutils.JSONObject, error) { - return httputils.ParseJSONResponse(resp, err, this.client.debug) +func (this *ClientSession) ParseJSONResponse(reqBody string, resp *http.Response, err error) (http.Header, jsonutils.JSONObject, error) { + return httputils.ParseJSONResponse(reqBody, resp, err, this.client.debug) } func (this *ClientSession) HasSystemAdminPrivilege() bool { diff --git a/pkg/monitor/tasks/resolve_bucket_acl_task.go b/pkg/monitor/tasks/resolve_bucket_acl_task.go index d4aabac7da..28b9a777c5 100644 --- a/pkg/monitor/tasks/resolve_bucket_acl_task.go +++ b/pkg/monitor/tasks/resolve_bucket_acl_task.go @@ -26,14 +26,14 @@ func (self *ResoleBucketAclTask) OnInit(ctx context.Context, obj db.IStandaloneM err := suggestSysAlert.GetDriver().Resolve(suggestSysAlert) if err != nil { msg := fmt.Sprintf("fail to change bucket acl: %s", err) - self.taskFail(ctx, suggestSysAlert, msg) + self.taskFail(ctx, suggestSysAlert, jsonutils.NewString(msg)) return } suggestSysAlert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETING, "") err = suggestSysAlert.RealDelete(ctx, self.UserCred) if err != nil { msg := fmt.Sprintf("fail to delete SSuggestSysAlert %s", err) - self.taskFail(ctx, suggestSysAlert, msg) + self.taskFail(ctx, suggestSysAlert, jsonutils.NewString(msg)) return } db.OpsLog.LogEvent(suggestSysAlert, db.ACT_DELETE, nil, self.GetUserCred()) @@ -41,8 +41,8 @@ func (self *ResoleBucketAclTask) OnInit(ctx context.Context, obj db.IStandaloneM self.SetStageComplete(ctx, nil) } -func (self *ResoleBucketAclTask) taskFail(ctx context.Context, alert *models.SSuggestSysAlert, msg string) { - alert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETE_FAIL, msg) +func (self *ResoleBucketAclTask) taskFail(ctx context.Context, alert *models.SSuggestSysAlert, msg jsonutils.JSONObject) { + alert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETE_FAIL, msg.String()) db.OpsLog.LogEvent(alert, db.ACT_DELETE, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, alert, logclient.ACT_DELETE, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) diff --git a/pkg/monitor/tasks/resolve_unused_task.go b/pkg/monitor/tasks/resolve_unused_task.go index 8dd546fdfb..99a931501d 100644 --- a/pkg/monitor/tasks/resolve_unused_task.go +++ b/pkg/monitor/tasks/resolve_unused_task.go @@ -40,14 +40,14 @@ func (self *ResolveUnusedTask) OnInit(ctx context.Context, obj db.IStandaloneMod err := suggestSysAlert.GetDriver().Resolve(suggestSysAlert) if err != nil { msg := fmt.Sprintf("fail to delete %s", err) - self.taskFail(ctx, suggestSysAlert, msg) + self.taskFail(ctx, suggestSysAlert, jsonutils.NewString(msg)) return } suggestSysAlert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETING, "") err = suggestSysAlert.RealDelete(ctx, self.UserCred) if err != nil { msg := fmt.Sprintf("fail to delete SSuggestSysAlert %s", err) - self.taskFail(ctx, suggestSysAlert, msg) + self.taskFail(ctx, suggestSysAlert, jsonutils.NewString(msg)) return } db.OpsLog.LogEvent(suggestSysAlert, db.ACT_DELETE, nil, self.GetUserCred()) @@ -55,8 +55,8 @@ func (self *ResolveUnusedTask) OnInit(ctx context.Context, obj db.IStandaloneMod self.SetStageComplete(ctx, nil) } -func (self *ResolveUnusedTask) taskFail(ctx context.Context, alert *models.SSuggestSysAlert, msg string) { - alert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETE_FAIL, msg) +func (self *ResolveUnusedTask) taskFail(ctx context.Context, alert *models.SSuggestSysAlert, msg jsonutils.JSONObject) { + alert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETE_FAIL, msg.String()) db.OpsLog.LogEvent(alert, db.ACT_DELETE, msg, self.GetUserCred()) logclient.AddActionLogWithStartable(self, alert, logclient.ACT_DELETE, msg, self.UserCred, false) self.SetStageFailed(ctx, msg) diff --git a/pkg/multicloud/ctyun/ctyun.go b/pkg/multicloud/ctyun/ctyun.go index 6b9dc1cb88..db59bd976b 100644 --- a/pkg/multicloud/ctyun/ctyun.go +++ b/pkg/multicloud/ctyun/ctyun.go @@ -200,6 +200,7 @@ func formRequest(client *SCtyunClient, method httputils.THttpMethod, apiName str header.Set("platform", "3") } + var reqbody string ioData := strings.NewReader("") if method == httputils.GET { for k, v := range queries { @@ -212,7 +213,8 @@ func formRequest(client *SCtyunClient, method httputils.THttpMethod, apiName str datas.Add(k, c) } - ioData = strings.NewReader(datas.Encode()) + reqbody = datas.Encode() + ioData = strings.NewReader(reqbody) } header.Set("Content-Length", strconv.FormatInt(int64(ioData.Len()), 10)) @@ -233,7 +235,7 @@ func formRequest(client *SCtyunClient, method httputils.THttpMethod, apiName str ioData, client.debug) - _, jsonResp, err := httputils.ParseJSONResponse(resp, err, client.debug) + _, jsonResp, err := httputils.ParseJSONResponse(reqbody, resp, err, client.debug) if err == nil { if code, _ := jsonResp.Int("statusCode"); code != 800 { if strings.Contains(jsonResp.String(), "NotFound") { diff --git a/pkg/multicloud/objectstore/ceph/adminapi.go b/pkg/multicloud/objectstore/ceph/adminapi.go index 1cb76f0d20..90af5d5662 100644 --- a/pkg/multicloud/objectstore/ceph/adminapi.go +++ b/pkg/multicloud/objectstore/ceph/adminapi.go @@ -85,7 +85,11 @@ func (api *SCephAdminApi) jsonRequest(ctx context.Context, method httputils.THtt resp, err := api.client.Do(newReq) - return httputils.ParseJSONResponse(resp, err, api.debug) + var bodyStr string + if body != nil { + bodyStr = body.String() + } + return httputils.ParseJSONResponse(bodyStr, resp, err, api.debug) } func (api *SCephAdminApi) GetUsage(ctx context.Context, uid string) (jsonutils.JSONObject, error) { diff --git a/pkg/multicloud/objectstore/xsky/adminapi.go b/pkg/multicloud/objectstore/xsky/adminapi.go index 319115aeb5..00bffa2cd3 100644 --- a/pkg/multicloud/objectstore/xsky/adminapi.go +++ b/pkg/multicloud/objectstore/xsky/adminapi.go @@ -87,7 +87,11 @@ func (api *SXskyAdminApi) jsonRequest(ctx context.Context, method httputils.THtt } resp, err := api.client.Do(req) - return httputils.ParseJSONResponse(resp, err, api.debug) + var bodyStr string + if body != nil { + bodyStr = body.String() + } + return httputils.ParseJSONResponse(bodyStr, resp, err, api.debug) } type sLoginResponse struct { diff --git a/pkg/multicloud/ucloud/ufile.go b/pkg/multicloud/ucloud/ufile.go index b2733e7709..ce88e8c6a2 100644 --- a/pkg/multicloud/ucloud/ufile.go +++ b/pkg/multicloud/ucloud/ufile.go @@ -196,7 +196,7 @@ func doRequest(req *http.Request) (jsonutils.JSONObject, error) { if err != nil { return nil, errors.Wrap(err, "httpclient Do") } - _, body, err := httputils.ParseJSONResponse(res, err, false) + _, body, err := httputils.ParseJSONResponse("", res, err, false) if err != nil { return nil, errors.Wrap(err, "ParseJSONResponse") } diff --git a/pkg/multicloud/zstack/zstack.go b/pkg/multicloud/zstack/zstack.go index b71a175846..059dbcf38f 100644 --- a/pkg/multicloud/zstack/zstack.go +++ b/pkg/multicloud/zstack/zstack.go @@ -430,7 +430,7 @@ func (cli *SZStackClient) wait(header http.Header, action string, requestURL str if err != nil { return nil, errors.Wrap(err, fmt.Sprintf("wait location %s", location)) } - _, result, err := httputils.ParseJSONResponse(resp, err, cli.debug) + _, result, err := httputils.ParseJSONResponse("", resp, err, cli.debug) if err != nil { if strings.Contains(err.Error(), "not found") { return nil, cloudprovider.ErrNotFound diff --git a/pkg/util/httputils/httputils.go b/pkg/util/httputils/httputils.go index efffb7a6f6..093910865e 100644 --- a/pkg/util/httputils/httputils.go +++ b/pkg/util/httputils/httputils.go @@ -15,6 +15,7 @@ package httputils import ( + "bytes" "compress/flate" "compress/gzip" "context" @@ -38,6 +39,7 @@ import ( "yunion.io/x/pkg/errors" "yunion.io/x/pkg/gotypes" "yunion.io/x/pkg/trace" + "yunion.io/x/pkg/utils" "yunion.io/x/onecloud/pkg/appctx" ) @@ -68,15 +70,66 @@ var ( ) type Error struct { - Id string - Fields []string + Id string `json:"id"` + Fields []string `json:"fields"` } type JSONClientError struct { - Code int - Class string - Details string - Data Error + Request struct { + Method string `json:"method"` + Url string `json:"url"` + Body jsonutils.JSONObject `json:"body"` + Headers map[string]string `json:"headers"` + } `json:"request"` + + Code int `json:"code"` + Class string `json:"class"` + Details string `json:"details"` + Data Error `json:"data"` +} + +// body might have been consumed, so body is provided separately +func newJsonClientErrorFromRequest(req *http.Request, body string) *JSONClientError { + return newJsonClientErrorFromRequest2(req.Method, req.URL.String(), req.Header, body) +} + +func newJsonClientErrorFromRequest2(method string, urlStr string, hdrs http.Header, body string) *JSONClientError { + jce := &JSONClientError{} + + jce.Request.Method = strings.ToUpper(method) + jce.Request.Url = urlStr + jce.Request.Headers = make(map[string]string) + excludeHdrs := []string{} + authHdrs := []string{ + http.CanonicalHeaderKey("authorization"), + http.CanonicalHeaderKey("x-auth-token"), + http.CanonicalHeaderKey("x-subject-token"), + } + switch jce.Request.Method { + case "PUT", "POST", "PATCH": + contType := hdrs.Get(http.CanonicalHeaderKey("content-type")) + if strings.Contains(contType, "json") { + jce.Request.Body, _ = jsonutils.ParseString(body) + } else if strings.Contains(contType, "xml") || + strings.Contains(contType, "x-www-form-urlencoded") { + jce.Request.Body = jsonutils.NewString(body) + } + default: + excludeHdrs = append(excludeHdrs, http.CanonicalHeaderKey("content-type"), http.CanonicalHeaderKey("content-length")) + } + for h := range hdrs { + ch := http.CanonicalHeaderKey(h) + if utils.IsInStringArray(ch, excludeHdrs) { + continue + } + if utils.IsInStringArray(ch, authHdrs) { + jce.Request.Headers[ch] = "*" + } else { + jce.Request.Headers[ch] = hdrs.Get(ch) + } + } + + return jce } type JSONClientErrorMsg struct { @@ -87,7 +140,7 @@ type JsonClient struct { client *http.Client } -type JsonReuest interface { +type JsonRequest interface { GetHttpMethod() THttpMethod GetRequestBody() jsonutils.JSONObject GetUrl() string @@ -366,6 +419,33 @@ func GetDefaultClient() *http.Client { } func Request(client *http.Client, ctx context.Context, method THttpMethod, urlStr string, header http.Header, body io.Reader, debug bool) (*http.Response, error) { + req, resp, err := requestInternal(client, ctx, method, urlStr, header, body, debug) + if err != nil { + var reqBody string + if bodySeeker, ok := body.(io.ReadSeeker); ok { + bodySeeker.Seek(0, io.SeekStart) + reqBodyBytes, _ := ioutil.ReadAll(bodySeeker) + if reqBodyBytes != nil { + reqBody = string(reqBodyBytes) + } + } + if req == nil { + ce := newJsonClientErrorFromRequest2(string(method), urlStr, header, reqBody) + ce.Class = string(errors.ErrClient) + ce.Details = err.Error() + ce.Code = 499 + return nil, ce + } + ce := newJsonClientErrorFromRequest(req, reqBody) + ce.Class = string(errors.ErrClient) + ce.Details = err.Error() + ce.Code = 499 + return nil, ce + } + return resp, nil +} + +func requestInternal(client *http.Client, ctx context.Context, method THttpMethod, urlStr string, header http.Header, body io.Reader, debug bool) (*http.Request, *http.Response, error) { if client == nil { client = defaultHttpClient } @@ -377,7 +457,7 @@ func Request(client *http.Client, ctx context.Context, method THttpMethod, urlSt if !ctxData.Trace.IsZero() { addr, port, err := GetAddrPort(urlStr) if err != nil { - return nil, err + return nil, nil, err } clientTrace = trace.StartClientTrace(&ctxData.Trace, addr, port, ctxData.ServiceName) clientTrace.AddClientRequestHeader(header) @@ -387,7 +467,7 @@ func Request(client *http.Client, ctx context.Context, method THttpMethod, urlSt } req, err := http.NewRequest(string(method), urlStr, body) if err != nil { - return nil, err + return nil, nil, err } req.Header.Set("User-Agent", USER_AGENT) req.Header.Set("Accept", "*/*") @@ -426,27 +506,28 @@ func Request(client *http.Client, ctx context.Context, method THttpMethod, urlSt resp, err := client.Do(req) if err != nil { red(err.Error()) - } else { - encoding := resp.Header.Get("Content-Encoding") - switch encoding { - case "", "identity": - // do nothing - case "gzip": - gzipBody, err := gzip.NewReader(resp.Body) - if err != nil { - return nil, errors.Wrap(err, "gzip.NewReader") - } - resp.Body = gzipBody - case "deflate": - resp.Body = flate.NewReader(resp.Body) - default: - return nil, errors.Wrapf(errors.ErrNotSupported, "unsupported content-encoding %s", encoding) - } - if clientTrace != nil { - clientTrace.EndClientTraceHeader(resp.Header) - } + return req, nil, err } - return resp, err + encoding := resp.Header.Get("Content-Encoding") + switch encoding { + case "", "identity": + // do nothing + case "gzip": + gzipBody, err := gzip.NewReader(resp.Body) + if err != nil { + return req, nil, errors.Wrap(err, "gzip.NewReader") + } + resp.Body = gzipBody + case "deflate": + resp.Body = flate.NewReader(resp.Body) + default: + return req, nil, errors.Wrapf(errors.ErrNotSupported, "unsupported content-encoding %s", encoding) + } + if clientTrace != nil { + clientTrace.EndClientTraceHeader(resp.Header) + } + + return req, resp, nil } func JSONRequest(client *http.Client, ctx context.Context, method THttpMethod, urlStr string, header http.Header, body jsonutils.JSONObject, debug bool) (http.Header, jsonutils.JSONObject, error) { @@ -461,7 +542,7 @@ func JSONRequest(client *http.Client, ctx context.Context, method THttpMethod, u header.Set("Content-Length", strconv.FormatInt(int64(len(bodystr)), 10)) header.Set("Content-Type", "application/json") resp, err := Request(client, ctx, method, urlStr, header, jbody, debug) - return ParseJSONResponse(resp, err, debug) + return ParseJSONResponse(bodystr, resp, err, debug) } // closeResponse close non nil response with any response Body. @@ -484,7 +565,7 @@ func CloseResponse(resp *http.Response) { } } -func (client *JsonClient) Send(ctx context.Context, req JsonReuest, response JsonResponse, debug bool) (http.Header, jsonutils.JSONObject, error) { +func (client *JsonClient) Send(ctx context.Context, req JsonRequest, response JsonResponse, debug bool) (http.Header, jsonutils.JSONObject, error) { var bodystr string body := req.GetRequestBody() if !gotypes.IsNil(body) { @@ -493,10 +574,7 @@ func (client *JsonClient) Send(ctx context.Context, req JsonReuest, response Jso jbody := strings.NewReader(bodystr) resp, err := Request(client.client, ctx, req.GetHttpMethod(), req.GetUrl(), req.GetHeader(), jbody, debug) if err != nil { - ce := &JSONClientError{} - ce.Code = 499 - ce.Details = err.Error() - return nil, nil, ce + return nil, nil, err } defer CloseResponse(resp) if debug { @@ -509,27 +587,31 @@ func (client *JsonClient) Send(ctx context.Context, req JsonReuest, response Jso red(string(dump)) } } + rbody, err := ioutil.ReadAll(resp.Body) - if debug { - fmt.Fprintf(os.Stderr, "Response body: %s\n", string(rbody)) - } if err != nil { - ce := &JSONClientError{} + ce := newJsonClientErrorFromRequest(resp.Request, bodystr) ce.Code = resp.StatusCode + ce.Class = string(errors.ErrClient) ce.Details = fmt.Sprintf("Fail to read body: %v", err) return resp.Header, nil, ce + } else if debug { + fmt.Fprintf(os.Stderr, "Response body: %s\n", string(rbody)) } + rbody = bytes.TrimSpace(rbody) + var jrbody jsonutils.JSONObject = nil - if len(rbody) > 0 && string(rbody[0]) == "{" { + if len(rbody) > 0 && (rbody[0] == '{' || rbody[0] == '[') { var err error jrbody, err = jsonutils.Parse(rbody) if err != nil { if debug { fmt.Fprintf(os.Stderr, "parsing json %s failed: %v", string(rbody), err) } - ce := &JSONClientError{} + ce := newJsonClientErrorFromRequest(resp.Request, bodystr) ce.Code = resp.StatusCode + ce.Class = string(errors.ErrServer) ce.Details = fmt.Sprintf("jsonutils.Parse(%s) error: %v", string(rbody), err) return resp.Header, nil, ce } @@ -558,12 +640,9 @@ func IsRedirectError(err error) bool { return false } -func ParseResponse(resp *http.Response, err error, debug bool) (http.Header, []byte, error) { +func ParseResponse(reqBody string, resp *http.Response, err error, debug bool) (http.Header, []byte, error) { if err != nil { - ce := JSONClientError{} - ce.Code = 499 - ce.Details = err.Error() - return nil, nil, &ce + return nil, nil, err } defer CloseResponse(resp) if debug { @@ -577,37 +656,38 @@ func ParseResponse(resp *http.Response, err error, debug bool) (http.Header, []b } } rbody, err := ioutil.ReadAll(resp.Body) - if debug { + if err != nil { + ce := newJsonClientErrorFromRequest(resp.Request, reqBody) + ce.Code = 499 + ce.Details = fmt.Sprintf("Fail to read body: %s", err) + ce.Class = string(errors.ErrClient) + return resp.Header, nil, ce + } else if debug { fmt.Fprintf(os.Stderr, "Response body: %s\n", string(rbody)) } - if err != nil { - return nil, nil, fmt.Errorf("Fail to read body: %s", err) - } + if resp.StatusCode < 300 { return resp.Header, rbody, nil } else if resp.StatusCode >= 300 && resp.StatusCode < 400 { - ce := JSONClientError{} + ce := newJsonClientErrorFromRequest(resp.Request, reqBody) ce.Code = resp.StatusCode ce.Details = resp.Header.Get("Location") ce.Class = "redirect" - return nil, nil, &ce + return resp.Header, rbody, ce } else { - ce := JSONClientError{} + ce := newJsonClientErrorFromRequest(resp.Request, reqBody) ce.Code = resp.StatusCode ce.Details = resp.Status if len(rbody) > 0 { ce.Details = string(rbody) } - return nil, nil, &ce + return nil, nil, ce } } -func ParseJSONResponse(resp *http.Response, err error, debug bool) (http.Header, jsonutils.JSONObject, error) { +func ParseJSONResponse(reqBody string, resp *http.Response, err error, debug bool) (http.Header, jsonutils.JSONObject, error) { if err != nil { - ce := JSONClientError{} - ce.Code = 499 - ce.Details = err.Error() - return nil, nil, &ce + return nil, nil, err } defer CloseResponse(resp) if debug { @@ -620,33 +700,42 @@ func ParseJSONResponse(resp *http.Response, err error, debug bool) (http.Header, red(string(dump)) } } + rbody, err := ioutil.ReadAll(resp.Body) - if debug { + if err != nil { + ce := newJsonClientErrorFromRequest(resp.Request, reqBody) + ce.Code = 499 + ce.Class = string(errors.ErrClient) + ce.Details = fmt.Sprintf("Fail to read body: %s", err) + return resp.Header, nil, ce + } else if debug { fmt.Fprintf(os.Stderr, "Response body: %s\n", string(rbody)) } - if err != nil { - return nil, nil, fmt.Errorf("Fail to read body: %s", err) - } + + rbody = bytes.TrimSpace(rbody) var jrbody jsonutils.JSONObject = nil - if len(rbody) > 0 && string(rbody[0]) == "{" { + if len(rbody) > 0 && (rbody[0] == '{' || rbody[0] == '[') { var err error jrbody, err = jsonutils.Parse(rbody) if err != nil && debug { + // ignore the error fmt.Fprintf(os.Stderr, "parsing json failed: %s", err) } + } else { + jrbody = jsonutils.NewDict() } if resp.StatusCode < 300 { return resp.Header, jrbody, nil } else if resp.StatusCode >= 300 && resp.StatusCode < 400 { - ce := JSONClientError{} + ce := newJsonClientErrorFromRequest(resp.Request, reqBody) ce.Code = resp.StatusCode ce.Details = resp.Header.Get("Location") ce.Class = "redirect" - return nil, nil, &ce + return resp.Header, jrbody, ce } else { - ce := JSONClientError{} + ce := newJsonClientErrorFromRequest(resp.Request, reqBody) if jrbody == nil { ce.Code = resp.StatusCode @@ -654,21 +743,21 @@ func ParseJSONResponse(resp *http.Response, err error, debug bool) (http.Header, if len(rbody) > 0 { ce.Details = string(rbody) } - return nil, nil, &ce + return nil, nil, ce } - err = jrbody.Unmarshal(&ce) + err = jrbody.Unmarshal(ce) if len(ce.Class) > 0 && ce.Code >= 400 && len(ce.Details) > 0 { - return nil, nil, &ce + return nil, nil, ce } jrbody1, err := jrbody.GetMap() if err != nil { - err = jrbody.Unmarshal(&ce) + err = jrbody.Unmarshal(ce) if err != nil { ce.Details = err.Error() } - return nil, nil, &ce + return nil, nil, ce } var jrbody2 jsonutils.JSONObject if len(jrbody1) > 1 { @@ -695,7 +784,7 @@ func ParseJSONResponse(resp *http.Response, err error, debug bool) (http.Header, if eclass := jsonutils.GetAnyString(jrbody2, []string{"title", "type", "error_code"}); len(eclass) > 0 { ce.Class = eclass } - return nil, nil, &ce + return nil, nil, ce } } diff --git a/pkg/util/influxdb/influxdb.go b/pkg/util/influxdb/influxdb.go index 5e56c94cc6..d36403ea20 100644 --- a/pkg/util/influxdb/influxdb.go +++ b/pkg/util/influxdb/influxdb.go @@ -163,7 +163,7 @@ func JSONRequest(client *http.Client, ctx context.Context, method httputils.THtt header.Set("Content-Length", strconv.FormatInt(int64(len(bodystr)), 10)) header.Set("Content-Type", "application/x-www-form-urlencoded") resp, err := httputils.Request(client, ctx, method, urlStr, header, jbody, debug) - return httputils.ParseJSONResponse(resp, err, debug) + return httputils.ParseJSONResponse(bodystr, resp, err, debug) } func (db *SInfluxdb) SetDatabase(dbName string) error { diff --git a/pkg/util/oidcutils/client/client.go b/pkg/util/oidcutils/client/client.go index 65ce9fca00..224ac705d1 100644 --- a/pkg/util/oidcutils/client/client.go +++ b/pkg/util/oidcutils/client/client.go @@ -110,7 +110,7 @@ func (cli *SOIDCClient) request(ctx context.Context, method httputils.THttpMetho header.Set("Accept", "application/json") reqbody := strings.NewReader(data.QueryString()) resp, err := httputils.Request(cli.httpclient, ctx, method, urlStr, header, reqbody, cli.isDebug) - _, body, err := httputils.ParseJSONResponse(resp, err, cli.isDebug) + _, body, err := httputils.ParseJSONResponse(data.QueryString(), resp, err, cli.isDebug) return body, err } diff --git a/pkg/util/redfish/bmconsole/bmconsole.go b/pkg/util/redfish/bmconsole/bmconsole.go index dbd65da5a0..721f57927c 100644 --- a/pkg/util/redfish/bmconsole/bmconsole.go +++ b/pkg/util/redfish/bmconsole/bmconsole.go @@ -65,7 +65,11 @@ func (r *SBMCConsole) RawRequest(ctx context.Context, method httputils.THttpMeth header.Set("Connection", "Close") header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:69.0) Gecko/20100101 Firefox/69.0") resp, err := httputils.Request(r.client, ctx, method, urlStr, header, bytes.NewReader(body), r.isDebug) - hdr, rspBody, err := httputils.ParseResponse(resp, err, r.isDebug) + var bodyStr string + if body != nil { + bodyStr = string(body) + } + hdr, rspBody, err := httputils.ParseResponse(bodyStr, resp, err, r.isDebug) if err != nil { return nil, nil, errors.Wrap(err, "httputils.Request") }