From 439d2a316ebe9eb4db55a1fd3327fbf48d4fb136 Mon Sep 17 00:00:00 2001 From: TangBin Date: Thu, 27 Feb 2020 15:32:32 +0800 Subject: [PATCH] huawei secgroup default vpc id fix --- pkg/compute/models/initdb.go | 1 + pkg/compute/models/secgroupcache.go | 24 ++++++++++++++++++++++++ pkg/multicloud/ctyun/securitygroup.go | 10 ++++------ pkg/multicloud/huawei/region.go | 2 +- pkg/multicloud/huawei/securitygroup.go | 9 +++------ 5 files changed, 33 insertions(+), 13 deletions(-) diff --git a/pkg/compute/models/initdb.go b/pkg/compute/models/initdb.go index 84d4e44dd2..2fa7b8b185 100644 --- a/pkg/compute/models/initdb.go +++ b/pkg/compute/models/initdb.go @@ -38,6 +38,7 @@ func InitDB() error { WireManager, StorageManager, SecurityGroupManager, + SecurityGroupCacheManager, NetworkManager, LoadbalancerCertificateManager, LoadbalancerAclManager, diff --git a/pkg/compute/models/secgroupcache.go b/pkg/compute/models/secgroupcache.go index 3f72fb9d26..0a8f0ad6ec 100644 --- a/pkg/compute/models/secgroupcache.go +++ b/pkg/compute/models/secgroupcache.go @@ -350,3 +350,27 @@ func (self *SSecurityGroupCache) StartSecurityGroupCacheDeleteTask(ctx context.C task.ScheduleRun(nil) return nil } + +func (manager *SSecurityGroupCacheManager) InitializeData() error { + providerIds := CloudproviderManager.Query("id").In("provider", []string{api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_CTYUN}).SubQuery() + + deprecatedSecgroups := []SSecurityGroupCache{} + q := manager.Query().In("manager_id", providerIds).NotEquals("vpc_id", api.NORMAL_VPC_ID) + err := db.FetchModelObjects(manager, q, &deprecatedSecgroups) + if err != nil && err != sql.ErrNoRows { + return errors.Wrap(err, "SSecurityGroupCacheManager.InitializeData.Query") + } + + for i := range deprecatedSecgroups { + cache := &deprecatedSecgroups[i] + _, err := db.Update(cache, func() error { + return cache.MarkDelete() + }) + if err != nil { + return errors.Wrap(err, "SSecurityGroupCacheManager.InitializeData.Query") + } + } + + log.Debugf("SSecurityGroupCacheManager cleaned %d deprecated security group cache.", len(deprecatedSecgroups)) + return nil +} diff --git a/pkg/multicloud/ctyun/securitygroup.go b/pkg/multicloud/ctyun/securitygroup.go index 22001b315f..0dc58e53b6 100644 --- a/pkg/multicloud/ctyun/securitygroup.go +++ b/pkg/multicloud/ctyun/securitygroup.go @@ -24,6 +24,8 @@ import ( "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/secrules" + + apis "yunion.io/x/onecloud/pkg/apis/compute" ) type SSecurityGroup struct { @@ -352,11 +354,7 @@ func (self *SSecurityGroup) GetSecurityRule(remoteRule SSecurityGroupRule, withR } func (self *SSecurityGroup) GetVpcId() string { - if len(self.VpcID) == 0 { - return "classic" - } - - return self.VpcID + return apis.NORMAL_VPC_ID } func (self *SRegion) GetSecurityGroupDetails(groupId string) (*SSecurityGroup, error) { @@ -413,7 +411,7 @@ func (self *SRegion) CreateSecurityGroup(vpcId, name string) (*SSecurityGroup, e "name": jsonutils.NewString(name), } - if len(vpcId) > 0 && (vpcId != "classic" && vpcId != "normal") { + if len(vpcId) > 0 && vpcId != apis.NORMAL_VPC_ID { params["vpcId"] = jsonutils.NewString(vpcId) } diff --git a/pkg/multicloud/huawei/region.go b/pkg/multicloud/huawei/region.go index 21f72fcd26..436cadef99 100644 --- a/pkg/multicloud/huawei/region.go +++ b/pkg/multicloud/huawei/region.go @@ -724,7 +724,7 @@ func (self *SRegion) CreateSecurityGroup(vpcId string, name string, desc string) params := jsonutils.NewDict() secgroupObj := jsonutils.NewDict() secgroupObj.Add(jsonutils.NewString(name), "name") - if len(vpcId) > 0 && (vpcId != "classic" && vpcId != "normal") { + if len(vpcId) > 0 && vpcId != api.NORMAL_VPC_ID { secgroupObj.Add(jsonutils.NewString(vpcId), "vpc_id") } params.Add(secgroupObj, "security_group") diff --git a/pkg/multicloud/huawei/securitygroup.go b/pkg/multicloud/huawei/securitygroup.go index d5199dd864..b71552594a 100644 --- a/pkg/multicloud/huawei/securitygroup.go +++ b/pkg/multicloud/huawei/securitygroup.go @@ -31,6 +31,8 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/pkg/util/secrules" + + api "yunion.io/x/onecloud/pkg/apis/compute" ) type SecurityGroupRule struct { @@ -128,12 +130,7 @@ func (self *SSecurityGroup) GetId() string { } func (self *SSecurityGroup) GetVpcId() string { - // 无vpc关联的安全组统一返回classic - if len(self.VpcID) == 0 { - return "classic" - } - - return self.VpcID + return api.NORMAL_VPC_ID } func (self *SSecurityGroup) GetName() string {