diff --git a/pkg/apis/compute/cloudaccount_const.go b/pkg/apis/compute/cloudaccount_const.go index bdb7ae0c5e..7ade88bfe6 100644 --- a/pkg/apis/compute/cloudaccount_const.go +++ b/pkg/apis/compute/cloudaccount_const.go @@ -55,6 +55,17 @@ const ( ONECLOUD_BRAND_ONECLOUD = "OneCloud" ) +const ( + CLOUD_ACCESS_ENV_AWS_GLOBAL = CLOUD_PROVIDER_AWS + "-int" + CLOUD_ACCESS_ENV_AWS_CHINA = CLOUD_PROVIDER_AWS + CLOUD_ACCESS_ENV_AZURE_GLOBAL = CLOUD_PROVIDER_AZURE + "-int" + CLOUD_ACCESS_ENV_AZURE_GERMAN = CLOUD_PROVIDER_AZURE + "-de" + CLOUD_ACCESS_ENV_AZURE_US_GOVERNMENT = CLOUD_PROVIDER_AZURE + "-us-gov" + CLOUD_ACCESS_ENV_AZURE_CHINA = CLOUD_PROVIDER_AZURE + CLOUD_ACCESS_ENV_HUAWEI_GLOBAL = CLOUD_PROVIDER_HUAWEI + "-int" + CLOUD_ACCESS_ENV_HUAWEI_CHINA = CLOUD_PROVIDER_HUAWEI +) + var ( CLOUD_PROVIDER_VALID_STATUS = []string{CLOUD_PROVIDER_CONNECTED} CLOUD_PROVIDER_VALID_HEALTH_STATUS = []string{CLOUD_PROVIDER_HEALTH_NORMAL, CLOUD_PROVIDER_HEALTH_NO_PERMISSION} diff --git a/pkg/multicloud/aws/aws.go b/pkg/multicloud/aws/aws.go index d3f9064eb9..0531f36ae0 100644 --- a/pkg/multicloud/aws/aws.go +++ b/pkg/multicloud/aws/aws.go @@ -357,6 +357,17 @@ func (self *SAwsClient) GetIProjects() ([]cloudprovider.ICloudProject, error) { return nil, cloudprovider.ErrNotImplemented } +func (self *SAwsClient) GetAccessEnv() string { + switch self.accessUrl { + case AWS_INTERNATIONAL_CLOUDENV: + return api.CLOUD_ACCESS_ENV_AWS_GLOBAL + case AWS_CHINA_CLOUDENV: + return api.CLOUD_ACCESS_ENV_AWS_CHINA + default: + return api.CLOUD_ACCESS_ENV_AWS_GLOBAL + } +} + func jsonRequest(cli *client.Client, apiName string, params map[string]string, retval interface{}, debug bool) error { op := &request.Operation{ Name: apiName, diff --git a/pkg/multicloud/aws/provider/provider.go b/pkg/multicloud/aws/provider/provider.go index ff7bf1145a..5012ee2669 100644 --- a/pkg/multicloud/aws/provider/provider.go +++ b/pkg/multicloud/aws/provider/provider.go @@ -148,3 +148,7 @@ func (self *SAwsProvider) GetStorageClasses(regionId string) []string { "INTELLIGENT_TIERING", } } + +func (self *SAwsProvider) GetCloudRegionExternalIdPrefix() string { + return self.client.GetAccessEnv() + "/" +} diff --git a/pkg/multicloud/aws/region.go b/pkg/multicloud/aws/region.go index 906d1905ca..889fd8584c 100644 --- a/pkg/multicloud/aws/region.go +++ b/pkg/multicloud/aws/region.go @@ -405,7 +405,7 @@ func (self *SRegion) GetName() string { } func (self *SRegion) GetGlobalId() string { - return fmt.Sprintf("%s/%s", CLOUD_PROVIDER_AWS, self.RegionId) + return fmt.Sprintf("%s/%s", self.client.GetAccessEnv(), self.RegionId) } func (self *SRegion) GetStatus() string { diff --git a/pkg/multicloud/azure/azure.go b/pkg/multicloud/azure/azure.go index bb696d1853..b469a95d2f 100644 --- a/pkg/multicloud/azure/azure.go +++ b/pkg/multicloud/azure/azure.go @@ -929,3 +929,19 @@ func (self *SAzureClient) GetStorageClasses(regionExtId string) ([]string, error } return ret, nil } + +func (self *SAzureClient) GetAccessEnv() string { + env, _ := azureenv.EnvironmentFromName(self.envName) + switch env.Name { + case azureenv.PublicCloud.Name: + return api.CLOUD_ACCESS_ENV_AZURE_GLOBAL + case azureenv.ChinaCloud.Name: + return api.CLOUD_ACCESS_ENV_AZURE_CHINA + case azureenv.GermanCloud.Name: + return api.CLOUD_ACCESS_ENV_AZURE_GERMAN + case azureenv.USGovernmentCloud.Name: + return api.CLOUD_ACCESS_ENV_AZURE_US_GOVERNMENT + default: + return api.CLOUD_ACCESS_ENV_AZURE_CHINA + } +} diff --git a/pkg/multicloud/azure/provider/provider.go b/pkg/multicloud/azure/provider/provider.go index 8b3325fd76..4c368bc456 100644 --- a/pkg/multicloud/azure/provider/provider.go +++ b/pkg/multicloud/azure/provider/provider.go @@ -174,3 +174,7 @@ func (self *SAzureProvider) GetStorageClasses(regionId string) []string { } return sc } + +func (self *SAzureProvider) GetCloudRegionExternalIdPrefix() string { + return self.client.GetAccessEnv() + "/" +} diff --git a/pkg/multicloud/azure/region.go b/pkg/multicloud/azure/region.go index d2968e9e8b..e3ed4c972f 100644 --- a/pkg/multicloud/azure/region.go +++ b/pkg/multicloud/azure/region.go @@ -130,7 +130,7 @@ func (self *SRegion) GetName() string { } func (self *SRegion) GetGlobalId() string { - return fmt.Sprintf("%s/%s", CLOUD_PROVIDER_AZURE, self.Name) + return fmt.Sprintf("%s/%s", self.client.GetAccessEnv(), self.Name) } func (self *SRegion) IsEmulated() bool { diff --git a/pkg/multicloud/huawei/huawei.go b/pkg/multicloud/huawei/huawei.go index fb67bead04..7964402b7f 100644 --- a/pkg/multicloud/huawei/huawei.go +++ b/pkg/multicloud/huawei/huawei.go @@ -41,6 +41,9 @@ const ( CLOUD_PROVIDER_HUAWEI = api.CLOUD_PROVIDER_HUAWEI CLOUD_PROVIDER_HUAWEI_CN = "华为云" + HUAWEI_INTERNATIONAL_CLOUDENV = "InternationalCloud" + HUAWEI_CHINA_CLOUDENV = "ChinaCloud" + HUAWEI_DEFAULT_REGION = "cn-north-1" HUAWEI_API_VERSION = "2018-12-25" ) @@ -75,6 +78,7 @@ func NewHuaweiClient(providerId, providerName, accessurl, accessKey, secret, pro providerId: providerId, providerName: providerName, projectId: projectId, + accessUrl: accessurl, accessKey: accessKey, secret: secret, debug: debug, @@ -399,3 +403,14 @@ func (self *SHuaweiClient) queryDomainBalance(domainId string) (float64, error) func (self *SHuaweiClient) GetVersion() string { return HUAWEI_API_VERSION } + +func (self *SHuaweiClient) GetAccessEnv() string { + switch self.accessUrl { + case HUAWEI_INTERNATIONAL_CLOUDENV: + return api.CLOUD_ACCESS_ENV_HUAWEI_GLOBAL + case HUAWEI_CHINA_CLOUDENV: + return api.CLOUD_ACCESS_ENV_HUAWEI_CHINA + default: + return api.CLOUD_ACCESS_ENV_HUAWEI_GLOBAL + } +} diff --git a/pkg/multicloud/huawei/region.go b/pkg/multicloud/huawei/region.go index 3a96ab7f83..393b8e8a27 100644 --- a/pkg/multicloud/huawei/region.go +++ b/pkg/multicloud/huawei/region.go @@ -353,7 +353,7 @@ func (self *SRegion) GetName() string { } func (self *SRegion) GetGlobalId() string { - return fmt.Sprintf("%s/%s", CLOUD_PROVIDER_HUAWEI, self.ID) + return fmt.Sprintf("%s/%s", self.client.GetAccessEnv(), self.ID) } func (self *SRegion) GetStatus() string {