Skip to content

Commit 60f8411

Browse files
authored
Merge pull request #549 from cyberHermanwang/master
1.sqlserver and sqlserver ro instance add tags. 2. es support disksiz…
2 parents 255a4e6 + 1748115 commit 60f8411

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2553
-163
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ ENHANCEMENTS:
55
* Resource: `tencentcloud_clb_listener` add computed argument `listener_id`.
66
* Resource: `tencentcloud_clb_listener_rule` support import.
77
* Resource: `tencentcloud_cdn_domain` add example that use COS bucket url as origin.
8+
* Resource: `tencentcloud_sqlserver_instance` add new argument `tags`.
9+
* Resource: `tencentcloud_sqlserver_readonly_instance` add new argument `tags`.
10+
* Resource: `tencentcloud_elasticsearch_instance` support nodeType and diskSize modification.
811
* Data Source: `tencentcloud_instance_types` add argument `exclude_sold_out` to support filtering sold out instance types.
12+
* Data Source: `tencentcloud_sqlserver_instances` add new argument `tags`.
913

1014
BUG FIXES:
1115

examples/tencentcloud-sqlserver/main.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ resource "tencentcloud_sqlserver_instance" "example" {
2424
project_id = 0
2525
memory = 2
2626
storage = 10
27+
tags = {
28+
"test" = "test"
29+
}
2730
}
2831

2932
resource "tencentcloud_sqlserver_db" "example" {
@@ -58,6 +61,9 @@ resource "tencentcloud_sqlserver_readonly_instance" "example" {
5861
master_instance_id = tencentcloud_sqlserver_instance.test.id
5962
readonly_group_type = 1
6063
force_upgrade = true
64+
tags = {
65+
"test" = "test"
66+
}
6167
}
6268

6369
resource "tencentcloud_sqlserver_publish_subscribe" "example" {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/mattn/go-colorable v0.1.6 // indirect
1616
github.com/mitchellh/go-homedir v1.1.0
1717
github.com/pkg/errors v0.9.1
18-
github.com/tencentcloud/tencentcloud-sdk-go v1.0.37
18+
github.com/tencentcloud/tencentcloud-sdk-go v1.0.50
1919
github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1
2020
github.com/zclconf/go-cty v1.4.2 // indirect
2121
golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,8 @@ github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 h1:Xr9gkxfOP0K
443443
github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM=
444444
github.com/tencentcloud/tencentcloud-sdk-go v1.0.37 h1:zNJfC6+5sj/OloSq6GzmdSC9lwlZbgQ438zz3qH+v4k=
445445
github.com/tencentcloud/tencentcloud-sdk-go v1.0.37/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI=
446+
github.com/tencentcloud/tencentcloud-sdk-go v1.0.50 h1:KAIRXHVSVMvRX3Dl5gvrcVqCxBv7fDLvHahU0F3GNsc=
447+
github.com/tencentcloud/tencentcloud-sdk-go v1.0.50/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI=
446448
github.com/tetafro/godot v0.3.7 h1:+mecr7RKrUKB5UQ1gwqEMn13sDKTyDR8KNIquB9mm+8=
447449
github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0=
448450
github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q=

tencentcloud/data_source_tc_sqlserver_instances.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"log"
2626

2727
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
28-
2928
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
3029
)
3130

@@ -149,6 +148,11 @@ func dataSourceTencentCloudSqlserverInstances() *schema.Resource {
149148
Computed: true,
150149
Description: "Status of the SQL Server instance. 1 for applying, 2 for running, 3 for running with limit, 4 for isolated, 5 for recycling, 6 for recycled, 7 for running with task, 8 for off-line, 9 for expanding, 10 for migrating, 11 for readonly, 12 for rebooting.",
151150
},
151+
"tags": {
152+
Type: schema.TypeMap,
153+
Computed: true,
154+
Description: "Tags of the SQL Server instance.",
155+
},
152156
},
153157
},
154158
},
@@ -162,7 +166,9 @@ func dataSourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta in
162166
logId := getLogId(contextNil)
163167
ctx := context.WithValue(context.TODO(), logIdKey, logId)
164168

165-
service := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
169+
tcClient := meta.(*TencentCloudClient).apiV3Conn
170+
tagService := &TagService{client: tcClient}
171+
service := SqlserverService{client: tcClient}
166172

167173
id := d.Get("id").(string)
168174

@@ -210,6 +216,13 @@ func dataSourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta in
210216
} else {
211217
listItem["charge_type"] = COMMON_PAYTYPE_POSTPAID
212218
}
219+
220+
tagList, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, *v.InstanceId)
221+
if err != nil {
222+
return err
223+
}
224+
225+
listItem["tags"] = tagList
213226
list = append(list, listItem)
214227
ids = append(ids, *v.InstanceId)
215228
}

tencentcloud/data_source_tc_sqlserver_instances_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func TestAccTencentCloudDataSqlserverInstances(t *testing.T) {
3131
resource.TestCheckResourceAttrSet(testDataSqlserverInstancesName, "instance_list.0.vport"),
3232
resource.TestCheckResourceAttrSet(testDataSqlserverInstancesName, "instance_list.0.status"),
3333
resource.TestCheckResourceAttrSet(testDataSqlserverInstancesName, "instance_list.0.used_storage"),
34+
resource.TestCheckResourceAttr(testDataPostgresqlInstancesName, "instance_list.0.tags.tf", "test"),
3435
),
3536
},
3637
},
@@ -39,16 +40,19 @@ func TestAccTencentCloudDataSqlserverInstances(t *testing.T) {
3940

4041
const testAccTencentCloudDataSqlserverInstancesBasic = `
4142
variable "availability_zone"{
42-
default = "ap-guangzhou-2"
43+
default = "ap-guangzhou-2"
4344
}
4445
4546
resource "tencentcloud_sqlserver_instance" "test" {
46-
name = "tf_postsql_instance"
47+
name = "tf_postsql_instance"
4748
availability_zone = var.availability_zone
48-
charge_type = "POSTPAID_BY_HOUR"
49-
project_id = 0
50-
memory = 2
51-
storage = 10
49+
charge_type = "POSTPAID_BY_HOUR"
50+
project_id = 0
51+
memory = 2
52+
storage = 10
53+
tags = {
54+
tf = "test"
55+
}
5256
}
5357
5458
data "tencentcloud_sqlserver_instances" "id_test"{

tencentcloud/resource_tc_elasticsearch_instance.go

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ func resourceTencentCloudElasticsearchInstance() *schema.Resource {
156156
Type: schema.TypeList,
157157
Required: true,
158158
MinItems: 1,
159-
ForceNew: true,
160159
Description: "Node information list, which is used to describe the specification information of various types of nodes in the cluster, such as node type, node quantity, node specification, disk type, and disk size.",
161160
Elem: &schema.Resource{
162161
Schema: map[string]*schema.Schema{
@@ -463,7 +462,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
463462
instanceName := d.Get("instance_name").(string)
464463
// Update operation support at most one item at the same time
465464
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
466-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, instanceName, "", 0)
465+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, instanceName, "", 0, nil)
467466
if errRet != nil {
468467
return retryError(errRet)
469468
}
@@ -477,7 +476,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
477476
if d.HasChange("password") {
478477
password := d.Get("password").(string)
479478
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
480-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", password, 0)
479+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", password, 0, nil)
481480
if errRet != nil {
482481
return retryError(errRet)
483482
}
@@ -550,7 +549,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
550549
if d.HasChange("basic_security_type") {
551550
basicSecurityType := d.Get("basic_security_type").(int)
552551
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
553-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", int64(basicSecurityType))
552+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", int64(basicSecurityType), nil)
554553
if errRet != nil {
555554
return retryError(errRet)
556555
}
@@ -562,6 +561,52 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
562561
d.SetPartial("basic_security_type")
563562
}
564563

564+
if d.HasChange("node_info_list") {
565+
nodeInfos := d.Get("node_info_list").([]interface{})
566+
nodeInfoList := make([]*es.NodeInfo, 0, len(nodeInfos))
567+
for _, d := range nodeInfos {
568+
value := d.(map[string]interface{})
569+
nodeType := value["node_type"].(string)
570+
diskSize := uint64(value["disk_size"].(int))
571+
nodeNum := uint64(value["node_num"].(int))
572+
types := value["type"].(string)
573+
diskType := value["disk_type"].(string)
574+
encrypt := value["encrypt"].(bool)
575+
dataDisk := es.NodeInfo{
576+
NodeType: &nodeType,
577+
DiskSize: &diskSize,
578+
NodeNum: &nodeNum,
579+
Type: &types,
580+
DiskType: &diskType,
581+
DiskEncrypt: helper.BoolToInt64Pointer(encrypt),
582+
}
583+
nodeInfoList = append(nodeInfoList, &dataDisk)
584+
}
585+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
586+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", 0, nodeInfoList)
587+
if errRet != nil {
588+
return retryError(errRet)
589+
}
590+
return nil
591+
})
592+
if err != nil {
593+
return err
594+
}
595+
d.SetPartial("node_info_list")
596+
err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError {
597+
instance, errRet := elasticsearchService.DescribeInstanceById(ctx, instanceId)
598+
if errRet != nil {
599+
return retryError(errRet, InternalError)
600+
}
601+
if instance != nil && *instance.Status == ES_INSTANCE_STATUS_PROCESSING {
602+
return resource.RetryableError(errors.New("elasticsearch instance status is processing, retry..."))
603+
}
604+
return nil
605+
})
606+
if err != nil {
607+
return err
608+
}
609+
}
565610
if d.HasChange("tags") {
566611
oldInterface, newInterface := d.GetChange("tags")
567612
replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{}))

tencentcloud/resource_tc_elasticsearch_instance_test.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ func TestAccTencentCloudElasticsearchInstance_basic(t *testing.T) {
4343
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.foo", "license_type", "basic"),
4444
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.foo", "basic_security_type", "2"),
4545
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.foo", "tags.test", "test"),
46+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.foo", "node_info_list.0.node_type", "ES.S1.MEDIUM8"),
47+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.foo", "node_info_list.0.disk_size", "200"),
4648
),
4749
},
4850
{
@@ -123,17 +125,17 @@ func testAccCheckElasticsearchInstanceExists(n string) resource.TestCheckFunc {
123125

124126
const testAccElasticsearchInstance = defaultVpcVariable + `
125127
resource "tencentcloud_elasticsearch_instance" "foo" {
126-
instance_name = "tf-ci-test"
127-
availability_zone = var.availability_zone
128-
version = "7.5.1"
129-
vpc_id = var.vpc_id
130-
subnet_id = var.subnet_id
131-
password = "Test1234"
132-
license_type = "oss"
128+
instance_name = "tf-ci-test"
129+
availability_zone = var.availability_zone
130+
version = "7.5.1"
131+
vpc_id = var.vpc_id
132+
subnet_id = var.subnet_id
133+
password = "Test1234"
134+
license_type = "oss"
133135
134136
node_info_list {
135-
node_num = 2
136-
node_type = "ES.S1.SMALL2"
137+
node_num = 2
138+
node_type = "ES.S1.SMALL2"
137139
}
138140
139141
tags = {
@@ -154,8 +156,9 @@ resource "tencentcloud_elasticsearch_instance" "foo" {
154156
basic_security_type = 2
155157
156158
node_info_list {
157-
node_num = 2
158-
node_type = "ES.S1.SMALL2"
159+
node_num = 2
160+
node_type = "ES.S1.MEDIUM8"
161+
disk_size = 200
159162
}
160163
161164
tags = {

tencentcloud/resource_tc_sqlserver_instance.go

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
3434
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
3535
sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
36+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
3637
)
3738

3839
func TencentSqlServerBasicInfo() map[string]*schema.Schema {
@@ -114,6 +115,11 @@ func TencentSqlServerBasicInfo() map[string]*schema.Schema {
114115
Computed: true,
115116
Description: "Status of the SQL Server instance. 1 for applying, 2 for running, 3 for running with limit, 4 for isolated, 5 for recycling, 6 for recycled, 7 for running with task, 8 for off-line, 9 for expanding, 10 for migrating, 11 for readonly, 12 for rebooting.",
116117
},
118+
"tags": {
119+
Type: schema.TypeMap,
120+
Optional: true,
121+
Description: "The tags of the SQL Server.",
122+
},
117123
}
118124
}
119125

@@ -189,8 +195,10 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in
189195
logId := getLogId(contextNil)
190196
ctx := context.WithValue(context.TODO(), logIdKey, logId)
191197

192-
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
193-
198+
client := meta.(*TencentCloudClient).apiV3Conn
199+
sqlserverService := SqlserverService{client: client}
200+
tagService := TagService{client: client}
201+
region := client.Region
194202
var (
195203
name = d.Get("name").(string)
196204
dbVersion = d.Get("engine_version").(string)
@@ -252,11 +260,20 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in
252260
return outErr
253261
}
254262

263+
if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
264+
resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId)
265+
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
266+
return err
267+
}
268+
}
255269
return resourceTencentCloudSqlserverInstanceRead(d, meta)
256270
}
257271

258272
func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
259-
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
273+
client := meta.(*TencentCloudClient).apiV3Conn
274+
sqlserverService := SqlserverService{client: client}
275+
tagService := TagService{client: client}
276+
region := client.Region
260277
instanceId := d.Id()
261278

262279
var outErr, inErr error
@@ -332,6 +349,18 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData,
332349
d.SetPartial("security_groups")
333350
}
334351

352+
if d.HasChange("tags") {
353+
oldTags, newTags := d.GetChange("tags")
354+
replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))
355+
356+
resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId)
357+
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
358+
return err
359+
}
360+
361+
d.SetPartial("tags")
362+
}
363+
335364
return nil
336365
}
337366

@@ -350,7 +379,10 @@ func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta in
350379
var outErr, inErr error
351380
instanceId := d.Id()
352381

353-
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
382+
client := meta.(*TencentCloudClient).apiV3Conn
383+
sqlserverService := SqlserverService{client: client}
384+
tagService := TagService{client: client}
385+
region := client.Region
354386
//update project id
355387
if d.HasChange("project_id") {
356388
projectId := d.Get("project_id").(int)
@@ -394,6 +426,17 @@ func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta in
394426
d.SetPartial("maintenance_start_time")
395427
d.SetPartial("maintenance_time_span")
396428
}
429+
if d.HasChange("tags") {
430+
oldTags, newTags := d.GetChange("tags")
431+
replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))
432+
433+
resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId)
434+
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
435+
return err
436+
}
437+
438+
d.SetPartial("tags")
439+
}
397440

398441
d.Partial(false)
399442

@@ -504,6 +547,14 @@ func resourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta inte
504547
_ = d.Set("maintenance_start_time", startTime)
505548
_ = d.Set("maintenance_time_span", timeSpan)
506549

550+
tcClient := meta.(*TencentCloudClient).apiV3Conn
551+
tagService := &TagService{client: tcClient}
552+
tags, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, d.Id())
553+
if err != nil {
554+
return err
555+
}
556+
_ = d.Set("tags", tags)
557+
507558
return nil
508559
}
509560

0 commit comments

Comments
 (0)