diff --git a/.changelog/3065.txt b/.changelog/3065.txt new file mode 100644 index 0000000000..c1458d01af --- /dev/null +++ b/.changelog/3065.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +tencentcloud_postgresql_time_window +``` \ No newline at end of file diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 4a2c6f0230..dcfe0711e7 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1577,6 +1577,7 @@ func Provider() *schema.Provider { "tencentcloud_postgresql_instance_network_access": postgresql.ResourceTencentCloudPostgresqlInstanceNetworkAccess(), "tencentcloud_postgresql_parameters": postgresql.ResourceTencentCloudPostgresqlParameters(), "tencentcloud_postgresql_instance_ssl_config": postgresql.ResourceTencentCloudPostgresqlInstanceSslConfig(), + "tencentcloud_postgresql_time_window": postgresql.ResourceTencentCloudPostgresqlTimeWindow(), "tencentcloud_sqlserver_instance": sqlserver.ResourceTencentCloudSqlserverInstance(), "tencentcloud_sqlserver_db": sqlserver.ResourceTencentCloudSqlserverDB(), "tencentcloud_sqlserver_account": sqlserver.ResourceTencentCloudSqlserverAccount(), diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 1f7a0298cd..4cc43629e6 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -921,6 +921,7 @@ tencentcloud_postgresql_clone_db_instance tencentcloud_postgresql_instance_network_access tencentcloud_postgresql_parameters tencentcloud_postgresql_instance_ssl_config +tencentcloud_postgresql_time_window TencentDB for Redis(crs) Data Source diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_time_window.go b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window.go new file mode 100644 index 0000000000..cff4010d0f --- /dev/null +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window.go @@ -0,0 +1,178 @@ +// Code generated by iacg; DO NOT EDIT. +package postgresql + +import ( + "context" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + postgresv20170312 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudPostgresqlTimeWindow() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudPostgresqlTimeWindowCreate, + Read: resourceTencentCloudPostgresqlTimeWindowRead, + Update: resourceTencentCloudPostgresqlTimeWindowUpdate, + Delete: resourceTencentCloudPostgresqlTimeWindowDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "db_instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance id.", + }, + + "maintain_start_time": { + Type: schema.TypeString, + Optional: true, + Description: "Maintenance start time. Time zone is UTC+8.", + }, + + "maintain_duration": { + Type: schema.TypeInt, + Optional: true, + Description: "Maintenance duration, Unit: hours.", + }, + + "maintain_week_days": { + Type: schema.TypeSet, + Optional: true, + Description: "Maintenance cycle.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + } +} + +func resourceTencentCloudPostgresqlTimeWindowCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_postgresql_time_window.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + dBInstanceId string + ) + if v, ok := d.GetOk("db_instance_id"); ok { + dBInstanceId = v.(string) + } + + d.SetId(dBInstanceId) + + return resourceTencentCloudPostgresqlTimeWindowUpdate(d, meta) +} + +func resourceTencentCloudPostgresqlTimeWindowRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_postgresql_time_window.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := PostgresqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + dBInstanceId := d.Id() + + _ = d.Set("db_instance_id", dBInstanceId) + + respData, err := service.DescribePostgresqlTimeWindowById(ctx, dBInstanceId) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `postgresql_time_window` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + if respData.DBInstanceId != nil { + _ = d.Set("db_instance_id", respData.DBInstanceId) + } + + if respData.MaintainStartTime != nil { + _ = d.Set("maintain_start_time", respData.MaintainStartTime) + } + + if respData.MaintainDuration != nil { + _ = d.Set("maintain_duration", respData.MaintainDuration) + } + + if respData.MaintainWeekDays != nil { + _ = d.Set("maintain_week_days", respData.MaintainWeekDays) + } + + return nil +} + +func resourceTencentCloudPostgresqlTimeWindowUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_postgresql_time_window.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + dBInstanceId := d.Id() + + needChange := false + mutableArgs := []string{"maintain_start_time", "maintain_duration", "maintain_week_days"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break + } + } + + if needChange { + request := postgresv20170312.NewModifyMaintainTimeWindowRequest() + + request.DBInstanceId = helper.String(dBInstanceId) + + if v, ok := d.GetOk("maintain_start_time"); ok { + request.MaintainStartTime = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("maintain_duration"); ok { + request.MaintainDuration = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("maintain_week_days"); ok { + maintainWeekDaysSet := v.(*schema.Set).List() + for i := range maintainWeekDaysSet { + maintainWeekDays := maintainWeekDaysSet[i].(string) + request.MaintainWeekDays = append(request.MaintainWeekDays, helper.String(maintainWeekDays)) + } + } + + reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresV20170312Client().ModifyMaintainTimeWindowWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if reqErr != nil { + log.Printf("[CRITAL]%s update postgresql time window failed, reason:%+v", logId, reqErr) + return reqErr + } + } + + return resourceTencentCloudPostgresqlTimeWindowRead(d, meta) +} + +func resourceTencentCloudPostgresqlTimeWindowDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_postgresql_time_window.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_time_window.md b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window.md new file mode 100644 index 0000000000..bcf42f7f98 --- /dev/null +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window.md @@ -0,0 +1,28 @@ +Provides a resource to create a postgres postgresql_time_window + +Example Usage + +```hcl +resource "tencentcloud_postgresql_time_window" "postgresql_time_window" { + db_instance_id = "postgres-45b0vlmr" + maintain_duration = 2 + maintain_start_time = "04:00" + maintain_week_days = [ + "friday", + "monday", + "saturday", + "sunday", + "thursday", + "tuesday", + "wednesday", + ] +} +``` + +Import + +postgres postgresql_time_window can be imported using the id, e.g. + +``` +terraform import tencentcloud_postgresql_time_window.postgresql_time_window instance_id +``` diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_time_window_extension.go b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window_extension.go new file mode 100644 index 0000000000..4e9a54a3ce --- /dev/null +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window_extension.go @@ -0,0 +1 @@ +package postgresql diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_time_window_test.go b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window_test.go new file mode 100644 index 0000000000..39d2e9346e --- /dev/null +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_time_window_test.go @@ -0,0 +1,79 @@ +package postgresql_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudPostgresqlTimeWindowResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccPostgresqlTimeWindow, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_postgresql_time_window.postgresql_time_window", "id"), + resource.TestCheckResourceAttr("tencentcloud_postgresql_time_window.postgresql_time_window", "maintain_duration", "2"), + resource.TestCheckResourceAttr("tencentcloud_postgresql_time_window.postgresql_time_window", "maintain_start_time", "04:00"), + resource.TestCheckResourceAttr("tencentcloud_postgresql_time_window.postgresql_time_window", "maintain_week_days.#", "7"), + ), + }, + { + ResourceName: "tencentcloud_postgresql_time_window.postgresql_time_window", + ImportState: true, + ImportStateVerify: true, + }, + + { + Config: testAccPostgresqlTimeWindowUp, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_postgresql_time_window.postgresql_time_window", "id"), + resource.TestCheckResourceAttr("tencentcloud_postgresql_time_window.postgresql_time_window", "maintain_duration", "3"), + resource.TestCheckResourceAttr("tencentcloud_postgresql_time_window.postgresql_time_window", "maintain_start_time", "05:00"), + resource.TestCheckResourceAttr("tencentcloud_postgresql_time_window.postgresql_time_window", "maintain_week_days.#", "6"), + ), + }, + }, + }) +} + +const testAccPostgresqlTimeWindow = testAccPostgresqlInstance + ` + +resource "tencentcloud_postgresql_time_window" "postgresql_time_window" { + db_instance_id = tencentcloud_postgresql_instance.test.id + maintain_duration = 2 + maintain_start_time = "04:00" + maintain_week_days = [ + "friday", + "monday", + "saturday", + "sunday", + "thursday", + "tuesday", + "wednesday", + ] +} +` + +const testAccPostgresqlTimeWindowUp = testAccPostgresqlInstance + ` + +resource "tencentcloud_postgresql_time_window" "postgresql_time_window" { + db_instance_id = tencentcloud_postgresql_instance.test.id + maintain_duration = 3 + maintain_start_time = "05:00" + maintain_week_days = [ + "friday", + "monday", + "saturday", + "sunday", + "thursday", + "tuesday", + ] +} +` diff --git a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go index 34e0e38132..bb702228e6 100644 --- a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go +++ b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go @@ -2393,3 +2393,33 @@ func (me *PostgresqlService) DescribePostgresqlDbVersionsByFilter(ctx context.Co return } + +func (me *PostgresqlService) DescribePostgresqlTimeWindowById(ctx context.Context, dBInstanceId string) (ret *postgresv20170312.DescribeMaintainTimeWindowResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := postgresv20170312.NewDescribeMaintainTimeWindowRequest() + response := postgresv20170312.NewDescribeMaintainTimeWindowResponse() + request.DBInstanceId = helper.String(dBInstanceId) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + errRet = resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UsePostgresV20170312Client().DescribeMaintainTimeWindow(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + response = result + return nil + }) + + ret = response.Response + return +} diff --git a/website/docs/r/postgresql_time_window.html.markdown b/website/docs/r/postgresql_time_window.html.markdown new file mode 100644 index 0000000000..0a817daf55 --- /dev/null +++ b/website/docs/r/postgresql_time_window.html.markdown @@ -0,0 +1,57 @@ +--- +subcategory: "TencentDB for PostgreSQL(PostgreSQL)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_postgresql_time_window" +sidebar_current: "docs-tencentcloud-resource-postgresql_time_window" +description: |- + Provides a resource to create a postgres postgresql_time_window +--- + +# tencentcloud_postgresql_time_window + +Provides a resource to create a postgres postgresql_time_window + +## Example Usage + +```hcl +resource "tencentcloud_postgresql_time_window" "postgresql_time_window" { + db_instance_id = "postgres-45b0vlmr" + maintain_duration = 2 + maintain_start_time = "04:00" + maintain_week_days = [ + "friday", + "monday", + "saturday", + "sunday", + "thursday", + "tuesday", + "wednesday", + ] +} +``` + +## Argument Reference + +The following arguments are supported: + +* `db_instance_id` - (Required, String, ForceNew) Instance id. +* `maintain_duration` - (Optional, Int) Maintenance duration, Unit: hours. +* `maintain_start_time` - (Optional, String) Maintenance start time. Time zone is UTC+8. +* `maintain_week_days` - (Optional, Set: [`String`]) Maintenance cycle. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. + + + +## Import + +postgres postgresql_time_window can be imported using the id, e.g. + +``` +terraform import tencentcloud_postgresql_time_window.postgresql_time_window instance_id +``` + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 61010036c6..f16df042ba 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -6139,6 +6139,9 @@
  • tencentcloud_postgresql_security_group_config
  • +
  • + tencentcloud_postgresql_time_window +