Skip to content

Commit 4ba86c6

Browse files
committed
resource/alicloud_amqp_instance: Improves the invoking api method and supports refreshing credential automatically
1 parent c4c8d3d commit 4ba86c6

5 files changed

+70
-145
lines changed

alicloud/connectivity/endpoint.go

+2
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ var productCodeToLocationCode = map[string]string{
290290
"waf_openapi": "waf", //WAFV3,WAF
291291
"dfs": "alidfs", //DFS
292292
"amqp": "onsproxy", // Amqp
293+
"amqp_open": "onsproxy", // Amqp
293294
"cbn": "cbn", // CEN
294295
"expressconnectrouter": "ecr", // ExpressConnectRouter
295296
"green": "green", // Aligreen
@@ -428,6 +429,7 @@ var regularProductEndpoint = map[string]string{
428429
"waf_openapi": "wafopenapi.cn-hangzhou.aliyuncs.com",
429430
"dfs": "dfs.%s.aliyuncs.com",
430431
"amqp": "amqp-open.%s.aliyuncs.com",
432+
"amqp_open": "amqp-open.%s.aliyuncs.com",
431433
"cbn": "cbn.aliyuncs.com",
432434
"expressconnectrouter": "expressconnectrouter.cn-shanghai.aliyuncs.com",
433435
"green": "green.%s.aliyuncs.com",

alicloud/resource_alicloud_amqp_instance.go

+28-57
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"log"
77
"time"
88

9-
util "github.com/alibabacloud-go/tea-utils/service"
109
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
1110
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1211
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
@@ -44,7 +43,7 @@ func resourceAliCloudAmqpInstance() *schema.Resource {
4443
Type: schema.TypeString,
4544
Optional: true,
4645
Computed: true,
47-
ValidateFunc: StringInSlice([]string{"professional", "enterprise", "vip"}, true),
46+
ValidateFunc: StringInSlice([]string{"professional", "enterprise", "vip", "serverless"}, true),
4847
},
4948
"max_connections": {
5049
Type: schema.TypeInt,
@@ -178,11 +177,8 @@ func resourceAliCloudAmqpInstanceCreate(d *schema.ResourceData, meta interface{}
178177
action := "CreateInstance"
179178
var request map[string]interface{}
180179
var response map[string]interface{}
180+
var err error
181181
query := make(map[string]interface{})
182-
conn, err := client.NewOnsproxyClient()
183-
if err != nil {
184-
return WrapError(err)
185-
}
186182
request = make(map[string]interface{})
187183

188184
request["ClientToken"] = buildClientToken(action)
@@ -239,11 +235,9 @@ func resourceAliCloudAmqpInstanceCreate(d *schema.ResourceData, meta interface{}
239235
if v, ok := d.GetOk("max_tps"); ok {
240236
request["MaxPrivateTps"] = v
241237
}
242-
runtime := util.RuntimeOptions{}
243-
runtime.SetAutoretry(true)
244238
wait := incrementalWait(3*time.Second, 5*time.Second)
245239
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
246-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2019-12-12"), StringPointer("AK"), query, request, &runtime)
240+
response, err = client.RpcPost("amqp-open", "2019-12-12", action, query, request, true)
247241
request["ClientToken"] = buildClientToken(action)
248242

249243
if err != nil {
@@ -260,11 +254,6 @@ func resourceAliCloudAmqpInstanceCreate(d *schema.ResourceData, meta interface{}
260254
if err != nil {
261255
return WrapErrorf(err, DefaultErrorMsg, "alicloud_amqp_instance", action, AlibabaCloudSdkGoERROR)
262256
}
263-
code, _ := jsonpath.Get("$.Code", response)
264-
if fmt.Sprint(code) != "200" {
265-
log.Printf("[DEBUG] Resource alicloud_amqp_instance CreateInstance Failed!!! %s", response)
266-
return WrapErrorf(err, DefaultErrorMsg, "alicloud_amqp_instance", action, AlibabaCloudSdkGoERROR, response)
267-
}
268257

269258
d.SetId(fmt.Sprint(response["Data"]))
270259

@@ -327,14 +316,12 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
327316
client := meta.(*connectivity.AliyunClient)
328317
var request map[string]interface{}
329318
var response map[string]interface{}
319+
var err error
320+
var endpoint string
330321
var query map[string]interface{}
331322
update := false
332323
d.Partial(true)
333324
action := "SetRenewal"
334-
conn, err := client.NewBssopenapiClient()
335-
if err != nil {
336-
return WrapError(err)
337-
}
338325
request = make(map[string]interface{})
339326
query = make(map[string]interface{})
340327
query["InstanceIDs"] = d.Id()
@@ -365,22 +352,19 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
365352

366353
request["ProductCode"] = "ons"
367354
if update {
368-
runtime := util.RuntimeOptions{}
369-
runtime.SetAutoretry(true)
370355
wait := incrementalWait(3*time.Second, 5*time.Second)
371-
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
372-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-12-14"), StringPointer("AK"), query, request, &runtime)
373-
356+
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
357+
response, err = client.RpcPostWithEndpoint("BssOpenApi", "2017-12-14", action, query, request, true, endpoint)
374358
if err != nil {
375-
if IsExpectedErrors(err, []string{"NotApplicable"}) {
376-
conn.Endpoint = String(connectivity.BssOpenAPIEndpointInternational)
377-
request["ProductType"] = "ons_onsproxy_public_intl"
378-
return resource.RetryableError(err)
379-
}
380359
if NeedRetry(err) {
381360
wait()
382361
return resource.RetryableError(err)
383362
}
363+
if !client.IsInternationalAccount() && IsExpectedErrors(err, []string{"NotApplicable"}) {
364+
request["ProductType"] = "ons_onsproxy_public_intl"
365+
endpoint = connectivity.BssOpenAPIEndpointInternational
366+
return resource.RetryableError(err)
367+
}
384368
return resource.NonRetryableError(err)
385369
}
386370
addDebug(action, response, request)
@@ -395,10 +379,6 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
395379
}
396380
update = false
397381
action = "UpdateInstanceName"
398-
conn, err = client.NewOnsproxyClient()
399-
if err != nil {
400-
return WrapError(err)
401-
}
402382
request = make(map[string]interface{})
403383
query = make(map[string]interface{})
404384
query["InstanceId"] = d.Id()
@@ -408,11 +388,9 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
408388
}
409389

410390
if update {
411-
runtime := util.RuntimeOptions{}
412-
runtime.SetAutoretry(true)
413391
wait := incrementalWait(3*time.Second, 5*time.Second)
414392
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
415-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2019-12-12"), StringPointer("AK"), query, request, &runtime)
393+
response, err = client.RpcPost("amqp-open", "2019-12-12", action, query, request, false)
416394

417395
if err != nil {
418396
if NeedRetry(err) {
@@ -431,10 +409,6 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
431409
}
432410
update = false
433411
action = "UpdateInstance"
434-
conn, err = client.NewOnsproxyClient()
435-
if err != nil {
436-
return WrapError(err)
437-
}
438412
request = make(map[string]interface{})
439413
query = make(map[string]interface{})
440414
query["InstanceId"] = d.Id()
@@ -445,7 +419,7 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
445419
if d.HasChange("instance_type") {
446420
update = true
447421
}
448-
if v, ok := d.GetOk("instance_type"); ok && fmt.Sprint(v) != "SERVERLESS" {
422+
if v, ok := d.GetOk("instance_type"); ok && fmt.Sprint(v) != "serverless" {
449423
request["InstanceType"] = v
450424
}
451425

@@ -509,11 +483,9 @@ func resourceAliCloudAmqpInstanceUpdate(d *schema.ResourceData, meta interface{}
509483
}
510484

511485
if update {
512-
runtime := util.RuntimeOptions{}
513-
runtime.SetAutoretry(true)
514486
wait := incrementalWait(3*time.Second, 5*time.Second)
515487
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
516-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2019-12-12"), StringPointer("AK"), query, request, &runtime)
488+
response, err = client.RpcPost("amqp-open", "2019-12-12", action, query, request, true)
517489
request["ClientToken"] = buildClientToken(action)
518490

519491
if err != nil {
@@ -567,11 +539,9 @@ func resourceAliCloudAmqpInstanceDelete(d *schema.ResourceData, meta interface{}
567539
action := "RefundInstance"
568540
var request map[string]interface{}
569541
var response map[string]interface{}
542+
var err error
543+
var endpoint string
570544
query := make(map[string]interface{})
571-
conn, err := client.NewBssopenapiClient()
572-
if err != nil {
573-
return WrapError(err)
574-
}
575545
request = make(map[string]interface{})
576546
query["InstanceId"] = d.Id()
577547

@@ -580,23 +550,22 @@ func resourceAliCloudAmqpInstanceDelete(d *schema.ResourceData, meta interface{}
580550
request["ImmediatelyRelease"] = "1"
581551
request["ProductCode"] = "ons"
582552
request["ProductType"] = "ons_onsproxy_pre"
583-
runtime := util.RuntimeOptions{}
584-
runtime.SetAutoretry(true)
553+
if client.IsInternationalAccount() {
554+
request["ProductType"] = "ons_onsproxy_public_intl"
555+
}
585556
wait := incrementalWait(3*time.Second, 5*time.Second)
586557
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
587-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-12-14"), StringPointer("AK"), query, request, &runtime)
588-
request["ClientToken"] = buildClientToken(action)
589-
558+
response, err = client.RpcPostWithEndpoint("BssOpenApi", "2017-12-14", action, query, request, true, endpoint)
590559
if err != nil {
591-
if IsExpectedErrors(err, []string{"NotApplicable"}) {
592-
conn.Endpoint = String(connectivity.BssOpenAPIEndpointInternational)
593-
request["ProductType"] = "ons_onsproxy_public_intl"
594-
return resource.RetryableError(err)
595-
}
596560
if NeedRetry(err) {
597561
wait()
598562
return resource.RetryableError(err)
599563
}
564+
if !client.IsInternationalAccount() && IsExpectedErrors(err, []string{"NotApplicable"}) {
565+
request["ProductType"] = "ons_onsproxy_public_intl"
566+
endpoint = connectivity.BssOpenAPIEndpointInternational
567+
return resource.RetryableError(err)
568+
}
600569
return resource.NonRetryableError(err)
601570
}
602571
addDebug(action, response, request)
@@ -662,6 +631,8 @@ func convertAmqpInstanceDataInstanceTypeResponse(source interface{}) interface{}
662631
return "vip"
663632
case "ENTERPRISE":
664633
return "enterprise"
634+
case "SERVERLESS":
635+
return "serverless"
665636
}
666637
return source
667638
}

alicloud/resource_alicloud_amqp_instance_test.go

+2-63
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ import (
2121
)
2222

2323
func TestAccAliCloudAmqpInstance_professional(t *testing.T) {
24-
24+
// professional instance only supports minority regions
25+
checkoutSupportedRegions(t, true, []connectivity.Region{connectivity.Qingdao})
2526
var v map[string]interface{}
2627
resourceId := "alicloud_amqp_instance.default"
2728
ra := resourceAttrInit(resourceId, AmqpInstanceBasicMap)
@@ -1244,65 +1245,3 @@ variable "name" {
12441245
12451246
`, name)
12461247
}
1247-
1248-
func TestAccAliCloudAmqpInstance_ApSouthEast(t *testing.T) {
1249-
1250-
var v map[string]interface{}
1251-
resourceId := "alicloud_amqp_instance.default"
1252-
ra := resourceAttrInit(resourceId, AmqpInstanceBasicMap)
1253-
serviceFunc := func() interface{} {
1254-
return &AmqpOpenService{testAccProvider.Meta().(*connectivity.AliyunClient)}
1255-
}
1256-
rc := resourceCheckInit(resourceId, &v, serviceFunc)
1257-
rac := resourceAttrCheckInit(rc, ra)
1258-
1259-
rand := acctest.RandInt()
1260-
testAccCheck := rac.resourceAttrMapUpdateSet()
1261-
name := fmt.Sprintf("tf-testacc-AmqpInstanceprofessional%v", rand)
1262-
testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceAmqpInstanceConfigDependence)
1263-
1264-
resource.Test(t, resource.TestCase{
1265-
PreCheck: func() {
1266-
testAccPreCheck(t)
1267-
testAccPreCheckWithRegions(t, true, []connectivity.Region{"ap-southeast-1"})
1268-
},
1269-
// module name
1270-
IDRefreshName: resourceId,
1271-
Providers: testAccProviders,
1272-
//CheckDestroy: nil,
1273-
Steps: []resource.TestStep{
1274-
{
1275-
Config: testAccConfig(map[string]interface{}{
1276-
"instance_name": "${var.name}",
1277-
"instance_type": "professional",
1278-
"max_tps": "1000",
1279-
"payment_type": "Subscription",
1280-
"period": "1",
1281-
"queue_capacity": "50",
1282-
"support_eip": "false",
1283-
"auto_renew": "true",
1284-
"period_cycle": "Year",
1285-
}),
1286-
Check: resource.ComposeTestCheckFunc(
1287-
testAccCheck(map[string]string{
1288-
"instance_name": name,
1289-
"instance_type": "professional",
1290-
"max_tps": "1000",
1291-
"payment_type": "Subscription",
1292-
"queue_capacity": "50",
1293-
"support_eip": "false",
1294-
"renewal_status": "AutoRenewal",
1295-
"renewal_duration_unit": "Month",
1296-
"status": "SERVING",
1297-
}),
1298-
),
1299-
},
1300-
{
1301-
ResourceName: resourceId,
1302-
ImportState: true,
1303-
ImportStateVerify: true,
1304-
ImportStateVerifyIgnore: []string{"modify_type", "period", "max_tps", "max_eip_tps", "queue_capacity", "auto_renew"},
1305-
},
1306-
},
1307-
})
1308-
}

alicloud/service_alicloud_amqp_v2.go

+8-18
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,13 @@ func (s *AmqpServiceV2) DescribeAmqpInstance(id string) (object map[string]inter
2222
var response map[string]interface{}
2323
var query map[string]interface{}
2424
action := "GetInstance"
25-
conn, err := client.NewOnsproxyClient()
26-
if err != nil {
27-
return object, WrapError(err)
28-
}
2925
request = make(map[string]interface{})
3026
query = make(map[string]interface{})
3127
query["InstanceId"] = id
3228

33-
runtime := util.RuntimeOptions{}
34-
runtime.SetAutoretry(true)
3529
wait := incrementalWait(3*time.Second, 5*time.Second)
3630
err = resource.Retry(1*time.Minute, func() *resource.RetryError {
37-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("GET"), StringPointer("2019-12-12"), StringPointer("AK"), query, request, &runtime)
31+
response, err = client.RpcGet("amqp-open", "2019-12-12", action, query, request)
3832

3933
if err != nil {
4034
if NeedRetry(err) {
@@ -71,12 +65,9 @@ func (s *AmqpServiceV2) DescribeQueryAvailableInstances(id string) (object map[s
7165
client := s.client
7266
var request map[string]interface{}
7367
var response map[string]interface{}
68+
var endpoint string
7469
var query map[string]interface{}
7570
action := "QueryAvailableInstances"
76-
conn, err := client.NewBssopenapiClient()
77-
if err != nil {
78-
return object, WrapError(err)
79-
}
8071
request = make(map[string]interface{})
8172
query = make(map[string]interface{})
8273
query["InstanceIDs"] = id
@@ -86,18 +77,17 @@ func (s *AmqpServiceV2) DescribeQueryAvailableInstances(id string) (object map[s
8677
runtime.SetAutoretry(true)
8778
wait := incrementalWait(3*time.Second, 5*time.Second)
8879
err = resource.Retry(1*time.Minute, func() *resource.RetryError {
89-
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-12-14"), StringPointer("AK"), query, request, &runtime)
90-
80+
response, err = client.RpcPostWithEndpoint("BssOpenApi", "2017-12-14", action, query, request, true, endpoint)
9181
if err != nil {
92-
if IsExpectedErrors(err, []string{"NotApplicable"}) {
93-
conn.Endpoint = String(connectivity.BssOpenAPIEndpointInternational)
94-
request["ProductType"] = "ons_onsproxy_public_intl"
95-
return resource.RetryableError(err)
96-
}
9782
if NeedRetry(err) {
9883
wait()
9984
return resource.RetryableError(err)
10085
}
86+
if !client.IsInternationalAccount() && IsExpectedErrors(err, []string{"NotApplicable"}) {
87+
request["ProductType"] = "ons_onsproxy_public_intl"
88+
endpoint = connectivity.BssOpenAPIEndpointInternational
89+
return resource.RetryableError(err)
90+
}
10191
return resource.NonRetryableError(err)
10292
}
10393
addDebug(action, response, request)

0 commit comments

Comments
 (0)