Skip to content

Commit d611624

Browse files
authored
feat(postgresql): [122205050] add new resource (#3183)
* add * add
1 parent 9216eab commit d611624

10 files changed

+353
-1
lines changed

.changelog/3183.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_postgresql_instance_ssl_config
3+
```

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1567,6 +1567,7 @@ func Provider() *schema.Provider {
15671567
"tencentcloud_postgresql_clone_db_instance": postgresql.ResourceTencentCloudPostgresqlCloneDbInstance(),
15681568
"tencentcloud_postgresql_instance_network_access": postgresql.ResourceTencentCloudPostgresqlInstanceNetworkAccess(),
15691569
"tencentcloud_postgresql_parameters": postgresql.ResourceTencentCloudPostgresqlParameters(),
1570+
"tencentcloud_postgresql_instance_ssl_config": postgresql.ResourceTencentCloudPostgresqlInstanceSslConfig(),
15701571
"tencentcloud_sqlserver_instance": sqlserver.ResourceTencentCloudSqlserverInstance(),
15711572
"tencentcloud_sqlserver_db": sqlserver.ResourceTencentCloudSqlserverDB(),
15721573
"tencentcloud_sqlserver_account": sqlserver.ResourceTencentCloudSqlserverAccount(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,7 @@ tencentcloud_postgresql_apply_parameter_template_operation
916916
tencentcloud_postgresql_clone_db_instance
917917
tencentcloud_postgresql_instance_network_access
918918
tencentcloud_postgresql_parameters
919+
tencentcloud_postgresql_instance_ssl_config
919920

920921
TencentDB for Redis(crs)
921922
Data Source

tencentcloud/services/postgresql/resource_tc_postgresql_instance_network_access.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func resourceTencentCloudPostgresqlInstanceNetworkAccessCreate(d *schema.Resourc
128128
if e != nil {
129129
return tccommon.RetryError(e)
130130
} else {
131-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
131+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, flowRequest.GetAction(), flowRequest.ToJsonString(), result.ToJsonString())
132132
}
133133

134134
if result == nil || result.Response == nil || result.Response.TaskSet == nil {
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
package postgresql
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
postgresv20170312 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312"
11+
12+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
13+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
14+
)
15+
16+
func ResourceTencentCloudPostgresqlInstanceSslConfig() *schema.Resource {
17+
return &schema.Resource{
18+
Create: resourceTencentCloudPostgresqlInstanceSslConfigCreate,
19+
Read: resourceTencentCloudPostgresqlInstanceSslConfigRead,
20+
Update: resourceTencentCloudPostgresqlInstanceSslConfigUpdate,
21+
Delete: resourceTencentCloudPostgresqlInstanceSslConfigDelete,
22+
Importer: &schema.ResourceImporter{
23+
State: schema.ImportStatePassthrough,
24+
},
25+
Schema: map[string]*schema.Schema{
26+
"db_instance_id": {
27+
Type: schema.TypeString,
28+
Required: true,
29+
ForceNew: true,
30+
Description: "Postgres instance ID.",
31+
},
32+
33+
"ssl_enabled": {
34+
Type: schema.TypeBool,
35+
Required: true,
36+
Description: "Enable or disable SSL. true: enable; false: disable.",
37+
},
38+
39+
"connect_address": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
Description: "The unique connection address protected by SSL certificate, which can be set as the internal and external IP address if it is the primary instance; If it is a read-only instance, it can be set as the instance IP or read-only group IP. This parameter is mandatory when enabling SSL or modifying SSL protected connection addresses; When SSL is turned off, this parameter will be ignored.",
43+
},
44+
45+
"ca_url": {
46+
Type: schema.TypeString,
47+
Computed: true,
48+
Description: "Cloud root certificate download link.",
49+
},
50+
},
51+
}
52+
}
53+
54+
func resourceTencentCloudPostgresqlInstanceSslConfigCreate(d *schema.ResourceData, meta interface{}) error {
55+
defer tccommon.LogElapsed("resource.tencentcloud_postgresql_instance_ssl_config.create")()
56+
defer tccommon.InconsistentCheck(d, meta)()
57+
58+
var dbInsntaceId string
59+
if v, ok := d.GetOk("db_instance_id"); ok {
60+
dbInsntaceId = v.(string)
61+
}
62+
63+
d.SetId(dbInsntaceId)
64+
65+
return resourceTencentCloudPostgresqlInstanceSslConfigUpdate(d, meta)
66+
}
67+
68+
func resourceTencentCloudPostgresqlInstanceSslConfigRead(d *schema.ResourceData, meta interface{}) error {
69+
defer tccommon.LogElapsed("resource.tencentcloud_postgresql_instance_ssl_config.read")()
70+
defer tccommon.InconsistentCheck(d, meta)()
71+
72+
var (
73+
logId = tccommon.GetLogId(tccommon.ContextNil)
74+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
75+
service = PostgresqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
76+
dbInsntaceId = d.Id()
77+
)
78+
79+
respData, err := service.DescribePostgresqlInstanceSslConfigById(ctx, dbInsntaceId)
80+
if err != nil {
81+
return err
82+
}
83+
84+
if respData == nil {
85+
d.SetId("")
86+
log.Printf("[WARN]%s resource `postgresql_instance_ssl_config` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
87+
return nil
88+
}
89+
90+
_ = d.Set("db_instance_id", dbInsntaceId)
91+
92+
if respData.SSLEnabled != nil {
93+
_ = d.Set("ssl_enabled", respData.SSLEnabled)
94+
}
95+
96+
if respData.ConnectAddress != nil {
97+
_ = d.Set("connect_address", respData.ConnectAddress)
98+
}
99+
100+
if respData.CAUrl != nil {
101+
_ = d.Set("ca_url", respData.CAUrl)
102+
}
103+
104+
return nil
105+
}
106+
107+
func resourceTencentCloudPostgresqlInstanceSslConfigUpdate(d *schema.ResourceData, meta interface{}) error {
108+
defer tccommon.LogElapsed("resource.tencentcloud_postgresql_instance_ssl_config.update")()
109+
defer tccommon.InconsistentCheck(d, meta)()
110+
111+
var (
112+
logId = tccommon.GetLogId(tccommon.ContextNil)
113+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
114+
dbInsntaceId = d.Id()
115+
)
116+
117+
request := postgresv20170312.NewModifyDBInstanceSSLConfigRequest()
118+
response := postgresv20170312.NewModifyDBInstanceSSLConfigResponse()
119+
request.DBInstanceId = helper.String(dbInsntaceId)
120+
121+
if v, ok := d.GetOkExists("ssl_enabled"); ok {
122+
request.SSLEnabled = helper.Bool(v.(bool))
123+
}
124+
125+
if v, ok := d.GetOk("connect_address"); ok {
126+
request.ConnectAddress = helper.String(v.(string))
127+
}
128+
129+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
130+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresV20170312Client().ModifyDBInstanceSSLConfigWithContext(ctx, request)
131+
if e != nil {
132+
return tccommon.RetryError(e)
133+
} else {
134+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
135+
}
136+
137+
if result == nil || result.Response == nil {
138+
return resource.NonRetryableError(fmt.Errorf("Update postgresql instance ssl config failed, Response is nil."))
139+
}
140+
141+
response = result
142+
return nil
143+
})
144+
145+
if err != nil {
146+
log.Printf("[CRITAL]%s update postgresql instance ssl config failed, reason:%+v", logId, err)
147+
return err
148+
}
149+
150+
if response.Response.TaskId == nil {
151+
return fmt.Errorf("TaksId is nil.")
152+
}
153+
154+
// wait
155+
taskId := *response.Response.TaskId
156+
taskRequest := postgresv20170312.NewDescribeTasksRequest()
157+
taskRequest.TaskId = helper.Int64Uint64(taskId)
158+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
159+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DescribeTasksWithContext(ctx, taskRequest)
160+
if e != nil {
161+
return tccommon.RetryError(e)
162+
} else {
163+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, taskRequest.GetAction(), taskRequest.ToJsonString(), result.ToJsonString())
164+
}
165+
166+
if result == nil || result.Response == nil || result.Response.TaskSet == nil {
167+
return resource.NonRetryableError(fmt.Errorf("Describe tasks failed, Response is nil."))
168+
}
169+
170+
if len(result.Response.TaskSet) == 0 {
171+
return resource.RetryableError(fmt.Errorf("wait TaskSet init."))
172+
}
173+
174+
if result.Response.TaskSet[0].Status != nil && *result.Response.TaskSet[0].Status == "Success" {
175+
return nil
176+
}
177+
178+
return resource.RetryableError(fmt.Errorf("postgresql instance ssl config is running, status is %s.", *result.Response.TaskSet[0].Status))
179+
})
180+
181+
if err != nil {
182+
log.Printf("[CRITAL]%s update postgresql instance ssl config, reason:%+v", logId, err)
183+
return err
184+
}
185+
186+
return resourceTencentCloudPostgresqlInstanceSslConfigRead(d, meta)
187+
}
188+
189+
func resourceTencentCloudPostgresqlInstanceSslConfigDelete(d *schema.ResourceData, meta interface{}) error {
190+
defer tccommon.LogElapsed("resource.tencentcloud_postgresql_instance_ssl_config.delete")()
191+
defer tccommon.InconsistentCheck(d, meta)()
192+
193+
return nil
194+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
Provides a resource to create a postgres instance ssl config
2+
3+
~> **NOTE:** If `ssl_enabled` is `false`, Please do not set `connect_address` field.
4+
5+
Example Usage
6+
7+
Enable ssl config
8+
9+
```hcl
10+
resource "tencentcloud_postgresql_instance_ssl_config" "example" {
11+
db_instance_id = "postgres-5wux9sub"
12+
ssl_enabled = true
13+
connect_address = "10.0.0.12"
14+
}
15+
```
16+
17+
Disable ssl config
18+
19+
```hcl
20+
resource "tencentcloud_postgresql_instance_ssl_config" "example" {
21+
db_instance_id = "postgres-5wux9sub"
22+
ssl_enabled = false
23+
}
24+
```
25+
26+
Import
27+
28+
postgres instance ssl config can be imported using the id, e.g.
29+
30+
```
31+
terraform import tencentcloud_postgresql_instance_ssl_config.example postgres-5wux9sub
32+
```
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package postgresql_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudPostgresqlInstanceSslConfigResource_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+
Config: testAccPostgresqlInstanceSslConfig,
20+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_postgresql_instance_ssl_config.postgresql_instance_ssl_config", "id")),
21+
}, {
22+
ResourceName: "tencentcloud_postgresql_instance_ssl_config.postgresql_instance_ssl_config",
23+
ImportState: true,
24+
ImportStateVerify: true,
25+
}},
26+
})
27+
}
28+
29+
const testAccPostgresqlInstanceSslConfig = `
30+
31+
resource "tencentcloud_postgresql_instance_ssl_config" "postgresql_instance_ssl_config" {
32+
}
33+
`

tencentcloud/services/postgresql/service_tencentcloud_postgresql.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2286,3 +2286,28 @@ func (me *PostgresqlService) DescribePostgresqlParametersById(ctx context.Contex
22862286
ret = response.Response
22872287
return
22882288
}
2289+
2290+
func (me *PostgresqlService) DescribePostgresqlInstanceSslConfigById(ctx context.Context, dbInsntaceId string) (ret *postgresv20170312.DescribeDBInstanceSSLConfigResponseParams, errRet error) {
2291+
logId := tccommon.GetLogId(ctx)
2292+
2293+
request := postgresv20170312.NewDescribeDBInstanceSSLConfigRequest()
2294+
request.DBInstanceId = helper.String(dbInsntaceId)
2295+
2296+
defer func() {
2297+
if errRet != nil {
2298+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
2299+
}
2300+
}()
2301+
2302+
ratelimit.Check(request.GetAction())
2303+
2304+
response, err := me.client.UsePostgresqlV20170312Client().DescribeDBInstanceSSLConfig(request)
2305+
if err != nil {
2306+
errRet = err
2307+
return
2308+
}
2309+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
2310+
2311+
ret = response.Response
2312+
return
2313+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
subcategory: "TencentDB for PostgreSQL(PostgreSQL)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_postgresql_instance_ssl_config"
5+
sidebar_current: "docs-tencentcloud-resource-postgresql_instance_ssl_config"
6+
description: |-
7+
Provides a resource to create a postgres instance ssl config
8+
---
9+
10+
# tencentcloud_postgresql_instance_ssl_config
11+
12+
Provides a resource to create a postgres instance ssl config
13+
14+
~> **NOTE:** If `ssl_enabled` is `false`, Please do not set `connect_address` field.
15+
16+
## Example Usage
17+
18+
### Enable ssl config
19+
20+
```hcl
21+
resource "tencentcloud_postgresql_instance_ssl_config" "example" {
22+
db_instance_id = "postgres-5wux9sub"
23+
ssl_enabled = true
24+
connect_address = "10.0.0.12"
25+
}
26+
```
27+
28+
### Disable ssl config
29+
30+
```hcl
31+
resource "tencentcloud_postgresql_instance_ssl_config" "example" {
32+
db_instance_id = "postgres-5wux9sub"
33+
ssl_enabled = false
34+
}
35+
```
36+
37+
## Argument Reference
38+
39+
The following arguments are supported:
40+
41+
* `db_instance_id` - (Required, String, ForceNew) Postgres instance ID.
42+
* `ssl_enabled` - (Required, Bool) Enable or disable SSL. true: enable; false: disable.
43+
* `connect_address` - (Optional, String) The unique connection address protected by SSL certificate, which can be set as the internal and external IP address if it is the primary instance; If it is a read-only instance, it can be set as the instance IP or read-only group IP. This parameter is mandatory when enabling SSL or modifying SSL protected connection addresses; When SSL is turned off, this parameter will be ignored.
44+
45+
## Attributes Reference
46+
47+
In addition to all arguments above, the following attributes are exported:
48+
49+
* `id` - ID of the resource.
50+
* `ca_url` - Cloud root certificate download link.
51+
52+
53+
## Import
54+
55+
postgres instance ssl config can be imported using the id, e.g.
56+
57+
```
58+
terraform import tencentcloud_postgresql_instance_ssl_config.example postgres-5wux9sub
59+
```
60+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6060,6 +6060,9 @@
60606060
<li>
60616061
<a href="/docs/providers/tencentcloud/r/postgresql_instance_network_access.html">tencentcloud_postgresql_instance_network_access</a>
60626062
</li>
6063+
<li>
6064+
<a href="/docs/providers/tencentcloud/r/postgresql_instance_ssl_config.html">tencentcloud_postgresql_instance_ssl_config</a>
6065+
</li>
60636066
<li>
60646067
<a href="/docs/providers/tencentcloud/r/postgresql_isolate_db_instance_operation.html">tencentcloud_postgresql_isolate_db_instance_operation</a>
60656068
</li>

0 commit comments

Comments
 (0)