modelarts_pool_delete_task.go 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package modelarts
  15. import (
  16. "context"
  17. "time"
  18. "yunion.io/x/cloudmux/pkg/cloudprovider"
  19. "yunion.io/x/jsonutils"
  20. "yunion.io/x/pkg/errors"
  21. api "yunion.io/x/onecloud/pkg/apis/compute"
  22. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  23. "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
  24. "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient"
  25. "yunion.io/x/onecloud/pkg/compute/models"
  26. "yunion.io/x/onecloud/pkg/util/logclient"
  27. )
  28. type ModelartsPoolDeleteTask struct {
  29. taskman.STask
  30. }
  31. func init() {
  32. taskman.RegisterTask(ModelartsPoolDeleteTask{})
  33. }
  34. func (modelartsDeleteTask *ModelartsPoolDeleteTask) taskFailed(ctx context.Context, status string, mp *models.SModelartsPool, err error) {
  35. mp.SetStatus(ctx, modelartsDeleteTask.UserCred, status, err.Error())
  36. db.OpsLog.LogEvent(mp, db.ACT_DELETE_FAIL, err, modelartsDeleteTask.UserCred)
  37. logclient.AddActionLogWithStartable(modelartsDeleteTask, mp, logclient.ACT_DELOCATE, err, modelartsDeleteTask.UserCred, false)
  38. modelartsDeleteTask.SetStageFailed(ctx, jsonutils.NewString(err.Error()))
  39. }
  40. func (modelartsDeleteTask *ModelartsPoolDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) {
  41. pool := obj.(*models.SModelartsPool)
  42. if len(pool.ExternalId) == 0 {
  43. modelartsDeleteTask.taskComplete(ctx, pool)
  44. return
  45. }
  46. iMp, err := pool.GetIModelartsPool()
  47. if err != nil {
  48. if errors.Cause(err) == cloudprovider.ErrNotFound {
  49. modelartsDeleteTask.taskComplete(ctx, pool)
  50. return
  51. }
  52. modelartsDeleteTask.taskFailed(ctx, api.MODELARTS_POOL_STATUS_DELETE_FAILED, pool, errors.Wrapf(err, "iMp.GetIModelartsPoolById"))
  53. return
  54. }
  55. err = iMp.Delete()
  56. if err != nil {
  57. modelartsDeleteTask.taskFailed(ctx, api.MODELARTS_POOL_STATUS_DELETE_FAILED, pool, errors.Wrapf(err, "iMp.Delete"))
  58. return
  59. }
  60. err = cloudprovider.WaitStatus(iMp, api.MODELARTS_POOL_STATUS_UNKNOWN, time.Second*15, time.Minute*20)
  61. if err != nil {
  62. if errors.Cause(err) == errors.ErrTimeout {
  63. modelartsDeleteTask.taskFailed(ctx, api.MODELARTS_POOL_STATUS_TIMEOUT, pool, errors.Wrapf(err, "ErrTimeout"))
  64. return
  65. } else if errors.Cause(err) == errors.ErrNotFound {
  66. modelartsDeleteTask.taskComplete(ctx, pool)
  67. return
  68. } else {
  69. modelartsDeleteTask.taskFailed(ctx, api.MODELARTS_POOL_STATUS_DELETE_FAILED, pool, errors.Wrapf(err, "default:"))
  70. return
  71. }
  72. }
  73. modelartsDeleteTask.taskComplete(ctx, pool)
  74. }
  75. func (modelartsDeleteTask *ModelartsPoolDeleteTask) taskComplete(ctx context.Context, pool *models.SModelartsPool) {
  76. pool.RealDelete(ctx, modelartsDeleteTask.GetUserCred())
  77. notifyclient.EventNotify(ctx, modelartsDeleteTask.UserCred, notifyclient.SEventNotifyParam{
  78. Obj: modelartsDeleteTask,
  79. Action: notifyclient.ActionDelete,
  80. })
  81. modelartsDeleteTask.SetStageComplete(ctx, nil)
  82. }