From b9de1e34d24b17d35b5093cc2b92dcdc77329a75 Mon Sep 17 00:00:00 2001 From: arunma Date: Thu, 20 Mar 2025 15:52:44 +0800 Subject: [PATCH 1/2] feat(sqlserver): [122322345] support time_zone --- tencentcloud/provider.go | 1 + ...source_tc_sqlserver_collation_time_zone.go | 109 ++++++++++++++++++ ...source_tc_sqlserver_collation_time_zone.md | 9 ++ ...sqlserver_collation_time_zone_extension.go | 1 + ...e_tc_sqlserver_collation_time_zone_test.go | 36 ++++++ .../resource_tc_sqlserver_instance.go | 21 ++++ ...resource_tc_sqlserver_readonly_instance.go | 15 +++ .../service_tencentcloud_sqlserver.go | 39 +++++++ .../docs/r/sqlserver_instance.html.markdown | 1 + .../sqlserver_readonly_instance.html.markdown | 1 + 10 files changed, 233 insertions(+) create mode 100644 tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.go create mode 100644 tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.md create mode 100644 tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_extension.go create mode 100644 tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_test.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 06ce1bb2d1..f5b8a5538d 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -742,6 +742,7 @@ func Provider() *schema.Provider { "tencentcloud_sqlserver_backup_upload_size": sqlserver.DataSourceTencentCloudSqlserverBackupUploadSize(), "tencentcloud_sqlserver_cross_region_zone": sqlserver.DataSourceTencentCloudSqlserverCrossRegionZone(), "tencentcloud_sqlserver_db_charsets": sqlserver.DataSourceTencentCloudSqlserverDBCharsets(), + "tencentcloud_sqlserver_collation_time_zone": sqlserver.DataSourceTencentCloudSqlserverCollationTimeZone(), "tencentcloud_ckafka_users": ckafka.DataSourceTencentCloudCkafkaUsers(), "tencentcloud_ckafka_acls": ckafka.DataSourceTencentCloudCkafkaAcls(), "tencentcloud_ckafka_topics": ckafka.DataSourceTencentCloudCkafkaTopics(), diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.go new file mode 100644 index 0000000000..ff934d86fc --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.go @@ -0,0 +1,109 @@ +// Code generated by iacg; DO NOT EDIT. +package sqlserver + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + sqlserverv20180328 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudSqlserverCollationTimeZone() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudSqlserverCollationTimeZoneRead, + Schema: map[string]*schema.Schema{ + "machine_type": { + Type: schema.TypeString, + Optional: true, + Description: "The host type of the purchased instance, PM-physical machine, CLOUD_PREMIUM-cloud server high-performance cloud disk, CLOUD_SSD-cloud server SSD cloud disk, CLOUD_HSSD-cloud server enhanced SSD cloud disk, CLOUD_TSSD-cloud server ultra-fast SSD cloud disk, CLOUD_BSSD-cloud server general SSD cloud disk, CLOUD_BASIC-cloud server cloud hard disk, the default value is PM.", + }, + + "db_version": { + Type: schema.TypeString, + Optional: true, + Description: "Purchase instance version number.", + }, + + "collation": { + Type: schema.TypeList, + Computed: true, + Description: "List of system character set collations.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "time_zone": { + Type: schema.TypeList, + Computed: true, + Description: "System time zone list.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudSqlserverCollationTimeZoneRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_collation_time_zone.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("machine_type"); ok { + paramMap["MachineType"] = helper.String(v.(string)) + } + + if v, ok := d.GetOk("db_version"); ok { + paramMap["DBVersion"] = helper.String(v.(string)) + } + + var respData *sqlserverv20180328.DescribeCollationTimeZoneResponseParams + reqErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeSqlserverCollationTimeZoneByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + respData = result + return nil + }) + if reqErr != nil { + return reqErr + } + + ids := make([]*string, 0) + if respData.Collation != nil { + _ = d.Set("collation", respData.Collation) + ids = append(ids, respData.Collation...) + } + + if respData.TimeZone != nil { + _ = d.Set("time_zone", respData.TimeZone) + ids = append(ids, respData.TimeZone...) + } + + d.SetId(helper.DataResourceIdsHash([]string{helper.StrListToStr(ids)})) + + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), d); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.md b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.md new file mode 100644 index 0000000000..cf4e66d3e8 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of sqlserver datasource_collation_time_zone + +Example Usage + +```hcl +data "tencentcloud_sqlserver_collation_time_zone" "sqlserver_collation_time_zone" { + machine_type = "CLOUD_PREMIUM" +} +``` \ No newline at end of file diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_extension.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_extension.go new file mode 100644 index 0000000000..accce67603 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_extension.go @@ -0,0 +1 @@ +package sqlserver diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_test.go new file mode 100644 index 0000000000..d8c29cc247 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_collation_time_zone_test.go @@ -0,0 +1,36 @@ +package sqlserver_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +var testAccSqlserverCollationTimeZoneDataSourceName = "data.tencentcloud_sqlserver_collation_time_zone.sqlserver_collation_time_zone" + +func TestAccTencentCloudSqlserverCollationTimeZoneDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataSqlserverBasicInstancesBasic, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(testAccSqlserverCollationTimeZoneDataSourceName, "name"), + resource.TestCheckResourceAttrSet(testAccSqlserverCollationTimeZoneDataSourceName, "collation.#"), + resource.TestCheckResourceAttrSet(testAccSqlserverCollationTimeZoneDataSourceName, "time_zone.#"), + ), + }, + }, + }) +} + +const testAccSqlserverCollationTimeZoneDataSource = ` + +data "tencentcloud_sqlserver_collation_time_zone" "sqlserver_collation_time_zone" { +} +` diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go index fc9ebe42d4..13aa328493 100644 --- a/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go @@ -87,6 +87,12 @@ func TencentSqlServerBasicInfo(isROInstance bool) map[string]*schema.Schema { }, Description: "Security group bound to the instance.", }, + "time_zone": { + Type: schema.TypeString, + Computed: true, + Optional: true, + Description: "System time zone, default: `China Standard Time`.", + }, //Computed values "ro_flag": { Type: schema.TypeString, @@ -317,6 +323,10 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in request.SecurityGroupList = append(request.SecurityGroupList, &v) } + if v, ok := d.GetOk("time_zone"); ok { + request.TimeZone = helper.String(v.(string)) + } + request.GoodsNum = helper.IntInt64(1) request.Zone = &zone @@ -511,6 +521,13 @@ func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta in ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) d.Partial(true) + immutableArgs := []string{"time_zone"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + //basic info update if err := sqlServerAllInstanceRoleUpdate(ctx, d, meta); err != nil { return err @@ -655,6 +672,10 @@ func tencentSqlServerBasicInfoRead(ctx context.Context, d *schema.ResourceData, _ = d.Set("vip", instance.Vip) _ = d.Set("vport", instance.Vport) _ = d.Set("security_groups", securityGroup) + + if instance.TimeZone != nil { + _ = d.Set("time_zone", instance.TimeZone) + } return } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go index b7d4e20396..ba2f5a2f36 100644 --- a/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go @@ -200,6 +200,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, request.VoucherIds = helper.InterfacesStringsPoint(v) } + if v, ok := d.GetOk("time_zone"); ok { + request.TimeZone = helper.String(v.(string)) + } + var instanceId string var outErr, inErr error @@ -299,6 +303,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceRead(d *schema.ResourceData, m } } + if instance.TimeZone != nil { + _ = d.Set("time_zone", instance.TimeZone) + } + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, d.Id()) @@ -316,6 +324,13 @@ func resourceTencentCloudSqlserverReadonlyInstanceUpdate(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + immutableArgs := []string{"time_zone"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + //basic info update if err := sqlServerAllInstanceRoleUpdate(ctx, d, meta); err != nil { return err diff --git a/tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go b/tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go index 8c263ca8f1..fd1f0dfcff 100644 --- a/tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go +++ b/tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go @@ -13,6 +13,7 @@ import ( "github.com/pkg/errors" SDKErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + sqlserverv20180328 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -3458,3 +3459,41 @@ func (me *SqlserverService) DescribeSqlserverDescHaLogByFilter(ctx context.Conte descHaLog = response.Response.SwitchLog return } + +func (me *SqlserverService) DescribeSqlserverCollationTimeZoneByFilter(ctx context.Context, param map[string]interface{}) (ret *sqlserverv20180328.DescribeCollationTimeZoneResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = sqlserver.NewDescribeCollationTimeZoneRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "MachineType" { + request.MachineType = v.(*string) + } + if k == "DBVersion" { + request.DBVersion = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSqlserverClient().DescribeCollationTimeZone(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil { + return + } + + ret = response.Response + return +} diff --git a/website/docs/r/sqlserver_instance.html.markdown b/website/docs/r/sqlserver_instance.html.markdown index ec70f55cd5..fead2599a8 100644 --- a/website/docs/r/sqlserver_instance.html.markdown +++ b/website/docs/r/sqlserver_instance.html.markdown @@ -65,6 +65,7 @@ The following arguments are supported: * `security_groups` - (Optional, Set: [`String`]) Security group bound to the instance. * `subnet_id` - (Optional, String) ID of subnet. * `tags` - (Optional, Map) The tags of the SQL Server. +* `time_zone` - (Optional, String) System time zone, default: `China Standard Time`. * `voucher_ids` - (Optional, Set: [`String`]) An array of voucher IDs, currently only one can be used for a single order. * `vpc_id` - (Optional, String) ID of VPC. * `wait_switch` - (Optional, Int, **Deprecated**) It has been deprecated from version 1.81.2. The way to execute the allocation. Supported values include: 0 - execute immediately, 1 - execute in maintenance window. diff --git a/website/docs/r/sqlserver_readonly_instance.html.markdown b/website/docs/r/sqlserver_readonly_instance.html.markdown index 6fe402a48b..f157fb4097 100644 --- a/website/docs/r/sqlserver_readonly_instance.html.markdown +++ b/website/docs/r/sqlserver_readonly_instance.html.markdown @@ -89,6 +89,7 @@ The following arguments are supported: * `security_groups` - (Optional, Set: [`String`]) Security group bound to the instance. * `subnet_id` - (Optional, String) ID of subnet. * `tags` - (Optional, Map) The tags of the SQL Server. +* `time_zone` - (Optional, String) System time zone, default: `China Standard Time`. * `voucher_ids` - (Optional, Set: [`String`]) An array of voucher IDs, currently only one can be used for a single order. * `vpc_id` - (Optional, String) ID of VPC. * `wait_switch` - (Optional, Int, **Deprecated**) It has been deprecated from version 1.81.2. The way to execute the allocation. Supported values include: 0 - execute immediately, 1 - execute in maintenance window. From e63df7bccec6ab7dd38982b965fa4791fd93b661 Mon Sep 17 00:00:00 2001 From: arunma Date: Thu, 20 Mar 2025 16:08:13 +0800 Subject: [PATCH 2/2] feat: add changelog --- .changelog/3228.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changelog/3228.txt diff --git a/.changelog/3228.txt b/.changelog/3228.txt new file mode 100644 index 0000000000..93242235f3 --- /dev/null +++ b/.changelog/3228.txt @@ -0,0 +1,11 @@ +```release-note:enhancement +resource/tencentcloud_sqlserver_instance: Support time_zone field. +``` + +```release-note:enhancement +resource/tencentcloud_sqlserver_readonly_instance: Support time_zone field. +``` + +```release-note:new-data-source +tencentcloud_sqlserver_collation_time_zone +``` \ No newline at end of file