From 89a701e5bb43575bc2c2ef07ef93172f70f55330 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Tue, 19 Oct 2021 16:07:08 +0800 Subject: [PATCH] fix(region): sync cdn domain origins --- pkg/cloudprovider/cdn.go | 31 ++++++++++++++++++++++++ pkg/cloudprovider/resources.go | 2 ++ pkg/compute/models/cdn_domains.go | 8 +++++++ pkg/multicloud/qcloud/cdn.go | 40 ++++++++++++++++++++++++------- 4 files changed, 73 insertions(+), 8 deletions(-) diff --git a/pkg/cloudprovider/cdn.go b/pkg/cloudprovider/cdn.go index 474a35f451..10e630be63 100644 --- a/pkg/cloudprovider/cdn.go +++ b/pkg/cloudprovider/cdn.go @@ -14,6 +14,13 @@ package cloudprovider +import ( + "reflect" + + "yunion.io/x/jsonutils" + "yunion.io/x/pkg/gotypes" +) + type SCdnDomain struct { // cdn加速域名 Domain string @@ -28,3 +35,27 @@ type SCdnDomain struct { // 源站类型 domain|ip|bucket OriginType string } + +type SCdnOrigin struct { + Type string + Origin string + ServerName string + Protocol string + Path string +} + +type SCdnOrigins []SCdnOrigin + +func (self SCdnOrigins) IsZero() bool { + return len(self) == 0 +} + +func (self SCdnOrigins) String() string { + return jsonutils.Marshal(self).String() +} + +func init() { + gotypes.RegisterSerializable(reflect.TypeOf(&SCdnOrigins{}), func() gotypes.ISerializable { + return &SCdnOrigins{} + }) +} diff --git a/pkg/cloudprovider/resources.go b/pkg/cloudprovider/resources.go index 70b55851e6..7000978646 100644 --- a/pkg/cloudprovider/resources.go +++ b/pkg/cloudprovider/resources.go @@ -1508,6 +1508,8 @@ type ICloudCDNDomain interface { GetArea() string GetServiceType() string + GetCname() string + GetOrigins() *SCdnOrigins Delete() error } diff --git a/pkg/compute/models/cdn_domains.go b/pkg/compute/models/cdn_domains.go index 8a1f36df0a..cfe53acf85 100644 --- a/pkg/compute/models/cdn_domains.go +++ b/pkg/compute/models/cdn_domains.go @@ -64,6 +64,10 @@ type SCDNDomain struct { SDeletePreventableResourceBase SManagedResourceBase + Cname string `list:"user" width:"256"` + + // 源站信息 + Origins *cloudprovider.SCdnOrigins `list:"user"` // 服务类别 ServiceType string `list:"user" width:"32" update:"admin" create:"admin_required"` // 加速区域 @@ -188,6 +192,8 @@ func (self *SCDNDomain) SyncWithCloudCDNDomain(ctx context.Context, userCred mcc self.Status = ext.GetStatus() self.Area = ext.GetArea() self.ServiceType = ext.GetServiceType() + self.Cname = ext.GetCname() + self.Origins = ext.GetOrigins() return nil }) if err != nil { @@ -214,6 +220,8 @@ func (self *SCloudprovider) newFromCloudCDNDomain(ctx context.Context, userCred domain.Status = ext.GetStatus() domain.Area = ext.GetArea() domain.ServiceType = ext.GetServiceType() + domain.Cname = ext.GetCname() + domain.Origins = ext.GetOrigins() err := CDNDomainManager.TableSpec().Insert(ctx, &domain) if err != nil { diff --git a/pkg/multicloud/qcloud/cdn.go b/pkg/multicloud/qcloud/cdn.go index a112d0e165..da594f5cd0 100644 --- a/pkg/multicloud/qcloud/cdn.go +++ b/pkg/multicloud/qcloud/cdn.go @@ -26,14 +26,14 @@ import ( ) type SCdnOrigin struct { - Origins []string `json:"Origins"` - OriginType string `json:"OriginType"` - ServerName string `json:"ServerName"` - CosPrivateAccess string `json:"CosPrivateAccess"` - OriginPullProtocol string `json:"OriginPullProtocol"` - BackupOrigins []interface{} `json:"BackupOrigins"` - BackupOriginType interface{} `json:"BackupOriginType"` - BackupServerName interface{} `json:"BackupServerName"` + Origins []string `json:"Origins"` + OriginType string `json:"OriginType"` + ServerName string `json:"ServerName"` + CosPrivateAccess string `json:"CosPrivateAccess"` + OriginPullProtocol string `json:"OriginPullProtocol"` + BackupOrigins []string `json:"BackupOrigins"` + BackupOriginType string `json:"BackupOriginType"` + BackupServerName string `json:"BackupServerName"` } type SCdnDomain struct { @@ -76,6 +76,30 @@ func (self *SCdnDomain) GetEnabled() bool { return self.Disable == "normal" } +func (self *SCdnDomain) GetCname() string { + return self.Cname +} + +func (self *SCdnDomain) GetOrigins() *cloudprovider.SCdnOrigins { + ret := cloudprovider.SCdnOrigins{} + for _, org := range self.Origin.Origins { + ret = append(ret, cloudprovider.SCdnOrigin{ + Type: self.Origin.OriginType, + ServerName: self.Origin.ServerName, + Protocol: self.Origin.OriginPullProtocol, + Origin: org, + }) + } + for _, org := range self.Origin.BackupOrigins { + ret = append(ret, cloudprovider.SCdnOrigin{ + Type: self.Origin.BackupOriginType, + ServerName: self.Origin.BackupServerName, + Origin: org, + }) + } + return &ret +} + func (self *SCdnDomain) GetArea() string { return self.Area }