fix(region): vendor update (#18711)

This commit is contained in:
屈轩
2023-11-17 10:08:41 +08:00
committed by GitHub
parent 30f8488238
commit 4fcec841a4
14 changed files with 659 additions and 11 deletions
+1 -1
View File
@@ -86,7 +86,7 @@ require (
k8s.io/client-go v0.19.3
k8s.io/cluster-bootstrap v0.19.3
moul.io/http2curl/v2 v2.3.0
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231116081347-9207615214fe
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231117015828-a46d7098bf71
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32
yunion.io/x/jsonutils v1.0.1-0.20230613121553-0f3b41e2ef19
yunion.io/x/log v1.0.1-0.20230411060016-feb3f46ab361
+2 -2
View File
@@ -1192,8 +1192,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231116081347-9207615214fe h1:xFiw/QyM1Mui9uzuPDCV5vCondoTtdh2+ityoN4jKYQ=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231116081347-9207615214fe/go.mod h1:aj1gR9PPb6eqqKOwvANe26CoZFY8ydmXy0fuvgKYXH0=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231117015828-a46d7098bf71 h1:8avCx3dnQChgEDHve7jJJPgN5+o0QJ+rhGiPS08A+UE=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231117015828-a46d7098bf71/go.mod h1:aj1gR9PPb6eqqKOwvANe26CoZFY8ydmXy0fuvgKYXH0=
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 h1:v7POYkQwo1XzOxBoIoRVr/k0V9Y5JyjpshlIFa9raug=
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
+1 -1
View File
@@ -1458,7 +1458,7 @@ sigs.k8s.io/structured-merge-diff/v4/value
# sigs.k8s.io/yaml v1.2.0
## explicit; go 1.12
sigs.k8s.io/yaml
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231116081347-9207615214fe
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231117015828-a46d7098bf71
## explicit; go 1.18
yunion.io/x/cloudmux/pkg/apis
yunion.io/x/cloudmux/pkg/apis/billing
+2
View File
@@ -117,6 +117,8 @@ var (
DnsPolicyValueOversea = TDnsPolicyValue("oversea")
DnsPolicyValueMainland = TDnsPolicyValue("mainland")
DnsPolicyValueNAmerica = TDnsPolicyValue("os_namerica")
DnsPolicyValueEuro = TDnsPolicyValue("os_euro")
DnsPolicyValueBaidu = TDnsPolicyValue("baidu")
DnsPolicyValueGoogle = TDnsPolicyValue("google")
@@ -126,6 +126,10 @@ func GetRecordLineLineType(policyinfo cloudprovider.TDnsPolicyValue) string {
return "drpeng"
case cloudprovider.DnsPolicyValueBtvn:
return "btvn"
case cloudprovider.DnsPolicyValueNAmerica:
return "os_namerica"
case cloudprovider.DnsPolicyValueEuro:
return "os_euro"
case cloudprovider.DnsPolicyValueBaidu:
return "baidu"
+34
View File
@@ -174,6 +174,10 @@ func (self *SAwsClient) ec2Request(regionId string, apiName string, params map[s
return self.request(regionId, EC2_SERVICE_NAME, EC2_SERVICE_ID, "2016-11-15", apiName, params, retval, assumeRole)
}
func (self *SAwsClient) cfRequest(apiName string, params map[string]string, retval interface{}, assumeRole bool) error {
return self.request("", CDN_SERVICE_NAME, CDN_SERVICE_ID, "2020-05-31", apiName, params, retval, assumeRole)
}
func (client *SAwsClient) getAwsSession(regionId string, assumeRole bool) (*session.Session, error) {
httpClient := client.cpcfg.AdaptiveTimeoutHttpClient()
transport, _ := httpClient.Transport.(*http.Transport)
@@ -447,6 +451,35 @@ func (self *SAwsClient) GetIStorageById(id string) (cloudprovider.ICloudStorage,
return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIStorageById")
}
func (self *SAwsClient) cdnList(marker string, pageSize int64) ([]SCdnDomain, string, error) {
input := map[string]string{
"Marker": marker,
"MaxItems": fmt.Sprintf("%d", pageSize),
}
ret := &struct {
Items []SCdnDomain `xml:"Items>DistributionSummary"`
NextMarker string `xml:"NextMarker,omitempty"`
}{}
err := self.cfRequest("ListDistributions2020_05_31", input, ret, true)
if err != nil {
return nil, "", errors.Wrap(err, "cdnList")
}
return ret.Items, ret.NextMarker, err
}
func (self *SAwsClient) cdnGet(id string) (*SCdnDomain, error) {
input := map[string]string{
"Id": id,
}
var ret SCdnDomain
err := self.cfRequest("GetDistribution2020_05_31", input, &ret, true)
if err != nil {
return nil, errors.Wrap(err, "cdnGet")
}
return &ret, err
}
type SAccountBalance struct {
AvailableAmount float64
AvailableCashAmount float64
@@ -504,6 +537,7 @@ func (self *SAwsClient) GetCapabilities() []string {
cloudprovider.CLOUD_CAPABILITY_WAF,
cloudprovider.CLOUD_CAPABILITY_VPC_PEER,
cloudprovider.CLOUD_CAPABILITY_CONTAINER,
cloudprovider.CLOUD_CAPABILITY_CDN + cloudprovider.READ_ONLY_SUFFIX,
}
return caps
}
+28 -1
View File
@@ -60,7 +60,7 @@ func Unmarshal(r *request.Request) {
} else {
decoder = xml.NewDecoder(r.HTTPResponse.Body)
}
if r.ClientInfo.ServiceID == EC2_SERVICE_ID {
if r.ClientInfo.ServiceID == EC2_SERVICE_ID || r.ClientInfo.ServiceID == CDN_SERVICE_ID {
err := decoder.Decode(r.Data)
if err != nil {
r.Error = awserr.NewRequestFailure(
@@ -135,6 +135,13 @@ func Build(r *request.Request) {
log.Debugf("params: %s", body.Encode())
}
if r.ClientInfo.ServiceID == CDN_SERVICE_ID {
switch r.HTTPRequest.Method {
case "GET":
r.HTTPRequest.URL.RawQuery = body.Encode()
return
}
}
if r.ClientInfo.ServiceID == ROUTE53_SERVICE_ID {
switch r.HTTPRequest.Method {
case "GET":
@@ -262,6 +269,26 @@ func (self *SAwsClient) request(regionId, serviceName, serviceId, apiVersion str
func jsonRequest(cli *client.Client, apiName string, params map[string]string, retval interface{}) error {
method, path := "POST", "/"
if cli.ServiceID == CDN_SERVICE_ID {
for _, prefix := range []string{"List", "Get"} {
if strings.HasPrefix(apiName, prefix) {
method = "GET"
}
}
for k, v := range map[string]string{
"ListDistributions2020_05_31": "distribution",
"GetDistribution2020_05_31": "distribution",
} {
if apiName == k {
path = fmt.Sprintf("/2020-05-31/%s", v)
if id, ok := params["Id"]; ok {
path = fmt.Sprintf("/2020-05-31/%s/%s", v, strings.TrimPrefix(id, "/"))
delete(params, "Id")
}
}
}
}
if cli.ServiceID == ROUTE53_SERVICE_ID {
for _, prefix := range []string{"List", "Get"} {
if strings.HasPrefix(apiName, prefix) {
+269
View File
@@ -0,0 +1,269 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package aws
import (
"strings"
"yunion.io/x/cloudmux/pkg/cloudprovider"
"yunion.io/x/cloudmux/pkg/multicloud"
"yunion.io/x/pkg/errors"
)
type AliasesType struct {
Quantity int `xml:"Quantity"`
Items []string `xml:"Items>CNAME"`
}
type Origin struct {
DomainName string `xml:"DomainName"`
Id string `xml:"Id"`
ConnectionAttempts int `xml:"ConnectionAttempts,omitempty"`
ConnectionTimeout int `xml:"ConnectionTimeout,omitempty"`
OriginAccessControlId string `xml:"OriginAccessControlId,omitempty"`
OriginPath string `xml:"OriginPath,omitempty"`
}
type OriginsType struct {
Items []Origin `xml:"Items>Origin"`
Quantity int `xml:"Quantity"`
}
type DistributionConfigType struct {
CallerReference string `xml:"CallerReference"`
Comment string `xml:"Comment"`
Enabled bool `xml:"Enabled"`
Origins OriginsType `xml:"Origins"`
Aliases AliasesType `xml:"Aliases,omitempty"`
ContinuousDeploymentPolicyId string `xml:"ContinuousDeploymentPolicyId,omitempty"`
DefaultRootObject string `xml:"DefaultRootObject,omitempty"`
HttpVersion string `xml:"HttpVersion,omitempty"`
IsIPV6Enabled bool `xml:"IsIPV6Enabled,omitempty"`
PriceClass string `xml:"PriceClass,omitempty"`
Staging bool `xml:"Staging,omitempty"`
WebACLId string `xml:"WebACLId,omitempty"`
}
type SCdnDomain struct {
multicloud.SResourceBase
AwsTags
client *SAwsClient
Aliases AliasesType `xml:"Aliases"`
ARN string `xml:"ARN"`
Comment string `xml:"Comment"`
DomainName string `xml:"DomainName"`
Enabled bool `xml:"Enabled"`
HttpVersion string `xml:"HttpVersion"`
Id string `xml:"Id"`
IsIPV6Enabled bool `xml:"IsIPV6Enabled"`
LastModifiedTime string `xml:"LastModifiedTime"` // or time.Time if parsed
Origins OriginsType `xml:"Origins"`
PriceClass string `xml:"PriceClass"`
Staging bool `xml:"Staging"`
Status string `xml:"Status"`
WebACLId string `xml:"WebACLId"`
DistributionConfig DistributionConfigType `xml:"DistributionConfig"`
}
func (cd *SCdnDomain) GetCacheKeys() (*cloudprovider.SCDNCacheKeys, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetRangeOriginPull() (*cloudprovider.SCDNRangeOriginPull, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetCache() (*cloudprovider.SCDNCache, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetHTTPS() (*cloudprovider.SCDNHttps, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetForceRedirect() (*cloudprovider.SCDNForceRedirect, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetReferer() (*cloudprovider.SCDNReferer, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetMaxAge() (*cloudprovider.SCDNMaxAge, error) {
return nil, cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetArea() string {
return "global"
}
func (cd *SCdnDomain) GetCname() string {
res := make([]string, len(cd.Aliases.Items))
for idx, item := range cd.Aliases.Items {
res[idx] = item
}
return strings.Join(res, ",")
}
func (cd *SCdnDomain) GetEnabled() bool {
return cd.Enabled
}
func (cd *SCdnDomain) GetId() string {
return cd.DomainName
}
func (cd *SCdnDomain) GetGlobalId() string {
return cd.DomainName
}
func (cd *SCdnDomain) GetName() string {
return cd.DomainName
}
func (cd *SCdnDomain) Refresh() error {
domain, err := cd.client.GetCdnDomain(cd.Id)
if err != nil {
return errors.Wrapf(err, "GetCdnDomain")
}
cd.Status = domain.Status
return nil
}
func (cd *SCdnDomain) GetOrigins() *cloudprovider.SCdnOrigins {
domain, err := cd.client.GetCdnDomain(cd.Id)
if err != nil {
return nil
}
ret := cloudprovider.SCdnOrigins{}
for _, origin := range domain.Origins.Items {
ret = append(ret, cloudprovider.SCdnOrigin{
Origin: origin.DomainName,
Path: origin.OriginPath,
})
}
return &ret
}
func (cd *SCdnDomain) GetServiceType() string {
return "wholeSite"
}
func (cd *SCdnDomain) GetStatus() string {
if cd.Status == "Deployed" {
return "online"
} else {
return "offline"
}
}
func (cd *SCdnDomain) Delete() error {
return cloudprovider.ErrNotSupported
}
func (cd *SCdnDomain) GetProjectId() string {
return ""
}
func (cd *SCdnDomain) GetDescription() string {
return ""
}
func (ac *SAwsClient) GetICloudCDNDomains() ([]cloudprovider.ICloudCDNDomain, error) {
domains, err := ac.GetCdnDomains()
if err != nil {
return nil, errors.Wrapf(err, "GetCdnDomains")
}
ret := make([]cloudprovider.ICloudCDNDomain, 0)
for i := range domains {
domains[i].client = ac
ret = append(ret, &domains[i])
}
return ret, nil
}
func (ac *SAwsClient) GetICloudCDNDomainByName(name string) (cloudprovider.ICloudCDNDomain, error) {
return ac.GetCDNDomainByName(name)
}
func (ac *SAwsClient) GetCDNDomainByName(name string) (*SCdnDomain, error) {
domains, err := ac.GetCdnDomains()
if err != nil {
return nil, errors.Wrapf(err, "GetCdnDomain")
}
for i := range domains {
if domains[i].DomainName == name {
domains[i].client = ac
return &domains[i], nil
}
}
return nil, errors.Wrapf(cloudprovider.ErrNotFound, name)
}
func (ac *SAwsClient) GetCdnDomains() ([]SCdnDomain, error) {
domains := make([]SCdnDomain, 0)
marker := ""
for {
part, nextMarker, err := ac.DescribeUserDomains(marker, int64(100))
if err != nil {
return nil, errors.Wrapf(err, "DescribeUserDomains")
}
domains = append(domains, part...)
if nextMarker == "" {
break
} else {
marker = nextMarker
}
}
return domains, nil
}
func (ac *SAwsClient) DescribeUserDomains(marker string, pageSize int64) ([]SCdnDomain, string, error) {
resp, NextMarker, err := ac.cdnList(marker, pageSize)
if err != nil {
return nil, "", errors.Wrap(err, "DescribeUserDomains")
}
domains := make([]SCdnDomain, 0)
for i := range resp {
resp[i].client = ac
domains = append(domains, resp[i])
}
return domains, NextMarker, nil
}
func (ac *SAwsClient) GetCdnDomain(domainID string) (*SCdnDomain, error) {
resp, err := ac.cdnGet(domainID)
if err != nil {
return nil, errors.Wrapf(err, "ShowDomainDetail")
}
domain := &SCdnDomain{client: ac}
domain.Status = resp.Status
domain.Origins = resp.DistributionConfig.Origins
if err != nil {
return nil, errors.Wrapf(err, "resp.Unmarshal")
}
return domain, nil
}
+8
View File
@@ -418,3 +418,11 @@ func (self *SAwsProvider) CreateICloudrole(opts *cloudprovider.SRoleCreateOption
func (self *SAwsProvider) GetMetrics(opts *cloudprovider.MetricListOptions) ([]cloudprovider.MetricValues, error) {
return self.client.GetMetrics(opts)
}
func (self *SAwsProvider) GetICloudCDNDomains() ([]cloudprovider.ICloudCDNDomain, error) {
return self.client.GetICloudCDNDomains()
}
func (self *SAwsProvider) GetICloudCDNDomainByName(name string) (cloudprovider.ICloudCDNDomain, error) {
return self.client.GetICloudCDNDomainByName(name)
}
+3
View File
@@ -146,6 +146,9 @@ const (
PRICING_SERVICE_NAME = "api.pricing"
PRICING_SERVICE_ID = "Pricing"
CDN_SERVICE_NAME = "cloudfront"
CDN_SERVICE_ID = "CloudFront"
)
type SRegion struct {
+273
View File
@@ -0,0 +1,273 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package huawei
import (
"fmt"
"net/url"
api "yunion.io/x/cloudmux/pkg/apis/compute"
"yunion.io/x/cloudmux/pkg/cloudprovider"
"yunion.io/x/cloudmux/pkg/multicloud"
"yunion.io/x/pkg/errors"
)
type SCdnDomainOriginHost struct {
DomainId string `json:"domain_id"` // 域名ID
OriginHostType string `json:"origin_host_type"` // 回源host的类型
CustomizeDomain string `json:"customize_domain"` // 自定义回源host域名
}
type SCdnSource struct {
IPOrDomain string `json:"ip_or_domain"` // 源站IP(非内网IP)或者域名
DomainID string `json:"domain_id"` //
OriginType string `json:"origin_type"` // 源站类型取值:ipaddr、 domain、obs_bucket,分别表示:源站IP、源站域名、OBS桶访问域名
ActiveStandby int `json:"active_standby"` // 主备状态(1代表主站;0代表备站),主源站必须存在,备源站可选,OBS桶不能有备源站
}
type SCdnDomain struct {
multicloud.SResourceBase
HuaweiTags
client *SHuaweiClient
DomainOriginHost SCdnDomainOriginHost `json:"domain_origin_host"`
Sources []SCdnSource `json:"sources"`
DomainName string `json:"domain_name"` // 加速域名
Cname string `json:"cname"` // 加速域名对应的CNAME
Id string `json:"id"` // 加速域名ID
UserDomainId string `json:"user_domain_id"` // 域名所属用户的domain_id
BusinessType string `json:"business_type"` // 域名业务类型,若为web,则表示类型为网站加速;若为download,则表示业务类型为文件下载加速;若为video,则表示业务类型为点播加速;若为wholeSite,则表示类型为全站加速
ServiceArea string `json:"service_area"` // 华为云CDN提供的加速服务范围,包含:mainland_china中国大陆、outside_mainland_china中国大陆境外、global全球
DomainStatus string `json:"domain_status"` // 加速域名状态。取值意义: - online表示“已开启” - offline表示“已停用” - configuring表示“配置中” - configure_failed表示“配置失败” - checking表示“审核中” - check_failed表示“审核未通过” - deleting表示“删除中”
HttpsStatus int `json:"https_status"` // 是否开启HTTPS加速
CreateTime int64 `json:"create_time"` // 域名创建时间,相对于UTC 1970-01-01到当前时间相隔的毫秒数
ModifyTime int64 `json:"modify_time"` // 域名修改时间,相对于UTC 1970-01-01到当前时间相隔的毫秒数
Disabled int `json:"disabled"` // 封禁状态(0代表未禁用;1代表禁用)
Locked int `json:"locked"` // 锁定状态(0代表未锁定;1代表锁定)
RangeStatus string `json:"range_status"` // Range回源状态
FollowStatus string `json:"follow_status"` // 回源跟随状态
OriginStatus string `json:"origin_status"` // 是否暂停源站回源
AutoRefreshPreheat int `json:"auto_refresh_preheat"` // 自动刷新预热(0代表关闭;1代表打开)
EnterpriseProjectId string `json:"enterprise_project_id"` // 企业项目ID
//config *SCdnConfig
}
func (cd *SCdnDomain) GetCacheKeys() (*cloudprovider.SCDNCacheKeys, error) {
return nil, nil
}
func (cd *SCdnDomain) GetRangeOriginPull() (*cloudprovider.SCDNRangeOriginPull, error) {
return nil, nil
}
func (cd *SCdnDomain) GetCache() (*cloudprovider.SCDNCache, error) {
return nil, nil
}
func (cd *SCdnDomain) GetHTTPS() (*cloudprovider.SCDNHttps, error) {
return nil, nil
}
func (cd *SCdnDomain) GetForceRedirect() (*cloudprovider.SCDNForceRedirect, error) {
return nil, nil
}
func (cd *SCdnDomain) GetReferer() (*cloudprovider.SCDNReferer, error) {
return nil, nil
}
func (cd *SCdnDomain) GetMaxAge() (*cloudprovider.SCDNMaxAge, error) {
return nil, nil
}
func (cd *SCdnDomain) GetArea() string {
switch cd.ServiceArea {
case "mainland_china":
return api.CDN_DOMAIN_AREA_MAINLAND
case "global":
return api.CDN_DOMAIN_AREA_GLOBAL
case "outside_mainland_china":
return api.CDN_DOMAIN_AREA_OVERSEAS
default:
return cd.ServiceArea
}
}
func (cd *SCdnDomain) GetCname() string {
return cd.Cname
}
func (cd *SCdnDomain) GetEnabled() bool {
if cd.Disabled == 0 {
return true
} else {
return false
}
}
func (cd *SCdnDomain) GetId() string {
return cd.DomainName
}
func (cd *SCdnDomain) GetGlobalId() string {
return cd.DomainName
}
func (cd *SCdnDomain) GetName() string {
return cd.DomainName
}
func (cd *SCdnDomain) Refresh() error {
domain, err := cd.client.GetCdnDomain(cd.Id, cd.EnterpriseProjectId)
if err != nil {
return errors.Wrapf(err, "GetCdnDomain")
}
cd.DomainStatus = domain.DomainStatus
return nil
}
func (cd *SCdnDomain) GetOrigins() *cloudprovider.SCdnOrigins {
ret := cloudprovider.SCdnOrigins{}
for _, origin := range cd.Sources {
ret = append(ret, cloudprovider.SCdnOrigin{
Origin: origin.IPOrDomain,
})
}
return &ret
}
func (cd *SCdnDomain) GetServiceType() string {
return cd.BusinessType
}
func (cd *SCdnDomain) GetStatus() string {
switch cd.DomainStatus {
case "online", "offline":
return cd.DomainStatus
case "configuring", "checking":
return api.CDN_DOMAIN_STATUS_PROCESSING
case "configure_failed":
return cd.DomainStatus
case "check_failed":
return api.CDN_DOMAIN_STATUS_REJECTED
}
return cd.DomainStatus
}
func (self *SCdnDomain) GetProjectId() string {
return self.EnterpriseProjectId
}
func (cd *SCdnDomain) Delete() error {
_, err := cd.client.cdnDelete("cdn/domains/" + cd.Id)
return errors.Wrapf(err, "DeleteCdnDomain")
}
func (hc *SHuaweiClient) GetICloudCDNDomains() ([]cloudprovider.ICloudCDNDomain, error) {
domains, err := hc.GetCdnDomains()
if err != nil {
return nil, errors.Wrapf(err, "GetCdnDomains")
}
ret := []cloudprovider.ICloudCDNDomain{}
for i := range domains {
domains[i].client = hc
ret = append(ret, &domains[i])
}
return ret, nil
}
func (hc *SHuaweiClient) GetICloudCDNDomainByName(name string) (cloudprovider.ICloudCDNDomain, error) {
return hc.GetCDNDomainByName(name)
}
func (hc *SHuaweiClient) GetCDNDomainByName(name string) (*SCdnDomain, error) {
domains, total, err := hc.DescribeUserDomains(name, 1, 1)
if err != nil {
return nil, errors.Wrapf(err, "GetCdnDomain")
}
if total == 1 {
domains[0].client = hc
return &domains[0], nil
}
if total == 0 {
return nil, errors.Wrapf(cloudprovider.ErrNotFound, name)
}
return nil, errors.Wrapf(cloudprovider.ErrDuplicateId, name)
}
func (hc *SHuaweiClient) GetCdnDomains() ([]SCdnDomain, error) {
domains := make([]SCdnDomain, 0)
for {
part, total, err := hc.DescribeUserDomains("", 1000, len(domains)/1000+1)
if err != nil {
return nil, errors.Wrapf(err, "DescribeUserDomains")
}
domains = append(domains, part...)
if len(domains) >= total || len(part) == 0 {
break
}
}
return domains, nil
}
func (hc *SHuaweiClient) DescribeUserDomains(domain string, pageSize, pageNumber int) ([]SCdnDomain, int, error) {
if pageSize < 1 || pageSize > 1000 {
pageSize = 1000
}
if pageNumber < 1 {
pageNumber = 1
}
params := url.Values{
"page_size": []string{fmt.Sprintf("%d", pageSize)},
"page_number": []string{fmt.Sprintf("%d", pageNumber)},
"enterprise_project_id": []string{"ALL"},
}
if len(domain) > 0 {
params["domain_name"] = []string{domain}
}
resp, err := hc.cdnList("cdn/domains", params)
if err != nil {
return nil, 0, errors.Wrap(err, "DescribeUserDomains")
}
domains := make([]SCdnDomain, 0)
err = resp.Unmarshal(&domains, "domains")
if err != nil {
return nil, 0, errors.Wrap(err, "resp.Unmarshal")
}
totalCount, _ := resp.Int("total")
return domains, int(totalCount), nil
}
func (hc *SHuaweiClient) GetCdnDomain(domainID, epID string) (*SCdnDomain, error) {
resp, err := hc.cdnGet("cdn/domains/"+domainID+"/detail", epID)
if err != nil {
return nil, errors.Wrapf(err, "ShowDomainDetail")
}
domain := &SCdnDomain{client: hc}
err = resp.Unmarshal(domain, "domain")
if err != nil {
return nil, errors.Wrapf(err, "resp.Unmarshal")
}
return domain, nil
}
+22 -5
View File
@@ -127,9 +127,9 @@ type SHuaweiClient struct {
signer auth.Signer
isMainProject bool // whether the project is the main project in the region
isSyncCertProject bool
clientRegion string
isMainProject bool // whether the project is the main project in the region
isDefaultProject bool // whether the project is the default region project
clientRegion string
userId string
ownerId string
@@ -394,6 +394,22 @@ func (self *SHuaweiClient) sslcertExport(regionId, resource string, scID string)
return self.request(httputils.POST, uri, url.Values{}, nil)
}
func (self *SHuaweiClient) cdnGet(resource, epID string) (jsonutils.JSONObject, error) {
params := url.Values{"enterprise_project_id": []string{epID}}
uri := fmt.Sprintf("https://cdn.myhuaweicloud.com/v1.0/%s", resource)
return self.request(httputils.GET, uri, params, nil)
}
func (self *SHuaweiClient) cdnList(resource string, query url.Values) (jsonutils.JSONObject, error) {
uri := fmt.Sprintf("https://cdn.myhuaweicloud.com/v1.0/%s", resource)
return self.request(httputils.GET, uri, query, nil)
}
func (self *SHuaweiClient) cdnDelete(resource string) (jsonutils.JSONObject, error) {
uri := fmt.Sprintf("https://cdn.myhuaweicloud.com/v1.0/%s", resource)
return self.request(httputils.DELETE, uri, url.Values{}, nil)
}
type akClient struct {
client *http.Client
aksk aksk.SignOptions
@@ -486,7 +502,7 @@ func (self *SHuaweiClient) fetchRegions() error {
}
}
if project.Name == HUAWEI_CERT_DEFAULT_REGION {
self.isSyncCertProject = true
self.isDefaultProject = true
}
} else {
filtedRegions = self.regions
@@ -877,8 +893,9 @@ func (self *SHuaweiClient) GetCapabilities() []string {
if self.isMainProject {
caps = append(caps, cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE)
}
if self.isSyncCertProject {
if self.isDefaultProject {
caps = append(caps, cloudprovider.CLOUD_CAPABILITY_CERT)
caps = append(caps, cloudprovider.CLOUD_CAPABILITY_CDN+cloudprovider.READ_ONLY_SUFFIX)
}
return caps
}
@@ -319,3 +319,11 @@ func (self *SHuaweiProvider) GetISSLCertificates() ([]cloudprovider.ICloudSSLCer
func (self *SHuaweiProvider) GetISSLCertificate(certId string) (cloudprovider.ICloudSSLCertificate, error) {
return self.client.GetISSLCertificate(certId)
}
func (self *SHuaweiProvider) GetICloudCDNDomains() ([]cloudprovider.ICloudCDNDomain, error) {
return self.client.GetICloudCDNDomains()
}
func (self *SHuaweiProvider) GetICloudCDNDomainByName(name string) (cloudprovider.ICloudCDNDomain, error) {
return self.client.GetICloudCDNDomainByName(name)
}
+4 -1
View File
@@ -213,7 +213,10 @@ func (self *SLoadbalancer) Refresh() error {
// 腾讯云当前不支持一个LB绑定多个ip,每个LB只支持绑定一个ip
func (self *SLoadbalancer) GetAddress() string {
return self.LoadBalancerVips[0]
for _, addr := range self.LoadBalancerVips {
return addr
}
return ""
}
func (self *SLoadbalancer) GetAddressType() string {