fix(region): compatible aliyun fin oss

This commit is contained in:
Qu Xuan
2020-11-20 16:05:31 +08:00
parent c2446eab26
commit 0feddb13af
3 changed files with 59 additions and 5 deletions
+17
View File
@@ -61,6 +61,19 @@ const (
ALIYUN_ALIDNS_API_VERSION = "2015-01-09"
)
var (
// https://help.aliyun.com/document_detail/31837.html?spm=a2c4g.11186623.2.18.675f2b8cu8CN5K#concept-zt4-cvy-5db
OSS_FINANCE_REGION_MAP = map[string]string{
"cn-hzfinance": "cn-hangzhou",
"cn-shanghai-finance-1-pub": "cn-shanghai-finance-1",
"cn-szfinance": "cn-shenzhen-finance-1",
"cn-hzjbp": "cn-hangzhou",
"cn-shanghai-finance-1": "cn-shanghai-finance-1",
"cn-shenzhen-finance-1": "cn-shenzhen-finance-1",
}
)
type AliyunClientConfig struct {
cpcfg cloudprovider.ProviderConfig
cloudEnv string // 服务区域 InternationalCloud | FinanceCloud
@@ -318,6 +331,10 @@ func (client *SAliyunClient) getOssClient(regionId string) (*oss.Client, error)
}
func (self *SAliyunClient) getRegionByRegionId(id string) (cloudprovider.ICloudRegion, error) {
_id, ok := OSS_FINANCE_REGION_MAP[id]
if ok {
id = _id
}
for i := 0; i < len(self.iregions); i += 1 {
if self.iregions[i].GetId() == id {
return self.iregions[i], nil
+26 -1
View File
@@ -86,7 +86,7 @@ func (b *SBucket) GetStorageClass() string {
}
func (b *SBucket) GetAccessUrls() []cloudprovider.SBucketAccessUrl {
return []cloudprovider.SBucketAccessUrl{
ret := []cloudprovider.SBucketAccessUrl{
{
Url: fmt.Sprintf("%s.%s", b.Name, b.region.getOSSExternalDomain()),
Description: "ExtranetEndpoint",
@@ -97,6 +97,31 @@ func (b *SBucket) GetAccessUrls() []cloudprovider.SBucketAccessUrl {
Description: "IntranetEndpoint",
},
}
osscli, err := b.region.GetOssClient()
if err != nil {
return ret
}
info, err := osscli.GetBucketInfo(b.Name)
if err != nil {
return ret
}
ret = []cloudprovider.SBucketAccessUrl{}
if len(info.BucketInfo.ExtranetEndpoint) > 0 {
ret = append(ret, cloudprovider.SBucketAccessUrl{
Url: info.BucketInfo.ExtranetEndpoint,
Description: "ExtranetEndpoint",
Primary: true,
})
}
if len(info.BucketInfo.IntranetEndpoint) > 0 {
ret = append(ret, cloudprovider.SBucketAccessUrl{
Url: info.BucketInfo.IntranetEndpoint,
Description: "IntranetEndpoint",
Primary: true,
})
}
return ret
}
func (b *SBucket) GetStats() cloudprovider.SBucketStats {
+16 -4
View File
@@ -91,9 +91,23 @@ func (self *SRegion) getOSSInternalDomain() string {
return getOSSInternalDomain(self.RegionId)
}
func (self *SRegion) getRegionId() string {
if self.client.cloudEnv == ALIYUN_FINANCE_CLOUDENV {
switch self.RegionId {
case "cn-hangzhou":
return "cn-hzfinance"
case "cn-shanghai-finance-1":
return "cn-shanghai-finance-1-pub"
case "cn-shenzhen-finance-1":
return "cn-szfinance"
}
}
return self.RegionId
}
func (self *SRegion) GetOssClient() (*oss.Client, error) {
if self.ossClient == nil {
cli, err := self.client.getOssClient(self.RegionId)
cli, err := self.client.getOssClient(self.getRegionId())
if err != nil {
return nil, errors.Wrap(err, "self.client.getOssClient")
}
@@ -990,9 +1004,7 @@ func (region *SRegion) GetIBuckets() ([]cloudprovider.ICloudBucket, error) {
}
ret := make([]cloudprovider.ICloudBucket, 0)
for i := range iBuckets {
loc := iBuckets[i].GetLocation()
// remove oss- prefix
if loc[4:] != region.GetId() {
if iBuckets[i].GetIRegion().GetId() != region.GetId() {
continue
}
ret = append(ret, iBuckets[i])