Merge pull request #13633 from ioito/hotfix/qx-skip-server

fix(region): allow skip server sync by system tags
This commit is contained in:
Zexi Li
2022-03-08 10:34:02 +08:00
committed by GitHub
2 changed files with 40 additions and 8 deletions
+37 -8
View File
@@ -2326,6 +2326,19 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
return nil, syncResult
}
skipFunc := func(ext cloudprovider.ICloudVM) (bool, string) {
if len(options.Options.SkipServerBySysTagKeys) == 0 {
return false, ""
}
keys := strings.Split(options.Options.SkipServerBySysTagKeys, ",")
for key := range ext.GetSysTags() {
if utils.IsInStringArray(key, keys) {
return true, key
}
}
return false, ""
}
for i := 0; i < len(removed); i += 1 {
err := removed[i].syncRemoveCloudVM(ctx, userCred)
if err != nil {
@@ -2336,21 +2349,37 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
}
for i := 0; i < len(commondb); i += 1 {
skip, key := skipFunc(commonext[i])
if skip {
log.Infof("skip server %s(%s) sync for delete with system tag key: %s", commonext[i].GetName(), commonext[i].GetGlobalId(), key)
err := commondb[i].syncRemoveCloudVM(ctx, userCred)
if err != nil {
syncResult.DeleteError(err)
continue
}
syncResult.Delete()
continue
}
err := commondb[i].syncWithCloudVM(ctx, userCred, iprovider, self, commonext[i], syncOwnerId, true)
if err != nil {
syncResult.UpdateError(err)
} else {
syncVMPair := SGuestSyncResult{
Local: &commondb[i],
Remote: commonext[i],
IsNew: false,
}
syncVMPairs = append(syncVMPairs, syncVMPair)
syncResult.Update()
continue
}
syncVMPair := SGuestSyncResult{
Local: &commondb[i],
Remote: commonext[i],
IsNew: false,
}
syncVMPairs = append(syncVMPairs, syncVMPair)
syncResult.Update()
}
for i := 0; i < len(added); i += 1 {
skip, key := skipFunc(added[i])
if skip {
log.Infof("skip server %s(%s) sync with system tag key: %s", added[i].GetName(), added[i].GetGlobalId(), key)
continue
}
vm, err := db.FetchByExternalIdAndManagerId(GuestManager, added[i].GetGlobalId(), func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
sq := HostManager.Query().SubQuery()
return q.Join(sq, sqlchemy.Equals(sq.Field("id"), q.Field("host_id"))).Filter(sqlchemy.Equals(sq.Field("manager_id"), self.ManagerId))
+3
View File
@@ -180,6 +180,9 @@ type ComputeOptions struct {
DefaultIPAllocationDirection string `help:"default IP allocation direction" default:"stepdown"`
// 弹性伸缩中的ecs一般会有特殊的系统标签,通过指定这些标签可以忽略这部分ecs的同步, 指定多个key需要以 ',' 分隔
SkipServerBySysTagKeys string `help:"skip server sync and create with system tags" default:"acs:autoscaling:scalingGroupId"`
esxi.EsxiOptions
}