mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): optimized qcloud tag sync
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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()))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user