Skip to content

Commit 9161af7

Browse files
committed
add monogo backup
1 parent 1904864 commit 9161af7

7 files changed

+212
-6
lines changed

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ TencentDB for MongoDB(mongodb)
442442
tencentcloud_mongodb_sharding_instance
443443
tencentcloud_mongodb_standby_instance
444444
tencentcloud_mongodb_instance_account
445+
tencentcloud_mongodb_instance_backup
445446
446447
TencentDB for MySQL(cdb)
447448
Data Source
@@ -1575,6 +1576,7 @@ func Provider() terraform.ResourceProvider {
15751576
"tencentcloud_mongodb_instance": resourceTencentCloudMongodbInstance(),
15761577
"tencentcloud_mongodb_sharding_instance": resourceTencentCloudMongodbShardingInstance(),
15771578
"tencentcloud_mongodb_instance_account": resourceTencentCloudMongodbInstanceAccount(),
1579+
"tencentcloud_mongodb_instance_backup": resourceTencentCloudMongodbInstanceBackup(),
15781580
"tencentcloud_dayu_cc_http_policy": resourceTencentCloudDayuCCHttpPolicy(),
15791581
"tencentcloud_dayu_cc_https_policy": resourceTencentCloudDayuCCHttpsPolicy(),
15801582
"tencentcloud_dayu_ddos_policy": resourceTencentCloudDayuDdosPolicy(),

tencentcloud/resource_tc_mongodb_instance_account.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func resourceTencentCloudMongodbInstanceAccountCreate(d *schema.ResourceData, me
163163
service := MongodbService{client: meta.(*TencentCloudClient).apiV3Conn}
164164

165165
if response != nil && response.Response != nil {
166-
if err = service.DescribeAsyncRequestInfo(ctx, helper.UInt64ToStr(*response.Response.FlowId)); err != nil {
166+
if err = service.DescribeAsyncRequestInfo(ctx, helper.UInt64ToStr(*response.Response.FlowId), 3*readRetryTimeout); err != nil {
167167
return err
168168
}
169169
}
@@ -293,7 +293,7 @@ func resourceTencentCloudMongodbInstanceAccountUpdate(d *schema.ResourceData, me
293293
service := MongodbService{client: meta.(*TencentCloudClient).apiV3Conn}
294294

295295
if response != nil && response.Response != nil {
296-
if err = service.DescribeAsyncRequestInfo(ctx, helper.UInt64ToStr(*response.Response.FlowId)); err != nil {
296+
if err = service.DescribeAsyncRequestInfo(ctx, helper.UInt64ToStr(*response.Response.FlowId), 3*readRetryTimeout); err != nil {
297297
return err
298298
}
299299
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*
2+
Provides a resource to create a mongodb instance_backup
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_mongodb_instance_backup" "instance_backup" {
8+
instance_id = "cmgo-9d0p6umb"
9+
backup_method = 0
10+
backup_remark = "my backup"
11+
}
12+
```
13+
14+
*/
15+
package tencentcloud
16+
17+
import (
18+
"context"
19+
"log"
20+
"time"
21+
22+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
23+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
24+
mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725"
25+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
26+
)
27+
28+
func resourceTencentCloudMongodbInstanceBackup() *schema.Resource {
29+
return &schema.Resource{
30+
Create: resourceTencentCloudMongodbInstanceBackupCreate,
31+
Read: resourceTencentCloudMongodbInstanceBackupRead,
32+
Delete: resourceTencentCloudMongodbInstanceBackupDelete,
33+
Timeouts: &schema.ResourceTimeout{
34+
Create: schema.DefaultTimeout(3 * time.Minute),
35+
},
36+
Schema: map[string]*schema.Schema{
37+
"instance_id": {
38+
Required: true,
39+
ForceNew: true,
40+
Type: schema.TypeString,
41+
Description: "Instance ID, the format is: cmgo-9d0p6umb.Same as the instance ID displayed in the cloud database console page.",
42+
},
43+
44+
"backup_method": {
45+
Required: true,
46+
ForceNew: true,
47+
Type: schema.TypeInt,
48+
Description: "0:logical backup, 1:physical backup.",
49+
},
50+
51+
"backup_remark": {
52+
Optional: true,
53+
ForceNew: true,
54+
Type: schema.TypeString,
55+
Description: "backup notes.",
56+
},
57+
},
58+
}
59+
}
60+
61+
func resourceTencentCloudMongodbInstanceBackupCreate(d *schema.ResourceData, meta interface{}) error {
62+
defer logElapsed("data_source.tencentcloud_mongodb_instance_backup.read")()
63+
defer inconsistentCheck(d, meta)()
64+
65+
logId := getLogId(contextNil)
66+
67+
var (
68+
request = mongodb.NewCreateBackupDBInstanceRequest()
69+
response = mongodb.NewCreateBackupDBInstanceResponse()
70+
taskId string
71+
)
72+
if v, ok := d.GetOk("instance_id"); ok {
73+
request.InstanceId = helper.String(v.(string))
74+
}
75+
76+
if v, _ := d.GetOk("backup_method"); v != nil {
77+
request.BackupMethod = helper.IntInt64(v.(int))
78+
}
79+
80+
if v, ok := d.GetOk("backup_remark"); ok {
81+
request.BackupRemark = helper.String(v.(string))
82+
}
83+
84+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
85+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMongodbClient().CreateBackupDBInstance(request)
86+
if e != nil {
87+
return retryError(e)
88+
} else {
89+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
90+
}
91+
response = result
92+
return nil
93+
})
94+
if err != nil {
95+
log.Printf("[CRITAL]%s operate mongodb instanceBackup failed, reason:%+v", logId, err)
96+
return nil
97+
}
98+
99+
taskId = *response.Response.AsyncRequestId
100+
d.SetId(taskId)
101+
102+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
103+
104+
service := MongodbService{client: meta.(*TencentCloudClient).apiV3Conn}
105+
106+
timeout := d.Timeout(schema.TimeoutCreate)
107+
if response != nil && response.Response != nil {
108+
if err = service.DescribeAsyncRequestInfo(ctx, taskId, timeout); err != nil {
109+
return err
110+
}
111+
}
112+
113+
return resourceTencentCloudMongodbInstanceBackupRead(d, meta)
114+
}
115+
116+
func resourceTencentCloudMongodbInstanceBackupRead(d *schema.ResourceData, meta interface{}) error {
117+
defer logElapsed("resource.tencentcloud_mongodb_instance_backup.read")()
118+
defer inconsistentCheck(d, meta)()
119+
120+
return nil
121+
}
122+
123+
func resourceTencentCloudMongodbInstanceBackupDelete(d *schema.ResourceData, meta interface{}) error {
124+
defer logElapsed("resource.tencentcloud_mongodb_instance_backup.delete")()
125+
defer inconsistentCheck(d, meta)()
126+
127+
return nil
128+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudNNeedFixMongodbInstanceBackupResource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccMongodbInstanceBackup,
19+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup.instance_backup", "id")),
20+
},
21+
},
22+
})
23+
}
24+
25+
const testAccMongodbInstanceBackup = `
26+
27+
resource "tencentcloud_mongodb_instance_backup" "instance_backup" {
28+
instance_id = "cmgo-jbrmgzfl"
29+
backup_method = 0
30+
backup_remark = "my backup"
31+
}
32+
33+
`

tencentcloud/service_tencentcloud_mongodb.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"log"
7+
"time"
78

89
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
910
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
@@ -97,7 +98,7 @@ func (me *MongodbService) ResetInstancePassword(ctx context.Context, instanceId,
9798
}
9899

99100
if response != nil && response.Response != nil {
100-
if err = me.DescribeAsyncRequestInfo(ctx, *response.Response.AsyncRequestId); err != nil {
101+
if err = me.DescribeAsyncRequestInfo(ctx, *response.Response.AsyncRequestId, 3*readRetryTimeout); err != nil {
101102
return err
102103
}
103104
}
@@ -318,11 +319,11 @@ func (me *MongodbService) ModifyAutoRenewFlag(ctx context.Context, instanceId st
318319
return
319320
}
320321

321-
func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId string) (errRet error) {
322+
func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId string, timeout time.Duration) (errRet error) {
322323
logId := getLogId(ctx)
323324
request := mongodb.NewDescribeAsyncRequestInfoRequest()
324325
request.AsyncRequestId = &asyncId
325-
err := resource.Retry(readRetryTimeout*3, func() *resource.RetryError {
326+
err := resource.Retry(timeout, func() *resource.RetryError {
326327
ratelimit.Check(request.GetAction())
327328
result, e := me.client.UseMongodbClient().DescribeAsyncRequestInfo(request)
328329
if e != nil {
@@ -489,7 +490,7 @@ func (me *MongodbService) DeleteMongodbInstanceAccountById(ctx context.Context,
489490
return
490491
}
491492
if response != nil && response.Response != nil {
492-
if err = me.DescribeAsyncRequestInfo(ctx, helper.Int64ToStr(*response.Response.FlowId)); err != nil {
493+
if err = me.DescribeAsyncRequestInfo(ctx, helper.Int64ToStr(*response.Response.FlowId), 3*readRetryTimeout); err != nil {
493494
errRet = err
494495
return
495496
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
subcategory: "TencentDB for MongoDB(mongodb)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_mongodb_instance_backup"
5+
sidebar_current: "docs-tencentcloud-resource-mongodb_instance_backup"
6+
description: |-
7+
Provides a resource to create a mongodb instance_backup
8+
---
9+
10+
# tencentcloud_mongodb_instance_backup
11+
12+
Provides a resource to create a mongodb instance_backup
13+
14+
## Example Usage
15+
16+
```hcl
17+
resource "tencentcloud_mongodb_instance_backup" "instance_backup" {
18+
instance_id = "cmgo-9d0p6umb"
19+
backup_method = 0
20+
backup_remark = "my backup"
21+
}
22+
```
23+
24+
## Argument Reference
25+
26+
The following arguments are supported:
27+
28+
* `backup_method` - (Required, Int, ForceNew) 0:logical backup, 1:physical backup.
29+
* `instance_id` - (Required, String, ForceNew) Instance ID, the format is: cmgo-9d0p6umb.Same as the instance ID displayed in the cloud database console page.
30+
* `backup_remark` - (Optional, String, ForceNew) backup notes.
31+
32+
## Attributes Reference
33+
34+
In addition to all arguments above, the following attributes are exported:
35+
36+
* `id` - ID of the resource.
37+
38+
39+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,6 +2694,9 @@
26942694
<li>
26952695
<a href="/docs/providers/tencentcloud/r/mongodb_instance_account.html">tencentcloud_mongodb_instance_account</a>
26962696
</li>
2697+
<li>
2698+
<a href="/docs/providers/tencentcloud/r/mongodb_instance_backup.html">tencentcloud_mongodb_instance_backup</a>
2699+
</li>
26972700
<li>
26982701
<a href="/docs/providers/tencentcloud/r/mongodb_sharding_instance.html">tencentcloud_mongodb_sharding_instance</a>
26992702
</li>

0 commit comments

Comments
 (0)