fix: get region nil pointer error

This commit is contained in:
Qiu Jian
2021-02-20 23:13:00 +08:00
parent 2da59aa89f
commit 2a3a85f3a3
2 changed files with 17 additions and 6 deletions
+13 -1
View File
@@ -198,7 +198,7 @@ func (self *SAwsClient) fetchRegions() error {
return nil
}
if describeRegionResult == nil || time.Now().After(describeRegionResultCacheAt.Add(time.Second*3600*describeRegionExpireHours)) {
if describeRegionResult == nil || describeRegionResultCacheAt.IsZero() || time.Now().After(describeRegionResultCacheAt.Add(time.Hour*describeRegionExpireHours)) {
s, err := self.getDefaultSession()
if err != nil {
return errors.Wrap(err, "getDefaultSession")
@@ -397,6 +397,12 @@ func (client *SAwsClient) fetchBuckets() error {
// 只是使用fetchRegions初始化好的self.iregions. 本身并不从云服务器厂商拉取region信息
func (self *SAwsClient) GetRegions() []SRegion {
err := self.fetchRegions()
if err != nil {
log.Errorf("fetchRegions fail %s", err)
return nil
}
regions := make([]SRegion, len(self.iregions))
for i := 0; i < len(regions); i += 1 {
region := self.iregions[i].(*SRegion)
@@ -410,6 +416,12 @@ func (self *SAwsClient) GetIRegions() []cloudprovider.ICloudRegion {
}
func (self *SAwsClient) GetRegion(regionId string) *SRegion {
err := self.fetchRegions()
if err != nil {
log.Errorf("fetchRegions fail %s", err)
return nil
}
if len(regionId) == 0 {
regionId = AWS_INTERNATIONAL_DEFAULT_REGION
switch self.accessUrl {
+4 -5
View File
@@ -78,12 +78,11 @@ func (r *SRegion) ListAccounts() ([]SAccount, error) {
}
func (self *SAwsClient) GetSubAccounts() ([]cloudprovider.SSubAccount, error) {
// todo: implement me
err := self.fetchRegions()
if err != nil {
return nil, errors.Wrap(err, "fetchRegions")
defRegion := self.getDefaultRegion()
if defRegion == nil {
return nil, errors.Wrap(errors.ErrInvalidStatus, "no valid default region")
}
accounts, err := self.getDefaultRegion().ListAccounts()
accounts, err := defRegion.ListAccounts()
if err != nil {
// find errors
if strings.Contains(err.Error(), "AWSOrganizationsNotInUseException") || strings.Contains(err.Error(), "AccessDeniedException") {