diff --git a/.changelog/2704.txt b/.changelog/2704.txt new file mode 100644 index 0000000000..cf4d8368c4 --- /dev/null +++ b/.changelog/2704.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_monitor_tmp_instance: update document +``` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go index ca0a8d9715..48e1671e7a 100644 --- a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go @@ -18,8 +18,8 @@ import ( func ResourceTencentCloudMonitorTmpInstance() *schema.Resource { return &schema.Resource{ - Read: resourceTencentCloudMonitorTmpInstanceRead, Create: resourceTencentCloudMonitorTmpInstanceCreate, + Read: resourceTencentCloudMonitorTmpInstanceRead, Update: resourceTencentCloudMonitorTmpInstanceUpdate, Delete: resourceTencentCloudMonitorTmpInstanceDelete, Importer: &schema.ResourceImporter{ @@ -47,7 +47,7 @@ func ResourceTencentCloudMonitorTmpInstance() *schema.Resource { "data_retention_time": { Type: schema.TypeInt, Required: true, - Description: "Data retention time.", + Description: "Data retention time(in days). Value range: 15, 30, 45, 90, 180, 360, 720.", }, "zone": { @@ -93,9 +93,8 @@ func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta i defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_instance.create")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - var ( + logId = tccommon.GetLogId(tccommon.ContextNil) request = monitor.NewCreatePrometheusMultiTenantInstancePostPayModeRequest() response *monitor.CreatePrometheusMultiTenantInstancePostPayModeResponse ) @@ -112,7 +111,7 @@ func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta i request.SubnetId = helper.String(v.(string)) } - if v, ok := d.GetOk("data_retention_time"); ok { + if v, ok := d.GetOkExists("data_retention_time"); ok { request.DataRetentionTime = helper.IntInt64(v.(int)) } @@ -128,6 +127,7 @@ func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta i log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + response = result return nil }) @@ -138,7 +138,6 @@ func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta i } tmpInstanceId := *response.Response.InstanceId - service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) @@ -147,14 +146,18 @@ func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta i if errRet != nil { return tccommon.RetryError(errRet, tccommon.InternalError) } + if *instance.InstanceStatus == 2 { return nil } + if *instance.InstanceStatus == 3 { return resource.NonRetryableError(fmt.Errorf("tmpInstance status is %v, operate failed.", *instance.InstanceStatus)) } + return resource.RetryableError(fmt.Errorf("tmpInstance status is %v, retry...", *instance.InstanceStatus)) }) + if err != nil { return err } @@ -167,6 +170,7 @@ func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta i return err } } + d.SetId(tmpInstanceId) return resourceTencentCloudMonitorTmpInstanceRead(d, meta) } @@ -175,15 +179,14 @@ func resourceTencentCloudMonitorTmpInstanceRead(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmpInstance.read")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ) tmpInstanceId := d.Id() - tmpInstance, err := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) - if err != nil { return err } @@ -236,8 +239,8 @@ func resourceTencentCloudMonitorTmpInstanceRead(d *schema.ResourceData, meta int if err != nil { return err } - _ = d.Set("tags", tags) + _ = d.Set("tags", tags) return nil } @@ -245,16 +248,11 @@ func resourceTencentCloudMonitorTmpInstanceUpdate(d *schema.ResourceData, meta i defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_instance.update")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - request := monitor.NewModifyPrometheusInstanceAttributesRequest() - - request.InstanceId = helper.String(d.Id()) - - if v, ok := d.GetOk("instance_name"); ok { - request.InstanceName = helper.String(v.(string)) - } + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + request = monitor.NewModifyPrometheusInstanceAttributesRequest() + ) if d.HasChange("vpc_id") { return fmt.Errorf("`vpc_id` do not support change now.") @@ -264,16 +262,21 @@ func resourceTencentCloudMonitorTmpInstanceUpdate(d *schema.ResourceData, meta i return fmt.Errorf("`subnet_id` do not support change now.") } + if d.HasChange("zone") { + return fmt.Errorf("`zone` do not support change now.") + } + + request.InstanceId = helper.String(d.Id()) + if v, ok := d.GetOk("instance_name"); ok { + request.InstanceName = helper.String(v.(string)) + } + if d.HasChange("data_retention_time") { if v, ok := d.GetOk("data_retention_time"); ok { request.DataRetentionTime = helper.IntInt64(v.(int)) } } - if d.HasChange("zone") { - return fmt.Errorf("`zone` do not support change now.") - } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusInstanceAttributes(request) if e != nil { @@ -282,6 +285,7 @@ func resourceTencentCloudMonitorTmpInstanceUpdate(d *schema.ResourceData, meta i log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + return nil }) @@ -307,11 +311,12 @@ func resourceTencentCloudMonitorTmpInstanceDelete(d *schema.ResourceData, meta i defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_instance.delete")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - tmpInstanceId := d.Id() + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + tmpInstanceId = d.Id() + ) if err := service.IsolateMonitorTmpInstanceById(ctx, tmpInstanceId); err != nil { return err @@ -322,14 +327,18 @@ func resourceTencentCloudMonitorTmpInstanceDelete(d *schema.ResourceData, meta i if errRet != nil { return tccommon.RetryError(errRet, tccommon.InternalError) } + if *instance.InstanceStatus == 6 { return nil } + if *instance.InstanceStatus == 3 { return resource.NonRetryableError(fmt.Errorf("tmpInstance status is %v, operate failed.", *instance.InstanceStatus)) } + return resource.RetryableError(fmt.Errorf("tmpInstance status is %v, retry...", *instance.InstanceStatus)) }) + if err != nil { return err } @@ -337,5 +346,6 @@ func resourceTencentCloudMonitorTmpInstanceDelete(d *schema.ResourceData, meta i if err := service.DeleteMonitorTmpInstanceById(ctx, tmpInstanceId); err != nil { return err } + return nil } diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.md b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.md index 1ebe81ba03..31a7e0a86e 100644 --- a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.md +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.md @@ -19,7 +19,7 @@ resource "tencentcloud_subnet" "subnet" { cidr_block = "10.0.1.0/24" } -resource "tencentcloud_monitor_tmp_instance" "foo" { +resource "tencentcloud_monitor_tmp_instance" "example" { instance_name = "tf-tmp-instance" vpc_id = tencentcloud_vpc.vpc.id subnet_id = tencentcloud_subnet.subnet.id @@ -29,11 +29,10 @@ resource "tencentcloud_monitor_tmp_instance" "foo" { "createdBy" = "terraform" } } - ``` Import monitor tmpInstance can be imported using the id, e.g. ``` -$ terraform import tencentcloud_monitor_tmp_instance.tmpInstance tmpInstance_id -``` \ No newline at end of file +$ terraform import tencentcloud_monitor_tmp_instance.example prom-1uvo0tjm +``` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go index 286d41a77e..0a6078eada 100644 --- a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go @@ -15,6 +15,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) +// go test -i; go test -test.run TestAccTencentCloudMonitorInstance_basic -v func TestAccTencentCloudMonitorInstance_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ @@ -25,24 +26,30 @@ func TestAccTencentCloudMonitorInstance_basic(t *testing.T) { { Config: testInstance_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.basic", "instance_name", "demo-test"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.basic", "data_retention_time", "30"), + testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.example"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.example", "instance_name", "tf-tmp-instance"), + resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_instance.example", "vpc_id"), + resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_instance.example", "subnet_id"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.example", "data_retention_time", "30"), + resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_instance.example", "zone"), ), }, { Config: testInstance_update, Check: resource.ComposeTestCheckFunc( - testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.update", "instance_name", "demo-test-update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.update", "data_retention_time", "30"), + testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.example"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.example", "instance_name", "tf-tmp-instance-update"), + resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_instance.example", "vpc_id"), + resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_instance.example", "subnet_id"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.example", "data_retention_time", "90"), + resource.TestCheckResourceAttrSet("tencentcloud_monitor_tmp_instance.example", "zone"), ), }, - //{ - // ResourceName: "tencentcloud_monitor_tmp_instance.basic", - // ImportState: true, - // ImportStateVerify: true, - //}, + { + ResourceName: "tencentcloud_monitor_tmp_instance.example", + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -103,34 +110,60 @@ func testAccCheckInstanceExists(r string) resource.TestCheckFunc { } } -const testInstanceVar = tcacctest.DefaultAzVariable + ` -variable "vpc_id" { - default = "` + tcacctest.DefaultTmpVpcId + `" +const testInstance_basic = ` +variable "availability_zone" { + default = "ap-guangzhou-4" +} + +resource "tencentcloud_vpc" "vpc" { + cidr_block = "10.0.0.0/16" + name = "tf_monitor_vpc" +} + +resource "tencentcloud_subnet" "subnet" { + vpc_id = tencentcloud_vpc.vpc.id + availability_zone = var.availability_zone + name = "tf_monitor_subnet" + cidr_block = "10.0.1.0/24" +} + +resource "tencentcloud_monitor_tmp_instance" "example" { + instance_name = "tf-tmp-instance" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + data_retention_time = 30 + zone = var.availability_zone + tags = { + "createdBy" = "terraform" + } } -variable "subnet_id" { - default = "` + tcacctest.DefaultTmpSubnetId + `" +` + +const testInstance_update = ` +variable "availability_zone" { + default = "ap-guangzhou-4" +} + +resource "tencentcloud_vpc" "vpc" { + cidr_block = "10.0.0.0/16" + name = "tf_monitor_vpc" +} + +resource "tencentcloud_subnet" "subnet" { + vpc_id = tencentcloud_vpc.vpc.id + availability_zone = var.availability_zone + name = "tf_monitor_subnet" + cidr_block = "10.0.1.0/24" +} + +resource "tencentcloud_monitor_tmp_instance" "example" { + instance_name = "tf-tmp-instance-update" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + data_retention_time = 90 + zone = var.availability_zone + tags = { + "createdBy" = "terraformUpdate" + } } ` -const testInstance_basic = testInstanceVar + ` -resource "tencentcloud_monitor_tmp_instance" "basic" { - instance_name = "demo-test" - vpc_id = var.vpc_id - subnet_id = var.subnet_id - data_retention_time = 30 - zone = var.default_az - tags = { - "createdBy" = "terraform" - } -}` - -const testInstance_update = testInstanceVar + ` -resource "tencentcloud_monitor_tmp_instance" "update" { - instance_name = "demo-test-update" - vpc_id = var.vpc_id - subnet_id = var.subnet_id - data_retention_time = 30 - zone = var.default_az - tags = { - "createdBy" = "terraform" - } -}` diff --git a/website/docs/r/monitor_tmp_instance.html.markdown b/website/docs/r/monitor_tmp_instance.html.markdown index 24f32a4f28..10cf772f9c 100644 --- a/website/docs/r/monitor_tmp_instance.html.markdown +++ b/website/docs/r/monitor_tmp_instance.html.markdown @@ -30,7 +30,7 @@ resource "tencentcloud_subnet" "subnet" { cidr_block = "10.0.1.0/24" } -resource "tencentcloud_monitor_tmp_instance" "foo" { +resource "tencentcloud_monitor_tmp_instance" "example" { instance_name = "tf-tmp-instance" vpc_id = tencentcloud_vpc.vpc.id subnet_id = tencentcloud_subnet.subnet.id @@ -46,7 +46,7 @@ resource "tencentcloud_monitor_tmp_instance" "foo" { The following arguments are supported: -* `data_retention_time` - (Required, Int) Data retention time. +* `data_retention_time` - (Required, Int) Data retention time(in days). Value range: 15, 30, 45, 90, 180, 360, 720. * `instance_name` - (Required, String) Instance name. * `subnet_id` - (Required, String) Subnet Id. * `vpc_id` - (Required, String) Vpc Id. @@ -68,6 +68,6 @@ In addition to all arguments above, the following attributes are exported: monitor tmpInstance can be imported using the id, e.g. ``` -$ terraform import tencentcloud_monitor_tmp_instance.tmpInstance tmpInstance_id +$ terraform import tencentcloud_monitor_tmp_instance.example prom-1uvo0tjm ```