Skip to content
Merged
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
3 changes: 3 additions & 0 deletions .changelog/3485.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_elasticsearch_logstash: support deploy_mode and multi_zone_infos
```
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1148
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.10
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.13
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1206
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
Expand All @@ -60,7 +60,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts v1.0.628
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1115
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.10
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.13
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.1145
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -953,8 +953,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5/go.mod h1
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.7/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8 h1:Qxwajpf0YHFDcDJ0crRzK2QOaWTG5+UNZivhbBbq88w=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.10 h1:hidSlGUhQOJjYuxtE0PpUuap0dIW3IH7GgVd9KHTXGI=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.10/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.13 h1:xQc87gs85w3Rj7rhT83YvoLpVRzsmUHNmm05ti6cVKI=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.13/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
Expand Down Expand Up @@ -993,8 +993,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1115 h1:hKzATW
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1115/go.mod h1:Z9Bv1N30yjQKRACgpTewQXiuIaQrC0lKMrKPH1xF5aA=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777 h1:G1eX/DkiznhSjNVF97BAQyycFXOiPHxeTxgOadp5J/o=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777/go.mod h1:ehbc9eaNknF/VU/kPTFLZbIUmkL06vQ/JYydu6yeXp4=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.10 h1:bmdTILfzphJDJNOUy+h8UPw/xspWh/U79/yALWvXvh0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.10/go.mod h1:+IVUcTHHFkYZ+twXncvXJK49O/0HqOE/C9PxF9m6h8k=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.13 h1:1YXQtuxHwFLOLiKxxtVLjZ73XyWBtZHTnRX88jID9qo=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.1.13/go.mod h1:pIpYMasWxEcqh/YW9hr6kP78gwp8CP5Y2t3+SlyXp+s=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970 h1:Z82LbcEnE2m4CGvcOY024N7REhAN++xdEyE88HG2YBA=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970/go.mod h1:qnOT3rycGxlNy4/gmprV58Uqd9CKLUr2CL235R1AvuQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gwlb v1.0.1127 h1:1ZhrN7aFPBVb4ihclkbCNOF1Mtoql6duT/cI3Q0p074=
Expand Down
88 changes: 81 additions & 7 deletions tencentcloud/services/es/resource_tc_elasticsearch_logstash.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
elasticsearch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416"
es "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416"

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

"logstash_version": {
Expand All @@ -53,7 +54,7 @@ func ResourceTencentCloudElasticsearchLogstash() *schema.Resource {
"subnet_id": {
Required: true,
Type: schema.TypeString,
Description: "Subnet id.",
Description: "Subnet id. Create multi zone instance, parameter subnet_id need input '-', details input to multi_zone_infos.",
},

"node_num": {
Expand Down Expand Up @@ -172,6 +173,39 @@ func ResourceTencentCloudElasticsearchLogstash() *schema.Resource {
},
},
},
"deploy_mode": {
Type: schema.TypeInt,
Optional: true,
Default: ES_DEPLOY_MODE_SINGLE_REGION,
ValidateFunc: tccommon.ValidateAllowedIntValue(ES_DEPLOY_MODE),
Description: "Deployment mode, 0: single availability zone, 1: multiple availability zones.",
},
"multi_zone_infos": {
Type: schema.TypeList,
Optional: true,
Computed: true,
Description: "Details of availability zones when deploying multiple availability zones.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"availability_zone": {
Type: schema.TypeString,
Required: true,
Description: "Availability zone.",
},
"subnet_id": {
Type: schema.TypeString,
Required: true,
Description: "Subnet id.",
},
"hidden": {
Type: schema.TypeBool,
Optional: true,
Computed: true,
Description: "Whether it is a hidden availability zone.",
},
},
},
},
},
}
}
Expand Down Expand Up @@ -277,6 +311,30 @@ func resourceTencentCloudElasticsearchLogstashCreate(d *schema.ResourceData, met
request.OperationDuration = &operationDuration
}

if v, ok := d.GetOk("deploy_mode"); ok {
deployMode := v.(int)
request.DeployMode = helper.IntUint64(deployMode)
if deployMode == ES_DEPLOY_MODE_MULTI_REGION {
if v, ok := d.GetOk("multi_zone_infos"); ok {
infos := v.([]interface{})
request.MultiZoneInfo = make([]*es.ZoneDetail, 0, len(infos))
for _, item := range infos {
value := item.(map[string]interface{})
info := es.ZoneDetail{
Zone: helper.String(value["availability_zone"].(string)),
SubnetId: helper.String(value["subnet_id"].(string)),
}
if v, ok := value["hidden"].(bool); ok {
info.Hidden = helper.Bool(v)
}
request.MultiZoneInfo = append(request.MultiZoneInfo, &info)
}
} else {
return fmt.Errorf("elasticsearch multi_zone_infos can not be empty when deploy mode is %d", deployMode)
}
}
}

err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseEsClient().CreateLogstashInstance(request)
if e != nil {
Expand Down Expand Up @@ -341,10 +399,6 @@ func resourceTencentCloudElasticsearchLogstashRead(d *schema.ResourceData, meta
_ = d.Set("instance_name", logstash.InstanceName)
}

if logstash.Zone != nil {
_ = d.Set("zone", logstash.Zone)
}

if logstash.LogstashVersion != nil {
_ = d.Set("logstash_version", logstash.LogstashVersion)
}
Expand Down Expand Up @@ -418,7 +472,27 @@ func resourceTencentCloudElasticsearchLogstashRead(d *schema.ResourceData, meta

_ = d.Set("operation_duration", []interface{}{operationDurationMap})
}
if logstash.DeployMode != nil {
_ = d.Set("deploy_mode", logstash.DeployMode)
}

multiZoneInfos := make([]map[string]interface{}, 0, len(logstash.MultiZoneInfo))
for _, item := range logstash.MultiZoneInfo {
info := make(map[string]interface{}, 2)
info["availability_zone"] = item.Zone
info["subnet_id"] = item.SubnetId
info["hidden"] = item.Hidden
multiZoneInfos = append(multiZoneInfos, info)
}
_ = d.Set("multi_zone_infos", multiZoneInfos)

if len(multiZoneInfos) > 0 {
_ = d.Set("zone", "-")
} else {
if logstash.Zone != nil {
_ = d.Set("zone", logstash.Zone)
}
}
return nil
}

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

request.InstanceId = &instanceId

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"}
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"}

for _, v := range immutableArgs {
if d.HasChange(v) {
Expand Down
36 changes: 36 additions & 0 deletions tencentcloud/services/es/resource_tc_elasticsearch_logstash.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,42 @@ resource "tencentcloud_elasticsearch_logstash" "logstash" {
}
```

Create Multi Zone Instance

```hcl
resource "tencentcloud_elasticsearch_logstash" "logstash" {
instance_name = "logstash-test"
zone = "-"
logstash_version = "7.14.2"
vpc_id = "vpc-axrsmmrv"
subnet_id = "-"
node_num = 2
charge_type = "POSTPAID_BY_HOUR"
node_type = "LOGSTASH.SA2.MEDIUM4"
disk_type = "CLOUD_SSD"
disk_size = 20
license_type = "xpack"
operation_duration {
periods = [1, 2, 3, 4, 5, 6, 0]
time_start = "02:00"
time_end = "06:00"
time_zone = "UTC+8"
}
tags = {
tagKey = "tagValue"
}
deploy_mode = 1
multi_zone_infos {
availability_zone = "ap-guangzhou-3"
subnet_id = "subnet-j5vja918"
}
multi_zone_infos {
availability_zone = "ap-guangzhou-4"
subnet_id = "subnet-oi7ya2j6"
}
}
```

Import

elasticsearch logstash can be imported using the id, e.g.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,38 @@ func TestAccTencentCloudElasticsearchLogstashResource_basic(t *testing.T) {
})
}

func TestAccTencentCloudElasticsearchLogstashResource_MultiZone(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() {
tcacctest.AccPreCheck(t)
},
Providers: tcacctest.AccProviders,
Steps: []resource.TestStep{
{
Config: testAccElasticsearchLogstashMultiZone,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_logstash.logstash", "id"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "instance_name", "logstash-test"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "node_type", "LOGSTASH.SA2.MEDIUM4"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "disk_type", "CLOUD_SSD"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "disk_size", "20"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "license_type", "xpack"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "node_num", "2"),
resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_logstash.logstash", "operation_duration.#"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "deploy_mode", "1"),
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_logstash.logstash", "multi_zone_infos.#", "2"),
),
},
{
ResourceName: "tencentcloud_elasticsearch_logstash.logstash",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

const testAccElasticsearchLogstash = `
resource "tencentcloud_elasticsearch_logstash" "logstash" {
instance_name = "logstash-test"
Expand All @@ -62,3 +94,37 @@ resource "tencentcloud_elasticsearch_logstash" "logstash" {
}
}
`

const testAccElasticsearchLogstashMultiZone = `
resource "tencentcloud_elasticsearch_logstash" "logstash" {
instance_name = "logstash-test"
zone = "-"
logstash_version = "7.14.2"
vpc_id = "vpc-axrsmmrv"
subnet_id = "-"
node_num = 2
charge_type = "POSTPAID_BY_HOUR"
node_type = "LOGSTASH.SA2.MEDIUM4"
disk_type = "CLOUD_SSD"
disk_size = 20
license_type = "xpack"
operation_duration {
periods = [1, 2, 3, 4, 5, 6, 0]
time_start = "02:00"
time_end = "06:00"
time_zone = "UTC+8"
}
tags = {
tagKey = "tagValue"
}
deploy_mode = 1
multi_zone_infos {
availability_zone = "ap-guangzhou-3"
subnet_id = "subnet-j5vja918"
}
multi_zone_infos {
availability_zone = "ap-guangzhou-4"
subnet_id = "subnet-oi7ya2j6"
}
}
`

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading