From a13edcbceaab128bf2476b962527c05f620c06d9 Mon Sep 17 00:00:00 2001 From: mikatong Date: Fri, 6 Jun 2025 11:21:21 +0800 Subject: [PATCH 1/2] kibana_public_access and kibana_private_access can be updated at the same time --- .../es/resource_tc_elasticsearch_instance.go | 70 +++++++++++-------- ...resource_tc_elasticsearch_instance_test.go | 17 +++-- .../r/elasticsearch_instance.html.markdown | 1 + 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/tencentcloud/services/es/resource_tc_elasticsearch_instance.go b/tencentcloud/services/es/resource_tc_elasticsearch_instance.go index ae8a3264fd..d1737d7781 100644 --- a/tencentcloud/services/es/resource_tc_elasticsearch_instance.go +++ b/tencentcloud/services/es/resource_tc_elasticsearch_instance.go @@ -324,6 +324,11 @@ func ResourceTencentCloudElasticsearchInstance() *schema.Resource { Computed: true, Description: "Kibana access URL.", }, + "kibana_private_url": { + Type: schema.TypeString, + Computed: true, + Description: "Kibana private URL.", + }, "es_public_url": { Type: schema.TypeString, Computed: true, @@ -520,48 +525,50 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met } } - var isUpdate bool - - // KibanaPublicAccess - var kibanaPublicAccess string if v, ok := d.GetOk("kibana_public_access"); ok { // 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 - publicAccess := v.(string) - if publicAccess != ES_KIBANA_PUBLIC_ACCESS_OPEN { - kibanaPublicAccess = publicAccess - isUpdate = true - } - } + kibanaPublicAccess := v.(string) + if kibanaPublicAccess != ES_KIBANA_PUBLIC_ACCESS_OPEN { + err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError { + errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", kibanaPublicAccess, "", "", 0, nil, nil, nil, nil, nil) + if errRet != nil { + return tccommon.RetryError(errRet) + } + return nil + }) + if err != nil { + return err + } - var kibanaPrivateAccess string - if v, ok := d.GetOk("kibana_private_access"); ok { - if actualKibanaPrivateAccess != "" && actualKibanaPrivateAccess != v.(string) { - kibanaPrivateAccess = v.(string) - isUpdate = true + err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId) + if err != nil { + return err + } } - } - if isUpdate { - err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError { - errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", kibanaPublicAccess, kibanaPrivateAccess, "", 0, nil, nil, nil, nil, nil) - if errRet != nil { - return tccommon.RetryError(errRet) + if v, ok := d.GetOk("kibana_private_access"); ok { + kibanaPrivateAccess := v.(string) + if actualKibanaPrivateAccess != "" && actualKibanaPrivateAccess != kibanaPrivateAccess { + err = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError { + errRet := elasticsearchService.UpdateInstance(ctx, instanceId, "", "", "", kibanaPrivateAccess, "", 0, nil, nil, nil, nil, nil) + if errRet != nil { + return tccommon.RetryError(errRet) + } + return nil + }) + if err != nil { + return err } - return nil - }) - if err != nil { - return err - } - err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId) - if err != nil { - return err + err = tencentCloudElasticsearchInstanceUpgradeWaiting(ctx, &elasticsearchService, instanceId) + if err != nil { + return err + } } - - isUpdate = false } + var isUpdate bool // PublicAccess var publicAccess string esPublicAcl := es.EsPublicAcl{} @@ -698,6 +705,7 @@ func resourceTencentCloudElasticsearchInstanceRead(d *schema.ResourceData, meta _ = d.Set("elasticsearch_vip", instance.EsVip) _ = d.Set("elasticsearch_port", instance.EsPort) _ = d.Set("kibana_url", instance.KibanaUrl) + _ = d.Set("kibana_private_url", instance.KibanaPrivateUrl) _ = d.Set("create_time", instance.CreateTime) _ = d.Set("kibana_public_access", instance.KibanaPublicAccess) _ = d.Set("kibana_private_access", instance.KibanaPrivateAccess) diff --git a/tencentcloud/services/es/resource_tc_elasticsearch_instance_test.go b/tencentcloud/services/es/resource_tc_elasticsearch_instance_test.go index 755fce2750..2a7cd484e8 100644 --- a/tencentcloud/services/es/resource_tc_elasticsearch_instance_test.go +++ b/tencentcloud/services/es/resource_tc_elasticsearch_instance_test.go @@ -172,24 +172,29 @@ func TestAccTencentCloudElasticsearchInstanceResource_kibanaPrivateAccess(t *tes CheckDestroy: testAccCheckElasticsearchInstanceDestroy, Steps: []resource.TestStep{ { - Config: testAccElasticsearchInstanceKibanaPrivateAccessOpen, + Config: testAccElasticsearchInstanceKibanaPrivateAccessUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"), + resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_public_access", "CLOSE"), resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "OPEN"), + resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_url"), ), }, { - Config: testAccElasticsearchInstanceKibanaPrivateAccessClose, + Config: testAccElasticsearchInstanceKibanaPrivateAccessDefault, Check: resource.ComposeTestCheckFunc( testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"), + resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_public_access", "OPEN"), resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "CLOSE"), ), }, { - Config: testAccElasticsearchInstanceKibanaPrivateAccessOpen, + Config: testAccElasticsearchInstanceKibanaPrivateAccessUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckElasticsearchInstanceExists("tencentcloud_elasticsearch_instance.es_kibana"), + resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_public_access", "CLOSE"), resource.TestCheckResourceAttr("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_access", "OPEN"), + resource.TestCheckResourceAttrSet("tencentcloud_elasticsearch_instance.es_kibana", "kibana_private_url"), ), }, }, @@ -380,7 +385,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" { } ` -const testAccElasticsearchInstanceKibanaPrivateAccessClose = tcacctest.DefaultEsVariables + ` +const testAccElasticsearchInstanceKibanaPrivateAccessDefault = tcacctest.DefaultEsVariables + ` resource "tencentcloud_elasticsearch_instance" "es_kibana" { instance_name = "tf-ci-test-kibana" availability_zone = var.availability_zone @@ -390,6 +395,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" { password = "Test1234" license_type = "basic" basic_security_type = 2 + kibana_public_access = "OPEN" kibana_private_access = "CLOSE" public_access = "CLOSE" es_public_acl { @@ -405,7 +411,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" { } ` -const testAccElasticsearchInstanceKibanaPrivateAccessOpen = tcacctest.DefaultEsVariables + ` +const testAccElasticsearchInstanceKibanaPrivateAccessUpdate = tcacctest.DefaultEsVariables + ` resource "tencentcloud_elasticsearch_instance" "es_kibana" { instance_name = "tf-ci-test-kibana" availability_zone = var.availability_zone @@ -415,6 +421,7 @@ resource "tencentcloud_elasticsearch_instance" "es_kibana" { password = "Test1234" license_type = "basic" basic_security_type = 2 + kibana_public_access = "CLOSE" kibana_private_access = "OPEN" public_access = "OPEN" es_public_acl { diff --git a/website/docs/r/elasticsearch_instance.html.markdown b/website/docs/r/elasticsearch_instance.html.markdown index bacebad93b..d37af4938f 100644 --- a/website/docs/r/elasticsearch_instance.html.markdown +++ b/website/docs/r/elasticsearch_instance.html.markdown @@ -226,6 +226,7 @@ In addition to all arguments above, the following attributes are exported: * `elasticsearch_port` - Elasticsearch port. * `elasticsearch_vip` - Elasticsearch VIP. * `es_public_url` - Es public network address. +* `kibana_private_url` - Kibana private URL. * `kibana_url` - Kibana access URL. From 404046f08a862524e87e9ce05c2c3602ab87b55f Mon Sep 17 00:00:00 2001 From: mikatong Date: Fri, 6 Jun 2025 11:28:04 +0800 Subject: [PATCH 2/2] add changelog --- .changelog/3398.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3398.txt diff --git a/.changelog/3398.txt b/.changelog/3398.txt new file mode 100644 index 0000000000..8a051d1693 --- /dev/null +++ b/.changelog/3398.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_elasticsearch_instance: kibana_public_access and kibana_private_access can be updated at the same time +```