Skip to content

feat(mongodb): [118133960]support mongodb encryption and backup rule #2692

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changelog/2692.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:new-resource
tencentcloud_mongodb_instance_transparent_data_encryption
```

```release-note:new-resource
tencentcloud_mongodb_instance_backup_rule
```
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.828
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.910
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -983,6 +983,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672 h1:sR3
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672/go.mod h1:o3rBKhtfIJfw4BG22M0CQVLQAc0WqIsbyRI/EW52Ka0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.828 h1:ck4fIo8e7HlMQmIh77r8rbUjZCiCuO4DJ7KYAjHQ/Ws=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.828/go.mod h1:pnGYJR0EUzVMjcGdecYwsU+UUKrrHBM8kDgJHAwCOK4=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949 h1:GZGGul+VBoU6Ont/8/S5Ot0wXVrSYBDtk79tFSdvWQ0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949/go.mod h1:75i/x1XqkqqqOgEBj31PdpnSeehsscgI5aj6aNgcsXE=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844 h1:ZR7FSnv4k1j0BpJHg6JDbJ6YJ2YfLhX2xVIUcuweKm4=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844/go.mod h1:a7PfDWl0B3QV+g99asQHumDNScEEMl+7lkXP0KXt8Xg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 h1:abGpWsAtEuF2QIYKm2m9/hv9OqyHwWNLsd5+67z86BE=
Expand Down Expand Up @@ -1200,6 +1202,7 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
Expand Down
2 changes: 2 additions & 0 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -1217,6 +1217,8 @@ func Provider() *schema.Provider {
"tencentcloud_mongodb_instance_account": mongodb.ResourceTencentCloudMongodbInstanceAccount(),
"tencentcloud_mongodb_instance_backup": mongodb.ResourceTencentCloudMongodbInstanceBackup(),
"tencentcloud_mongodb_instance_backup_download_task": mongodb.ResourceTencentCloudMongodbInstanceBackupDownloadTask(),
"tencentcloud_mongodb_instance_transparent_data_encryption": mongodb.ResourceTencentCloudMongodbInstanceTransparentDataEncryption(),
"tencentcloud_mongodb_instance_backup_rule": mongodb.ResourceTencentCloudMongodbInstanceBackupRule(),
"tencentcloud_dayu_cc_http_policy": dayu.ResourceTencentCloudDayuCCHttpPolicy(),
"tencentcloud_dayu_cc_https_policy": dayu.ResourceTencentCloudDayuCCHttpsPolicy(),
"tencentcloud_dayu_ddos_policy": dayu.ResourceTencentCloudDayuDdosPolicy(),
Expand Down
2 changes: 2 additions & 0 deletions tencentcloud/provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,8 @@ TencentDB for MongoDB(mongodb)
tencentcloud_mongodb_standby_instance
tencentcloud_mongodb_instance_account
tencentcloud_mongodb_instance_backup
tencentcloud_mongodb_instance_transparent_data_encryption
tencentcloud_mongodb_instance_backup_rule

TencentDB for MySQL(cdb)
Data Source
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package mongodb

import (
"log"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725"
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
)

func ResourceTencentCloudMongodbInstanceBackupRule() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudMongodbInstanceBackupRuleCreate,
Read: resourceTencentCloudMongodbInstanceBackupRuleRead,
Update: resourceTencentCloudMongodbInstanceBackupRuleUpdate,
Delete: resourceTencentCloudMongodbInstanceBackupRuleDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"instance_id": {
Required: true,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

forcenew

ForceNew: true,
Type: schema.TypeString,
Description: "Instance id.",
},

"backup_method": {
Required: true,
Type: schema.TypeInt,
Description: "Set automatic backup method. Valid values:\n" +
"- 0: Logical backup;\n" +
"- 1: Physical backup;\n" +
"- 3: Snapshot backup (supported only in cloud disk version).",
},

"backup_time": {
Required: true,
Type: schema.TypeInt,
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.",
},

"backup_retention_period": {
Optional: true,
Computed: true,
Type: schema.TypeInt,
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.",
},
},
}
}

func resourceTencentCloudMongodbInstanceBackupRuleCreate(d *schema.ResourceData, meta interface{}) error {
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 := 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, _ := d.GetOk("backup_time"); v != nil {
request.BackupTime = helper.IntUint64(v.(int))
}

if v, ok := d.GetOkExists("backup_retention_period"); ok {
request.BackupRetentionPeriod = helper.IntUint64(v.(int))
}

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
}

d.SetId(instanceId)

return resourceTencentCloudMongodbInstanceBackupRuleRead(d, meta)
}

func resourceTencentCloudMongodbInstanceBackupRuleRead(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.read")()
defer tccommon.InconsistentCheck(d, meta)()

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
}
_ = 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.InconsistentCheck(d, meta)()

return resourceTencentCloudMongodbInstanceBackupRuleCreate(d, meta)
}

func resourceTencentCloudMongodbInstanceBackupRuleDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_mongodb_instance_backup_rule.delete")()
defer tccommon.InconsistentCheck(d, meta)()

return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Provides a resource to create mongodb backup rule

Example Usage

```hcl
resource "tencentcloud_mongodb_backup_rule" "backup_rule" {
instance_id = "cmgo-xxxxxx"
backup_method = 0
backup_time = 10
}
```

Import

mongodb backup_rule can be imported using the id, e.g.

```
terraform import tencentcloud_mongodb_backup_rule.backup_rule ${instanceId}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package mongodb_test

import (
"testing"

tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

func TestAccTencentCloudMongodbInstanceBackupRuleResource_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() {
tcacctest.AccPreCheck(t)
},
Providers: tcacctest.AccProviders,
Steps: []resource.TestStep{
{
Config: testAccMongodbInstanceBackupRule,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "id"),
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "instance_id"),
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_method"),
resource.TestCheckResourceAttr("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_time", "10"),
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_retention_period"),
),
},
{
Config: testAccMongodbInstanceBackupRuleUpdate,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("tencentcloud_mongodb_instance_backup_rule.backup_rule", "backup_time", "14"),
),
},
{
ResourceName: "tencentcloud_mongodb_instance_backup_rule.backup_rule",
ImportState: true,
},
},
})
}

const testAccMongodbInstanceBackupRule = tcacctest.DefaultMongoDBSpec + `
resource "tencentcloud_vpc" "vpc" {
name = "mongodb-instance-vpc"
cidr_block = "10.0.0.0/16"
}

resource "tencentcloud_subnet" "subnet" {
vpc_id = tencentcloud_vpc.vpc.id
name = "mongodb-instance-subnet"
cidr_block = "10.0.0.0/16"
availability_zone = "ap-guangzhou-3"
}

resource "tencentcloud_mongodb_instance" "mongodb" {
instance_name = "tf-mongodb-encryption-test"
memory = local.memory
volume = local.volume
engine_version = local.engine_version
machine_type = local.machine_type
security_groups = [local.security_group_id]
available_zone = "ap-guangzhou-3"
project_id = 0
password = "test1234"
vpc_id = tencentcloud_vpc.vpc.id
subnet_id = tencentcloud_subnet.subnet.id
}

resource "tencentcloud_mongodb_instance_backup_rule" "backup_rule" {
instance_id = tencentcloud_mongodb_instance.mongodb.id
backup_method = 0
backup_time = 10
}
`

const testAccMongodbInstanceBackupRuleUpdate = tcacctest.DefaultMongoDBSpec + `
resource "tencentcloud_vpc" "vpc" {
name = "mongodb-instance-vpc"
cidr_block = "10.0.0.0/16"
}

resource "tencentcloud_subnet" "subnet" {
vpc_id = tencentcloud_vpc.vpc.id
name = "mongodb-instance-subnet"
cidr_block = "10.0.0.0/16"
availability_zone = "ap-guangzhou-3"
}

resource "tencentcloud_mongodb_instance" "mongodb" {
instance_name = "tf-mongodb-encryption-test"
memory = local.memory
volume = local.volume
engine_version = local.engine_version
machine_type = local.machine_type
security_groups = [local.security_group_id]
available_zone = "ap-guangzhou-3"
project_id = 0
password = "test1234"
vpc_id = tencentcloud_vpc.vpc.id
subnet_id = tencentcloud_subnet.subnet.id
}

resource "tencentcloud_mongodb_instance_backup_rule" "backup_rule" {
instance_id = tencentcloud_mongodb_instance.mongodb.id
backup_method = 0
backup_time = 14
}
`
Loading
Loading