mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): vendor update (#18711)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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=
|
||||
|
||||
Vendored
+1
-1
@@ -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
@@ -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")
|
||||
|
||||
+4
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
+8
@@ -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
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user