mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #8349 from ioito/hotfix/qx-huawei-clirc
fix: huawei clirc region not correct
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -191,10 +191,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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user