Skip to content

Commit 579efc8

Browse files
tongyimingmikatong
andauthored
fix(es): [126431887]support multi_zone_infos (#3485)
* support multi_zone_infos * add changelog --------- Co-authored-by: mikatong <[email protected]>
1 parent 1dac6e3 commit 579efc8

File tree

10 files changed

+575
-336
lines changed

10 files changed

+575
-336
lines changed

.changelog/3485.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_elasticsearch_logstash: support deploy_mode and multi_zone_infos
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1148
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.10
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.13
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1206
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
@@ -60,7 +60,7 @@ require (
6060
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts v1.0.628
6161
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760
6262
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1115
63-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.10
63+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.13
6464
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970
6565
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.1145
6666
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -953,8 +953,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5/go.mod h1
953953
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.7/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
954954
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8 h1:Qxwajpf0YHFDcDJ0crRzK2QOaWTG5+UNZivhbBbq88w=
955955
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
956-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.10 h1:hidSlGUhQOJjYuxtE0PpUuap0dIW3IH7GgVd9KHTXGI=
957-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.10/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
956+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.13 h1:xQc87gs85w3Rj7rhT83YvoLpVRzsmUHNmm05ti6cVKI=
957+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.13/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
958958
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
959959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
960960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -993,8 +993,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1115 h1:hKzATW
993993
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1115/go.mod h1:Z9Bv1N30yjQKRACgpTewQXiuIaQrC0lKMrKPH1xF5aA=
994994
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777 h1:G1eX/DkiznhSjNVF97BAQyycFXOiPHxeTxgOadp5J/o=
995995
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777/go.mod h1:ehbc9eaNknF/VU/kPTFLZbIUmkL06vQ/JYydu6yeXp4=
996-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.10 h1:bmdTILfzphJDJNOUy+h8UPw/xspWh/U79/yALWvXvh0=
997-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.10/go.mod h1:+IVUcTHHFkYZ+twXncvXJK49O/0HqOE/C9PxF9m6h8k=
996+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.13 h1:1YXQtuxHwFLOLiKxxtVLjZ73XyWBtZHTnRX88jID9qo=
997+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.13/go.mod h1:pIpYMasWxEcqh/YW9hr6kP78gwp8CP5Y2t3+SlyXp+s=
998998
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970 h1:Z82LbcEnE2m4CGvcOY024N7REhAN++xdEyE88HG2YBA=
999999
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970/go.mod h1:qnOT3rycGxlNy4/gmprV58Uqd9CKLUr2CL235R1AvuQ=
10001000
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gwlb v1.0.1127 h1:1ZhrN7aFPBVb4ihclkbCNOF1Mtoql6duT/cI3Q0p074=

tencentcloud/services/es/resource_tc_elasticsearch_logstash.go

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1313
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1414
elasticsearch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416"
15+
es "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416"
1516

1617
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1718
)
@@ -35,7 +36,7 @@ func ResourceTencentCloudElasticsearchLogstash() *schema.Resource {
3536
"zone": {
3637
Required: true,
3738
Type: schema.TypeString,
38-
Description: "Available zone.",
39+
Description: "Available zone. Create multi zone instance, parameter zone need input '-', details input to multi_zone_infos.",
3940
},
4041

4142
"logstash_version": {
@@ -53,7 +54,7 @@ func ResourceTencentCloudElasticsearchLogstash() *schema.Resource {
5354
"subnet_id": {
5455
Required: true,
5556
Type: schema.TypeString,
56-
Description: "Subnet id.",
57+
Description: "Subnet id. Create multi zone instance, parameter subnet_id need input '-', details input to multi_zone_infos.",
5758
},
5859

5960
"node_num": {
@@ -172,6 +173,39 @@ func ResourceTencentCloudElasticsearchLogstash() *schema.Resource {
172173
},
173174
},
174175
},
176+
"deploy_mode": {
177+
Type: schema.TypeInt,
178+
Optional: true,
179+
Default: ES_DEPLOY_MODE_SINGLE_REGION,
180+
ValidateFunc: tccommon.ValidateAllowedIntValue(ES_DEPLOY_MODE),
181+
Description: "Deployment mode, 0: single availability zone, 1: multiple availability zones.",
182+
},
183+
"multi_zone_infos": {
184+
Type: schema.TypeList,
185+
Optional: true,
186+
Computed: true,
187+
Description: "Details of availability zones when deploying multiple availability zones.",
188+
Elem: &schema.Resource{
189+
Schema: map[string]*schema.Schema{
190+
"availability_zone": {
191+
Type: schema.TypeString,
192+
Required: true,
193+
Description: "Availability zone.",
194+
},
195+
"subnet_id": {
196+
Type: schema.TypeString,
197+
Required: true,
198+
Description: "Subnet id.",
199+
},
200+
"hidden": {
201+
Type: schema.TypeBool,
202+
Optional: true,
203+
Computed: true,
204+
Description: "Whether it is a hidden availability zone.",
205+
},
206+
},
207+
},
208+
},
175209
},
176210
}
177211
}
@@ -277,6 +311,30 @@ func resourceTencentCloudElasticsearchLogstashCreate(d *schema.ResourceData, met
277311
request.OperationDuration = &operationDuration
278312
}
279313

314+
if v, ok := d.GetOk("deploy_mode"); ok {
315+
deployMode := v.(int)
316+
request.DeployMode = helper.IntUint64(deployMode)
317+
if deployMode == ES_DEPLOY_MODE_MULTI_REGION {
318+
if v, ok := d.GetOk("multi_zone_infos"); ok {
319+
infos := v.([]interface{})
320+
request.MultiZoneInfo = make([]*es.ZoneDetail, 0, len(infos))
321+
for _, item := range infos {
322+
value := item.(map[string]interface{})
323+
info := es.ZoneDetail{
324+
Zone: helper.String(value["availability_zone"].(string)),
325+
SubnetId: helper.String(value["subnet_id"].(string)),
326+
}
327+
if v, ok := value["hidden"].(bool); ok {
328+
info.Hidden = helper.Bool(v)
329+
}
330+
request.MultiZoneInfo = append(request.MultiZoneInfo, &info)
331+
}
332+
} else {
333+
return fmt.Errorf("elasticsearch multi_zone_infos can not be empty when deploy mode is %d", deployMode)
334+
}
335+
}
336+
}
337+
280338
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
281339
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseEsClient().CreateLogstashInstance(request)
282340
if e != nil {
@@ -341,10 +399,6 @@ func resourceTencentCloudElasticsearchLogstashRead(d *schema.ResourceData, meta
341399
_ = d.Set("instance_name", logstash.InstanceName)
342400
}
343401

344-
if logstash.Zone != nil {
345-
_ = d.Set("zone", logstash.Zone)
346-
}
347-
348402
if logstash.LogstashVersion != nil {
349403
_ = d.Set("logstash_version", logstash.LogstashVersion)
350404
}
@@ -418,7 +472,27 @@ func resourceTencentCloudElasticsearchLogstashRead(d *schema.ResourceData, meta
418472

419473
_ = d.Set("operation_duration", []interface{}{operationDurationMap})
420474
}
475+
if logstash.DeployMode != nil {
476+
_ = d.Set("deploy_mode", logstash.DeployMode)
477+
}
421478

479+
multiZoneInfos := make([]map[string]interface{}, 0, len(logstash.MultiZoneInfo))
480+
for _, item := range logstash.MultiZoneInfo {
481+
info := make(map[string]interface{}, 2)
482+
info["availability_zone"] = item.Zone
483+
info["subnet_id"] = item.SubnetId
484+
info["hidden"] = item.Hidden
485+
multiZoneInfos = append(multiZoneInfos, info)
486+
}
487+
_ = d.Set("multi_zone_infos", multiZoneInfos)
488+
489+
if len(multiZoneInfos) > 0 {
490+
_ = d.Set("zone", "-")
491+
} else {
492+
if logstash.Zone != nil {
493+
_ = d.Set("zone", logstash.Zone)
494+
}
495+
}
422496
return nil
423497
}
424498

@@ -446,7 +520,7 @@ func resourceTencentCloudElasticsearchLogstashUpdate(d *schema.ResourceData, met
446520

447521
request.InstanceId = &instanceId
448522

449-
immutableArgs := []string{"zone", "logstash_version", "vpc_id", "subnet_id", "charge_type", "charge_period", "time_unit", "auto_voucher", "voucher_ids", "renew_flag", "disk_type", "license_type"}
523+
immutableArgs := []string{"zone", "logstash_version", "vpc_id", "subnet_id", "charge_type", "charge_period", "time_unit", "auto_voucher", "voucher_ids", "renew_flag", "disk_type", "license_type", "deploy_mode", "multi_zone_infos"}
450524

451525
for _, v := range immutableArgs {
452526
if d.HasChange(v) {

tencentcloud/services/es/resource_tc_elasticsearch_logstash.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,42 @@ resource "tencentcloud_elasticsearch_logstash" "logstash" {
2727
}
2828
```
2929

30+
Create Multi Zone Instance
31+
32+
```hcl
33+
resource "tencentcloud_elasticsearch_logstash" "logstash" {
34+
instance_name = "logstash-test"
35+
zone = "-"
36+
logstash_version = "7.14.2"
37+
vpc_id = "vpc-axrsmmrv"
38+
subnet_id = "-"
39+
node_num = 2
40+
charge_type = "POSTPAID_BY_HOUR"
41+
node_type = "LOGSTASH.SA2.MEDIUM4"
42+
disk_type = "CLOUD_SSD"
43+
disk_size = 20
44+
license_type = "xpack"
45+
operation_duration {
46+
periods = [1, 2, 3, 4, 5, 6, 0]
47+
time_start = "02:00"
48+
time_end = "06:00"
49+
time_zone = "UTC+8"
50+
}
51+
tags = {
52+
tagKey = "tagValue"
53+
}
54+
deploy_mode = 1
55+
multi_zone_infos {
56+
availability_zone = "ap-guangzhou-3"
57+
subnet_id = "subnet-j5vja918"
58+
}
59+
multi_zone_infos {
60+
availability_zone = "ap-guangzhou-4"
61+
subnet_id = "subnet-oi7ya2j6"
62+
}
63+
}
64+
```
65+
3066
Import
3167

3268
elasticsearch logstash can be imported using the id, e.g.

tencentcloud/services/es/resource_tc_elasticsearch_logstash_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,38 @@ func TestAccTencentCloudElasticsearchLogstashResource_basic(t *testing.T) {
3838
})
3939
}
4040

41+
func TestAccTencentCloudElasticsearchLogstashResource_MultiZone(t *testing.T) {
42+
t.Parallel()
43+
resource.Test(t, resource.TestCase{
44+
PreCheck: func() {
45+
tcacctest.AccPreCheck(t)
46+
},
47+
Providers: tcacctest.AccProviders,
48+
Steps: []resource.TestStep{
49+
{
50+
Config: testAccElasticsearchLogstashMultiZone,
51+
Check: resource.ComposeTestCheckFunc(
52+
resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_logstash.logstash", "id"),
53+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "instance_name", "logstash-test"),
54+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "node_type", "LOGSTASH.SA2.MEDIUM4"),
55+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "disk_type", "CLOUD_SSD"),
56+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "disk_size", "20"),
57+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "license_type", "xpack"),
58+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "node_num", "2"),
59+
resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_logstash.logstash", "operation_duration.#"),
60+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "deploy_mode", "1"),
61+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "multi_zone_infos.#", "2"),
62+
),
63+
},
64+
{
65+
ResourceName: "tencentcloud_elasticsearch_logstash.logstash",
66+
ImportState: true,
67+
ImportStateVerify: true,
68+
},
69+
},
70+
})
71+
}
72+
4173
const testAccElasticsearchLogstash = `
4274
resource "tencentcloud_elasticsearch_logstash" "logstash" {
4375
instance_name = "logstash-test"
@@ -62,3 +94,37 @@ resource "tencentcloud_elasticsearch_logstash" "logstash" {
6294
}
6395
}
6496
`
97+
98+
const testAccElasticsearchLogstashMultiZone = `
99+
resource "tencentcloud_elasticsearch_logstash" "logstash" {
100+
instance_name = "logstash-test"
101+
zone = "-"
102+
logstash_version = "7.14.2"
103+
vpc_id = "vpc-axrsmmrv"
104+
subnet_id = "-"
105+
node_num = 2
106+
charge_type = "POSTPAID_BY_HOUR"
107+
node_type = "LOGSTASH.SA2.MEDIUM4"
108+
disk_type = "CLOUD_SSD"
109+
disk_size = 20
110+
license_type = "xpack"
111+
operation_duration {
112+
periods = [1, 2, 3, 4, 5, 6, 0]
113+
time_start = "02:00"
114+
time_end = "06:00"
115+
time_zone = "UTC+8"
116+
}
117+
tags = {
118+
tagKey = "tagValue"
119+
}
120+
deploy_mode = 1
121+
multi_zone_infos {
122+
availability_zone = "ap-guangzhou-3"
123+
subnet_id = "subnet-j5vja918"
124+
}
125+
multi_zone_infos {
126+
availability_zone = "ap-guangzhou-4"
127+
subnet_id = "subnet-oi7ya2j6"
128+
}
129+
}
130+
`

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)