diff --git a/.changelog/3230.txt b/.changelog/3230.txt new file mode 100644 index 0000000000..90467ce6b8 --- /dev/null +++ b/.changelog/3230.txt @@ -0,0 +1,11 @@ +```release-note:enhancement +resource/tencentcloud_dts_migrate_service: Optimize deletion logic +``` + +```release-note:enhancement +resource/tencentcloud_dts_sync_job: Optimize deletion logic +``` + +```release-note:enhancement +resource/tencentcloud_dts_sync_job: Optimize update logic +``` \ No newline at end of file diff --git a/tencentcloud/services/dts/resource_tc_dts_migrate_job.md b/tencentcloud/services/dts/resource_tc_dts_migrate_job.md index 0022acae79..d8e8c36c33 100644 --- a/tencentcloud/services/dts/resource_tc_dts_migrate_job.md +++ b/tencentcloud/services/dts/resource_tc_dts_migrate_job.md @@ -1,121 +1,125 @@ -Provides a resource to create a dts migrate_job +Provides a resource to create a DTS migrate job Example Usage ```hcl -resource "tencentcloud_cynosdb_cluster" "foo" { - available_zone = var.availability_zone - vpc_id = local.vpc_id - subnet_id = local.subnet_id - db_type = "MYSQL" - db_version = "5.7" - storage_limit = 1000 - cluster_name = "tf-cynosdb-mysql" - password = "cynos@123" - instance_maintain_duration = 3600 - instance_maintain_start_time = 10800 - instance_maintain_weekdays = [ - "Fri", - "Mon", - "Sat", - "Sun", - "Thu", - "Wed", - "Tue", - ] +resource "tencentcloud_mysql_instance" "example" { + instance_name = "tf-example" + internet_service = 1 + engine_version = "5.7" + charge_type = "POSTPAID" + root_password = "PassWord@123" + slave_deploy_mode = 0 + slave_sync_mode = 1 + availability_zone = "ap-guangzhou-7" + mem_size = 128000 + volume_size = 250 + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + intranet_port = 3306 + security_groups = ["sg-e6a8xxib"] + parameters = { + character_set_server = "utf8" + max_connections = "1000" + } + tags = { + createBy = "Terraform" + } +} - instance_cpu_core = 1 - instance_memory_size = 2 - param_items { - name = "character_set_server" - current_value = "utf8" - } - param_items { - name = "time_zone" - current_value = "+09:00" - } - param_items { - name = "lower_case_table_names" - current_value = "1" - } +resource "tencentcloud_cynosdb_cluster" "example" { + cluster_name = "tf-example" + db_mode = "NORMAL" + db_type = "MYSQL" + db_version = "5.7" + port = 3306 + password = "Password@123" + force_delete = true + available_zone = "ap-guangzhou-6" + slave_zone = "ap-guangzhou-7" + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + instance_cpu_core = 2 + instance_memory_size = 4 + instance_maintain_duration = 7200 + instance_maintain_start_time = 3600 + instance_maintain_weekdays = [ + "Fri", + "Mon", + "Sat", + "Sun", + "Thu", + "Wed", + "Tue", + ] - force_delete = true + rw_group_sg = ["sg-e6a8xxib"] + ro_group_sg = ["sg-e6a8xxib"] +} - rw_group_sg = [ - local.sg_id - ] - ro_group_sg = [ - local.sg_id - ] - prarm_template_id = var.my_param_template +resource "tencentcloud_dts_migrate_service" "example" { + src_database_type = "mysql" + dst_database_type = "cynosdbmysql" + src_region = "ap-guangzhou" + dst_region = "ap-guangzhou" + instance_class = "small" + job_name = "tf-example" + tags { + tag_key = "createBy" + tag_value = "Terraform" } +} -resource "tencentcloud_dts_migrate_service" "service" { - src_database_type = "mysql" - dst_database_type = "cynosdbmysql" - src_region = "ap-guangzhou" - dst_region = "ap-guangzhou" - instance_class = "small" - job_name = "tf_test_migration_service_1" - tags { - tag_key = "aaa" - tag_value = "bbb" - } +resource "tencentcloud_dts_migrate_job" "example" { + service_id = tencentcloud_dts_migrate_service.example.id + run_mode = "immediate" + auto_retry_time_range_minutes = 0 + migrate_option { + database_table { + object_mode = "partial" + databases { + db_name = "db_name" + db_mode = "partial" + table_mode = "partial" + tables { + table_name = "table_name" + new_table_name = "new_table_name" + table_edit_mode = "rename" + } + } + } } -resource "tencentcloud_dts_migrate_job" "job" { - service_id = tencentcloud_dts_migrate_service.service.id - run_mode = "immediate" - migrate_option { - database_table { - object_mode = "partial" - databases { - db_name = "tf_ci_test" - db_mode = "partial" - table_mode = "partial" - tables { - table_name = "test" - new_table_name = "test_%s" - table_edit_mode = "rename" - } - } - } - } - src_info { - region = "ap-guangzhou" - access_type = "cdb" - database_type = "mysql" - node_type = "simple" - info { - user = "user_name" - password = "your_pw" - instance_id = "cdb-fitq5t9h" - } - - } - dst_info { - region = "ap-guangzhou" - access_type = "cdb" - database_type = "cynosdbmysql" - node_type = "simple" - info { - user = "user_name" - password = "your_pw" - instance_id = tencentcloud_cynosdb_cluster.foo.id - } - } - auto_retry_time_range_minutes = 0 -} + src_info { + region = "ap-guangzhou" + access_type = "cdb" + database_type = "mysql" + node_type = "simple" + info { + user = "root" + password = "Password@123" + instance_id = tencentcloud_mysql_instance.example.id + } + } -resource "tencentcloud_dts_migrate_job_start_operation" "start"{ - job_id = tencentcloud_dts_migrate_job.job.id + dst_info { + region = "ap-guangzhou" + access_type = "cdb" + database_type = "cynosdbmysql" + node_type = "simple" + info { + user = "root" + password = "Password@123" + instance_id = tencentcloud_cynosdb_cluster.example.id + } + } } ``` Import -dts migrate_job can be imported using the id, e.g. +DTS migrate job can be imported using the id, e.g. ``` -terraform import tencentcloud_dts_migrate_job.migrate_job migrate_config_id +terraform import tencentcloud_dts_migrate_job.example dts-iy98oxba ``` \ No newline at end of file diff --git a/tencentcloud/services/dts/resource_tc_dts_migrate_job_resume_operation.md b/tencentcloud/services/dts/resource_tc_dts_migrate_job_resume_operation.md index ec7fe4e60e..f5de11abb2 100644 --- a/tencentcloud/services/dts/resource_tc_dts_migrate_job_resume_operation.md +++ b/tencentcloud/services/dts/resource_tc_dts_migrate_job_resume_operation.md @@ -1,10 +1,10 @@ -Provides a resource to create a dts migrate_job_resume_operation +Provides a resource to create a DTS migrate job resume operation Example Usage ```hcl -resource "tencentcloud_dts_migrate_job_resume_operation" "resume" { - job_id = "job_id" - resume_option = "normal" +resource "tencentcloud_dts_migrate_job_resume_operation" "example" { + job_id = "dts-puwyj5uy" + resume_option = "normal" } ``` \ No newline at end of file diff --git a/tencentcloud/services/dts/resource_tc_dts_migrate_job_start_operation.md b/tencentcloud/services/dts/resource_tc_dts_migrate_job_start_operation.md index c25093b7a6..3bb53359ad 100644 --- a/tencentcloud/services/dts/resource_tc_dts_migrate_job_start_operation.md +++ b/tencentcloud/services/dts/resource_tc_dts_migrate_job_start_operation.md @@ -1,9 +1,121 @@ -Provides a resource to start a dts migrate_job +Provides a resource to start a DTS migrate job Example Usage ```hcl -resource "tencentcloud_dts_migrate_job_start_operation" "start"{ - job_id = tencentcloud_dts_migrate_job.job.id +resource "tencentcloud_mysql_instance" "example" { + instance_name = "tf-example" + internet_service = 1 + engine_version = "5.7" + charge_type = "POSTPAID" + root_password = "PassWord@123" + slave_deploy_mode = 0 + slave_sync_mode = 1 + availability_zone = "ap-guangzhou-7" + mem_size = 128000 + volume_size = 250 + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + intranet_port = 3306 + security_groups = ["sg-e6a8xxib"] + parameters = { + character_set_server = "utf8" + max_connections = "1000" + } + tags = { + createBy = "Terraform" + } +} + +resource "tencentcloud_cynosdb_cluster" "example" { + cluster_name = "tf-example" + db_mode = "NORMAL" + db_type = "MYSQL" + db_version = "5.7" + port = 3306 + password = "Password@123" + force_delete = true + available_zone = "ap-guangzhou-6" + slave_zone = "ap-guangzhou-7" + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + instance_cpu_core = 2 + instance_memory_size = 4 + instance_maintain_duration = 7200 + instance_maintain_start_time = 3600 + instance_maintain_weekdays = [ + "Fri", + "Mon", + "Sat", + "Sun", + "Thu", + "Wed", + "Tue", + ] + + rw_group_sg = ["sg-e6a8xxib"] + ro_group_sg = ["sg-e6a8xxib"] +} + +resource "tencentcloud_dts_migrate_service" "example" { + src_database_type = "mysql" + dst_database_type = "cynosdbmysql" + src_region = "ap-guangzhou" + dst_region = "ap-guangzhou" + instance_class = "small" + job_name = "tf-example" + tags { + tag_key = "createBy" + tag_value = "Terraform" + } +} + +resource "tencentcloud_dts_migrate_job" "example" { + service_id = tencentcloud_dts_migrate_service.example.id + run_mode = "immediate" + auto_retry_time_range_minutes = 0 + migrate_option { + database_table { + object_mode = "partial" + databases { + db_name = "db_name" + db_mode = "partial" + table_mode = "partial" + tables { + table_name = "table_name" + new_table_name = "new_table_name" + table_edit_mode = "rename" + } + } + } + } + + src_info { + region = "ap-guangzhou" + access_type = "cdb" + database_type = "mysql" + node_type = "simple" + info { + user = "root" + password = "Password@123" + instance_id = tencentcloud_mysql_instance.example.id + } + } + + dst_info { + region = "ap-guangzhou" + access_type = "cdb" + database_type = "cynosdbmysql" + node_type = "simple" + info { + user = "root" + password = "Password@123" + instance_id = tencentcloud_cynosdb_cluster.example.id + } + } +} + +resource "tencentcloud_dts_migrate_job_start_operation" "example" { + job_id = tencentcloud_dts_migrate_job.example.id } ``` \ No newline at end of file diff --git a/tencentcloud/services/dts/resource_tc_dts_migrate_service.go b/tencentcloud/services/dts/resource_tc_dts_migrate_service.go index 458830aced..ab4c1d960c 100644 --- a/tencentcloud/services/dts/resource_tc_dts_migrate_service.go +++ b/tencentcloud/services/dts/resource_tc_dts_migrate_service.go @@ -157,7 +157,8 @@ func resourceTencentCloudDtsMigrateServiceCreate(d *schema.ResourceData, meta in jobId = *response.Response.JobIds[0] // wait created - if err = service.PollingMigrateJobStatusUntil(ctx, jobId, DTSJobStatus, []string{"created"}); err != nil { + _, err = service.PollingMigrateJobStatusUntil(ctx, jobId, DTSJobStatus, []string{"created"}) + if err != nil { return err } diff --git a/tencentcloud/services/dts/resource_tc_dts_migrate_service.md b/tencentcloud/services/dts/resource_tc_dts_migrate_service.md index 24e5a75d33..0ef7b7a77b 100644 --- a/tencentcloud/services/dts/resource_tc_dts_migrate_service.md +++ b/tencentcloud/services/dts/resource_tc_dts_migrate_service.md @@ -1,25 +1,24 @@ -Provides a resource to create a dts migrate_service +Provides a resource to create a DTS migrate service Example Usage ```hcl -resource "tencentcloud_dts_migrate_service" "migrate_service" { +resource "tencentcloud_dts_migrate_service" "example" { src_database_type = "mysql" dst_database_type = "cynosdbmysql" - src_region = "ap-guangzhou" - dst_region = "ap-guangzhou" - instance_class = "small" - job_name = "tf_test_migration_job" + src_region = "ap-guangzhou" + dst_region = "ap-guangzhou" + instance_class = "small" + job_name = "tf-example" tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "createBy" + tag_value = "Terraform" } } - ``` Import -dts migrate_service can be imported using the id, e.g. +DTS migrate service can be imported using the id, e.g. ``` -$ terraform import tencentcloud_dts_migrate_service.migrate_service migrateService_id +$ terraform import tencentcloud_dts_migrate_service.example dts-iy98oxba ``` \ No newline at end of file diff --git a/tencentcloud/services/dts/resource_tc_dts_sync_config.go b/tencentcloud/services/dts/resource_tc_dts_sync_config.go index 416c0231e5..173a308d93 100644 --- a/tencentcloud/services/dts/resource_tc_dts_sync_config.go +++ b/tencentcloud/services/dts/resource_tc_dts_sync_config.go @@ -1152,407 +1152,385 @@ func resourceTencentCloudDtsSyncConfigUpdate(d *schema.ResourceData, meta interf request.JobId = &jobId - if d.HasChange("src_access_type") { - if v, ok := d.GetOk("src_access_type"); ok { - request.SrcAccessType = helper.String(v.(string)) - } + if v, ok := d.GetOk("src_access_type"); ok { + request.SrcAccessType = helper.String(v.(string)) } - if d.HasChange("dst_access_type") { - if v, ok := d.GetOk("dst_access_type"); ok { - request.DstAccessType = helper.String(v.(string)) - } + if v, ok := d.GetOk("dst_access_type"); ok { + request.DstAccessType = helper.String(v.(string)) } - if d.HasChange("options") { - if dMap, ok := helper.InterfacesHeadMap(d, "options"); ok { - options := dts.Options{} - if v, ok := dMap["init_type"]; ok { - options.InitType = helper.String(v.(string)) - } - if v, ok := dMap["deal_of_exist_same_table"]; ok { - options.DealOfExistSameTable = helper.String(v.(string)) + if dMap, ok := helper.InterfacesHeadMap(d, "options"); ok { + options := dts.Options{} + if v, ok := dMap["init_type"]; ok { + options.InitType = helper.String(v.(string)) + } + if v, ok := dMap["deal_of_exist_same_table"]; ok { + options.DealOfExistSameTable = helper.String(v.(string)) + } + if v, ok := dMap["conflict_handle_type"]; ok { + options.ConflictHandleType = helper.String(v.(string)) + } + if v, ok := dMap["add_additional_column"]; ok { + options.AddAdditionalColumn = helper.Bool(v.(bool)) + } + if v, ok := dMap["op_types"]; ok { + opTypesSet := v.(*schema.Set).List() + for i := range opTypesSet { + if opTypesSet[i] != nil { + opTypes := opTypesSet[i].(string) + options.OpTypes = append(options.OpTypes, &opTypes) + } } - if v, ok := dMap["conflict_handle_type"]; ok { - options.ConflictHandleType = helper.String(v.(string)) + } + if conflictHandleOptionMap, ok := helper.InterfaceToMap(dMap, "conflict_handle_option"); ok { + conflictHandleOption := dts.ConflictHandleOption{} + if v, ok := conflictHandleOptionMap["condition_column"]; ok { + conflictHandleOption.ConditionColumn = helper.String(v.(string)) } - if v, ok := dMap["add_additional_column"]; ok { - options.AddAdditionalColumn = helper.Bool(v.(bool)) + if v, ok := conflictHandleOptionMap["condition_operator"]; ok { + conflictHandleOption.ConditionOperator = helper.String(v.(string)) } - if v, ok := dMap["op_types"]; ok { - opTypesSet := v.(*schema.Set).List() - for i := range opTypesSet { - if opTypesSet[i] != nil { - opTypes := opTypesSet[i].(string) - options.OpTypes = append(options.OpTypes, &opTypes) - } - } + if v, ok := conflictHandleOptionMap["condition_order_in_src_and_dst"]; ok { + conflictHandleOption.ConditionOrderInSrcAndDst = helper.String(v.(string)) } - if conflictHandleOptionMap, ok := helper.InterfaceToMap(dMap, "conflict_handle_option"); ok { - conflictHandleOption := dts.ConflictHandleOption{} - if v, ok := conflictHandleOptionMap["condition_column"]; ok { - conflictHandleOption.ConditionColumn = helper.String(v.(string)) - } - if v, ok := conflictHandleOptionMap["condition_operator"]; ok { - conflictHandleOption.ConditionOperator = helper.String(v.(string)) - } - if v, ok := conflictHandleOptionMap["condition_order_in_src_and_dst"]; ok { - conflictHandleOption.ConditionOrderInSrcAndDst = helper.String(v.(string)) + options.ConflictHandleOption = &conflictHandleOption + } + if v, ok := dMap["ddl_options"]; ok { + for _, item := range v.([]interface{}) { + ddlOptionsMap := item.(map[string]interface{}) + ddlOption := dts.DdlOption{} + if v, ok := ddlOptionsMap["ddl_object"]; ok { + ddlOption.DdlObject = helper.String(v.(string)) } - options.ConflictHandleOption = &conflictHandleOption - } - if v, ok := dMap["ddl_options"]; ok { - for _, item := range v.([]interface{}) { - ddlOptionsMap := item.(map[string]interface{}) - ddlOption := dts.DdlOption{} - if v, ok := ddlOptionsMap["ddl_object"]; ok { - ddlOption.DdlObject = helper.String(v.(string)) - } - if v, ok := ddlOptionsMap["ddl_value"]; ok { - ddlValueSet := v.(*schema.Set).List() - for i := range ddlValueSet { - if ddlValueSet[i] != nil { - ddlValue := ddlValueSet[i].(string) - ddlOption.DdlValue = append(ddlOption.DdlValue, &ddlValue) - } + if v, ok := ddlOptionsMap["ddl_value"]; ok { + ddlValueSet := v.(*schema.Set).List() + for i := range ddlValueSet { + if ddlValueSet[i] != nil { + ddlValue := ddlValueSet[i].(string) + ddlOption.DdlValue = append(ddlOption.DdlValue, &ddlValue) } } - options.DdlOptions = append(options.DdlOptions, &ddlOption) } + options.DdlOptions = append(options.DdlOptions, &ddlOption) } - request.Options = &options } + request.Options = &options } - if d.HasChange("objects") { - if dMap, ok := helper.InterfacesHeadMap(d, "objects"); ok { - objects := dts.Objects{} - if v, ok := dMap["mode"]; ok { - objects.Mode = helper.String(v.(string)) - } - if v, ok := dMap["databases"]; ok { - for _, item := range v.([]interface{}) { - databasesMap := item.(map[string]interface{}) - database := dts.Database{} - if v, ok := databasesMap["db_name"]; ok { - database.DbName = helper.String(v.(string)) - } - if v, ok := databasesMap["new_db_name"]; ok { - database.NewDbName = helper.String(v.(string)) - } - if v, ok := databasesMap["db_mode"]; ok { - database.DbMode = helper.String(v.(string)) - } - if v, ok := databasesMap["schema_name"]; ok { - database.SchemaName = helper.String(v.(string)) - } - if v, ok := databasesMap["new_schema_name"]; ok { - database.NewSchemaName = helper.String(v.(string)) - } - if v, ok := databasesMap["table_mode"]; ok { - database.TableMode = helper.String(v.(string)) - } - if v, ok := databasesMap["tables"]; ok { - for _, item := range v.([]interface{}) { - tablesMap := item.(map[string]interface{}) - table := dts.Table{} - if v, ok := tablesMap["table_name"]; ok { - table.TableName = helper.String(v.(string)) - } - if v, ok := tablesMap["new_table_name"]; ok { - table.NewTableName = helper.String(v.(string)) - } - if v, ok := tablesMap["filter_condition"]; ok { - table.FilterCondition = helper.String(v.(string)) - } - database.Tables = append(database.Tables, &table) + if dMap, ok := helper.InterfacesHeadMap(d, "objects"); ok { + objects := dts.Objects{} + if v, ok := dMap["mode"]; ok { + objects.Mode = helper.String(v.(string)) + } + if v, ok := dMap["databases"]; ok { + for _, item := range v.([]interface{}) { + databasesMap := item.(map[string]interface{}) + database := dts.Database{} + if v, ok := databasesMap["db_name"]; ok { + database.DbName = helper.String(v.(string)) + } + if v, ok := databasesMap["new_db_name"]; ok { + database.NewDbName = helper.String(v.(string)) + } + if v, ok := databasesMap["db_mode"]; ok { + database.DbMode = helper.String(v.(string)) + } + if v, ok := databasesMap["schema_name"]; ok { + database.SchemaName = helper.String(v.(string)) + } + if v, ok := databasesMap["new_schema_name"]; ok { + database.NewSchemaName = helper.String(v.(string)) + } + if v, ok := databasesMap["table_mode"]; ok { + database.TableMode = helper.String(v.(string)) + } + if v, ok := databasesMap["tables"]; ok { + for _, item := range v.([]interface{}) { + tablesMap := item.(map[string]interface{}) + table := dts.Table{} + if v, ok := tablesMap["table_name"]; ok { + table.TableName = helper.String(v.(string)) } - } - if v, ok := databasesMap["view_mode"]; ok { - database.ViewMode = helper.String(v.(string)) - } - if v, ok := databasesMap["views"]; ok { - for _, item := range v.([]interface{}) { - viewsMap := item.(map[string]interface{}) - view := dts.View{} - if v, ok := viewsMap["view_name"]; ok { - view.ViewName = helper.String(v.(string)) - } - if v, ok := viewsMap["new_view_name"]; ok { - view.NewViewName = helper.String(v.(string)) - } - database.Views = append(database.Views, &view) + if v, ok := tablesMap["new_table_name"]; ok { + table.NewTableName = helper.String(v.(string)) } - } - if v, ok := databasesMap["function_mode"]; ok { - database.FunctionMode = helper.String(v.(string)) - } - if v, ok := databasesMap["functions"]; ok { - functionsSet := v.(*schema.Set).List() - for i := range functionsSet { - if functionsSet[i] != nil { - functions := functionsSet[i].(string) - database.Functions = append(database.Functions, &functions) - } + if v, ok := tablesMap["filter_condition"]; ok { + table.FilterCondition = helper.String(v.(string)) } + database.Tables = append(database.Tables, &table) } - if v, ok := databasesMap["procedure_mode"]; ok { - database.ProcedureMode = helper.String(v.(string)) - } - if v, ok := databasesMap["procedures"]; ok { - proceduresSet := v.(*schema.Set).List() - for i := range proceduresSet { - if proceduresSet[i] != nil { - procedures := proceduresSet[i].(string) - database.Procedures = append(database.Procedures, &procedures) - } + } + if v, ok := databasesMap["view_mode"]; ok { + database.ViewMode = helper.String(v.(string)) + } + if v, ok := databasesMap["views"]; ok { + for _, item := range v.([]interface{}) { + viewsMap := item.(map[string]interface{}) + view := dts.View{} + if v, ok := viewsMap["view_name"]; ok { + view.ViewName = helper.String(v.(string)) } + if v, ok := viewsMap["new_view_name"]; ok { + view.NewViewName = helper.String(v.(string)) + } + database.Views = append(database.Views, &view) } - if v, ok := databasesMap["trigger_mode"]; ok { - database.TriggerMode = helper.String(v.(string)) - } - if v, ok := databasesMap["triggers"]; ok { - triggersSet := v.(*schema.Set).List() - for i := range triggersSet { - if triggersSet[i] != nil { - triggers := triggersSet[i].(string) - database.Triggers = append(database.Triggers, &triggers) - } + } + if v, ok := databasesMap["function_mode"]; ok { + database.FunctionMode = helper.String(v.(string)) + } + if v, ok := databasesMap["functions"]; ok { + functionsSet := v.(*schema.Set).List() + for i := range functionsSet { + if functionsSet[i] != nil { + functions := functionsSet[i].(string) + database.Functions = append(database.Functions, &functions) } } - if v, ok := databasesMap["event_mode"]; ok { - database.EventMode = helper.String(v.(string)) + } + if v, ok := databasesMap["procedure_mode"]; ok { + database.ProcedureMode = helper.String(v.(string)) + } + if v, ok := databasesMap["procedures"]; ok { + proceduresSet := v.(*schema.Set).List() + for i := range proceduresSet { + if proceduresSet[i] != nil { + procedures := proceduresSet[i].(string) + database.Procedures = append(database.Procedures, &procedures) + } } - if v, ok := databasesMap["events"]; ok { - eventsSet := v.(*schema.Set).List() - for i := range eventsSet { - if eventsSet[i] != nil { - events := eventsSet[i].(string) - database.Events = append(database.Events, &events) - } + } + if v, ok := databasesMap["trigger_mode"]; ok { + database.TriggerMode = helper.String(v.(string)) + } + if v, ok := databasesMap["triggers"]; ok { + triggersSet := v.(*schema.Set).List() + for i := range triggersSet { + if triggersSet[i] != nil { + triggers := triggersSet[i].(string) + database.Triggers = append(database.Triggers, &triggers) } } - objects.Databases = append(objects.Databases, &database) } - } - if v, ok := dMap["advanced_objects"]; ok { - advancedObjectsSet := v.(*schema.Set).List() - for i := range advancedObjectsSet { - if advancedObjectsSet[i] != nil { - advancedObjects := advancedObjectsSet[i].(string) - objects.AdvancedObjects = append(objects.AdvancedObjects, &advancedObjects) + if v, ok := databasesMap["event_mode"]; ok { + database.EventMode = helper.String(v.(string)) + } + if v, ok := databasesMap["events"]; ok { + eventsSet := v.(*schema.Set).List() + for i := range eventsSet { + if eventsSet[i] != nil { + events := eventsSet[i].(string) + database.Events = append(database.Events, &events) + } } } + objects.Databases = append(objects.Databases, &database) } - if onlineDDLMap, ok := helper.InterfaceToMap(dMap, "online_ddl"); ok { - onlineDDL := dts.OnlineDDL{} - if v, ok := onlineDDLMap["status"]; ok { - onlineDDL.Status = helper.String(v.(string)) + } + if v, ok := dMap["advanced_objects"]; ok { + advancedObjectsSet := v.(*schema.Set).List() + for i := range advancedObjectsSet { + if advancedObjectsSet[i] != nil { + advancedObjects := advancedObjectsSet[i].(string) + objects.AdvancedObjects = append(objects.AdvancedObjects, &advancedObjects) } - objects.OnlineDDL = &onlineDDL } - request.Objects = &objects } + if onlineDDLMap, ok := helper.InterfaceToMap(dMap, "online_ddl"); ok { + onlineDDL := dts.OnlineDDL{} + if v, ok := onlineDDLMap["status"]; ok { + onlineDDL.Status = helper.String(v.(string)) + } + objects.OnlineDDL = &onlineDDL + } + request.Objects = &objects } - if d.HasChange("job_name") { - if v, ok := d.GetOk("job_name"); ok { - request.JobName = helper.String(v.(string)) - } + if v, ok := d.GetOk("job_name"); ok { + request.JobName = helper.String(v.(string)) } - if d.HasChange("job_mode") { - if v, ok := d.GetOk("job_mode"); ok { - request.JobMode = helper.String(v.(string)) - } + if v, ok := d.GetOk("job_mode"); ok { + request.JobMode = helper.String(v.(string)) } - if d.HasChange("run_mode") { - if v, ok := d.GetOk("run_mode"); ok { - request.RunMode = helper.String(v.(string)) - } + if v, ok := d.GetOk("run_mode"); ok { + request.RunMode = helper.String(v.(string)) } - if d.HasChange("expect_run_time") { - if v, ok := d.GetOk("expect_run_time"); ok { - request.ExpectRunTime = helper.String(v.(string)) - } + if v, ok := d.GetOk("expect_run_time"); ok { + request.ExpectRunTime = helper.String(v.(string)) } - if d.HasChange("src_info") { - if dMap, ok := helper.InterfacesHeadMap(d, "src_info"); ok { - endpoint := dts.Endpoint{} - if v, ok := dMap["region"]; ok { - endpoint.Region = helper.String(v.(string)) - } - if v, ok := dMap["role"]; ok { - endpoint.Role = helper.String(v.(string)) - } - if v, ok := dMap["db_kernel"]; ok { - endpoint.DbKernel = helper.String(v.(string)) - } - if v, ok := dMap["instance_id"]; ok { - endpoint.InstanceId = helper.String(v.(string)) - } - if v, ok := dMap["ip"]; ok { - endpoint.Ip = helper.String(v.(string)) - } - if v, ok := dMap["port"]; ok { - endpoint.Port = helper.IntUint64(v.(int)) - } - if v, ok := dMap["user"]; ok { - endpoint.User = helper.String(v.(string)) - } - if v, ok := dMap["password"]; ok { - endpoint.Password = helper.String(v.(string)) - } - if v, ok := dMap["db_name"]; ok { - endpoint.DbName = helper.String(v.(string)) - } - if v, ok := dMap["vpc_id"]; ok { - endpoint.VpcId = helper.String(v.(string)) - } - if v, ok := dMap["subnet_id"]; ok { - endpoint.SubnetId = helper.String(v.(string)) - } - if v, ok := dMap["cvm_instance_id"]; ok { - endpoint.CvmInstanceId = helper.String(v.(string)) - } - if v, ok := dMap["uniq_dcg_id"]; ok { - endpoint.UniqDcgId = helper.String(v.(string)) - } - if v, ok := dMap["uniq_vpn_gw_id"]; ok { - endpoint.UniqVpnGwId = helper.String(v.(string)) - } - if v, ok := dMap["ccn_id"]; ok { - endpoint.CcnId = helper.String(v.(string)) - } - if v, ok := dMap["supplier"]; ok { - endpoint.Supplier = helper.String(v.(string)) - } - if v, ok := dMap["engine_version"]; ok { - endpoint.EngineVersion = helper.String(v.(string)) - } - if v, ok := dMap["account"]; ok { - endpoint.Account = helper.String(v.(string)) - } - if v, ok := dMap["account_mode"]; ok { - endpoint.AccountMode = helper.String(v.(string)) - } - if v, ok := dMap["account_role"]; ok { - endpoint.AccountRole = helper.String(v.(string)) - } - if v, ok := dMap["role_external_id"]; ok { - endpoint.RoleExternalId = helper.String(v.(string)) - } - if v, ok := dMap["tmp_secret_id"]; ok { - endpoint.TmpSecretId = helper.String(v.(string)) - } - if v, ok := dMap["tmp_secret_key"]; ok { - endpoint.TmpSecretKey = helper.String(v.(string)) - } - if v, ok := dMap["tmp_token"]; ok { - endpoint.TmpToken = helper.String(v.(string)) - } - if v, ok := dMap["encrypt_conn"]; ok { - endpoint.EncryptConn = helper.String(v.(string)) - } - if v, ok := dMap["database_net_env"]; ok { - endpoint.DatabaseNetEnv = helper.String(v.(string)) - } - request.SrcInfo = &endpoint + if dMap, ok := helper.InterfacesHeadMap(d, "src_info"); ok { + endpoint := dts.Endpoint{} + if v, ok := dMap["region"]; ok { + endpoint.Region = helper.String(v.(string)) + } + if v, ok := dMap["role"]; ok { + endpoint.Role = helper.String(v.(string)) + } + if v, ok := dMap["db_kernel"]; ok { + endpoint.DbKernel = helper.String(v.(string)) + } + if v, ok := dMap["instance_id"]; ok { + endpoint.InstanceId = helper.String(v.(string)) + } + if v, ok := dMap["ip"]; ok { + endpoint.Ip = helper.String(v.(string)) + } + if v, ok := dMap["port"]; ok { + endpoint.Port = helper.IntUint64(v.(int)) + } + if v, ok := dMap["user"]; ok { + endpoint.User = helper.String(v.(string)) + } + if v, ok := dMap["password"]; ok { + endpoint.Password = helper.String(v.(string)) + } + if v, ok := dMap["db_name"]; ok { + endpoint.DbName = helper.String(v.(string)) + } + if v, ok := dMap["vpc_id"]; ok { + endpoint.VpcId = helper.String(v.(string)) + } + if v, ok := dMap["subnet_id"]; ok { + endpoint.SubnetId = helper.String(v.(string)) + } + if v, ok := dMap["cvm_instance_id"]; ok { + endpoint.CvmInstanceId = helper.String(v.(string)) + } + if v, ok := dMap["uniq_dcg_id"]; ok { + endpoint.UniqDcgId = helper.String(v.(string)) + } + if v, ok := dMap["uniq_vpn_gw_id"]; ok { + endpoint.UniqVpnGwId = helper.String(v.(string)) + } + if v, ok := dMap["ccn_id"]; ok { + endpoint.CcnId = helper.String(v.(string)) + } + if v, ok := dMap["supplier"]; ok { + endpoint.Supplier = helper.String(v.(string)) + } + if v, ok := dMap["engine_version"]; ok { + endpoint.EngineVersion = helper.String(v.(string)) + } + if v, ok := dMap["account"]; ok { + endpoint.Account = helper.String(v.(string)) + } + if v, ok := dMap["account_mode"]; ok { + endpoint.AccountMode = helper.String(v.(string)) } + if v, ok := dMap["account_role"]; ok { + endpoint.AccountRole = helper.String(v.(string)) + } + if v, ok := dMap["role_external_id"]; ok { + endpoint.RoleExternalId = helper.String(v.(string)) + } + if v, ok := dMap["tmp_secret_id"]; ok { + endpoint.TmpSecretId = helper.String(v.(string)) + } + if v, ok := dMap["tmp_secret_key"]; ok { + endpoint.TmpSecretKey = helper.String(v.(string)) + } + if v, ok := dMap["tmp_token"]; ok { + endpoint.TmpToken = helper.String(v.(string)) + } + if v, ok := dMap["encrypt_conn"]; ok { + endpoint.EncryptConn = helper.String(v.(string)) + } + if v, ok := dMap["database_net_env"]; ok { + endpoint.DatabaseNetEnv = helper.String(v.(string)) + } + request.SrcInfo = &endpoint } - if d.HasChange("dst_info") { - if dMap, ok := helper.InterfacesHeadMap(d, "dst_info"); ok { - endpoint := dts.Endpoint{} - if v, ok := dMap["region"]; ok { - endpoint.Region = helper.String(v.(string)) - } - if v, ok := dMap["role"]; ok { - endpoint.Role = helper.String(v.(string)) - } - if v, ok := dMap["db_kernel"]; ok { - endpoint.DbKernel = helper.String(v.(string)) - } - if v, ok := dMap["instance_id"]; ok { - endpoint.InstanceId = helper.String(v.(string)) - } - if v, ok := dMap["ip"]; ok { - endpoint.Ip = helper.String(v.(string)) - } - if v, ok := dMap["port"]; ok { - endpoint.Port = helper.IntUint64(v.(int)) - } - if v, ok := dMap["user"]; ok { - endpoint.User = helper.String(v.(string)) - } - if v, ok := dMap["password"]; ok { - endpoint.Password = helper.String(v.(string)) - } - if v, ok := dMap["db_name"]; ok { - endpoint.DbName = helper.String(v.(string)) - } - if v, ok := dMap["vpc_id"]; ok { - endpoint.VpcId = helper.String(v.(string)) - } - if v, ok := dMap["subnet_id"]; ok { - endpoint.SubnetId = helper.String(v.(string)) - } - if v, ok := dMap["cvm_instance_id"]; ok { - endpoint.CvmInstanceId = helper.String(v.(string)) - } - if v, ok := dMap["uniq_dcg_id"]; ok { - endpoint.UniqDcgId = helper.String(v.(string)) - } - if v, ok := dMap["uniq_vpn_gw_id"]; ok { - endpoint.UniqVpnGwId = helper.String(v.(string)) - } - if v, ok := dMap["ccn_id"]; ok { - endpoint.CcnId = helper.String(v.(string)) - } - if v, ok := dMap["supplier"]; ok { - endpoint.Supplier = helper.String(v.(string)) - } - if v, ok := dMap["engine_version"]; ok { - endpoint.EngineVersion = helper.String(v.(string)) - } - if v, ok := dMap["account"]; ok { - endpoint.Account = helper.String(v.(string)) - } - if v, ok := dMap["account_mode"]; ok { - endpoint.AccountMode = helper.String(v.(string)) - } - if v, ok := dMap["account_role"]; ok { - endpoint.AccountRole = helper.String(v.(string)) - } - if v, ok := dMap["role_external_id"]; ok { - endpoint.RoleExternalId = helper.String(v.(string)) - } - if v, ok := dMap["tmp_secret_id"]; ok { - endpoint.TmpSecretId = helper.String(v.(string)) - } - if v, ok := dMap["tmp_secret_key"]; ok { - endpoint.TmpSecretKey = helper.String(v.(string)) - } - if v, ok := dMap["tmp_token"]; ok { - endpoint.TmpToken = helper.String(v.(string)) - } - if v, ok := dMap["encrypt_conn"]; ok { - endpoint.EncryptConn = helper.String(v.(string)) - } - if v, ok := dMap["database_net_env"]; ok { - endpoint.DatabaseNetEnv = helper.String(v.(string)) - } - request.DstInfo = &endpoint + if dMap, ok := helper.InterfacesHeadMap(d, "dst_info"); ok { + endpoint := dts.Endpoint{} + if v, ok := dMap["region"]; ok { + endpoint.Region = helper.String(v.(string)) + } + if v, ok := dMap["role"]; ok { + endpoint.Role = helper.String(v.(string)) + } + if v, ok := dMap["db_kernel"]; ok { + endpoint.DbKernel = helper.String(v.(string)) + } + if v, ok := dMap["instance_id"]; ok { + endpoint.InstanceId = helper.String(v.(string)) + } + if v, ok := dMap["ip"]; ok { + endpoint.Ip = helper.String(v.(string)) + } + if v, ok := dMap["port"]; ok { + endpoint.Port = helper.IntUint64(v.(int)) + } + if v, ok := dMap["user"]; ok { + endpoint.User = helper.String(v.(string)) + } + if v, ok := dMap["password"]; ok { + endpoint.Password = helper.String(v.(string)) } + if v, ok := dMap["db_name"]; ok { + endpoint.DbName = helper.String(v.(string)) + } + if v, ok := dMap["vpc_id"]; ok { + endpoint.VpcId = helper.String(v.(string)) + } + if v, ok := dMap["subnet_id"]; ok { + endpoint.SubnetId = helper.String(v.(string)) + } + if v, ok := dMap["cvm_instance_id"]; ok { + endpoint.CvmInstanceId = helper.String(v.(string)) + } + if v, ok := dMap["uniq_dcg_id"]; ok { + endpoint.UniqDcgId = helper.String(v.(string)) + } + if v, ok := dMap["uniq_vpn_gw_id"]; ok { + endpoint.UniqVpnGwId = helper.String(v.(string)) + } + if v, ok := dMap["ccn_id"]; ok { + endpoint.CcnId = helper.String(v.(string)) + } + if v, ok := dMap["supplier"]; ok { + endpoint.Supplier = helper.String(v.(string)) + } + if v, ok := dMap["engine_version"]; ok { + endpoint.EngineVersion = helper.String(v.(string)) + } + if v, ok := dMap["account"]; ok { + endpoint.Account = helper.String(v.(string)) + } + if v, ok := dMap["account_mode"]; ok { + endpoint.AccountMode = helper.String(v.(string)) + } + if v, ok := dMap["account_role"]; ok { + endpoint.AccountRole = helper.String(v.(string)) + } + if v, ok := dMap["role_external_id"]; ok { + endpoint.RoleExternalId = helper.String(v.(string)) + } + if v, ok := dMap["tmp_secret_id"]; ok { + endpoint.TmpSecretId = helper.String(v.(string)) + } + if v, ok := dMap["tmp_secret_key"]; ok { + endpoint.TmpSecretKey = helper.String(v.(string)) + } + if v, ok := dMap["tmp_token"]; ok { + endpoint.TmpToken = helper.String(v.(string)) + } + if v, ok := dMap["encrypt_conn"]; ok { + endpoint.EncryptConn = helper.String(v.(string)) + } + if v, ok := dMap["database_net_env"]; ok { + endpoint.DatabaseNetEnv = helper.String(v.(string)) + } + request.DstInfo = &endpoint } - if d.HasChange("auto_retry_time_range_minutes") { - if v, ok := d.GetOkExists("auto_retry_time_range_minutes"); ok { - request.AutoRetryTimeRangeMinutes = helper.IntInt64(v.(int)) - } + if v, ok := d.GetOkExists("auto_retry_time_range_minutes"); ok { + request.AutoRetryTimeRangeMinutes = helper.IntInt64(v.(int)) } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { diff --git a/tencentcloud/services/dts/resource_tc_dts_sync_job.go b/tencentcloud/services/dts/resource_tc_dts_sync_job.go index 7fe1b87988..1613b11ff7 100644 --- a/tencentcloud/services/dts/resource_tc_dts_sync_job.go +++ b/tencentcloud/services/dts/resource_tc_dts_sync_job.go @@ -307,12 +307,21 @@ func resourceTencentCloudDtsSyncJobDelete(d *schema.ResourceData, meta interface return err } - conf := tccommon.BuildStateChangeConf([]string{}, []string{"Isolated", "Stopped"}, 2*tccommon.ReadRetryTimeout, time.Second, service.DtsSyncJobConfigIsolateStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Isolated", "Stopped", "NotBilledByInternational", "NotBilled"}, 2*tccommon.ReadRetryTimeout, time.Second, service.DtsSyncJobConfigIsolateStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e } + syncConfig, e := service.DescribeDtsSyncConfigById(ctx, syncJobId) + if e != nil { + return e + } + + if syncConfig != nil && syncConfig.TradeStatus != nil && (*syncConfig.TradeStatus == "NotBilledByInternational" || *syncConfig.TradeStatus == "NotBilled") { + return nil + } + if err := service.DestroyDtsSyncJobById(ctx, syncJobId); err != nil { return err } diff --git a/tencentcloud/services/dts/resource_tc_dts_sync_job.md b/tencentcloud/services/dts/resource_tc_dts_sync_job.md index cfc0635ea0..53c7410ba2 100644 --- a/tencentcloud/services/dts/resource_tc_dts_sync_job.md +++ b/tencentcloud/services/dts/resource_tc_dts_sync_job.md @@ -1,20 +1,19 @@ -Provides a resource to create a dts sync_job +Provides a resource to create a DTS sync job Example Usage ```hcl -resource "tencentcloud_dts_sync_job" "sync_job" { - pay_mode = "PostPay" +resource "tencentcloud_dts_sync_job" "example" { + pay_mode = "PostPay" src_database_type = "mysql" - src_region = "ap-guangzhou" + src_region = "ap-guangzhou" dst_database_type = "cynosdbmysql" - dst_region = "ap-guangzhou" + dst_region = "ap-guangzhou" + auto_renew = 0 + instance_class = "micro" tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "createBy" + tag_value = "Terraform" } - auto_renew = 0 - instance_class = "micro" } - ``` \ No newline at end of file diff --git a/tencentcloud/services/dts/service_tencentcloud_dts.go b/tencentcloud/services/dts/service_tencentcloud_dts.go index 5d70cc7ed2..e8c03788c0 100644 --- a/tencentcloud/services/dts/service_tencentcloud_dts.go +++ b/tencentcloud/services/dts/service_tencentcloud_dts.go @@ -612,11 +612,15 @@ func (me *DtsService) DeleteDtsMigrateServiceById(ctx context.Context, jobId str return } - err = me.PollingMigrateJobStatusUntil(ctx, jobId, DTSTradeStatus, []string{"isolated"}) + stop, err := me.PollingMigrateJobStatusUntil(ctx, jobId, DTSTradeStatus, []string{"isolated", "noBilled"}) if err != nil { return err } + if stop { + return nil + } + ratelimit.Check(request.GetAction()) err = resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { request.JobId = helper.String(jobId) @@ -631,7 +635,7 @@ func (me *DtsService) DeleteDtsMigrateServiceById(ctx context.Context, jobId str return err } - err = me.PollingMigrateJobStatusUntil(ctx, jobId, DTSTradeStatus, []string{"offlined"}) + _, err = me.PollingMigrateJobStatusUntil(ctx, jobId, DTSTradeStatus, []string{"offlined"}) if err != nil { return err } @@ -642,10 +646,10 @@ func (me *DtsService) DeleteDtsMigrateServiceById(ctx context.Context, jobId str return } -func (me *DtsService) PollingMigrateJobStatusUntil(ctx context.Context, jobId, statusType string, targetStatus []string) error { +func (me *DtsService) PollingMigrateJobStatusUntil(ctx context.Context, jobId, statusType string, targetStatus []string) (stop bool, err error) { logId := tccommon.GetLogId(ctx) - err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { ret, err := me.DescribeDtsMigrateJobById(ctx, jobId) if err != nil { return tccommon.RetryError(err) @@ -656,6 +660,11 @@ func (me *DtsService) PollingMigrateJobStatusUntil(ctx context.Context, jobId, s status := *ret.Status for _, target := range targetStatus { if strings.Contains(target, status) { + if status == "noBilled" { + stop = true + return nil + } + return nil } } @@ -667,6 +676,11 @@ func (me *DtsService) PollingMigrateJobStatusUntil(ctx context.Context, jobId, s status := *ret.TradeInfo.TradeStatus for _, target := range targetStatus { if strings.Contains(target, status) { + if status == "noBilled" { + stop = true + return nil + } + return nil } } @@ -678,9 +692,9 @@ func (me *DtsService) PollingMigrateJobStatusUntil(ctx context.Context, jobId, s return nil }) if err != nil { - return err + return stop, err } - return nil + return stop, nil } func (me *DtsService) DescribeDtsMigrateServiceById(ctx context.Context, jobId string) (migrateService *dts.DescribeMigrationDetailResponseParams, errRet error) { diff --git a/website/docs/r/dts_migrate_job.html.markdown b/website/docs/r/dts_migrate_job.html.markdown index 29fc6b66f3..69c5f24558 100644 --- a/website/docs/r/dts_migrate_job.html.markdown +++ b/website/docs/r/dts_migrate_job.html.markdown @@ -4,27 +4,56 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_dts_migrate_job" sidebar_current: "docs-tencentcloud-resource-dts_migrate_job" description: |- - Provides a resource to create a dts migrate_job + Provides a resource to create a DTS migrate job --- # tencentcloud_dts_migrate_job -Provides a resource to create a dts migrate_job +Provides a resource to create a DTS migrate job ## Example Usage ```hcl -resource "tencentcloud_cynosdb_cluster" "foo" { - available_zone = var.availability_zone - vpc_id = local.vpc_id - subnet_id = local.subnet_id +resource "tencentcloud_mysql_instance" "example" { + instance_name = "tf-example" + internet_service = 1 + engine_version = "5.7" + charge_type = "POSTPAID" + root_password = "PassWord@123" + slave_deploy_mode = 0 + slave_sync_mode = 1 + availability_zone = "ap-guangzhou-7" + mem_size = 128000 + volume_size = 250 + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + intranet_port = 3306 + security_groups = ["sg-e6a8xxib"] + parameters = { + character_set_server = "utf8" + max_connections = "1000" + } + tags = { + createBy = "Terraform" + } +} + +resource "tencentcloud_cynosdb_cluster" "example" { + cluster_name = "tf-example" + db_mode = "NORMAL" db_type = "MYSQL" db_version = "5.7" - storage_limit = 1000 - cluster_name = "tf-cynosdb-mysql" - password = "cynos@123" - instance_maintain_duration = 3600 - instance_maintain_start_time = 10800 + port = 3306 + password = "Password@123" + force_delete = true + available_zone = "ap-guangzhou-6" + slave_zone = "ap-guangzhou-7" + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + instance_cpu_core = 2 + instance_memory_size = 4 + instance_maintain_duration = 7200 + instance_maintain_start_time = 3600 instance_maintain_weekdays = [ "Fri", "Mon", @@ -35,91 +64,66 @@ resource "tencentcloud_cynosdb_cluster" "foo" { "Tue", ] - instance_cpu_core = 1 - instance_memory_size = 2 - param_items { - name = "character_set_server" - current_value = "utf8" - } - param_items { - name = "time_zone" - current_value = "+09:00" - } - param_items { - name = "lower_case_table_names" - current_value = "1" - } - - force_delete = true - - rw_group_sg = [ - local.sg_id - ] - ro_group_sg = [ - local.sg_id - ] - prarm_template_id = var.my_param_template + rw_group_sg = ["sg-e6a8xxib"] + ro_group_sg = ["sg-e6a8xxib"] } -resource "tencentcloud_dts_migrate_service" "service" { +resource "tencentcloud_dts_migrate_service" "example" { src_database_type = "mysql" dst_database_type = "cynosdbmysql" src_region = "ap-guangzhou" dst_region = "ap-guangzhou" instance_class = "small" - job_name = "tf_test_migration_service_1" + job_name = "tf-example" tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "createBy" + tag_value = "Terraform" } } -resource "tencentcloud_dts_migrate_job" "job" { - service_id = tencentcloud_dts_migrate_service.service.id - run_mode = "immediate" +resource "tencentcloud_dts_migrate_job" "example" { + service_id = tencentcloud_dts_migrate_service.example.id + run_mode = "immediate" + auto_retry_time_range_minutes = 0 migrate_option { database_table { object_mode = "partial" databases { - db_name = "tf_ci_test" + db_name = "db_name" db_mode = "partial" table_mode = "partial" tables { - table_name = "test" - new_table_name = "test_%s" + table_name = "table_name" + new_table_name = "new_table_name" table_edit_mode = "rename" } } } } + src_info { region = "ap-guangzhou" access_type = "cdb" database_type = "mysql" node_type = "simple" info { - user = "user_name" - password = "your_pw" - instance_id = "cdb-fitq5t9h" + user = "root" + password = "Password@123" + instance_id = tencentcloud_mysql_instance.example.id } - } + dst_info { region = "ap-guangzhou" access_type = "cdb" database_type = "cynosdbmysql" node_type = "simple" info { - user = "user_name" - password = "your_pw" - instance_id = tencentcloud_cynosdb_cluster.foo.id + user = "root" + password = "Password@123" + instance_id = tencentcloud_cynosdb_cluster.example.id } } - auto_retry_time_range_minutes = 0 -} - -resource "tencentcloud_dts_migrate_job_start_operation" "start" { - job_id = tencentcloud_dts_migrate_job.job.id } ``` @@ -286,9 +290,9 @@ In addition to all arguments above, the following attributes are exported: ## Import -dts migrate_job can be imported using the id, e.g. +DTS migrate job can be imported using the id, e.g. ``` -terraform import tencentcloud_dts_migrate_job.migrate_job migrate_config_id +terraform import tencentcloud_dts_migrate_job.example dts-iy98oxba ``` diff --git a/website/docs/r/dts_migrate_job_resume_operation.html.markdown b/website/docs/r/dts_migrate_job_resume_operation.html.markdown index e5d4c112a1..454c69e95c 100644 --- a/website/docs/r/dts_migrate_job_resume_operation.html.markdown +++ b/website/docs/r/dts_migrate_job_resume_operation.html.markdown @@ -4,18 +4,18 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_dts_migrate_job_resume_operation" sidebar_current: "docs-tencentcloud-resource-dts_migrate_job_resume_operation" description: |- - Provides a resource to create a dts migrate_job_resume_operation + Provides a resource to create a DTS migrate job resume operation --- # tencentcloud_dts_migrate_job_resume_operation -Provides a resource to create a dts migrate_job_resume_operation +Provides a resource to create a DTS migrate job resume operation ## Example Usage ```hcl -resource "tencentcloud_dts_migrate_job_resume_operation" "resume" { - job_id = "job_id" +resource "tencentcloud_dts_migrate_job_resume_operation" "example" { + job_id = "dts-puwyj5uy" resume_option = "normal" } ``` diff --git a/website/docs/r/dts_migrate_job_start_operation.html.markdown b/website/docs/r/dts_migrate_job_start_operation.html.markdown index 59d0f7f826..54df3b46c9 100644 --- a/website/docs/r/dts_migrate_job_start_operation.html.markdown +++ b/website/docs/r/dts_migrate_job_start_operation.html.markdown @@ -4,18 +4,130 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_dts_migrate_job_start_operation" sidebar_current: "docs-tencentcloud-resource-dts_migrate_job_start_operation" description: |- - Provides a resource to start a dts migrate_job + Provides a resource to start a DTS migrate job --- # tencentcloud_dts_migrate_job_start_operation -Provides a resource to start a dts migrate_job +Provides a resource to start a DTS migrate job ## Example Usage ```hcl -resource "tencentcloud_dts_migrate_job_start_operation" "start" { - job_id = tencentcloud_dts_migrate_job.job.id +resource "tencentcloud_mysql_instance" "example" { + instance_name = "tf-example" + internet_service = 1 + engine_version = "5.7" + charge_type = "POSTPAID" + root_password = "PassWord@123" + slave_deploy_mode = 0 + slave_sync_mode = 1 + availability_zone = "ap-guangzhou-7" + mem_size = 128000 + volume_size = 250 + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + intranet_port = 3306 + security_groups = ["sg-e6a8xxib"] + parameters = { + character_set_server = "utf8" + max_connections = "1000" + } + tags = { + createBy = "Terraform" + } +} + +resource "tencentcloud_cynosdb_cluster" "example" { + cluster_name = "tf-example" + db_mode = "NORMAL" + db_type = "MYSQL" + db_version = "5.7" + port = 3306 + password = "Password@123" + force_delete = true + available_zone = "ap-guangzhou-6" + slave_zone = "ap-guangzhou-7" + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + instance_cpu_core = 2 + instance_memory_size = 4 + instance_maintain_duration = 7200 + instance_maintain_start_time = 3600 + instance_maintain_weekdays = [ + "Fri", + "Mon", + "Sat", + "Sun", + "Thu", + "Wed", + "Tue", + ] + + rw_group_sg = ["sg-e6a8xxib"] + ro_group_sg = ["sg-e6a8xxib"] +} + +resource "tencentcloud_dts_migrate_service" "example" { + src_database_type = "mysql" + dst_database_type = "cynosdbmysql" + src_region = "ap-guangzhou" + dst_region = "ap-guangzhou" + instance_class = "small" + job_name = "tf-example" + tags { + tag_key = "createBy" + tag_value = "Terraform" + } +} + +resource "tencentcloud_dts_migrate_job" "example" { + service_id = tencentcloud_dts_migrate_service.example.id + run_mode = "immediate" + auto_retry_time_range_minutes = 0 + migrate_option { + database_table { + object_mode = "partial" + databases { + db_name = "db_name" + db_mode = "partial" + table_mode = "partial" + tables { + table_name = "table_name" + new_table_name = "new_table_name" + table_edit_mode = "rename" + } + } + } + } + + src_info { + region = "ap-guangzhou" + access_type = "cdb" + database_type = "mysql" + node_type = "simple" + info { + user = "root" + password = "Password@123" + instance_id = tencentcloud_mysql_instance.example.id + } + } + + dst_info { + region = "ap-guangzhou" + access_type = "cdb" + database_type = "cynosdbmysql" + node_type = "simple" + info { + user = "root" + password = "Password@123" + instance_id = tencentcloud_cynosdb_cluster.example.id + } + } +} + +resource "tencentcloud_dts_migrate_job_start_operation" "example" { + job_id = tencentcloud_dts_migrate_job.example.id } ``` diff --git a/website/docs/r/dts_migrate_service.html.markdown b/website/docs/r/dts_migrate_service.html.markdown index 1ad60dcc4e..cdee6828b0 100644 --- a/website/docs/r/dts_migrate_service.html.markdown +++ b/website/docs/r/dts_migrate_service.html.markdown @@ -4,26 +4,26 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_dts_migrate_service" sidebar_current: "docs-tencentcloud-resource-dts_migrate_service" description: |- - Provides a resource to create a dts migrate_service + Provides a resource to create a DTS migrate service --- # tencentcloud_dts_migrate_service -Provides a resource to create a dts migrate_service +Provides a resource to create a DTS migrate service ## Example Usage ```hcl -resource "tencentcloud_dts_migrate_service" "migrate_service" { +resource "tencentcloud_dts_migrate_service" "example" { src_database_type = "mysql" dst_database_type = "cynosdbmysql" src_region = "ap-guangzhou" dst_region = "ap-guangzhou" instance_class = "small" - job_name = "tf_test_migration_job" + job_name = "tf-example" tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "createBy" + tag_value = "Terraform" } } ``` @@ -55,8 +55,8 @@ In addition to all arguments above, the following attributes are exported: ## Import -dts migrate_service can be imported using the id, e.g. +DTS migrate service can be imported using the id, e.g. ``` -$ terraform import tencentcloud_dts_migrate_service.migrate_service migrateService_id +$ terraform import tencentcloud_dts_migrate_service.example dts-iy98oxba ``` diff --git a/website/docs/r/dts_sync_job.html.markdown b/website/docs/r/dts_sync_job.html.markdown index ef49cf94e6..f15a144127 100644 --- a/website/docs/r/dts_sync_job.html.markdown +++ b/website/docs/r/dts_sync_job.html.markdown @@ -4,28 +4,28 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_dts_sync_job" sidebar_current: "docs-tencentcloud-resource-dts_sync_job" description: |- - Provides a resource to create a dts sync_job + Provides a resource to create a DTS sync job --- # tencentcloud_dts_sync_job -Provides a resource to create a dts sync_job +Provides a resource to create a DTS sync job ## Example Usage ```hcl -resource "tencentcloud_dts_sync_job" "sync_job" { +resource "tencentcloud_dts_sync_job" "example" { pay_mode = "PostPay" src_database_type = "mysql" src_region = "ap-guangzhou" dst_database_type = "cynosdbmysql" dst_region = "ap-guangzhou" + auto_renew = 0 + instance_class = "micro" tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "createBy" + tag_value = "Terraform" } - auto_renew = 0 - instance_class = "micro" } ```