From 11ebdf9f17ee3d9e8dc064d3876de9973d71cc86 Mon Sep 17 00:00:00 2001 From: mikatong Date: Thu, 20 Mar 2025 14:45:52 +0800 Subject: [PATCH 1/3] update test case --- .../services/cvm/resource_tc_instance_test.go | 289 ++++++++++++++++++ .../cvm/resource_tc_reserved_instance_test.go | 8 +- 2 files changed, 293 insertions(+), 4 deletions(-) diff --git a/tencentcloud/services/cvm/resource_tc_instance_test.go b/tencentcloud/services/cvm/resource_tc_instance_test.go index 5039065f3c..be3be5fe23 100644 --- a/tencentcloud/services/cvm/resource_tc_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_instance_test.go @@ -116,6 +116,69 @@ func TestAccTencentCloudInstanceResourceBasic(t *testing.T) { }, }) } +func TestAccTencentCloudInstanceResource_UserDataRaw(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + acctest.AccPreCheck(t) + }, + Providers: acctest.AccProviders, + CheckDestroy: testAccCheckCvmInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCvmInstanceResource_UserDataRaw, + Check: resource.ComposeTestCheckFunc( + testAccCheckCvmInstanceExists("tencentcloud_instance.cvm_user_data_raw"), + resource.TestCheckResourceAttr("tencentcloud_instance.cvm_user_data_raw", "user_data_raw", "test"), + ), + }, + { + Config: testAccCvmInstanceResource_UserDataRawUpdate, + Check: resource.ComposeTestCheckFunc( + testAccCheckCvmInstanceExists("tencentcloud_instance.cvm_user_data_raw"), + resource.TestCheckResourceAttr("tencentcloud_instance.cvm_user_data_raw", "user_data_raw", "test-update"), + ), + }, + { + ResourceName: "tencentcloud_instance.cvm_user_data_raw", + ImportState: true, + ImportStateVerifyIgnore: []string{"disable_monitor_service", "disable_security_service", "disable_automation_service", "hostname", "password", "force_delete"}, + }, + }, + }) +} + +func TestAccTencentCloudInstanceResource_UserData(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + acctest.AccPreCheck(t) + }, + Providers: acctest.AccProviders, + CheckDestroy: testAccCheckCvmInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCvmInstanceResource_UserData, + Check: resource.ComposeTestCheckFunc( + testAccCheckCvmInstanceExists("tencentcloud_instance.cvm_user_data"), + resource.TestCheckResourceAttr("tencentcloud_instance.cvm_user_data", "user_data", "dGVzdA=="), + ), + }, + { + Config: testAccCvmInstanceResource_UserDataUpdate, + Check: resource.ComposeTestCheckFunc( + testAccCheckCvmInstanceExists("tencentcloud_instance.cvm_user_data"), + resource.TestCheckResourceAttr("tencentcloud_instance.cvm_user_data", "user_data", "dGVzdC11cGRhdGU="), + ), + }, + { + ResourceName: "tencentcloud_instance.cvm_user_data", + ImportState: true, + ImportStateVerifyIgnore: []string{"disable_monitor_service", "disable_security_service", "disable_automation_service", "hostname", "password", "force_delete"}, + }, + }, + }) +} func testAccCheckCvmInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { @@ -163,6 +226,232 @@ func testAccCheckCvmInstanceDestroy(s *terraform.State) error { return nil } +const testAccCvmInstanceResource_UserData = ` + +data "tencentcloud_availability_zones" "default" { +} +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_images" "testing" { + image_type = ["PUBLIC_IMAGE"] +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + + filter { + name = "instance-family" + values = ["S1","S2","S3","S4","S5"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} +resource "tencentcloud_vpc" "vpc" { + name = "cvm-basic-vpc" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_subnet" "subnet" { + availability_zone = "ap-guangzhou-7" + vpc_id = tencentcloud_vpc.vpc.id + name = "cvm-basic-subnet" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_instance" "cvm_user_data" { + instance_name = "tf-test-user-data" + availability_zone = "ap-guangzhou-7" + image_id = data.tencentcloud_images.default.images.0.image_id + vpc_id = tencentcloud_vpc.vpc.id + + tags = { + hostname = "tci" + } + + lifecycle { + ignore_changes = [instance_type] + } + instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type + subnet_id = tencentcloud_subnet.subnet.id + system_disk_type = "CLOUD_PREMIUM" + project_id = 0 + user_data = "dGVzdA==" +} + +` +const testAccCvmInstanceResource_UserDataUpdate = ` + +data "tencentcloud_availability_zones" "default" { +} +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_images" "testing" { + image_type = ["PUBLIC_IMAGE"] +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + + filter { + name = "instance-family" + values = ["S1","S2","S3","S4","S5"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} +resource "tencentcloud_vpc" "vpc" { + name = "cvm-basic-vpc" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_subnet" "subnet" { + availability_zone = "ap-guangzhou-7" + vpc_id = tencentcloud_vpc.vpc.id + name = "cvm-basic-subnet" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_instance" "cvm_user_data" { + instance_name = "tf-test-user-data" + availability_zone = "ap-guangzhou-7" + image_id = data.tencentcloud_images.default.images.0.image_id + vpc_id = tencentcloud_vpc.vpc.id + + tags = { + hostname = "tci" + } + + lifecycle { + ignore_changes = [instance_type] + } + instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type + subnet_id = tencentcloud_subnet.subnet.id + system_disk_type = "CLOUD_PREMIUM" + project_id = 0 + user_data = "dGVzdC11cGRhdGU=" +} + +` + +const testAccCvmInstanceResource_UserDataRaw = ` + +data "tencentcloud_availability_zones" "default" { +} +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_images" "testing" { + image_type = ["PUBLIC_IMAGE"] +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + + filter { + name = "instance-family" + values = ["S1","S2","S3","S4","S5"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} +resource "tencentcloud_vpc" "vpc" { + name = "cvm-basic-vpc" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_subnet" "subnet" { + availability_zone = "ap-guangzhou-7" + vpc_id = tencentcloud_vpc.vpc.id + name = "cvm-basic-subnet" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_instance" "cvm_user_data_raw" { + instance_name = "tf-test-user-data-raw" + availability_zone = "ap-guangzhou-7" + image_id = data.tencentcloud_images.default.images.0.image_id + vpc_id = tencentcloud_vpc.vpc.id + + tags = { + hostname = "tci" + } + + lifecycle { + ignore_changes = [instance_type] + } + instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type + subnet_id = tencentcloud_subnet.subnet.id + system_disk_type = "CLOUD_PREMIUM" + project_id = 0 + user_data_raw = "test" +} + +` +const testAccCvmInstanceResource_UserDataRawUpdate = ` + +data "tencentcloud_availability_zones" "default" { +} +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_images" "testing" { + image_type = ["PUBLIC_IMAGE"] +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + + filter { + name = "instance-family" + values = ["S1","S2","S3","S4","S5"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} +resource "tencentcloud_vpc" "vpc" { + name = "cvm-basic-vpc" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_subnet" "subnet" { + availability_zone = "ap-guangzhou-7" + vpc_id = tencentcloud_vpc.vpc.id + name = "cvm-basic-subnet" + cidr_block = "10.0.0.0/16" +} +resource "tencentcloud_instance" "cvm_user_data_raw" { + instance_name = "tf-test-user-data-raw" + availability_zone = "ap-guangzhou-7" + image_id = data.tencentcloud_images.default.images.0.image_id + vpc_id = tencentcloud_vpc.vpc.id + + tags = { + hostname = "tci" + } + + lifecycle { + ignore_changes = [instance_type] + } + instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type + subnet_id = tencentcloud_subnet.subnet.id + system_disk_type = "CLOUD_PREMIUM" + project_id = 0 + user_data_raw = "test-update" +} + +` + const testAccCvmInstanceResource_BasicCreate = ` data "tencentcloud_availability_zones" "default" { diff --git a/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go b/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go index cd10e3a45a..1373b2e220 100644 --- a/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go @@ -18,8 +18,8 @@ func TestAccTencentCloudReservedInstance(t *testing.T) { Config: testAccReservedInstance, Check: resource.ComposeTestCheckFunc( testAccCheckPlacementGroupExists("tencentcloud_reserved_instance.reserved_instance"), - resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "config_id", "ca8d39c3-4605-4e8d-9a21-05188cc9d1d4"), - resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "instance_count", "2"), + resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "config_id", "3ae825a8-bf6f-4c43-aa2c-c507c08fba92"), + resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "instance_count", "1"), resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "reserved_instance_name", "test"), resource.TestCheckResourceAttrSet("tencentcloud_reserved_instance.reserved_instance", "start_time"), resource.TestCheckResourceAttrSet("tencentcloud_reserved_instance.reserved_instance", "end_time"), @@ -37,8 +37,8 @@ func TestAccTencentCloudReservedInstance(t *testing.T) { const testAccReservedInstance = ` resource "tencentcloud_reserved_instance" "reserved_instance" { - config_id = "ca8d39c3-4605-4e8d-9a21-05188cc9d1d4" - instance_count = 2 + config_id = "3ae825a8-bf6f-4c43-aa2c-c507c08fba92" + instance_count = 1 reserved_instance_name = "test" } ` From 4e45b02d7483789a00be5f18da7ebe9fd5ceac01 Mon Sep 17 00:00:00 2001 From: mikatong Date: Thu, 20 Mar 2025 14:56:31 +0800 Subject: [PATCH 2/3] add changelog --- .changelog/3227.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changelog/3227.txt diff --git a/.changelog/3227.txt b/.changelog/3227.txt new file mode 100644 index 0000000000..e5705cfe12 --- /dev/null +++ b/.changelog/3227.txt @@ -0,0 +1,7 @@ +```release-note:enhancement +resource/tencentcloud_instance: support `user_data` and `user_data_raw` update +``` + +```release-note:enhancement +resource/tencentcloud_reserved_instance: update cvm sdk +``` \ No newline at end of file From bd83b4610d512c61fc0396939363ac2d49073c1b Mon Sep 17 00:00:00 2001 From: mikatong Date: Thu, 20 Mar 2025 15:48:12 +0800 Subject: [PATCH 3/3] update --- .../services/cvm/resource_tc_reserved_instance_test.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go b/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go index 1373b2e220..992af9f026 100644 --- a/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_reserved_instance_test.go @@ -8,7 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) -func TestAccTencentCloudReservedInstance(t *testing.T) { +func TestAccTencentCloudReservedInstanceResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { tcacctest.AccPreCheck(t) }, @@ -17,7 +17,6 @@ func TestAccTencentCloudReservedInstance(t *testing.T) { { Config: testAccReservedInstance, Check: resource.ComposeTestCheckFunc( - testAccCheckPlacementGroupExists("tencentcloud_reserved_instance.reserved_instance"), resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "config_id", "3ae825a8-bf6f-4c43-aa2c-c507c08fba92"), resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "instance_count", "1"), resource.TestCheckResourceAttr("tencentcloud_reserved_instance.reserved_instance", "reserved_instance_name", "test"), @@ -27,9 +26,8 @@ func TestAccTencentCloudReservedInstance(t *testing.T) { ), }, { - ResourceName: "tencentcloud_reserved_instance.reserved_instance", - ImportState: true, - ImportStateVerify: true, + ResourceName: "tencentcloud_reserved_instance.reserved_instance", + ImportState: true, }, }, })