Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improves the invoking api method for some open service data source, and supports refreshing credential automatically #8358

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 24 additions & 38 deletions alicloud/connectivity/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -1057,29 +1057,6 @@ func (client *AliyunClient) WithCloudApiClient(do func(*cloudapi.Client) (interf
return do(client.cloudapiconn)
}

func (client *AliyunClient) NewTeaCommonClient(endpoint string) (*rpc.Client, error) {
sdkConfig := client.teaSdkConfig
sdkConfig.SetEndpoint(endpoint)

conn, err := rpc.NewClient(&sdkConfig)
if err != nil {
return nil, fmt.Errorf("unable to initialize the tea client: %#v", err)
}

return conn, nil
}
func (client *AliyunClient) NewTeaRoaCommonClient(endpoint string) (*roa.Client, error) {
sdkConfig := client.teaRoaSdkConfig
sdkConfig.SetEndpoint(endpoint)

conn, err := roa.NewClient(&sdkConfig)
if err != nil {
return nil, fmt.Errorf("unable to initialize the tea roa client: %#v", err)
}

return conn, nil
}

func (client *AliyunClient) WithDataHubClient(do func(api datahub.DataHubApi) (interface{}, error)) (interface{}, error) {
goSdkMutex.Lock()
defer goSdkMutex.Unlock()
Expand Down Expand Up @@ -2130,7 +2107,7 @@ func (client *AliyunClient) rpcRequest(method string, apiProductCode string, api
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaPost(apiProductCode string, apiVersion string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("POST", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry)
return client.roaRequest("POST", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry, "")
}

// RoaPut invoking ROA API request with PUT method
Expand All @@ -2144,7 +2121,7 @@ func (client *AliyunClient) RoaPost(apiProductCode string, apiVersion string, pa
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaPut(apiProductCode string, apiVersion string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("PUT", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry)
return client.roaRequest("PUT", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry, "")
}

// RoaGet invoking ROA API request with GET method
Expand All @@ -2157,7 +2134,7 @@ func (client *AliyunClient) RoaPut(apiProductCode string, apiVersion string, pat
// headers - API parameters in headers
// body - API parameters in body
func (client *AliyunClient) RoaGet(apiProductCode string, apiVersion string, pathName string, query map[string]*string, headers map[string]*string, body interface{}) (map[string]interface{}, error) {
return client.roaRequest("GET", apiProductCode, apiVersion, "", pathName, query, headers, body, true)
return client.roaRequest("GET", apiProductCode, apiVersion, "", pathName, query, headers, body, true, "")
}

// RoaDelete invoking ROA API request with DELETE method
Expand All @@ -2171,7 +2148,7 @@ func (client *AliyunClient) RoaGet(apiProductCode string, apiVersion string, pat
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaDelete(apiProductCode string, apiVersion string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("DELETE", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry)
return client.roaRequest("DELETE", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry, "")
}

// RoaPatch invoking ROA API request with PATCH method
Expand All @@ -2185,7 +2162,7 @@ func (client *AliyunClient) RoaDelete(apiProductCode string, apiVersion string,
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaPatch(apiProductCode string, apiVersion string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("PATCH", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry)
return client.roaRequest("PATCH", apiProductCode, apiVersion, "", pathName, query, headers, body, autoRetry, "")
}

// RoaPostWithApiName invoking ROA API request with POST method
Expand All @@ -2200,7 +2177,7 @@ func (client *AliyunClient) RoaPatch(apiProductCode string, apiVersion string, p
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaPostWithApiName(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("POST", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry)
return client.roaRequest("POST", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry, "")
}

// RoaPutWithApiName invoking ROA API request with PUT method
Expand All @@ -2215,7 +2192,7 @@ func (client *AliyunClient) RoaPostWithApiName(apiProductCode string, apiVersion
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaPutWithApiName(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("PUT", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry)
return client.roaRequest("PUT", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry, "")
}

// RoaGetWithApiName invoking ROA API request with GET method
Expand All @@ -2229,7 +2206,7 @@ func (client *AliyunClient) RoaPutWithApiName(apiProductCode string, apiVersion
// headers - API parameters in headers
// body - API parameters in body
func (client *AliyunClient) RoaGetWithApiName(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}) (map[string]interface{}, error) {
return client.roaRequest("GET", apiProductCode, apiVersion, apiName, pathName, query, headers, body, true)
return client.roaRequest("GET", apiProductCode, apiVersion, apiName, pathName, query, headers, body, true, "")
}

// RoaDeleteWithApiName invoking ROA API request with DELETE method
Expand All @@ -2244,7 +2221,7 @@ func (client *AliyunClient) RoaGetWithApiName(apiProductCode string, apiVersion
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaDeleteWithApiName(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("DELETE", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry)
return client.roaRequest("DELETE", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry, "")
}

// RoaPatchWithApiName invoking ROA API request with PATCH method
Expand All @@ -2259,14 +2236,23 @@ func (client *AliyunClient) RoaDeleteWithApiName(apiProductCode string, apiVersi
// body - API parameters in body
// autoRetry - whether to auto retry while the runtime has a 5xx error
func (client *AliyunClient) RoaPatchWithApiName(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
return client.roaRequest("PATCH", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry)
return client.roaRequest("PATCH", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry, "")
}

func (client *AliyunClient) roaRequest(method string, apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool) (map[string]interface{}, error) {
apiProductCode = strings.ToLower(ConvertKebabToSnake(apiProductCode))
endpoint, err := client.loadApiEndpoint(apiProductCode)
if err != nil {
return nil, err
func (client *AliyunClient) RoaPostWithApiNameEndpoint(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool, endpoint string) (map[string]interface{}, error) {
return client.roaRequest("POST", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry, endpoint)
}
func (client *AliyunClient) RoaPutWithApiNameEndpoint(apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool, endpoint string) (map[string]interface{}, error) {
return client.roaRequest("Put", apiProductCode, apiVersion, apiName, pathName, query, headers, body, autoRetry, endpoint)
}
func (client *AliyunClient) roaRequest(method string, apiProductCode string, apiVersion string, apiName string, pathName string, query map[string]*string, headers map[string]*string, body interface{}, autoRetry bool, endpoint string) (map[string]interface{}, error) {
var err error
if endpoint == "" {
apiProductCode = strings.ToLower(ConvertKebabToSnake(apiProductCode))
endpoint, err = client.loadApiEndpoint(apiProductCode)
if err != nil {
return nil, err
}
}
sdkConfig := client.teaRoaSdkConfig
sdkConfig.SetEndpoint(endpoint)
Expand Down
1 change: 0 additions & 1 deletion alicloud/connectivity/endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,6 @@ const (
OpenOtsService = "ots.cn-hangzhou.aliyuncs.com"
OpenOssService = "oss-admin.aliyuncs.com"
OpenNasService = "nas.cn-hangzhou.aliyuncs.com"
OpenCdnService = "cdn.aliyuncs.com"
OpenKmsService = "kms.cn-hangzhou.aliyuncs.com"
OpenSaeService = "sae.cn-hangzhou.aliyuncs.com"
OpenCmsService = "metrics.cn-hangzhou.aliyuncs.com"
Expand Down
10 changes: 3 additions & 7 deletions alicloud/data_source_alicloud_ack_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package alicloud
import (
"time"

util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
Expand Down Expand Up @@ -44,12 +43,9 @@ func dataSourceAlicloudAckServiceRead(d *schema.ResourceData, meta interface{})
query := map[string]*string{
"type": StringPointer(d.Get("type").(string)),
}
conn, err := meta.(*connectivity.AliyunClient).NewTeaRoaCommonClient(connectivity.OpenAckService)
if err != nil {
return WrapError(err)
}
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := conn.DoRequestWithAction(StringPointer(action), StringPointer("2015-12-15"), nil, StringPointer("POST"), StringPointer("AK"), String("/service/open"), query, nil, nil, &util.RuntimeOptions{})
client := meta.(*connectivity.AliyunClient)
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := client.RoaPostWithApiNameEndpoint("CS", "2015-12-15", action, "/service/open", query, nil, nil, false, connectivity.OpenAckService)
if err != nil {
if IsExpectedErrors(err, []string{"QPS Limit Exceeded"}) || NeedRetry(err) {
return resource.RetryableError(err)
Expand Down
9 changes: 2 additions & 7 deletions alicloud/data_source_alicloud_api_gateway_service.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package alicloud

import (
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"

Expand Down Expand Up @@ -35,12 +34,8 @@ func dataSourceAlicloudApigatewayServiceRead(d *schema.ResourceData, meta interf
return nil
}

conn, err := meta.(*connectivity.AliyunClient).NewTeaCommonClient(connectivity.OpenApiGatewayService)
if err != nil {
return WrapError(err)
}
response, err := conn.DoRequest(StringPointer("OpenApiGatewayService"), nil, StringPointer("POST"), StringPointer("2016-07-14"), StringPointer("AK"), nil, nil, &util.RuntimeOptions{})

client := meta.(*connectivity.AliyunClient)
response, err := client.RpcPostWithEndpoint("CloudAPI", "2016-07-14", "OpenApiGatewayService", nil, nil, false, connectivity.OpenApiGatewayService)
addDebug("OpenApiGatewayService", response, nil)
if err != nil {
if IsExpectedErrors(err, []string{"ORDER.OPEND"}) {
Expand Down
14 changes: 5 additions & 9 deletions alicloud/data_source_alicloud_cdn_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ func dataSourceAlicloudCdnServiceRead(d *schema.ResourceData, meta interface{})
enable = v.(string)
}

conn, err := meta.(*connectivity.AliyunClient).NewTeaCommonClient(connectivity.OpenCdnService)
if err != nil {
return WrapError(err)
}
response, err := conn.DoRequest(StringPointer("DescribeCdnService"), nil, StringPointer("POST"), StringPointer("2018-05-10"), StringPointer("AK"), nil, nil, &util.RuntimeOptions{})
client := meta.(*connectivity.AliyunClient)
response, err := client.RpcPost("Cdn", "2018-05-10", "DescribeCdnService", nil, nil, false)
addDebug("DescribeCdnService", response, nil)
if err != nil {
if IsExpectedErrors(err, []string{"OperationDenied", "CdnServiceNotFound"}) {
Expand All @@ -84,15 +81,14 @@ func dataSourceAlicloudCdnServiceRead(d *schema.ResourceData, meta interface{})
}
requestBody := map[string]interface{}{"InternetChargeType": chargeType}
if opened && chargeType != response["ChangingChargeType"].(string) {
resp, err := conn.DoRequest(StringPointer("ModifyCdnService"), nil, StringPointer("POST"), StringPointer("2018-05-10"), StringPointer("AK"), nil, requestBody, &util.RuntimeOptions{})

resp, err := client.RpcPost("Cdn", "2018-05-10", "ModifyCdnService", nil, requestBody, false)
addDebug("ModifyCdnService", resp, nil)
if err != nil {
return WrapErrorf(err, DataDefaultErrorMsg, "alicloud_cdn_service", "ModifyCdnService", AlibabaCloudSdkGoERROR)
}
}
if !opened {
resp, err := conn.DoRequest(StringPointer("OpenCdnService"), nil, StringPointer("POST"), StringPointer("2018-05-10"), StringPointer("AK"), nil, requestBody, &util.RuntimeOptions{})
resp, err := client.RpcPost("Cdn", "2018-05-10", "OpenCdnService", nil, requestBody, false)
addDebug("OpenCdnService", resp, nil)
if err != nil {
if IsExpectedErrors(err, []string{"CdnService.HasOpened"}) {
Expand All @@ -111,7 +107,7 @@ func dataSourceAlicloudCdnServiceRead(d *schema.ResourceData, meta interface{})
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(4*time.Minute, func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2018-05-10"), StringPointer("AK"), nil, nil, &runtime)
response, err = client.RpcPost("Cdn", "2018-05-10", "DescribeCdnService", nil, nil, false)
if err != nil {
if NeedRetry(err) || IsExpectedErrors(err, []string{"CdnServiceNotFound"}) {
wait()
Expand Down
10 changes: 3 additions & 7 deletions alicloud/data_source_alicloud_cloud_storage_gateway_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package alicloud
import (
"time"

util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
Expand Down Expand Up @@ -36,12 +35,9 @@ func dataSourceAlicloudCloudStorageGatewayServiceRead(d *schema.ResourceData, me
return nil
}
action := "OpenSgwService"
conn, err := meta.(*connectivity.AliyunClient).NewTeaCommonClient(connectivity.OpenCloudStorageGatewayService)
if err != nil {
return WrapError(err)
}
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2018-05-11"), StringPointer("AK"), nil, nil, &util.RuntimeOptions{})
client := meta.(*connectivity.AliyunClient)
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := client.RpcPostWithEndpoint("sgw", "2018-05-11", action, nil, nil, false, connectivity.OpenCloudStorageGatewayService)
if err != nil {
if IsExpectedErrors(err, []string{"QPS Limit Exceeded"}) || NeedRetry(err) {
return resource.RetryableError(err)
Expand Down
10 changes: 3 additions & 7 deletions alicloud/data_source_alicloud_cr_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package alicloud
import (
"time"

util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
Expand Down Expand Up @@ -46,12 +45,9 @@ func dataSourceAlicloudCrServiceRead(d *schema.ResourceData, meta interface{}) e
"Password": d.Get("password"),
},
}
conn, err := meta.(*connectivity.AliyunClient).NewTeaRoaCommonClient(connectivity.OpenCrService)
if err != nil {
return WrapError(err)
}
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := conn.DoRequestWithAction(StringPointer(action), StringPointer("2016-06-07"), nil, StringPointer("PUT"), StringPointer("AK"), String("/users"), nil, nil, request, &util.RuntimeOptions{})
client := meta.(*connectivity.AliyunClient)
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := client.RoaPutWithApiNameEndpoint("acr", "2016-06-07", action, "/users", nil, nil, request, false, connectivity.OpenCrService)
if err != nil {
if IsExpectedErrors(err, []string{"QPS Limit Exceeded"}) || NeedRetry(err) {
return resource.RetryableError(err)
Expand Down
10 changes: 3 additions & 7 deletions alicloud/data_source_alicloud_data_works_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package alicloud
import (
"time"

util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
Expand Down Expand Up @@ -39,12 +38,9 @@ func dataSourceAlicloudDataWorksServiceRead(d *schema.ResourceData, meta interfa
request := map[string]interface{}{
"Region": meta.(*connectivity.AliyunClient).RegionId,
}
conn, err := meta.(*connectivity.AliyunClient).NewTeaCommonClient(connectivity.DataWorksService)
if err != nil {
return WrapError(err)
}
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2018-06-01"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
client := meta.(*connectivity.AliyunClient)
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := client.RpcPostWithEndpoint("dataworks-public", "2018-06-01", action, nil, request, false, connectivity.DataWorksService)
if err != nil {
if IsExpectedErrors(err, []string{"QPS Limit Exceeded"}) || NeedRetry(err) {
return resource.RetryableError(err)
Expand Down
11 changes: 3 additions & 8 deletions alicloud/data_source_alicloud_datahub_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package alicloud
import (
"time"

util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
Expand Down Expand Up @@ -37,13 +36,9 @@ func dataSourceAlicloudDatahubServiceRead(d *schema.ResourceData, meta interface
}
action := "OpenDataHubService"
request := map[string]interface{}{}
conn, err := meta.(*connectivity.AliyunClient).NewTeaCommonClient(connectivity.OpenDatahubService)

if err != nil {
return WrapError(err)
}
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2019-11-20"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
client := meta.(*connectivity.AliyunClient)
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := client.RpcPostWithEndpoint("Datahub", "2019-11-20", action, nil, request, false, connectivity.OpenDatahubService)
if err != nil {
if IsExpectedErrors(err, []string{"QPS Limit Exceeded"}) || NeedRetry(err) {
return resource.RetryableError(err)
Expand Down
Loading
Loading