Skip to content

Commit 455d8ba

Browse files
committed
feat
1 parent 601dbfb commit 455d8ba

File tree

2 files changed

+113
-12
lines changed

2 files changed

+113
-12
lines changed

tencentcloud/services/tcr/resource_tc_tcr_instance.go

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package tcr
22

33
import (
4-
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
5-
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
6-
74
"context"
85
"fmt"
6+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
7+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
98
"log"
109
"strings"
1110
"time"
@@ -98,6 +97,11 @@ func ResourceTencentCloudTcrInstance() *schema.Resource {
9897
Optional: true,
9998
Description: "Replication region ID, check the example at the top of page to find out id of region.",
10099
},
100+
"region_name": {
101+
Type: schema.TypeString,
102+
Optional: true,
103+
Description: "Copy instance region name.",
104+
},
101105
"syn_tag": {
102106
Type: schema.TypeBool,
103107
Optional: true,
@@ -189,9 +193,15 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac
189193
providerRegionId := RegionIdMap[client.Region]
190194
for i := range v {
191195
rep := v[i].(map[string]interface{})
192-
repRegion := fmt.Sprintf("%d", rep["region_id"].(int))
193-
if repRegion == providerRegionId {
194-
return fmt.Errorf("replication %s region is same with instance region %s (%s)", repRegion, providerRegionId, client.Region)
196+
repRegionId := fmt.Sprintf("%d", rep["region_id"].(int))
197+
repRegionName := rep["region_name"].(string)
198+
199+
if repRegionId != "0" && repRegionId == providerRegionId {
200+
return fmt.Errorf("replication region id:%s region is same with instance region %s (%s)", repRegionId, providerRegionId, client.Region)
201+
}
202+
203+
if repRegionName != "" && repRegionName == client.Region {
204+
return fmt.Errorf("replication region name:%s region is same with instance region %s", repRegionName, client.Region)
195205
}
196206
}
197207
}
@@ -776,7 +786,12 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour
776786
if !ok {
777787
return 0
778788
}
779-
return item["region_id"].(int)
789+
regionId := item["region_id"].(int)
790+
regionName := item["region_name"].(string)
791+
if regionId == 0 && regionName != "" {
792+
regionId = helper.StrToInt(RegionIdMap[regionName])
793+
}
794+
return regionId
780795
}
781796

782797
oSet := schema.NewSet(setFunc, ov)
@@ -792,7 +807,14 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour
792807
request := tcr.NewCreateReplicationInstanceRequest()
793808
replica := list[i].(map[string]interface{})
794809
request.RegistryId = helper.String(d.Id())
795-
request.ReplicationRegionId = helper.IntUint64(replica["region_id"].(int))
810+
regionId := replica["region_id"].(int)
811+
regionName := replica["region_name"].(string)
812+
if regionId != 0 {
813+
request.ReplicationRegionId = helper.IntUint64(regionId)
814+
}
815+
if regionName != "" {
816+
request.ReplicationRegionName = helper.String(regionName)
817+
}
796818
if synTag, ok := replica["syn_tag"].(bool); ok {
797819
request.SyncTag = &synTag
798820
}
@@ -832,6 +854,11 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour
832854
replica := list[i].(map[string]interface{})
833855
id, ok := replica["id"].(string)
834856
regionId := replica["region_id"].(int)
857+
regionName := replica["region_name"].(string)
858+
if regionId == 0 && regionName != "" {
859+
tmpRegionId := helper.StrToInt(RegionIdMap[regionName])
860+
regionId = tmpRegionId
861+
}
835862
if !ok || id == "" {
836863
errs = *multierror.Append(fmt.Errorf("replication region %d has no id", regionId))
837864
continue
@@ -863,6 +890,13 @@ func ResourceTencentCloudTcrFillReplicas(replicas []interface{}, registries []*t
863890
for i := range replicas {
864891
item := replicas[i].(map[string]interface{})
865892
regionId := item["region_id"].(int)
893+
regionName := item["region_name"].(string)
894+
895+
if regionId == 0 && regionName != "" {
896+
tmpRegionId := helper.StrToInt(RegionIdMap[regionName])
897+
regionId = tmpRegionId
898+
}
899+
866900
replicaRegionIndexes[regionId] = i
867901
}
868902

@@ -871,12 +905,14 @@ func ResourceTencentCloudTcrFillReplicas(replicas []interface{}, registries []*t
871905
item := registries[i]
872906
id := *item.ReplicationRegistryId
873907
regionId := *item.ReplicationRegionId
908+
regionName := *item.ReplicationRegionName
874909
if index, ok := replicaRegionIndexes[int(regionId)]; ok && index >= 0 {
875910
replicas[index].(map[string]interface{})["id"] = id
876911
} else {
877912
newReplicas = append(newReplicas, map[string]interface{}{
878-
"id": id,
879-
"region_id": int(regionId),
913+
"id": id,
914+
"region_id": int(regionId),
915+
"region_name": regionName,
880916
})
881917
}
882918
}

tencentcloud/services/tcr/resource_tc_tcr_instance_test.go

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,44 @@ func TestAccTencentCloudTcrInstanceResource_replication(t *testing.T) {
265265
},
266266
})
267267
}
268-
268+
func TestAccTencentCloudTcrInstanceResource_replication_regionName(t *testing.T) {
269+
// t.Parallel()
270+
resource.Test(t, resource.TestCase{
271+
PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) },
272+
Providers: tcacctest.AccProviders,
273+
CheckDestroy: testAccCheckTCRInstanceDestroy,
274+
Steps: []resource.TestStep{
275+
{
276+
Config: testAccTCRInstance_replica_regionName,
277+
PreConfig: func() {
278+
tcacctest.AccStepSetRegion(t, "ap-guangzhou")
279+
tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY)
280+
},
281+
Check: resource.ComposeAggregateTestCheckFunc(
282+
resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance_regionName", "name", "exampleregionname"),
283+
resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance_regionName", "replications.#", "1"),
284+
),
285+
},
286+
{
287+
Config: testAccTCRInstance_replica_regionName_update,
288+
PreConfig: func() {
289+
tcacctest.AccStepSetRegion(t, "ap-guangzhou")
290+
tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY)
291+
},
292+
Check: resource.ComposeAggregateTestCheckFunc(
293+
resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance_regionName", "name", "exampleregionname"),
294+
resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance_regionName", "replications.#", "2"),
295+
),
296+
},
297+
{
298+
ResourceName: "tencentcloud_tcr_instance.mytcr_instance_regionName",
299+
ImportState: true,
300+
ImportStateVerify: true,
301+
ImportStateVerifyIgnore: []string{"delete_bucket", "replications"},
302+
},
303+
},
304+
})
305+
}
269306
func TestAccTencentCloudTcrInstanceResource_replica_set(t *testing.T) {
270307
inputs := []interface{}{
271308
map[string]interface{}{
@@ -476,9 +513,37 @@ resource "tencentcloud_tcr_instance" "mytcr_instance" {
476513
}
477514
}`
478515

516+
const testAccTCRInstance_replica_regionName = `
517+
resource "tencentcloud_tcr_instance" "mytcr_instance_regionName" {
518+
name = "exampleregionname"
519+
instance_type = "premium"
520+
delete_bucket = true
521+
522+
replications {
523+
region_name = "ap-shanghai"
524+
}
525+
}
526+
`
527+
528+
const testAccTCRInstance_replica_regionName_update = `
529+
resource "tencentcloud_tcr_instance" "mytcr_instance_regionName" {
530+
name = "exampleregionname"
531+
instance_type = "premium"
532+
delete_bucket = true
533+
534+
replications {
535+
region_name = "ap-shanghai"
536+
}
537+
538+
replications {
539+
region_name = "ap-nanjing"
540+
}
541+
}
542+
`
543+
479544
const testAccTCRInstance_basic_update_remark = `
480545
resource "tencentcloud_tcr_instance" "mytcr_instance" {
481-
name = "testacctcrinstance1"
546+
name = "exampleregionname"
482547
instance_type = "basic"
483548
delete_bucket = true
484549
open_public_operation = true

0 commit comments

Comments
 (0)