Skip to content
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
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -513,6 +513,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.370 h1:FlmN
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.370/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.376 h1:pXsCDParuAiDUt/SuDBeJ0Fv90kItYMbk37W1cMVHck=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.376/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.377/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.378 h1:o+GKr3tHDivmoWxBXX5oeJC8EmmNV64g/yw5s0RjBdg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.378/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199 h1:ajgJogYSIQ5u1PIbiV5nsvr5K0fYpm1/T7Dy+mxEM6U=
Expand Down
6 changes: 6 additions & 0 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,9 @@ PostgreSQL

Resource
tencentcloud_postgresql_instance
tencentcloud_postgresql_readonly_instance
tencentcloud_postgresql_readonly_group
tencentcloud_postgresql_readonly_attachment

Redis
Data Source
Expand Down Expand Up @@ -1029,6 +1032,9 @@ func Provider() terraform.ResourceProvider {
"tencentcloud_mongodb_standby_instance": resourceTencentCloudMongodbStandbyInstance(),
"tencentcloud_elasticsearch_instance": resourceTencentCloudElasticsearchInstance(),
"tencentcloud_postgresql_instance": resourceTencentCloudPostgresqlInstance(),
"tencentcloud_postgresql_readonly_instance": resourceTencentCloudPostgresqlReadonlyInstance(),
"tencentcloud_postgresql_readonly_group": resourceTencentCloudPostgresqlReadonlyGroup(),
"tencentcloud_postgresql_readonly_attachment": resourceTencentCloudPostgresqlReadonlyAttachment(),
"tencentcloud_sqlserver_instance": resourceTencentCloudSqlserverInstance(),
"tencentcloud_sqlserver_db": resourceTencentCloudSqlserverDB(),
"tencentcloud_sqlserver_account": resourceTencentCloudSqlserverAccount(),
Expand Down
137 changes: 137 additions & 0 deletions tencentcloud/resource_tc_postgresql_readonly_attachment.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
/*
Use this resource to create postgresql readonly attachment.

Example Usage

```hcl
resource "tencentcloud_postgresql_readonly_attachment" "attach" {
db_instance_id = tencentcloud_postgresql_readonly_instance.foo.id
read_only_group_id = tencentcloud_postgresql_readonly_group.group.id
}
```
*/
package tencentcloud

import (
"context"
"fmt"
"log"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)

func resourceTencentCloudPostgresqlReadonlyAttachment() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudPostgresqlReadOnlyAttachmentCreate,
Read: resourceTencentCloudPostgresqlReadOnlyAttachmentRead,
//Update: resourceTencentCloudPostgresqlReadOnlyAttachmentUpdate,
Delete: resourceTencentCLoudPostgresqlReadOnlyAttachmentDelete,
//Importer: &schema.ResourceImporter{
// State: schema.ImportStatePassthrough,
//},

Schema: map[string]*schema.Schema{
"db_instance_id": {
Type: schema.TypeString,
ForceNew: true,
Required: true,
Description: "Read only instance ID.",
},
"read_only_group_id": {
Type: schema.TypeString,
ForceNew: true,
Required: true,
Description: "Read only group ID.",
},
},
}
}

func resourceTencentCloudPostgresqlReadOnlyAttachmentCreate(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_postgresql_readonly_attachment.create")()

logId := getLogId(contextNil)

var (
request = postgresql.NewAddDBInstanceToReadOnlyGroupRequest()
dbInstanceId string
groupId string
)
if v, ok := d.GetOk("db_instance_id"); ok {
dbInstanceId = v.(string)
request.DBInstanceId = helper.String(dbInstanceId)

}
if v, ok := d.GetOk("read_only_group_id"); ok {
groupId = v.(string)
request.ReadOnlyGroupId = helper.String(groupId)
}

err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
result, e := meta.(*TencentCloudClient).apiV3Conn.UsePostgresqlClient().AddDBInstanceToReadOnlyGroup(request)
if e != nil {
return 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 {
return err
}
instanceId := helper.IdFormat(dbInstanceId, groupId)
d.SetId(instanceId)

return nil
}

func resourceTencentCloudPostgresqlReadOnlyAttachmentRead(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_postgresql_readonly_attachment.read")()

logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)

postgresqlService := PostgresqlService{client: meta.(*TencentCloudClient).apiV3Conn}
_, err := postgresqlService.DescribePostgresqlReadOnlyGroupById(ctx, d.Id())
if err != nil {
return err
}

return nil
}

func resourceTencentCLoudPostgresqlReadOnlyAttachmentDelete(d *schema.ResourceData, meta interface{}) error {
defer logElapsed("resource.tencentcloud_postgresql_readonly_attachment.delete")()

logId := getLogId(contextNil)
request := postgresql.NewRemoveDBInstanceFromReadOnlyGroupRequest()

idSplit := strings.Split(d.Id(), FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}
dbInstanceId := idSplit[0]
groupId := idSplit[1]
request.ReadOnlyGroupId = helper.String(groupId)
request.DBInstanceId = helper.String(dbInstanceId)

err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
result, e := meta.(*TencentCloudClient).apiV3Conn.UsePostgresqlClient().RemoveDBInstanceFromReadOnlyGroup(request)
if e != nil {
return 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 {
return err
}
return nil
}
Loading