From c495caafeb15d37492a85de07809e44625924999 Mon Sep 17 00:00:00 2001 From: xiaozhu36 Date: Thu, 15 Jul 2021 16:07:18 +0800 Subject: [PATCH] backend/oss: Changes the DescribeEndpoint to DescribeEndpoints to fixes the unsupported sts bug --- internal/backend/remote-state/oss/backend.go | 26 +++++++------------ .../backend/remote-state/oss/backend_test.go | 10 ++++--- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/internal/backend/remote-state/oss/backend.go b/internal/backend/remote-state/oss/backend.go index e8e357a73..de08af37d 100644 --- a/internal/backend/remote-state/oss/backend.go +++ b/internal/backend/remote-state/oss/backend.go @@ -319,20 +319,14 @@ func (b *Backend) configure(ctx context.Context) error { } if endpoint == "" { - endpointItem, _ := b.getOSSEndpointByRegion(accessKey, secretKey, securityToken, region) - if endpointItem != nil && len(endpointItem.Endpoint) > 0 { - if len(endpointItem.Protocols.Protocols) > 0 { - // HTTP or HTTPS - schma = strings.ToLower(endpointItem.Protocols.Protocols[0]) - for _, p := range endpointItem.Protocols.Protocols { - if strings.ToLower(p) == "https" { - schma = strings.ToLower(p) - break - } - } + endpointsResponse, _ := b.getOSSEndpointByRegion(accessKey, secretKey, securityToken, region) + for _, endpointItem := range endpointsResponse.Endpoints.Endpoint { + if endpointItem.Type == "openAPI" { + endpoint = endpointItem.Endpoint + break } - endpoint = endpointItem.Endpoint - } else { + } + if endpoint == "" { endpoint = fmt.Sprintf("oss-%s.aliyuncs.com", region) } } @@ -367,8 +361,8 @@ func (b *Backend) configure(ctx context.Context) error { return err } -func (b *Backend) getOSSEndpointByRegion(access_key, secret_key, security_token, region string) (*location.DescribeEndpointResponse, error) { - args := location.CreateDescribeEndpointRequest() +func (b *Backend) getOSSEndpointByRegion(access_key, secret_key, security_token, region string) (*location.DescribeEndpointsResponse, error) { + args := location.CreateDescribeEndpointsRequest() args.ServiceCode = "oss" args.Id = region args.Domain = "location-readonly.aliyuncs.com" @@ -379,7 +373,7 @@ func (b *Backend) getOSSEndpointByRegion(access_key, secret_key, security_token, } locationClient.AppendUserAgent(TerraformUA, TerraformVersion) - endpointsResponse, err := locationClient.DescribeEndpoint(args) + endpointsResponse, err := locationClient.DescribeEndpoints(args) if err != nil { return nil, fmt.Errorf("Describe oss endpoint using region: %#v got an error: %#v.", region, err) } diff --git a/internal/backend/remote-state/oss/backend_test.go b/internal/backend/remote-state/oss/backend_test.go index e11e46eb2..e9bc88716 100644 --- a/internal/backend/remote-state/oss/backend_test.go +++ b/internal/backend/remote-state/oss/backend_test.go @@ -2,6 +2,7 @@ package oss import ( "fmt" + "math/rand" "os" "testing" "time" @@ -69,9 +70,10 @@ func TestBackendConfig(t *testing.T) { func TestBackendConfigWorkSpace(t *testing.T) { testACC(t) + bucketName := fmt.Sprintf("terraform-backend-oss-test-%d", rand.Intn(1000)) config := map[string]interface{}{ "region": "cn-beijing", - "bucket": "terraform-backend-oss-test", + "bucket": bucketName, "prefix": "mystate", "key": "first.tfstate", "tablestore_endpoint": "https://terraformstate.cn-beijing.ots.aliyuncs.com", @@ -79,15 +81,15 @@ func TestBackendConfigWorkSpace(t *testing.T) { } b := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(config)).(*Backend) - createOSSBucket(t, b.ossClient, "terraform-backend-oss-test") - defer deleteOSSBucket(t, b.ossClient, "terraform-backend-oss-test") + createOSSBucket(t, b.ossClient, bucketName) + defer deleteOSSBucket(t, b.ossClient, bucketName) if _, err := b.Workspaces(); err != nil { t.Fatal(err.Error()) } if !strings.HasPrefix(b.ossClient.Config.Endpoint, "https://oss-cn-beijing") { t.Fatalf("Incorrect region was provided") } - if b.bucketName != "terraform-backend-oss-test" { + if b.bucketName != bucketName { t.Fatalf("Incorrect bucketName was provided") } if b.statePrefix != "mystate" {