diff --git a/.changelog/3610.txt b/.changelog/3610.txt new file mode 100644 index 0000000000..edf5342df8 --- /dev/null +++ b/.changelog/3610.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_mongodb_instance_backup_rule: optimiz code and doc +``` \ No newline at end of file diff --git a/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.go b/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.go index fcaee9e6e2..4294b010ca 100644 --- a/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.go +++ b/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.go @@ -1,6 +1,7 @@ package mongodb import ( + "fmt" "log" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -57,67 +58,109 @@ func resourceTencentCloudMongodbInstanceBackupRuleCreate(d *schema.ResourceData, defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.create")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) var ( - request = mongodb.NewSetBackupRulesRequest() + instanceId string ) - instanceId := d.Get("instance_id").(string) - request.InstanceId = helper.String(instanceId) - if v, _ := d.GetOk("backup_method"); v != nil { - request.BackupMethod = helper.IntUint64(v.(int)) + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) } - if v, _ := d.GetOk("backup_time"); v != nil { - request.BackupTime = helper.IntUint64(v.(int)) - } + d.SetId(instanceId) + return resourceTencentCloudMongodbInstanceBackupRuleUpdate(d, meta) +} - if v, ok := d.GetOkExists("backup_retention_period"); ok { - request.BackupRetentionPeriod = helper.IntUint64(v.(int)) - } +func resourceTencentCloudMongodbInstanceBackupRuleRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMongodbClient().SetBackupRules(request) + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = mongodb.NewDescribeBackupRulesRequest() + response = mongodb.NewDescribeBackupRulesResponse() + instanceId = d.Id() + ) + + request.InstanceId = &instanceId + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMongodbClient().DescribeBackupRules(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()) } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Describe mongodb backup rules failed, Response is nil")) + } + + response = result return nil }) + if err != nil { - log.Printf("[CRITAL]%s operate mongodb backupRule failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s describe mongodb backup rules failed, reason:%+v", logId, err) return err } - d.SetId(instanceId) + _ = d.Set("instance_id", instanceId) - return resourceTencentCloudMongodbInstanceBackupRuleRead(d, meta) -} + if response.Response.BackupMethod != nil { + _ = d.Set("backup_method", response.Response.BackupMethod) + } -func resourceTencentCloudMongodbInstanceBackupRuleRead(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.read")() - defer tccommon.InconsistentCheck(d, meta)() + if response.Response.BackupTime != nil { + _ = d.Set("backup_time", response.Response.BackupTime) + } - request := mongodb.NewDescribeBackupRulesRequest() - request.InstanceId = helper.String(d.Id()) - ratelimit.Check(request.GetAction()) - response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMongodbClient().DescribeBackupRules(request) - if err != nil { - return err + if response.Response.BackupSaveTime != nil { + _ = d.Set("backup_retention_period", response.Response.BackupSaveTime) } - _ = d.Set("instance_id", d.Id()) - _ = d.Set("backup_method", response.Response.BackupMethod) - _ = d.Set("backup_time", response.Response.BackupTime) - _ = d.Set("backup_retention_period", response.Response.BackupSaveTime) + return nil } func resourceTencentCloudMongodbInstanceBackupRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_transparent_data_encryption.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.update")() defer tccommon.InconsistentCheck(d, meta)() - return resourceTencentCloudMongodbInstanceBackupRuleCreate(d, meta) + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = mongodb.NewSetBackupRulesRequest() + instanceId = d.Id() + ) + + if v, ok := d.GetOkExists("backup_method"); ok { + request.BackupMethod = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("backup_time"); ok { + request.BackupTime = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("backup_retention_period"); ok { + request.BackupRetentionPeriod = helper.IntUint64(v.(int)) + } + + request.InstanceId = &instanceId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMongodbClient().SetBackupRules(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 err != nil { + log.Printf("[CRITAL]%s operate mongodb backupRule failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudMongodbInstanceBackupRuleRead(d, meta) } func resourceTencentCloudMongodbInstanceBackupRuleDelete(d *schema.ResourceData, meta interface{}) error { diff --git a/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.md b/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.md index 9d7aab7e2d..6fe946e7e9 100644 --- a/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.md +++ b/tencentcloud/services/mongodb/resource_tc_mongodb_instance_backup_rule.md @@ -3,10 +3,11 @@ Provides a resource to create mongodb instance backup rule Example Usage ```hcl -resource "tencentcloud_mongodb_instance_backup" "backup_rule" { - instance_id = "cmgo-xxxxxx" - backup_method = 0 - backup_time = 10 +resource "tencentcloud_mongodb_instance_backup_rule" "example" { + instance_id = "cmgo-rnht8d3d" + backup_method = 0 + backup_time = 10 + backup_retention_period = 7 } ``` @@ -15,5 +16,5 @@ Import mongodb instance backup rule can be imported using the id, e.g. ``` -terraform import tencentcloud_mongodb_instance_backup.backup_rule ${instanceId} +terraform import tencentcloud_mongodb_instance_backup_rule.example cmgo-rnht8d3d ``` \ No newline at end of file diff --git a/website/docs/r/mongodb_instance_backup_rule.html.markdown b/website/docs/r/mongodb_instance_backup_rule.html.markdown index 7932b177fd..97069c6cb4 100644 --- a/website/docs/r/mongodb_instance_backup_rule.html.markdown +++ b/website/docs/r/mongodb_instance_backup_rule.html.markdown @@ -14,10 +14,11 @@ Provides a resource to create mongodb instance backup rule ## Example Usage ```hcl -resource "tencentcloud_mongodb_instance_backup" "backup_rule" { - instance_id = "cmgo-xxxxxx" - backup_method = 0 - backup_time = 10 +resource "tencentcloud_mongodb_instance_backup_rule" "example" { + instance_id = "cmgo-rnht8d3d" + backup_method = 0 + backup_time = 10 + backup_retention_period = 7 } ``` @@ -46,6 +47,6 @@ In addition to all arguments above, the following attributes are exported: mongodb instance backup rule can be imported using the id, e.g. ``` -terraform import tencentcloud_mongodb_instance_backup.backup_rule ${instanceId} +terraform import tencentcloud_mongodb_instance_backup_rule.example cmgo-rnht8d3d ```