fix(region): optimized qcloud tag sync

This commit is contained in:
Qu Xuan
2021-09-09 17:40:34 +08:00
parent 1af88b6a56
commit 18aff683f9
10 changed files with 91 additions and 99 deletions
+8
View File
@@ -474,6 +474,14 @@ func (lb *SLoadbalancer) GetIRegion() (cloudprovider.ICloudRegion, error) {
return provider.GetIRegionById(region.ExternalId)
}
func (lb *SLoadbalancer) GetILoadbalancer() (cloudprovider.ICloudLoadbalancer, error) {
iRegion, err := lb.GetIRegion()
if err != nil {
return nil, errors.Wrapf(err, "GetIRegion")
}
return iRegion.GetILoadBalancerById(lb.ExternalId)
}
func (lb *SLoadbalancer) GetCreateLoadbalancerParams(iRegion cloudprovider.ICloudRegion) (*cloudprovider.SLoadbalancer, error) {
params := &cloudprovider.SLoadbalancer{
Name: lb.Name,
+8 -16
View File
@@ -303,16 +303,12 @@ func (self *SManagedVirtualizationRegionDriver) RequestStopLoadbalancer(ctx cont
func (self *SManagedVirtualizationRegionDriver) RequestSyncstatusLoadbalancer(ctx context.Context, userCred mcclient.TokenCredential, lb *models.SLoadbalancer, task taskman.ITask) error {
taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) {
iRegion, err := lb.GetIRegion()
iLb, err := lb.GetILoadbalancer()
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "GetILoadbalancer")
}
iLoadbalancer, err := iRegion.GetILoadBalancerById(lb.ExternalId)
if err != nil {
return nil, err
}
models.SyncVirtualResourceMetadata(ctx, userCred, lb, iLoadbalancer)
status := iLoadbalancer.GetStatus()
models.SyncVirtualResourceMetadata(ctx, userCred, lb, iLb)
status := iLb.GetStatus()
if utils.IsInStringArray(status, []string{api.LB_STATUS_ENABLED, api.LB_STATUS_DISABLED}) {
return nil, lb.SetStatus(userCred, status, "")
}
@@ -323,15 +319,11 @@ func (self *SManagedVirtualizationRegionDriver) RequestSyncstatusLoadbalancer(ct
func (self *SManagedVirtualizationRegionDriver) RequestRemoteUpdateLoadbalancer(ctx context.Context, userCred mcclient.TokenCredential, lb *models.SLoadbalancer, replaceTags bool, task taskman.ITask) error {
taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) {
iRegion, err := lb.GetIRegion()
iLb, err := lb.GetILoadbalancer()
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "GetILoadbalancer")
}
iLoadbalancer, err := iRegion.GetILoadBalancerById(lb.ExternalId)
if err != nil {
return nil, err
}
oldTags, err := iLoadbalancer.GetTags()
oldTags, err := iLb.GetTags()
if err != nil {
if errors.Cause(err) == cloudprovider.ErrNotSupported || errors.Cause(err) == cloudprovider.ErrNotImplemented {
return nil, nil
@@ -343,7 +335,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestRemoteUpdateLoadbalancer(
return nil, errors.Wrapf(err, "lb.GetAllUserMetadata")
}
tagsUpdateInfo := cloudprovider.TagsUpdateInfo{OldTags: oldTags, NewTags: tags}
err = cloudprovider.SetTags(ctx, iLoadbalancer, lb.ManagerId, tags, replaceTags)
err = cloudprovider.SetTags(ctx, iLb, lb.ManagerId, tags, replaceTags)
if err != nil {
if errors.Cause(err) == cloudprovider.ErrNotSupported || errors.Cause(err) == cloudprovider.ErrNotImplemented {
return nil, nil
@@ -18,6 +18,7 @@ import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
@@ -33,22 +34,23 @@ func init() {
taskman.RegisterTask(LoadbalancerRemoteUpdateTask{})
}
func (self *LoadbalancerRemoteUpdateTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, reason jsonutils.JSONObject) {
lb.SetStatus(self.UserCred, api.LB_UPDATE_TAGS_FAILED, reason.String())
self.SetStageFailed(ctx, reason)
func (self *LoadbalancerRemoteUpdateTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, err error) {
lb.SetStatus(self.UserCred, api.LB_UPDATE_TAGS_FAILED, err.Error())
self.SetStageFailed(ctx, jsonutils.NewString(err.Error()))
}
func (self *LoadbalancerRemoteUpdateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) {
lb := obj.(*models.SLoadbalancer)
region, err := lb.GetRegion()
if err != nil {
self.taskFail(ctx, lb, jsonutils.NewString(err.Error()))
self.taskFail(ctx, lb, errors.Wrapf(err, "GetRegion"))
return
}
self.SetStage("OnRemoteUpdateComplete", nil)
replaceTags := jsonutils.QueryBoolean(self.Params, "replace_tags", false)
if err := region.GetDriver().RequestRemoteUpdateLoadbalancer(ctx, self.GetUserCred(), lb, replaceTags, self); err != nil {
self.taskFail(ctx, lb, jsonutils.NewString(err.Error()))
self.taskFail(ctx, lb, errors.Wrapf(err, "RequestRemoteUpdateLoadbalancer"))
return
}
}
@@ -58,7 +60,7 @@ func (self *LoadbalancerRemoteUpdateTask) OnRemoteUpdateComplete(ctx context.Con
}
func (self *LoadbalancerRemoteUpdateTask) OnRemoteUpdateCompleteFailed(ctx context.Context, lb *models.SLoadbalancer, data jsonutils.JSONObject) {
self.taskFail(ctx, lb, data)
self.taskFail(ctx, lb, errors.Errorf(data.String()))
}
func (self *LoadbalancerRemoteUpdateTask) OnSyncStatusComplete(ctx context.Context, lb *models.SLoadbalancer, data jsonutils.JSONObject) {
@@ -18,6 +18,7 @@ import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
@@ -35,24 +36,25 @@ func init() {
taskman.RegisterTask(LoadbalancerSyncstatusTask{})
}
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.NotifySystemErrorWithCtx(ctx, lb.Id, lb.Name, api.LB_SYNC_CONF_FAILED, reason.String())
self.SetStageFailed(ctx, reason)
func (self *LoadbalancerSyncstatusTask) taskFail(ctx context.Context, lb *models.SLoadbalancer, err error) {
lb.SetStatus(self.GetUserCred(), api.LB_STATUS_UNKNOWN, err.Error())
db.OpsLog.LogEvent(lb, db.ACT_SYNC_STATUS, err, self.UserCred)
logclient.AddActionLogWithStartable(self, lb, logclient.ACT_SYNC_STATUS, err, self.UserCred, false)
notifyclient.NotifySystemErrorWithCtx(ctx, lb.Id, lb.Name, api.LB_SYNC_CONF_FAILED, err.Error())
self.SetStageFailed(ctx, jsonutils.NewString(err.Error()))
}
func (self *LoadbalancerSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) {
lb := obj.(*models.SLoadbalancer)
region, err := lb.GetRegion()
if err != nil {
self.taskFail(ctx, lb, jsonutils.NewString(err.Error()))
self.taskFail(ctx, lb, errors.Wrapf(err, "lb.GetRegion"))
return
}
self.SetStage("OnLoadbalancerSyncstatusComplete", nil)
if err := region.GetDriver().RequestSyncstatusLoadbalancer(ctx, self.GetUserCred(), lb, self); err != nil {
self.taskFail(ctx, lb, jsonutils.NewString(err.Error()))
self.taskFail(ctx, lb, errors.Wrapf(err, "RequestSyncstatusLoadbalancer"))
return
}
}
@@ -63,5 +65,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)
self.taskFail(ctx, lb, errors.Errorf(reason.String()))
}