fix(region): support retention server by tag (#23243)

This commit is contained in:
屈轩
2025-09-08 15:32:58 +08:00
committed by GitHub
parent eb82b9d9ca
commit db2921733d
2 changed files with 42 additions and 6 deletions
+37 -3
View File
@@ -2910,9 +2910,14 @@ type SGuestSyncResult struct {
}
func IsNeedSkipSync(ext cloudprovider.ICloudResource) (bool, string) {
if len(options.Options.SkipServerBySysTagKeys) == 0 && len(options.Options.SkipServerByUserTagKeys) == 0 && len(options.Options.SkipServerByUserTagValues) == 0 {
if len(options.Options.SkipServerBySysTagKeys) == 0 &&
len(options.Options.SkipServerByUserTagKeys) == 0 &&
len(options.Options.SkipServerByUserTagValues) == 0 &&
len(options.Options.RetentionServerByUserTagKeys) == 0 &&
len(options.Options.RetentionServerByUserTagValues) == 0 {
return false, ""
}
tags, _ := ext.GetTags()
if keys := strings.Split(options.Options.SkipServerBySysTagKeys, ","); len(keys) > 0 {
for key := range ext.GetSysTags() {
key = strings.Trim(key, "")
@@ -2922,7 +2927,6 @@ func IsNeedSkipSync(ext cloudprovider.ICloudResource) (bool, string) {
}
}
if userKeys := strings.Split(options.Options.SkipServerByUserTagKeys, ","); len(userKeys) > 0 {
tags, _ := ext.GetTags()
for key := range tags {
key = strings.Trim(key, "")
if len(key) > 0 && utils.IsInStringArray(key, userKeys) {
@@ -2931,7 +2935,6 @@ func IsNeedSkipSync(ext cloudprovider.ICloudResource) (bool, string) {
}
}
if len(options.Options.SkipServerByUserTagValues) > 0 {
tags, _ := ext.GetTags()
for _, value := range tags {
value = strings.Trim(value, "")
if len(value) > 0 && utils.IsInStringArray(value, options.Options.SkipServerByUserTagValues) {
@@ -2939,6 +2942,37 @@ func IsNeedSkipSync(ext cloudprovider.ICloudResource) (bool, string) {
}
}
}
keys, values := []string{}, []string{}
for key, value := range tags {
key = strings.Trim(key, "")
keys = append(keys, key)
values = append(values, value)
}
if len(options.Options.RetentionServerByUserTagKeys) > 0 {
skip, tagKey := true, ""
for _, key := range options.Options.RetentionServerByUserTagKeys {
key = strings.Trim(key, "")
if len(key) > 0 && utils.IsInStringArray(key, keys) {
skip, tagKey = false, key
break
}
}
return skip, tagKey
}
if len(options.Options.RetentionServerByUserTagValues) > 0 {
skip, tagValue := true, ""
for _, value := range options.Options.RetentionServerByUserTagValues {
value = strings.Trim(value, "")
if len(value) > 0 && utils.IsInStringArray(value, values) {
skip, tagValue = false, value
break
}
}
return skip, tagValue
}
return false, ""
}
+5 -3
View File
@@ -197,9 +197,11 @@ type ComputeOptions struct {
KeepDeletedSnapshotDays int `help:"The day of cleanup snapshot" default:"30"`
// 弹性伸缩中的ecs一般会有特殊的系统标签,通过指定这些标签可以忽略这部分ecs的同步, 指定多个key需要以 ',' 分隔
SkipServerBySysTagKeys string `help:"skip server,disk sync and create with system tags" default:""`
SkipServerByUserTagKeys string `help:"skip server,disk sync and create with user tags" default:""`
SkipServerByUserTagValues []string `help:"skip server,disk sync and create with user tag values"`
SkipServerBySysTagKeys string `help:"skip server,disk sync and create with system tags" default:""`
SkipServerByUserTagKeys string `help:"skip server,disk sync and create with user tags" default:""`
SkipServerByUserTagValues []string `help:"skip server,disk sync and create with user tag values"`
RetentionServerByUserTagKeys []string `help:"retain server,disk with user tags" default:""`
RetentionServerByUserTagValues []string `help:"retain server,disk with user tag values" default:""`
// 修改标签时不再同步至云上, 云账号同步资源时不会冲掉本地打的标签(key相同的会覆盖), 云账号开启只读同步和此参数效果相同,且仅影响开启只读同步的账号
KeepTagLocalization bool `help:"keep tag localization, not synchronized to the cloud" default:"false"`