Skip to content

Commit 0f567ca

Browse files
tongyimingmikatong
and
mikatong
authored
feat(mongodb): [118133960]support mongodb encryption and backup rule (#2692)
* add tencentcloud_mongodb_instance_transparent_data_encryption && tencentcloud_mongodb_instance_backup_rule * add changelog * update --------- Co-authored-by: mikatong <[email protected]>
1 parent 8e3846b commit 0f567ca

19 files changed

+2419
-740
lines changed

.changelog/2692.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-resource
2+
tencentcloud_mongodb_instance_transparent_data_encryption
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_mongodb_instance_backup_rule
7+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ require (
6666
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729
6767
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777
6868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672
69-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.828
69+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949
7070
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
7272
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.910

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672 h1:sR3
983983
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672/go.mod h1:o3rBKhtfIJfw4BG22M0CQVLQAc0WqIsbyRI/EW52Ka0=
984984
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.828 h1:ck4fIo8e7HlMQmIh77r8rbUjZCiCuO4DJ7KYAjHQ/Ws=
985985
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.828/go.mod h1:pnGYJR0EUzVMjcGdecYwsU+UUKrrHBM8kDgJHAwCOK4=
986+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949 h1:GZGGul+VBoU6Ont/8/S5Ot0wXVrSYBDtk79tFSdvWQ0=
987+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949/go.mod h1:75i/x1XqkqqqOgEBj31PdpnSeehsscgI5aj6aNgcsXE=
986988
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844 h1:ZR7FSnv4k1j0BpJHg6JDbJ6YJ2YfLhX2xVIUcuweKm4=
987989
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844/go.mod h1:a7PfDWl0B3QV+g99asQHumDNScEEMl+7lkXP0KXt8Xg=
988990
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 h1:abGpWsAtEuF2QIYKm2m9/hv9OqyHwWNLsd5+67z86BE=
@@ -1200,6 +1202,7 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
12001202
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
12011203
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
12021204
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
1205+
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
12031206
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
12041207
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
12051208
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,6 +1217,8 @@ func Provider() *schema.Provider {
12171217
"tencentcloud_mongodb_instance_account": mongodb.ResourceTencentCloudMongodbInstanceAccount(),
12181218
"tencentcloud_mongodb_instance_backup": mongodb.ResourceTencentCloudMongodbInstanceBackup(),
12191219
"tencentcloud_mongodb_instance_backup_download_task": mongodb.ResourceTencentCloudMongodbInstanceBackupDownloadTask(),
1220+
"tencentcloud_mongodb_instance_transparent_data_encryption": mongodb.ResourceTencentCloudMongodbInstanceTransparentDataEncryption(),
1221+
"tencentcloud_mongodb_instance_backup_rule": mongodb.ResourceTencentCloudMongodbInstanceBackupRule(),
12201222
"tencentcloud_dayu_cc_http_policy": dayu.ResourceTencentCloudDayuCCHttpPolicy(),
12211223
"tencentcloud_dayu_cc_https_policy": dayu.ResourceTencentCloudDayuCCHttpsPolicy(),
12221224
"tencentcloud_dayu_ddos_policy": dayu.ResourceTencentCloudDayuDdosPolicy(),

tencentcloud/provider.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,8 @@ TencentDB for MongoDB(mongodb)
707707
tencentcloud_mongodb_standby_instance
708708
tencentcloud_mongodb_instance_account
709709
tencentcloud_mongodb_instance_backup
710+
tencentcloud_mongodb_instance_transparent_data_encryption
711+
tencentcloud_mongodb_instance_backup_rule
710712

711713
TencentDB for MySQL(cdb)
712714
Data Source
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package mongodb
2+
3+
import (
4+
"log"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725"
9+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
10+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
11+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
12+
)
13+
14+
func ResourceTencentCloudMongodbInstanceBackupRule() *schema.Resource {
15+
return &schema.Resource{
16+
Create: resourceTencentCloudMongodbInstanceBackupRuleCreate,
17+
Read: resourceTencentCloudMongodbInstanceBackupRuleRead,
18+
Update: resourceTencentCloudMongodbInstanceBackupRuleUpdate,
19+
Delete: resourceTencentCloudMongodbInstanceBackupRuleDelete,
20+
Importer: &schema.ResourceImporter{
21+
State: schema.ImportStatePassthrough,
22+
},
23+
Schema: map[string]*schema.Schema{
24+
"instance_id": {
25+
Required: true,
26+
ForceNew: true,
27+
Type: schema.TypeString,
28+
Description: "Instance id.",
29+
},
30+
31+
"backup_method": {
32+
Required: true,
33+
Type: schema.TypeInt,
34+
Description: "Set automatic backup method. Valid values:\n" +
35+
"- 0: Logical backup;\n" +
36+
"- 1: Physical backup;\n" +
37+
"- 3: Snapshot backup (supported only in cloud disk version).",
38+
},
39+
40+
"backup_time": {
41+
Required: true,
42+
Type: schema.TypeInt,
43+
Description: "Set the start time for automatic backup. The value range is: [0,23]. For example, setting this parameter to 2 means that backup starts at 02:00.",
44+
},
45+
46+
"backup_retention_period": {
47+
Optional: true,
48+
Computed: true,
49+
Type: schema.TypeInt,
50+
Description: "Specify the number of days to save backup data. The default is 7 days, and the support settings are 7, 30, 90, 180, 365.",
51+
},
52+
},
53+
}
54+
}
55+
56+
func resourceTencentCloudMongodbInstanceBackupRuleCreate(d *schema.ResourceData, meta interface{}) error {
57+
defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.create")()
58+
defer tccommon.InconsistentCheck(d, meta)()
59+
60+
logId := tccommon.GetLogId(tccommon.ContextNil)
61+
var (
62+
request = mongodb.NewSetBackupRulesRequest()
63+
)
64+
instanceId := d.Get("instance_id").(string)
65+
request.InstanceId = helper.String(instanceId)
66+
67+
if v, _ := d.GetOk("backup_method"); v != nil {
68+
request.BackupMethod = helper.IntUint64(v.(int))
69+
}
70+
71+
if v, _ := d.GetOk("backup_time"); v != nil {
72+
request.BackupTime = helper.IntUint64(v.(int))
73+
}
74+
75+
if v, ok := d.GetOkExists("backup_retention_period"); ok {
76+
request.BackupRetentionPeriod = helper.IntUint64(v.(int))
77+
}
78+
79+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
80+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMongodbClient().SetBackupRules(request)
81+
if e != nil {
82+
return tccommon.RetryError(e)
83+
} else {
84+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
85+
}
86+
return nil
87+
})
88+
if err != nil {
89+
log.Printf("[CRITAL]%s operate mongodb backupRule failed, reason:%+v", logId, err)
90+
return err
91+
}
92+
93+
d.SetId(instanceId)
94+
95+
return resourceTencentCloudMongodbInstanceBackupRuleRead(d, meta)
96+
}
97+
98+
func resourceTencentCloudMongodbInstanceBackupRuleRead(d *schema.ResourceData, meta interface{}) error {
99+
defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.read")()
100+
defer tccommon.InconsistentCheck(d, meta)()
101+
102+
request := mongodb.NewDescribeBackupRulesRequest()
103+
request.InstanceId = helper.String(d.Id())
104+
ratelimit.Check(request.GetAction())
105+
response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMongodbClient().DescribeBackupRules(request)
106+
if err != nil {
107+
return err
108+
}
109+
_ = d.Set("instance_id", d.Id())
110+
_ = d.Set("backup_method", response.Response.BackupMethod)
111+
_ = d.Set("backup_time", response.Response.BackupTime)
112+
_ = d.Set("backup_retention_period", response.Response.BackupSaveTime)
113+
return nil
114+
}
115+
116+
func resourceTencentCloudMongodbInstanceBackupRuleUpdate(d *schema.ResourceData, meta interface{}) error {
117+
defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_transparent_data_encryption.update")()
118+
defer tccommon.InconsistentCheck(d, meta)()
119+
120+
return resourceTencentCloudMongodbInstanceBackupRuleCreate(d, meta)
121+
}
122+
123+
func resourceTencentCloudMongodbInstanceBackupRuleDelete(d *schema.ResourceData, meta interface{}) error {
124+
defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.delete")()
125+
defer tccommon.InconsistentCheck(d, meta)()
126+
127+
return nil
128+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Provides a resource to create mongodb backup rule
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_mongodb_backup_rule" "backup_rule" {
7+
instance_id = "cmgo-xxxxxx"
8+
backup_method = 0
9+
backup_time = 10
10+
}
11+
```
12+
13+
Import
14+
15+
mongodb backup_rule can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_mongodb_backup_rule.backup_rule ${instanceId}
19+
```
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package mongodb_test
2+
3+
import (
4+
"testing"
5+
6+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
)
10+
11+
func TestAccTencentCloudMongodbInstanceBackupRuleResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: testAccMongodbInstanceBackupRule,
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "id"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "instance_id"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_method"),
25+
resource.TestCheckResourceAttr("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_time", "10"),
26+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_retention_period"),
27+
),
28+
},
29+
{
30+
Config: testAccMongodbInstanceBackupRuleUpdate,
31+
Check: resource.ComposeTestCheckFunc(
32+
resource.TestCheckResourceAttr("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_time", "14"),
33+
),
34+
},
35+
{
36+
ResourceName: "tencentcloud_mongodb_instance_backup_rule.backup_rule",
37+
ImportState: true,
38+
},
39+
},
40+
})
41+
}
42+
43+
const testAccMongodbInstanceBackupRule = tcacctest.DefaultMongoDBSpec + `
44+
resource "tencentcloud_vpc" "vpc" {
45+
name = "mongodb-instance-vpc"
46+
cidr_block = "10.0.0.0/16"
47+
}
48+
49+
resource "tencentcloud_subnet" "subnet" {
50+
vpc_id = tencentcloud_vpc.vpc.id
51+
name = "mongodb-instance-subnet"
52+
cidr_block = "10.0.0.0/16"
53+
availability_zone = "ap-guangzhou-3"
54+
}
55+
56+
resource "tencentcloud_mongodb_instance" "mongodb" {
57+
instance_name = "tf-mongodb-encryption-test"
58+
memory = local.memory
59+
volume = local.volume
60+
engine_version = local.engine_version
61+
machine_type = local.machine_type
62+
security_groups = [local.security_group_id]
63+
available_zone = "ap-guangzhou-3"
64+
project_id = 0
65+
password = "test1234"
66+
vpc_id = tencentcloud_vpc.vpc.id
67+
subnet_id = tencentcloud_subnet.subnet.id
68+
}
69+
70+
resource "tencentcloud_mongodb_instance_backup_rule" "backup_rule" {
71+
instance_id = tencentcloud_mongodb_instance.mongodb.id
72+
backup_method = 0
73+
backup_time = 10
74+
}
75+
`
76+
77+
const testAccMongodbInstanceBackupRuleUpdate = tcacctest.DefaultMongoDBSpec + `
78+
resource "tencentcloud_vpc" "vpc" {
79+
name = "mongodb-instance-vpc"
80+
cidr_block = "10.0.0.0/16"
81+
}
82+
83+
resource "tencentcloud_subnet" "subnet" {
84+
vpc_id = tencentcloud_vpc.vpc.id
85+
name = "mongodb-instance-subnet"
86+
cidr_block = "10.0.0.0/16"
87+
availability_zone = "ap-guangzhou-3"
88+
}
89+
90+
resource "tencentcloud_mongodb_instance" "mongodb" {
91+
instance_name = "tf-mongodb-encryption-test"
92+
memory = local.memory
93+
volume = local.volume
94+
engine_version = local.engine_version
95+
machine_type = local.machine_type
96+
security_groups = [local.security_group_id]
97+
available_zone = "ap-guangzhou-3"
98+
project_id = 0
99+
password = "test1234"
100+
vpc_id = tencentcloud_vpc.vpc.id
101+
subnet_id = tencentcloud_subnet.subnet.id
102+
}
103+
104+
resource "tencentcloud_mongodb_instance_backup_rule" "backup_rule" {
105+
instance_id = tencentcloud_mongodb_instance.mongodb.id
106+
backup_method = 0
107+
backup_time = 14
108+
}
109+
`

0 commit comments

Comments
 (0)