Skip to content

Commit f6cbff0

Browse files
tongyimingmikatong
andauthored
fix(es): [124321863] kibana public and private access can be updated at the same time (#3398)
* kibana_public_access and kibana_private_access can be updated at the same time * add changelog --------- Co-authored-by: mikatong <[email protected]>
1 parent 462ad4b commit f6cbff0

File tree

4 files changed

+55
-36
lines changed

4 files changed

+55
-36
lines changed

.changelog/3398.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: kibana_public_access and kibana_private_access can be updated at the same time
3+
```

tencentcloud/services/es/resource_tc_elasticsearch_instance.go

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,11 @@ func ResourceTencentCloudElasticsearchInstance() *schema.Resource {
324324
Computed: true,
325325
Description: "Kibana access URL.",
326326
},
327+
"kibana_private_url": {
328+
Type: schema.TypeString,
329+
Computed: true,
330+
Description: "Kibana private URL.",
331+
},
327332
"es_public_url": {
328333
Type: schema.TypeString,
329334
Computed: true,
@@ -520,48 +525,50 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met
520525
}
521526
}
522527

523-
var isUpdate bool
524-
525-
// KibanaPublicAccess
526-
var kibanaPublicAccess string
527528
if v, ok := d.GetOk("kibana_public_access"); ok {
528529
// The default value is OPEN when creating. If you call the modification interface again and change it to OPEN, the interface will report an error InvalidParameter.InvalidPublicAccess
529-
publicAccess := v.(string)
530-
if publicAccess != ES_KIBANA_PUBLIC_ACCESS_OPEN {
531-
kibanaPublicAccess = publicAccess
532-
isUpdate = true
533-
}
534-
}
530+
kibanaPublicAccess := v.(string)
531+
if kibanaPublicAccess != ES_KIBANA_PUBLIC_ACCESS_OPEN {
532+
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
533+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", kibanaPublicAccess, "", "", 0, nil, nil, nil, nil, nil)
534+
if errRet != nil {
535+
return tccommon.RetryError(errRet)
536+
}
537+
return nil
538+
})
539+
if err != nil {
540+
return err
541+
}
535542

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
543+
err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId)
544+
if err != nil {
545+
return err
546+
}
541547
}
542-
543548
}
544549

545-
if isUpdate {
546-
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
547-
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", kibanaPublicAccess, kibanaPrivateAccess, "", 0, nil, nil, nil, nil, nil)
548-
if errRet != nil {
549-
return tccommon.RetryError(errRet)
550+
if v, ok := d.GetOk("kibana_private_access"); ok {
551+
kibanaPrivateAccess := v.(string)
552+
if actualKibanaPrivateAccess != "" && actualKibanaPrivateAccess != kibanaPrivateAccess {
553+
err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
554+
errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", kibanaPrivateAccess, "", 0, nil, nil, nil, nil, nil)
555+
if errRet != nil {
556+
return tccommon.RetryError(errRet)
557+
}
558+
return nil
559+
})
560+
if err != nil {
561+
return err
550562
}
551-
return nil
552-
})
553-
if err != nil {
554-
return err
555-
}
556563

557-
err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId)
558-
if err != nil {
559-
return err
564+
err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId)
565+
if err != nil {
566+
return err
567+
}
560568
}
561-
562-
isUpdate = false
563569
}
564570

571+
var isUpdate bool
565572
// PublicAccess
566573
var publicAccess string
567574
esPublicAcl := es.EsPublicAcl{}
@@ -698,6 +705,7 @@ func resourceTencentCloudElasticsearchInstanceRead(d *schema.ResourceData, meta
698705
_ = d.Set("elasticsearch_vip", instance.EsVip)
699706
_ = d.Set("elasticsearch_port", instance.EsPort)
700707
_ = d.Set("kibana_url", instance.KibanaUrl)
708+
_ = d.Set("kibana_private_url", instance.KibanaPrivateUrl)
701709
_ = d.Set("create_time", instance.CreateTime)
702710
_ = d.Set("kibana_public_access", instance.KibanaPublicAccess)
703711
_ = d.Set("kibana_private_access", instance.KibanaPrivateAccess)

tencentcloud/services/es/resource_tc_elasticsearch_instance_test.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,24 +172,29 @@ func TestAccTencentCloudElasticsearchInstanceResource_kibanaPrivateAccess(t *tes
172172
CheckDestroy: testAccCheckElasticsearchInstanceDestroy,
173173
Steps: []resource.TestStep{
174174
{
175-
Config: testAccElasticsearchInstanceKibanaPrivateAccessOpen,
175+
Config: testAccElasticsearchInstanceKibanaPrivateAccessUpdate,
176176
Check: resource.ComposeTestCheckFunc(
177177
testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"),
178+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_public_access", "CLOSE"),
178179
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "OPEN"),
180+
resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_url"),
179181
),
180182
},
181183
{
182-
Config: testAccElasticsearchInstanceKibanaPrivateAccessClose,
184+
Config: testAccElasticsearchInstanceKibanaPrivateAccessDefault,
183185
Check: resource.ComposeTestCheckFunc(
184186
testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"),
187+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_public_access", "OPEN"),
185188
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "CLOSE"),
186189
),
187190
},
188191
{
189-
Config: testAccElasticsearchInstanceKibanaPrivateAccessOpen,
192+
Config: testAccElasticsearchInstanceKibanaPrivateAccessUpdate,
190193
Check: resource.ComposeTestCheckFunc(
191194
testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"),
195+
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_public_access", "CLOSE"),
192196
resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "OPEN"),
197+
resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_url"),
193198
),
194199
},
195200
},
@@ -380,7 +385,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" {
380385
}
381386
`
382387

383-
const testAccElasticsearchInstanceKibanaPrivateAccessClose = tcacctest.DefaultEsVariables + `
388+
const testAccElasticsearchInstanceKibanaPrivateAccessDefault = tcacctest.DefaultEsVariables + `
384389
resource "tencentcloud_elasticsearch_instance" "es_kibana" {
385390
instance_name = "tf-ci-test-kibana"
386391
availability_zone = var.availability_zone
@@ -390,6 +395,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" {
390395
password = "Test1234"
391396
license_type = "basic"
392397
basic_security_type = 2
398+
kibana_public_access = "OPEN"
393399
kibana_private_access = "CLOSE"
394400
public_access = "CLOSE"
395401
es_public_acl {
@@ -405,7 +411,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" {
405411
}
406412
`
407413

408-
const testAccElasticsearchInstanceKibanaPrivateAccessOpen = tcacctest.DefaultEsVariables + `
414+
const testAccElasticsearchInstanceKibanaPrivateAccessUpdate = tcacctest.DefaultEsVariables + `
409415
resource "tencentcloud_elasticsearch_instance" "es_kibana" {
410416
instance_name = "tf-ci-test-kibana"
411417
availability_zone = var.availability_zone
@@ -415,6 +421,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" {
415421
password = "Test1234"
416422
license_type = "basic"
417423
basic_security_type = 2
424+
kibana_public_access = "CLOSE"
418425
kibana_private_access = "OPEN"
419426
public_access = "OPEN"
420427
es_public_acl {

website/docs/r/elasticsearch_instance.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ In addition to all arguments above, the following attributes are exported:
226226
* `elasticsearch_port` - Elasticsearch port.
227227
* `elasticsearch_vip` - Elasticsearch VIP.
228228
* `es_public_url` - Es public network address.
229+
* `kibana_private_url` - Kibana private URL.
229230
* `kibana_url` - Kibana access URL.
230231

231232

0 commit comments

Comments
 (0)