diff --git a/pkg/compute/models/app.go b/pkg/compute/models/app.go index 006c4a2f3b..0ec2a96207 100644 --- a/pkg/compute/models/app.go +++ b/pkg/compute/models/app.go @@ -33,6 +33,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" + "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/util/stringutils2" @@ -447,7 +448,7 @@ func (self *SApp) StartRemoteUpdateTask(ctx context.Context, userCred mcclient.T } func (self *SApp) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/buckets.go b/pkg/compute/models/buckets.go index d232fc184c..d88951d922 100644 --- a/pkg/compute/models/buckets.go +++ b/pkg/compute/models/buckets.go @@ -1737,7 +1737,7 @@ func (bucket *SBucket) processObjectsActionInput(ctx context.Context, input api. } func (bucket *SBucket) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(bucket.ExternalId) == 0 { + if len(bucket.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := bucket.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/cdn_domains.go b/pkg/compute/models/cdn_domains.go index 1bae9023ff..81819e99dd 100644 --- a/pkg/compute/models/cdn_domains.go +++ b/pkg/compute/models/cdn_domains.go @@ -551,7 +551,7 @@ func (self *SCDNDomain) StartRemoteUpdateTask(ctx context.Context, userCred mccl } func (self *SCDNDomain) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } err := self.StartRemoteUpdateTask(ctx, userCred, true, "") diff --git a/pkg/compute/models/dbinstances.go b/pkg/compute/models/dbinstances.go index 760a3a9abd..5c38a7d8d6 100644 --- a/pkg/compute/models/dbinstances.go +++ b/pkg/compute/models/dbinstances.go @@ -2087,7 +2087,7 @@ func (self *SDBInstance) StartRemoteUpdateTask(ctx context.Context, userCred mcc } func (self *SDBInstance) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/elastic_search.go b/pkg/compute/models/elastic_search.go index 8bf2f3a903..b75fda3e49 100644 --- a/pkg/compute/models/elastic_search.go +++ b/pkg/compute/models/elastic_search.go @@ -696,7 +696,7 @@ func (self *SElasticSearch) StartRemoteUpdateTask(ctx context.Context, userCred } func (self *SElasticSearch) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/elasticcache_instances.go b/pkg/compute/models/elasticcache_instances.go index f62f10c141..3a55b73a1f 100644 --- a/pkg/compute/models/elasticcache_instances.go +++ b/pkg/compute/models/elasticcache_instances.go @@ -1717,7 +1717,7 @@ func (self *SElasticcache) StartRemoteUpdateTask(ctx context.Context, userCred m } func (self *SElasticcache) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index b1d0c86c12..ed95cbabc3 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -1957,7 +1957,7 @@ func (self *SElasticip) StartRemoteUpdateTask(ctx context.Context, userCred mccl } func (self *SElasticip) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/filesystem.go b/pkg/compute/models/filesystem.go index b21da2316d..387c114907 100644 --- a/pkg/compute/models/filesystem.go +++ b/pkg/compute/models/filesystem.go @@ -644,7 +644,7 @@ func (fileSystem *SFileSystem) StartRemoteUpdateTask(ctx context.Context, userCr } func (fileSystem *SFileSystem) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(fileSystem.ExternalId) == 0 { + if len(fileSystem.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := fileSystem.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 1dc51fa4e5..a0ca424ec1 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -6535,7 +6535,7 @@ func (guest *SGuest) StartRemoteUpdateTask(ctx context.Context, userCred mcclien } func (guest *SGuest) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(guest.ExternalId) == 0 { + if len(guest.ExternalId) == 0 || options.Options.KeepTagLocalization { return } host, err := guest.GetHost() diff --git a/pkg/compute/models/kafka.go b/pkg/compute/models/kafka.go index 48b7834d58..440bd3cf5a 100644 --- a/pkg/compute/models/kafka.go +++ b/pkg/compute/models/kafka.go @@ -689,7 +689,7 @@ func (self *SKafka) StartRemoteUpdateTask(ctx context.Context, userCred mcclient } func (self *SKafka) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index eef1ccc59e..367e4b0cca 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -1498,7 +1498,7 @@ func (self *SLoadbalancer) StartRemoteUpdateTask(ctx context.Context, userCred m } func (self *SLoadbalancer) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/mongodb.go b/pkg/compute/models/mongodb.go index cb7d69dd2f..ba03854303 100644 --- a/pkg/compute/models/mongodb.go +++ b/pkg/compute/models/mongodb.go @@ -834,7 +834,7 @@ func (self *SMongoDB) StartRemoteUpdateTask(ctx context.Context, userCred mcclie } func (self *SMongoDB) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/natgateways.go b/pkg/compute/models/natgateways.go index 6286d0dc2a..de75ac1346 100644 --- a/pkg/compute/models/natgateways.go +++ b/pkg/compute/models/natgateways.go @@ -1112,7 +1112,7 @@ func (self *SNatGateway) StartRemoteUpdateTask(ctx context.Context, userCred mcc } func (self *SNatGateway) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } vpc, err := self.GetVpc() diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index e33f0ec6f9..0469ba248e 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -1057,7 +1057,7 @@ func (self *SSecurityGroup) Delete(ctx context.Context, userCred mcclient.TokenC } func (self *SSecurityGroup) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/models/syncutils.go b/pkg/compute/models/syncutils.go index baba469d0b..2b54e1dabd 100644 --- a/pkg/compute/models/syncutils.go +++ b/pkg/compute/models/syncutils.go @@ -22,6 +22,7 @@ import ( "yunion.io/x/onecloud/pkg/apis" "yunion.io/x/onecloud/pkg/cloudcommon/db" + "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/mcclient" ) @@ -44,6 +45,9 @@ func syncMetadata(ctx context.Context, userCred mcclient.TokenCredential, model for key, value := range sysTags { sysStore[db.SYS_CLOUD_TAG_PREFIX+key] = value } + if options.Options.KeepTagLocalization { + readOnly = true + } model.SetSysCloudMetadataAll(ctx, sysStore, userCred, readOnly) tags, err := remote.GetTags() @@ -75,6 +79,9 @@ func syncVirtualResourceMetadata(ctx context.Context, userCred mcclient.TokenCre sysStore[db.SYS_CLOUD_TAG_PREFIX+"project"] = extProject.Name } } + if options.Options.KeepTagLocalization { + readOnly = true + } model.SetSysCloudMetadataAll(ctx, sysStore, userCred, readOnly) diff --git a/pkg/compute/models/waf_instances.go b/pkg/compute/models/waf_instances.go index 4649db192b..4d6befd521 100644 --- a/pkg/compute/models/waf_instances.go +++ b/pkg/compute/models/waf_instances.go @@ -32,6 +32,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" "yunion.io/x/onecloud/pkg/cloudcommon/validators" + "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/util/stringutils2" @@ -518,7 +519,7 @@ func (self *SWafInstance) StartRemoteUpdateTask(ctx context.Context, userCred mc } func (self *SWafInstance) OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential) { - if len(self.ExternalId) == 0 { + if len(self.ExternalId) == 0 || options.Options.KeepTagLocalization { return } if account := self.GetCloudaccount(); account != nil && account.ReadOnly { diff --git a/pkg/compute/options/options.go b/pkg/compute/options/options.go index 88078171ff..cf6610e560 100644 --- a/pkg/compute/options/options.go +++ b/pkg/compute/options/options.go @@ -196,6 +196,8 @@ type ComputeOptions struct { // 弹性伸缩中的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:""` + // 修改标签时不再同步至云上, 云账号同步资源时不会冲掉本地打的标签(key相同的会覆盖), 云账号开启只读同步和此参数效果相同,且仅影响开启只读同步的账号 + KeepTagLocalization bool `help:"keep tag localization, not synchronized to the cloud" default:"false"` EnableMonitorAgent bool `help:"enable public cloud vm monitor agent" default:"false"`