From 3d70213220c1b7b249704892ecc9f9c84a70e39a Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Sat, 17 Oct 2020 18:56:36 +0800 Subject: [PATCH] fix: huawei clirc region not correct --- pkg/cloudprovider/cloudprovider.go | 19 ++++++++++++++++--- pkg/compute/models/cloudproviders.go | 2 +- pkg/multicloud/aliyun/provider/provider.go | 6 +++--- pkg/multicloud/aws/provider/provider.go | 10 +++++----- pkg/multicloud/azure/provider/provider.go | 6 +++--- pkg/multicloud/ctyun/provider/provider.go | 8 ++++---- pkg/multicloud/esxi/provider/provider.go | 8 ++++---- pkg/multicloud/google/provider/provider.go | 4 ++-- pkg/multicloud/huawei/provider/provider.go | 15 ++++++++++----- .../objectstore/ceph/provider/provider.go | 8 ++++---- .../objectstore/provider/provider.go | 8 ++++---- .../objectstore/xsky/provider/provider.go | 4 ++-- pkg/multicloud/openstack/provider/provider.go | 10 +++++----- pkg/multicloud/qcloud/provider/provider.go | 8 ++++---- pkg/multicloud/ucloud/provider/provider.go | 6 +++--- pkg/multicloud/zstack/provider/provider.go | 8 ++++---- 16 files changed, 74 insertions(+), 56 deletions(-) diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go index 9faaa07946..e60d8a77a4 100644 --- a/pkg/cloudprovider/cloudprovider.go +++ b/pkg/cloudprovider/cloudprovider.go @@ -168,10 +168,17 @@ func (cp *ProviderConfig) AdaptiveTimeoutHttpClient() *http.Client { return client } +type SProviderInfo struct { + Name string + Url string + Account string + Secret string +} + type ICloudProviderFactory interface { GetProvider(cfg ProviderConfig) (ICloudProvider, error) - GetClientRC(url, account, secret string) (map[string]string, error) + GetClientRC(SProviderInfo) (map[string]string, error) GetId() string GetName() string @@ -331,12 +338,18 @@ func GetProvider(cfg ProviderConfig) (ICloudProvider, error) { return driver.GetProvider(cfg) } -func GetClientRC(accessUrl, account, secret, provider string) (map[string]string, error) { +func GetClientRC(name, accessUrl, account, secret, provider string) (map[string]string, error) { driver, err := GetProviderFactory(provider) if err != nil { return nil, errors.Wrap(err, "GetProviderFactory") } - return driver.GetClientRC(accessUrl, account, secret) + info := SProviderInfo{ + Name: name, + Url: accessUrl, + Account: account, + Secret: secret, + } + return driver.GetClientRC(info) } func IsSupported(provider string) bool { diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index 4e0028754a..4baefc3aa6 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -1561,7 +1561,7 @@ func (provider *SCloudprovider) GetDetailsClirc(ctx context.Context, userCred mc if err != nil { return nil, err } - rc, err := cloudprovider.GetClientRC(accessUrl, provider.Account, passwd, provider.Provider) + rc, err := cloudprovider.GetClientRC(provider.Name, accessUrl, provider.Account, passwd, provider.Provider) if err != nil { return nil, err } diff --git a/pkg/multicloud/aliyun/provider/provider.go b/pkg/multicloud/aliyun/provider/provider.go index 4449d450bb..f8af87df02 100644 --- a/pkg/multicloud/aliyun/provider/provider.go +++ b/pkg/multicloud/aliyun/provider/provider.go @@ -189,10 +189,10 @@ func (self *SAliyunProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig }, nil } -func (self *SAliyunProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SAliyunProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { return map[string]string{ - "ALIYUN_ACCESS_KEY": account, - "ALIYUN_SECRET": secret, + "ALIYUN_ACCESS_KEY": info.Account, + "ALIYUN_SECRET": info.Secret, "ALIYUN_REGION": aliyun.ALIYUN_DEFAULT_REGION, }, nil } diff --git a/pkg/multicloud/aws/provider/provider.go b/pkg/multicloud/aws/provider/provider.go index 898aed2173..eba2be2fda 100644 --- a/pkg/multicloud/aws/provider/provider.go +++ b/pkg/multicloud/aws/provider/provider.go @@ -182,12 +182,12 @@ func (self *SAwsProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig) ( }, nil } -func (self *SAwsProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SAwsProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { return map[string]string{ - "AWS_ACCESS_URL": url, - "AWS_ACCESS_KEY": account, - "AWS_SECRET": secret, - "AWS_REGION": aws.GetDefaultRegionId(url), + "AWS_ACCESS_URL": info.Url, + "AWS_ACCESS_KEY": info.Account, + "AWS_SECRET": info.Secret, + "AWS_REGION": aws.GetDefaultRegionId(info.Url), }, nil } diff --git a/pkg/multicloud/azure/provider/provider.go b/pkg/multicloud/azure/provider/provider.go index 98bf53fcc0..2556c70550 100644 --- a/pkg/multicloud/azure/provider/provider.go +++ b/pkg/multicloud/azure/provider/provider.go @@ -135,15 +135,15 @@ func (self *SAzureProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig) } } -func (self *SAzureProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { - tenantId, appId, appKey, subId := parseAccount(account, secret) +func (self *SAzureProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + tenantId, appId, appKey, subId := parseAccount(info.Account, info.Secret) return map[string]string{ "AZURE_DIRECTORY_ID": tenantId, "AZURE_SUBSCRIPTION_ID": subId, "AZURE_APPLICATION_ID": appId, "AZURE_APPLICATION_KEY": appKey, "AZURE_REGION_ID": "", - "AZURE_CLOUD_ENV": url, + "AZURE_CLOUD_ENV": info.Url, }, nil } diff --git a/pkg/multicloud/ctyun/provider/provider.go b/pkg/multicloud/ctyun/provider/provider.go index 4eadae6088..86ac0edf75 100644 --- a/pkg/multicloud/ctyun/provider/provider.go +++ b/pkg/multicloud/ctyun/provider/provider.go @@ -99,11 +99,11 @@ func (self *SCtyunProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig) }, nil } -func (self *SCtyunProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SCtyunProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { return map[string]string{ - "CTYUN_ACCESS_URL": url, - "CTYUN_ACCESS_KEY": account, - "CTYUN_SECRET": secret, + "CTYUN_ACCESS_URL": info.Url, + "CTYUN_ACCESS_KEY": info.Account, + "CTYUN_SECRET": info.Secret, "CTYUN_REGION": ctyun.CTYUN_DEFAULT_REGION, }, nil } diff --git a/pkg/multicloud/esxi/provider/provider.go b/pkg/multicloud/esxi/provider/provider.go index 30c45e96cc..cc80f82d31 100644 --- a/pkg/multicloud/esxi/provider/provider.go +++ b/pkg/multicloud/esxi/provider/provider.go @@ -125,8 +125,8 @@ func (self *SESXiProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig) }, nil } -func (self *SESXiProviderFactory) GetClientRC(urlStr, account, secret string) (map[string]string, error) { - parts, err := url.Parse(urlStr) +func (self *SESXiProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + parts, err := url.Parse(info.Url) if err != nil { return nil, err } @@ -138,8 +138,8 @@ func (self *SESXiProviderFactory) GetClientRC(urlStr, account, secret string) (m return map[string]string{ "VMWARE_HOST": host, "VMWARE_PORT": fmt.Sprintf("%d", port), - "VMWARE_ACCOUNT": account, - "VMWARE_PASSWORD": secret, + "VMWARE_ACCOUNT": info.Account, + "VMWARE_PASSWORD": info.Secret, }, nil } diff --git a/pkg/multicloud/google/provider/provider.go b/pkg/multicloud/google/provider/provider.go index c1b42fe5b1..d337bc3ac4 100644 --- a/pkg/multicloud/google/provider/provider.go +++ b/pkg/multicloud/google/provider/provider.go @@ -174,8 +174,8 @@ func parseAccount(account, secret string) (projectId string, clientEmail string, return } -func (self *SGoogleProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { - projectId, clientEmail, privateKey, privateKeyId := parseAccount(account, secret) +func (self *SGoogleProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + projectId, clientEmail, privateKey, privateKeyId := parseAccount(info.Account, info.Secret) return map[string]string{ "GOOGLE_CLIENT_EMAIL": clientEmail, "GOOGLE_PROJECT_ID": projectId, diff --git a/pkg/multicloud/huawei/provider/provider.go b/pkg/multicloud/huawei/provider/provider.go index b88067a2cc..21d472e591 100644 --- a/pkg/multicloud/huawei/provider/provider.go +++ b/pkg/multicloud/huawei/provider/provider.go @@ -139,13 +139,18 @@ func (self *SHuaweiProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig }, nil } -func (self *SHuaweiProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { - accessKey, projectId := parseAccount(account) +func (self *SHuaweiProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + accessKey, projectId := parseAccount(info.Account) + region := huawei.HUAWEI_DEFAULT_REGION + data := strings.Split(info.Name, "-") + if len(data) >= 3 { + region = strings.Join(data[2:], "-") + } return map[string]string{ - "HUAWEI_CLOUD_ENV": url, + "HUAWEI_CLOUD_ENV": info.Url, "HUAWEI_ACCESS_KEY": accessKey, - "HUAWEI_SECRET": secret, - "HUAWEI_REGION": huawei.HUAWEI_DEFAULT_REGION, + "HUAWEI_SECRET": info.Secret, + "HUAWEI_REGION": region, "HUAWEI_PROJECT": projectId, }, nil } diff --git a/pkg/multicloud/objectstore/ceph/provider/provider.go b/pkg/multicloud/objectstore/ceph/provider/provider.go index c0401686df..16f4d2b3f9 100644 --- a/pkg/multicloud/objectstore/ceph/provider/provider.go +++ b/pkg/multicloud/objectstore/ceph/provider/provider.go @@ -50,11 +50,11 @@ func (self *SCephRadosProviderFactory) GetProvider(cfg cloudprovider.ProviderCon }), nil } -func (self *SCephRadosProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SCephRadosProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { return map[string]string{ - "S3_ACCESS_KEY": account, - "S3_SECRET": secret, - "S3_ACCESS_URL": url, + "S3_ACCESS_KEY": info.Account, + "S3_SECRET": info.Secret, + "S3_ACCESS_URL": info.Url, "S3_BACKEND": api.CLOUD_PROVIDER_CEPH, }, nil } diff --git a/pkg/multicloud/objectstore/provider/provider.go b/pkg/multicloud/objectstore/provider/provider.go index 3b66d5f9bb..dc335e99be 100644 --- a/pkg/multicloud/objectstore/provider/provider.go +++ b/pkg/multicloud/objectstore/provider/provider.go @@ -85,11 +85,11 @@ func (self *SObjectStoreProviderFactory) GetProvider(cfg cloudprovider.ProviderC }), nil } -func (self *SObjectStoreProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SObjectStoreProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { return map[string]string{ - "S3_ACCESS_KEY": account, - "S3_SECRET": secret, - "S3_ACCESS_URL": url, + "S3_ACCESS_KEY": info.Account, + "S3_SECRET": info.Secret, + "S3_ACCESS_URL": info.Url, "S3_BACKEND": api.CLOUD_PROVIDER_GENERICS3, }, nil } diff --git a/pkg/multicloud/objectstore/xsky/provider/provider.go b/pkg/multicloud/objectstore/xsky/provider/provider.go index c6c00aee02..486b09e45a 100644 --- a/pkg/multicloud/objectstore/xsky/provider/provider.go +++ b/pkg/multicloud/objectstore/xsky/provider/provider.go @@ -50,10 +50,10 @@ func (self *SXskyProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig) }), nil } -func (self *SXskyProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SXskyProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { client, err := xsky.NewXskyClient( objectstore.NewObjectStoreClientConfig( - url, account, secret, + info.Url, info.Account, info.Secret, ), ) if err != nil { diff --git a/pkg/multicloud/openstack/provider/provider.go b/pkg/multicloud/openstack/provider/provider.go index 2909b21b06..a78245af78 100644 --- a/pkg/multicloud/openstack/provider/provider.go +++ b/pkg/multicloud/openstack/provider/provider.go @@ -136,10 +136,10 @@ func (self *SOpenStackProviderFactory) GetProvider(cfg cloudprovider.ProviderCon }, nil } -func (self *SOpenStackProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { - accountInfo := strings.Split(account, "/") +func (self *SOpenStackProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + accountInfo := strings.Split(info.Account, "/") if len(accountInfo) < 2 { - return nil, fmt.Errorf("Missing username or project name %s", account) + return nil, fmt.Errorf("Missing username or project name %s", info.Account) } project, username, endpointType, domainName, projectDomainName := accountInfo[0], accountInfo[1], "internal", "Default", "Default" if len(accountInfo) == 3 { @@ -147,9 +147,9 @@ func (self *SOpenStackProviderFactory) GetClientRC(url, account, secret string) } return map[string]string{ - "OPENSTACK_AUTH_URL": url, + "OPENSTACK_AUTH_URL": info.Url, "OPENSTACK_USERNAME": username, - "OPENSTACK_PASSWORD": secret, + "OPENSTACK_PASSWORD": info.Secret, "OPENSTACK_PROJECT": project, "OPENSTACK_ENDPOINT_TYPE": endpointType, "OPENSTACK_DOMAIN_NAME": domainName, diff --git a/pkg/multicloud/qcloud/provider/provider.go b/pkg/multicloud/qcloud/provider/provider.go index ec724b4fc2..5682632f76 100644 --- a/pkg/multicloud/qcloud/provider/provider.go +++ b/pkg/multicloud/qcloud/provider/provider.go @@ -227,17 +227,17 @@ func (self *SQcloudProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig }, nil } -func (self *SQcloudProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { - secretId := account +func (self *SQcloudProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + secretId := info.Account appId := "" - if tmp := strings.Split(account, "/"); len(tmp) == 2 { + if tmp := strings.Split(info.Account, "/"); len(tmp) == 2 { secretId = tmp[0] appId = tmp[1] } return map[string]string{ "QCLOUD_APPID": appId, "QCLOUD_SECRET_ID": secretId, - "QCLOUD_SECRET_KEY": secret, + "QCLOUD_SECRET_KEY": info.Secret, "QCLOUD_REGION": qcloud.QCLOUD_DEFAULT_REGION, }, nil } diff --git a/pkg/multicloud/ucloud/provider/provider.go b/pkg/multicloud/ucloud/provider/provider.go index 5a748905c7..59bd77ed33 100644 --- a/pkg/multicloud/ucloud/provider/provider.go +++ b/pkg/multicloud/ucloud/provider/provider.go @@ -98,11 +98,11 @@ func (self *SUcloudProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig }, nil } -func (self *SUcloudProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { - accessKey, projectId := parseAccount(account) +func (self *SUcloudProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { + accessKey, projectId := parseAccount(info.Account) return map[string]string{ "UCLOUD_ACCESS_KEY": accessKey, - "UCLOUD_SECRET": secret, + "UCLOUD_SECRET": info.Secret, "UCLOUD_REGION": ucloud.UCLOUD_DEFAULT_REGION, "UCLOUD_PROJECT": projectId, }, nil diff --git a/pkg/multicloud/zstack/provider/provider.go b/pkg/multicloud/zstack/provider/provider.go index 0f5ab6b801..b0521c94c4 100644 --- a/pkg/multicloud/zstack/provider/provider.go +++ b/pkg/multicloud/zstack/provider/provider.go @@ -91,11 +91,11 @@ func (self *SZStackProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig }, nil } -func (self *SZStackProviderFactory) GetClientRC(url, account, secret string) (map[string]string, error) { +func (self *SZStackProviderFactory) GetClientRC(info cloudprovider.SProviderInfo) (map[string]string, error) { return map[string]string{ - "ZSTACK_AUTH_URL": url, - "ZSTACK_USERNAME": account, - "ZSTACK_PASSWORD": secret, + "ZSTACK_AUTH_URL": info.Url, + "ZSTACK_USERNAME": info.Account, + "ZSTACK_PASSWORD": info.Secret, "ZSTACK_REGION_ID": zstack.ZSTACK_DEFAULT_REGION, }, nil }