Skip to content

Commit 4dd4788

Browse files
tongyimingmikatong
and
mikatong
authored
fix(es): [123456789]support kibana_private_access (#3381)
* support kibana_private_access * add changelog * update test --------- Co-authored-by: mikatong <mikatong@tencent.com>
1 parent 8600b82 commit 4dd4788

File tree

6 files changed

+167
-15
lines changed

6 files changed

+167
-15
lines changed

.changelog/3381.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_instance: support kibana_private_access
3+
```

tencentcloud/services/es/extension_elasticsearch.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ const (
3636
ES_KIBANA_PUBLIC_ACCESS_CLOSE = "CLOSE"
3737
ES_PUBLIC_ACCESS_OPEN = "OPEN"
3838
ES_PUBLIC_ACCESS_CLOSE = "CLOSE"
39+
ES_PRIVATE_ACCESS_OPEN = "OPEN"
40+
ES_PRIVATE_ACCESS_CLOSE = "CLOSE"
3941
)
4042

4143
var ES_CHARGE_TYPE = []string{
@@ -88,3 +90,8 @@ var ES_PUBLIC_ACCESS = []string{
8890
ES_PUBLIC_ACCESS_OPEN,
8991
ES_PUBLIC_ACCESS_CLOSE,
9092
}
93+
94+
var ES_PRIVATE_ACCESS = []string{
95+
ES_PRIVATE_ACCESS_OPEN,
96+
ES_PRIVATE_ACCESS_CLOSE,
97+
}

tencentcloud/services/es/resource_tc_elasticsearch_instance.go

Lines changed: 69 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,13 @@ func ResourceTencentCloudElasticsearchInstance() *schema.Resource {
242242
ValidateFunc: tccommon.ValidateAllowedStringValue(ES_KIBANA_PUBLIC_ACCESS),
243243
Description: "Kibana public network access status. Valid values are `OPEN` and `CLOSE`.",
244244
},
245+
"kibana_private_access": {
246+
Type: schema.TypeString,
247+
Optional: true,
248+
Computed: true,
249+
ValidateFunc: tccommon.ValidateAllowedStringValue(ES_PRIVATE_ACCESS),
250+
Description: "Kibana private network access status. Valid values are `OPEN` and `CLOSE`.",
251+
},
245252
"cos_backup": {
246253
Type: schema.TypeList,
247254
Optional: true,
@@ -456,6 +463,7 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
456463

457464
//internal version: replace setTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation.
458465
//internal version: replace setTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation.
466+
var actualKibanaPrivateAccess string
459467
instanceEmptyRetries := 5
460468
err = resource.Retry(15*tccommon.ReadRetryTimeout, func() *resource.RetryError {
461469
instance, errRet := elasticsearchService.DescribeInstanceById(ctx, instanceId)
@@ -472,13 +480,15 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
472480
if *instance.Status != ES_INSTANCE_STATUS_NORMAL {
473481
return resource.RetryableError(fmt.Errorf("elasticsearch instance status is %v, retrying", *instance.Status))
474482
}
483+
if instance.KibanaPrivateAccess != nil {
484+
actualKibanaPrivateAccess = *instance.KibanaPrivateAccess
485+
}
475486
return nil
476487
})
477488
if err != nil {
478489
return err
479490
}
480491

481-
var isUpdate bool
482492
// es acl
483493
esAcl := es.EsAcl{}
484494
if aclMap, ok := helper.InterfacesHeadMap(d, "es_acl"); ok {
@@ -494,9 +504,24 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
494504
esAcl.WhiteIpList = append(esAcl.WhiteIpList, helper.String(d.(string)))
495505
}
496506
}
497-
isUpdate = true
507+
err := resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
508+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", 0, nil, nil, &esAcl, nil, nil)
509+
if errRet != nil {
510+
return tccommon.RetryError(errRet)
511+
}
512+
return nil
513+
})
514+
if err != nil {
515+
return err
516+
}
517+
err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId)
518+
if err != nil {
519+
return err
520+
}
498521
}
499522

523+
var isUpdate bool
524+
500525
// KibanaPublicAccess
501526
var kibanaPublicAccess string
502527
if v, ok := d.GetOk("kibana_public_access"); ok {
@@ -508,9 +533,18 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
508533
}
509534
}
510535

536+
var kibanaPrivateAccess string
537+
if v, ok := d.GetOk("kibana_private_access"); ok {
538+
if actualKibanaPrivateAccess != "" && actualKibanaPrivateAccess != v.(string) {
539+
kibanaPrivateAccess = v.(string)
540+
isUpdate = true
541+
}
542+
543+
}
544+
511545
if isUpdate {
512546
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
513-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", kibanaPublicAccess, "", 0, nil, nil, &esAcl, nil, nil)
547+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", kibanaPublicAccess, kibanaPrivateAccess, "", 0, nil, nil, nil, nil, nil)
514548
if errRet != nil {
515549
return tccommon.RetryError(errRet)
516550
}
@@ -556,7 +590,7 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
556590

557591
if isUpdate {
558592
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
559-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", publicAccess, 0, nil, nil, nil, nil, &esPublicAcl)
593+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", publicAccess, 0, nil, nil, nil, nil, &esPublicAcl)
560594
if errRet != nil {
561595
return tccommon.RetryError(errRet)
562596
}
@@ -586,7 +620,7 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
586620
}
587621

588622
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
589-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", 0, nil, nil, nil, &cosBackup, nil)
623+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", 0, nil, nil, nil, &cosBackup, nil)
590624
if errRet != nil {
591625
return tccommon.RetryError(errRet)
592626
}
@@ -666,6 +700,7 @@ func resourceTencentCloudElasticsearchInstanceRead(d *schema.ResourceData, meta
666700
_ = d.Set("kibana_url", instance.KibanaUrl)
667701
_ = d.Set("create_time", instance.CreateTime)
668702
_ = d.Set("kibana_public_access", instance.KibanaPublicAccess)
703+
_ = d.Set("kibana_private_access", instance.KibanaPrivateAccess)
669704

670705
multiZoneInfos := make([]map[string]interface{}, 0, len(instance.MultiZoneInfo))
671706
for _, item := range instance.MultiZoneInfo {
@@ -770,7 +805,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
770805
instanceName := d.Get("instance_name").(string)
771806
// Update operation support at most one item at the same time
772807
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
773-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, instanceName, "", "", "", 0, nil, nil, nil, nil, nil)
808+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, instanceName, "", "", "", "", 0, nil, nil, nil, nil, nil)
774809
if errRet != nil {
775810
return tccommon.RetryError(errRet)
776811
}
@@ -787,7 +822,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
787822
if d.HasChange("password") {
788823
password := d.Get("password").(string)
789824
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
790-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", password, "", "", 0, nil, nil, nil, nil, nil)
825+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", password, "", "", "", 0, nil, nil, nil, nil, nil)
791826
if errRet != nil {
792827
return tccommon.RetryError(errRet)
793828
}
@@ -806,7 +841,27 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
806841
if d.HasChange("kibana_public_access") {
807842
if v, ok := d.GetOk("kibana_public_access"); ok {
808843
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
809-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", v.(string), "", 0, nil, nil, nil, nil, nil)
844+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", v.(string), "", "", 0, nil, nil, nil, nil, nil)
845+
if errRet != nil {
846+
return tccommon.RetryError(errRet)
847+
}
848+
return nil
849+
})
850+
if err != nil {
851+
return err
852+
}
853+
err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId)
854+
if err != nil {
855+
return err
856+
}
857+
}
858+
859+
}
860+
// KibanaPrivateAccess
861+
if d.HasChange("kibana_private_access") {
862+
if v, ok := d.GetOk("kibana_private_access"); ok {
863+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
864+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", v.(string), "", 0, nil, nil, nil, nil, nil)
810865
if errRet != nil {
811866
return tccommon.RetryError(errRet)
812867
}
@@ -865,7 +920,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
865920
licenseType := d.Get("license_type").(string)
866921
licenseTypeUpgrading := licenseType != "oss"
867922
err := resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
868-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", int64(basicSecurityType), nil, nil, nil, nil, nil)
923+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", int64(basicSecurityType), nil, nil, nil, nil, nil)
869924
if errRet != nil {
870925
err := errRet.(*sdkErrors.TencentCloudSDKError)
871926
if err.Code == es.INVALIDPARAMETER && licenseTypeUpgrading {
@@ -896,7 +951,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
896951
NodeType: helper.String(value["node_type"].(string)),
897952
}
898953
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
899-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", 0, nil, info, nil, nil, nil)
954+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", 0, nil, info, nil, nil, nil)
900955
if errRet != nil {
901956
return tccommon.RetryError(errRet)
902957
}
@@ -935,7 +990,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
935990
nodeInfoList = append(nodeInfoList, &dataDisk)
936991
}
937992
err := resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
938-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", 0, nodeInfoList, nil, nil, nil, nil)
993+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", 0, nodeInfoList, nil, nil, nil, nil)
939994
if errRet != nil {
940995
return tccommon.RetryError(errRet)
941996
}
@@ -972,7 +1027,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
9721027
}
9731028
}
9741029
err := resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
975-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", publicAccess, 0, nil, nil, nil, nil, &esPublicAcl)
1030+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", publicAccess, 0, nil, nil, nil, nil, &esPublicAcl)
9761031
if errRet != nil {
9771032
return tccommon.RetryError(errRet)
9781033
}
@@ -1023,7 +1078,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
10231078
}
10241079

10251080
err := resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
1026-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", 0, nil, nil, &esAcl, nil, nil)
1081+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", 0, nil, nil, &esAcl, nil, nil)
10271082
if errRet != nil {
10281083
return tccommon.RetryError(errRet)
10291084
}
@@ -1053,7 +1108,7 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met
10531108
}
10541109

10551110
err := resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
1056-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", 0, nil, nil, nil, &cosBackup, nil)
1111+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", "", "", 0, nil, nil, nil, &cosBackup, nil)
10571112
if errRet != nil {
10581113
return tccommon.RetryError(errRet)
10591114
}

tencentcloud/services/es/resource_tc_elasticsearch_instance_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,39 @@ func TestAccTencentCloudElasticsearchInstanceResource_kibanaPublicAccess(t *test
163163
})
164164
}
165165

166+
func TestAccTencentCloudElasticsearchInstanceResource_kibanaPrivateAccess(t *testing.T) {
167+
t.Parallel()
168+
169+
resource.Test(t, resource.TestCase{
170+
PreCheck: func() { tcacctest.AccPreCheck(t) },
171+
Providers: tcacctest.AccProviders,
172+
CheckDestroy: testAccCheckElasticsearchInstanceDestroy,
173+
Steps: []resource.TestStep{
174+
{
175+
Config: testAccElasticsearchInstanceKibanaPrivateAccessOpen,
176+
Check: resource.ComposeTestCheckFunc(
177+
testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"),
178+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "OPEN"),
179+
),
180+
},
181+
{
182+
Config: testAccElasticsearchInstanceKibanaPrivateAccessClose,
183+
Check: resource.ComposeTestCheckFunc(
184+
testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"),
185+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "CLOSE"),
186+
),
187+
},
188+
{
189+
Config: testAccElasticsearchInstanceKibanaPrivateAccessOpen,
190+
Check: resource.ComposeTestCheckFunc(
191+
testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"),
192+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "OPEN"),
193+
),
194+
},
195+
},
196+
})
197+
}
198+
166199
func testAccCheckElasticsearchInstanceDestroy(s *terraform.State) error {
167200
logId := tccommon.GetLogId(tccommon.ContextNil)
168201
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
@@ -346,3 +379,53 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" {
346379
}
347380
}
348381
`
382+
383+
const testAccElasticsearchInstanceKibanaPrivateAccessClose = tcacctest.DefaultEsVariables + `
384+
resource "tencentcloud_elasticsearch_instance" "es_kibana" {
385+
instance_name = "tf-ci-test-kibana"
386+
availability_zone = var.availability_zone
387+
version = "7.10.1"
388+
vpc_id = var.vpc_id
389+
subnet_id = var.subnet_id
390+
password = "Test1234"
391+
license_type = "basic"
392+
basic_security_type = 2
393+
kibana_private_access = "CLOSE"
394+
public_access = "CLOSE"
395+
es_public_acl {
396+
white_ip_list = [
397+
"127.0.0.1"
398+
]
399+
}
400+
401+
node_info_list {
402+
node_num = 2
403+
node_type = "ES.S1.MEDIUM4"
404+
}
405+
}
406+
`
407+
408+
const testAccElasticsearchInstanceKibanaPrivateAccessOpen = tcacctest.DefaultEsVariables + `
409+
resource "tencentcloud_elasticsearch_instance" "es_kibana" {
410+
instance_name = "tf-ci-test-kibana"
411+
availability_zone = var.availability_zone
412+
version = "7.10.1"
413+
vpc_id = var.vpc_id
414+
subnet_id = var.subnet_id
415+
password = "Test1234"
416+
license_type = "basic"
417+
basic_security_type = 2
418+
kibana_private_access = "OPEN"
419+
public_access = "OPEN"
420+
es_public_acl {
421+
white_ip_list = [
422+
"127.0.0.1"
423+
]
424+
}
425+
426+
node_info_list {
427+
node_num = 2
428+
node_type = "ES.S1.MEDIUM4"
429+
}
430+
}
431+
`

tencentcloud/services/es/service_tencentcloud_elasticsearch.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (me *ElasticsearchService) DeleteInstance(ctx context.Context, instanceId s
107107
}
108108

109109
// UpdateInstance FIXME: use *Request instead of these suck params
110-
func (me *ElasticsearchService) UpdateInstance(ctx context.Context, instanceId, instanceName, password, kibanaPublicAccess, publicAccess string,
110+
func (me *ElasticsearchService) UpdateInstance(ctx context.Context, instanceId, instanceName, password, kibanaPublicAccess, kibanaPrivateAccess, publicAccess string,
111111
basicSecurityType int64, nodeList []*es.NodeInfo, nodeTypeInfo *es.WebNodeTypeInfo, esAcl *es.EsAcl, cosBackup *es.CosBackup, esPublicAcl *es.EsPublicAcl) error {
112112
logId := tccommon.GetLogId(ctx)
113113
request := es.NewUpdateInstanceRequest()
@@ -121,6 +121,9 @@ func (me *ElasticsearchService) UpdateInstance(ctx context.Context, instanceId,
121121
if kibanaPublicAccess != "" {
122122
request.KibanaPublicAccess = &kibanaPublicAccess
123123
}
124+
if kibanaPrivateAccess != "" {
125+
request.KibanaPrivateAccess = &kibanaPrivateAccess
126+
}
124127
if basicSecurityType > 0 {
125128
request.BasicSecurityType = &basicSecurityType
126129
}

website/docs/r/elasticsearch_instance.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ The following arguments are supported:
173173
* `es_acl` - (Optional, List) Kibana Access Control Configuration.
174174
* `es_public_acl` - (Optional, List) Public network access control list.
175175
* `instance_name` - (Optional, String) Name of the instance, which can contain 1 to 50 English letters, Chinese characters, digits, dashes(-), or underscores(_).
176+
* `kibana_private_access` - (Optional, String) Kibana private network access status. Valid values are `OPEN` and `CLOSE`.
176177
* `kibana_public_access` - (Optional, String) Kibana public network access status. Valid values are `OPEN` and `CLOSE`.
177178
* `license_type` - (Optional, String) License type. Valid values are `oss`, `basic` and `platinum`. The default value is `platinum`.
178179
* `multi_zone_infos` - (Optional, List, ForceNew) Details of AZs in multi-AZ deployment mode (which is required when deploy_mode is `1`).

0 commit comments

Comments
 (0)