Skip to content

Commit d708e7c

Browse files
committed
add
1 parent 8f0d71f commit d708e7c

File tree

11 files changed

+1450
-171
lines changed

11 files changed

+1450
-171
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1034
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1099
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1103
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1058
@@ -70,7 +70,7 @@ require (
7070
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
7272
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038
73-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1010
73+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1103
7474
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.1038
7575
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762
7676
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.1008

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1096 h1:DMo
941941
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1096/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
942942
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1099 h1:4fQ53ORk6Eayw1H2kg43PoBnUuhGR6WRG6rtec/i3oI=
943943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1099/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
944+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1103 h1:iXN1f1GxuX9wdluA+knK8xKsAWsOlz29V19fVcuuv9g=
945+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1103/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
944946
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
945947
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
946948
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -1001,6 +1003,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038
10011003
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038/go.mod h1:ZcauOIKWXstNwe6IlD3iBBxzljEWdQjZbTc6PfwsPxQ=
10021004
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1010 h1:lx554ZfB++mge+/Gk7LnDUI5Dwm9r+DgGNN9C/DqhE4=
10031005
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1010/go.mod h1:GGhAf2ehV2/jwKf3Sezr2x/soJ3nDuefJFlcoZnlflA=
1006+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1103 h1:lJW5ID6x9DS2xZzzALJVpY9zhNfqhBl/e2YDUkbzBcg=
1007+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1103/go.mod h1:PI4OqbnLLCWw6u/vNHnVVZeV/awmB9+zpLdhjYhWbKs=
10041008
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.1038 h1:4rzyVxkDB27v73jDXPr5eGAwjN859R7SsqniCt+46XE=
10051009
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.1038/go.mod h1:TAHhxxDVV36Pe4P4Gel3dgX4kHUfQO7f27GzRf8DAro=
10061010
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762 h1:rZDKucVVtTnmnbZFDyh6t47dHswkb2oSuOxOHTTkygA=

tencentcloud/services/postgresql/resource_tc_postgresql_instance_network_access.go

Lines changed: 84 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package postgresql
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"log"
78
"strings"
8-
"time"
99

1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -21,7 +21,7 @@ func ResourceTencentCloudPostgresqlInstanceNetworkAccess() *schema.Resource {
2121
Read: resourceTencentCloudPostgresqlInstanceNetworkAccessRead,
2222
Delete: resourceTencentCloudPostgresqlInstanceNetworkAccessDelete,
2323
Importer: &schema.ResourceImporter{
24-
StateContext: networkAccessCustomResourceImporter,
24+
State: schema.ImportStatePassthrough,
2525
},
2626
Schema: map[string]*schema.Schema{
2727
"db_instance_id": {
@@ -45,13 +45,6 @@ func ResourceTencentCloudPostgresqlInstanceNetworkAccess() *schema.Resource {
4545
Description: "Subnet ID.",
4646
},
4747

48-
"is_assign_vip": {
49-
Type: schema.TypeBool,
50-
Required: true,
51-
ForceNew: true,
52-
Description: "Whether to manually assign the VIP. Valid values: `true` (manually assign), `false` (automatically assign).",
53-
},
54-
5548
"vip": {
5649
Type: schema.TypeString,
5750
Optional: true,
@@ -93,12 +86,11 @@ func resourceTencentCloudPostgresqlInstanceNetworkAccessCreate(d *schema.Resourc
9386
subnetId = v.(string)
9487
}
9588

96-
if v, ok := d.GetOkExists("is_assign_vip"); ok {
97-
request.IsAssignVip = helper.Bool(v.(bool))
98-
}
89+
request.IsAssignVip = helper.Bool(false)
9990

10091
if v, ok := d.GetOk("vip"); ok {
10192
request.Vip = helper.String(v.(string))
93+
request.IsAssignVip = helper.Bool(true)
10294
vip = v.(string)
10395
}
10496

@@ -128,22 +120,41 @@ func resourceTencentCloudPostgresqlInstanceNetworkAccessCreate(d *schema.Resourc
128120
}
129121

130122
// wait & get vip
123+
flowId := *response.Response.FlowId
131124
flowRequest := postgresqlv20170312.NewDescribeTasksRequest()
132-
flowRequest.TaskId = response.Response.FlowId
133-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
134-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DescribeTasksWithContext(ctx, request)
125+
flowRequest.TaskId = helper.Int64Uint64(flowId)
126+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
127+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DescribeTasksWithContext(ctx, flowRequest)
135128
if e != nil {
136129
return tccommon.RetryError(e)
137130
} else {
138131
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
139132
}
140133

141-
if result == nil || result.Response == nil {
142-
return resource.NonRetryableError(fmt.Errorf("Create postgresql instance network access failed, Response is nil."))
134+
if result == nil || result.Response == nil || result.Response.TaskSet == nil {
135+
return resource.NonRetryableError(fmt.Errorf("Describe tasks failed, Response is nil."))
143136
}
144137

145-
response = result
146-
return nil
138+
if len(result.Response.TaskSet) == 0 {
139+
return resource.RetryableError(fmt.Errorf("wait TaskSet init."))
140+
}
141+
142+
if result.Response.TaskSet[0].Status != nil && *result.Response.TaskSet[0].Status == "Success" {
143+
if result.Response.TaskSet[0].TaskDetail != nil && result.Response.TaskSet[0].TaskDetail.Output != nil {
144+
outPutObj := make(map[string]interface{})
145+
outputStr := *result.Response.TaskSet[0].TaskDetail.Output
146+
e := json.Unmarshal([]byte(outputStr), &outPutObj)
147+
if e != nil {
148+
return resource.NonRetryableError(fmt.Errorf("Json unmarshall output error: %s.", e.Error()))
149+
}
150+
151+
dBInstanceNetInfo := outPutObj["DBInstanceNetInfo"].(map[string]interface{})
152+
vip = dBInstanceNetInfo["Ip"].(string)
153+
return nil
154+
}
155+
}
156+
157+
return resource.RetryableError(fmt.Errorf("postgresql instance network access is running, status is %s.", *result.Response.TaskSet[0].Status))
147158
})
148159

149160
if err != nil {
@@ -160,16 +171,17 @@ func resourceTencentCloudPostgresqlInstanceNetworkAccessRead(d *schema.ResourceD
160171
defer tccommon.LogElapsed("resource.tencentcloud_postgresql_instance_network_access.read")()
161172
defer tccommon.InconsistentCheck(d, meta)()
162173

163-
logId := tccommon.GetLogId(tccommon.ContextNil)
164-
165-
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
166-
167-
service := PostgresqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
174+
var (
175+
logId = tccommon.GetLogId(tccommon.ContextNil)
176+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
177+
service = PostgresqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
178+
)
168179

169180
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
170181
if len(idSplit) != 4 {
171182
return fmt.Errorf("id is broken,%s", d.Id())
172183
}
184+
173185
dbInsntaceId := idSplit[0]
174186
vpcId := idSplit[1]
175187
subnetId := idSplit[2]
@@ -191,8 +203,9 @@ func resourceTencentCloudPostgresqlInstanceNetworkAccessRead(d *schema.ResourceD
191203
log.Printf("[WARN]%s resource `postgresql_instance_network_access` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
192204
return nil
193205
}
194-
if err := resourceTencentCloudPostgresqlInstanceNetworkAccessReadPreHandleResponse0(ctx, respData); err != nil {
195-
return err
206+
207+
if respData.DBInstanceId != nil {
208+
_ = d.Set("db_instance_id", respData.DBInstanceId)
196209
}
197210

198211
if respData.VpcId != nil {
@@ -203,128 +216,95 @@ func resourceTencentCloudPostgresqlInstanceNetworkAccessRead(d *schema.ResourceD
203216
_ = d.Set("subnet_id", respData.SubnetId)
204217
}
205218

206-
if respData.DBInstanceId != nil {
207-
_ = d.Set("db_instance_id", respData.DBInstanceId)
219+
if respData.DBInstanceNetInfo != nil && len(respData.DBInstanceNetInfo) > 0 {
220+
for _, item := range respData.DBInstanceNetInfo {
221+
if *item.Ip == vip {
222+
_ = d.Set("vip", item.Ip)
223+
break
224+
}
225+
}
208226
}
209227

210-
_ = vpcId
211-
_ = subnetId
212-
_ = vip
213228
return nil
214229
}
215230

216231
func resourceTencentCloudPostgresqlInstanceNetworkAccessDelete(d *schema.ResourceData, meta interface{}) error {
217232
defer tccommon.LogElapsed("resource.tencentcloud_postgresql_instance_network_access.delete")()
218233
defer tccommon.InconsistentCheck(d, meta)()
219234

220-
logId := tccommon.GetLogId(tccommon.ContextNil)
221-
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
235+
var (
236+
logId = tccommon.GetLogId(tccommon.ContextNil)
237+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
238+
request = postgresqlv20170312.NewDeleteDBInstanceNetworkAccessRequest()
239+
response = postgresqlv20170312.NewDeleteDBInstanceNetworkAccessResponse()
240+
)
222241

223242
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
224243
if len(idSplit) != 4 {
225244
return fmt.Errorf("id is broken,%s", d.Id())
226245
}
246+
227247
dbInsntaceId := idSplit[0]
228248
vpcId := idSplit[1]
229249
subnetId := idSplit[2]
230250
vip := idSplit[3]
231251

232-
var (
233-
request = postgresqlv20170312.NewDeleteDBInstanceNetworkAccessRequest()
234-
response = postgresqlv20170312.NewDeleteDBInstanceNetworkAccessResponse()
235-
)
236-
237252
request.DBInstanceId = helper.String(dbInsntaceId)
238-
239253
request.VpcId = helper.String(vpcId)
240-
241254
request.SubnetId = helper.String(subnetId)
242-
243255
request.Vip = helper.String(vip)
244-
245256
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
246257
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DeleteDBInstanceNetworkAccessWithContext(ctx, request)
247258
if e != nil {
248259
return tccommon.RetryError(e)
249260
} else {
250261
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
251262
}
263+
264+
if result == nil || result.Response == nil {
265+
return resource.NonRetryableError(fmt.Errorf("Delete postgresql instance network access failed, Response is nil."))
266+
}
267+
252268
response = result
253269
return nil
254270
})
271+
255272
if err != nil {
256273
log.Printf("[CRITAL]%s delete postgresql instance network access failed, reason:%+v", logId, err)
257274
return err
258275
}
259276

260-
_ = response
261-
if _, err := (&resource.StateChangeConf{
262-
Delay: 10 * time.Second,
263-
MinTimeout: 3 * time.Second,
264-
Pending: []string{},
265-
Refresh: resourcePostgresqlInstanceNetworkAccessDeleteStateRefreshFunc_0_0(ctx, dbInsntaceId, vpcId, subnetId, vip),
266-
Target: []string{"Running"},
267-
Timeout: 180 * time.Second,
268-
}).WaitForStateContext(ctx); err != nil {
269-
return err
270-
}
271-
return nil
272-
}
273-
274-
func resourcePostgresqlInstanceNetworkAccessCreateStateRefreshFunc_0_0(ctx context.Context, dbInsntaceId string, vpcId string, subnetId string, vip string) resource.StateRefreshFunc {
275-
var req *postgresqlv20170312.DescribeDBInstanceAttributeRequest
276-
return func() (interface{}, string, error) {
277-
meta := tccommon.ProviderMetaFromContext(ctx)
278-
if meta == nil {
279-
return nil, "", fmt.Errorf("resource data can not be nil")
277+
// wait
278+
flowId := *response.Response.FlowId
279+
flowRequest := postgresqlv20170312.NewDescribeTasksRequest()
280+
flowRequest.TaskId = helper.Int64Uint64(flowId)
281+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
282+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DescribeTasksWithContext(ctx, flowRequest)
283+
if e != nil {
284+
return tccommon.RetryError(e)
285+
} else {
286+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
280287
}
281-
if req == nil {
282-
d := tccommon.ResourceDataFromContext(ctx)
283-
if d == nil {
284-
return nil, "", fmt.Errorf("resource data can not be nil")
285-
}
286-
_ = d
287-
req = postgresqlv20170312.NewDescribeDBInstanceAttributeRequest()
288-
req.DBInstanceId = helper.String(dbInsntaceId)
289288

289+
if result == nil || result.Response == nil || result.Response.TaskSet == nil {
290+
return resource.NonRetryableError(fmt.Errorf("Describe tasks failed, Response is nil."))
290291
}
291-
resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DescribeDBInstanceAttributeWithContext(ctx, req)
292-
if err != nil {
293-
return nil, "", err
294-
}
295-
if resp == nil || resp.Response == nil {
296-
return nil, "", nil
297-
}
298-
state := fmt.Sprintf("%v", *resp.Response.DBInstance.DBInstanceStatus)
299-
return resp.Response, state, nil
300-
}
301-
}
302292

303-
func resourcePostgresqlInstanceNetworkAccessDeleteStateRefreshFunc_0_0(ctx context.Context, dbInsntaceId string, vpcId string, subnetId string, vip string) resource.StateRefreshFunc {
304-
var req *postgresqlv20170312.DescribeDBInstanceAttributeRequest
305-
return func() (interface{}, string, error) {
306-
meta := tccommon.ProviderMetaFromContext(ctx)
307-
if meta == nil {
308-
return nil, "", fmt.Errorf("resource data can not be nil")
293+
if len(result.Response.TaskSet) == 0 {
294+
return resource.RetryableError(fmt.Errorf("wait TaskSet init."))
309295
}
310-
if req == nil {
311-
d := tccommon.ResourceDataFromContext(ctx)
312-
if d == nil {
313-
return nil, "", fmt.Errorf("resource data can not be nil")
314-
}
315-
_ = d
316-
req = postgresqlv20170312.NewDescribeDBInstanceAttributeRequest()
317-
req.DBInstanceId = helper.String(dbInsntaceId)
318296

297+
if result.Response.TaskSet[0].Status != nil && *result.Response.TaskSet[0].Status == "Success" {
298+
return nil
319299
}
320-
resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePostgresqlV20170312Client().DescribeDBInstanceAttributeWithContext(ctx, req)
321-
if err != nil {
322-
return nil, "", err
323-
}
324-
if resp == nil || resp.Response == nil {
325-
return nil, "", nil
326-
}
327-
state := fmt.Sprintf("%v", *resp.Response.DBInstance.DBInstanceStatus)
328-
return resp.Response, state, nil
300+
301+
return resource.RetryableError(fmt.Errorf("postgresql instance network access is running, status is %s.", *result.Response.TaskSet[0].Status))
302+
})
303+
304+
if err != nil {
305+
log.Printf("[CRITAL]%s delete postgresql instance network access failed, reason:%+v", logId, err)
306+
return err
329307
}
308+
309+
return nil
330310
}
Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,32 @@
1-
Provides a resource to create a postgres postgresql_instance_network_access
1+
Provides a resource to create a postgres instance network access
22

33
Example Usage
44

5+
Create by custom vip
6+
7+
```hcl
8+
resource "tencentcloud_postgresql_instance_network_access" "example" {
9+
db_instance_id = "postgres-ai46555b"
10+
vpc_id = "vpc-i5yyodl9"
11+
subnet_id = "subnet-d4umunpy"
12+
vip = "10.0.10.11"
13+
}
14+
```
15+
16+
Create by automatic allocation vip
17+
518
```hcl
6-
resource "tencentcloud_postgresql_instance_network_access" "postgresql_instance_network_access" {
19+
resource "tencentcloud_postgresql_instance_network_access" "example" {
20+
db_instance_id = "postgres-ai46555b"
21+
vpc_id = "vpc-i5yyodl9"
22+
subnet_id = "subnet-d4umunpy"
723
}
824
```
925

1026
Import
1127

12-
postgres postgresql_instance_network_access can be imported using the id, e.g.
28+
postgres instance network access can be imported using the id, e.g.
1329

1430
```
15-
terraform import tencentcloud_postgresql_instance_network_access.postgresql_instance_network_access postgresql_instance_network_access_id
31+
terraform import tencentcloud_postgresql_instance_network_access.example postgres-ai46555b#vpc-i5yyodl9#subnet-d4umunpy#10.0.10.11
1632
```

0 commit comments

Comments
 (0)