Skip to content

Commit 85d97f4

Browse files
committed
fix acl resource and data source; add doc
1 parent 2115a1a commit 85d97f4

File tree

32 files changed

+2657
-351
lines changed

32 files changed

+2657
-351
lines changed

CHANGELOG.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
1-
## 1.40.1 (Unreleased)
1+
## 1.40.3 (Unreleased)
22

33
FEATURES:
44

55
* **New Data Source**: `tencentcloud_vpc_acls`
66
* **New Resource**: `tencentcloud_vpc_acl`
77
* **New Resource**: `tencentcloud_vpc_acl_attachment`
88

9+
## 1.40.2 (August 08, 2020)
10+
11+
BUG FIXES:
12+
13+
* Resource: `tencentcloud_instance` fix accidentally fail to delete prepaid instance ([#485](https://github.com/tencentcloudstack/terraform-provider-tencentcloud/issues/485)).
14+
15+
## 1.40.1 (August 05, 2020)
16+
17+
BUG FIXES:
18+
19+
* Resource: `tencentcloud_vpn_connection` fix mulit `security_group_policy` is not supported ([#487](https://github.com/tencentcloudstack/terraform-provider-tencentcloud/issues/487)).
20+
921
## 1.40.0 (July 31, 2020)
1022

1123
FEATURES:

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/mattn/go-colorable v0.1.6 // indirect
1616
github.com/mitchellh/go-homedir v1.1.0
1717
github.com/pkg/errors v0.9.1
18-
github.com/tencentcloud/tencentcloud-sdk-go v3.0.217+incompatible
18+
github.com/tencentcloud/tencentcloud-sdk-go v3.0.229+incompatible
1919
github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1
2020
github.com/zclconf/go-cty v1.4.2 // indirect
2121
golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,8 @@ github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 h1:Xr9gkxfOP0K
460460
github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM=
461461
github.com/tencentcloud/tencentcloud-sdk-go v3.0.217+incompatible h1:c0N5XTxnRv3e6lgIEw3Ml0RdIV0fA8qDRuVEhQnDViE=
462462
github.com/tencentcloud/tencentcloud-sdk-go v3.0.217+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
463+
github.com/tencentcloud/tencentcloud-sdk-go v3.0.229+incompatible h1:ZlFfQuJYC+g2bEjlZUvIUQUifHhzWM69GTzFh0qzLl4=
464+
github.com/tencentcloud/tencentcloud-sdk-go v3.0.229+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
463465
github.com/tetafro/godot v0.3.7 h1:+mecr7RKrUKB5UQ1gwqEMn13sDKTyDR8KNIquB9mm+8=
464466
github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0=
465467
github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q=

tencentcloud/data_source_tc_vpc_acls.go

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ Example Usage
77
data "tencentcloud_vpc_instances" "foo" {
88
}
99
10-
resource "tencentcloud_vpc_acl" "main" {
10+
resource "tencentcloud_vpc_acls" "main" {
1111
vpc_id = data.tencentcloud_vpc_instances.foo.instance_list.0.vpc_id
1212
}
1313
14-
resource "tencentcloud_vpc_acl" "main" {
14+
resource "tencentcloud_vpc_acls" "main" {
1515
name = "test_acl"
1616
}
1717
@@ -84,7 +84,7 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource {
8484
"subnets": {
8585
Type: schema.TypeList,
8686
Computed: true,
87-
Description: "",
87+
Description: "Subnets associated with the network ACL.",
8888
Elem: &schema.Resource{
8989
Schema: map[string]*schema.Schema{
9090
"vpc_id": {
@@ -95,7 +95,7 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource {
9595
"subnet_id": {
9696
Type: schema.TypeString,
9797
Computed: true,
98-
Description: "Subnet instance `ID`",
98+
Description: "Subnet instance `ID`.",
9999
},
100100
"subnet_name": {
101101
Type: schema.TypeString,
@@ -118,13 +118,13 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource {
118118
"ingress": {
119119
Type: schema.TypeList,
120120
Computed: true,
121-
Description: "",
121+
Description: "Inbound rules of the network ACL.",
122122
Elem: &schema.Resource{
123123
Schema: map[string]*schema.Schema{
124124
"protocol": {
125125
Type: schema.TypeString,
126126
Computed: true,
127-
Description: "Type of ip protocol. ",
127+
Description: "Type of ip protocol.",
128128
},
129129
"port": {
130130
Type: schema.TypeString,
@@ -141,19 +141,24 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource {
141141
Computed: true,
142142
Description: "An IP address network or segment.",
143143
},
144+
"description": {
145+
Type: schema.TypeString,
146+
Computed: true,
147+
Description: "Rule description.",
148+
},
144149
},
145150
},
146151
},
147152
"egress": {
148153
Type: schema.TypeList,
149154
Computed: true,
150-
Description: "",
155+
Description: "Outbound rules of the network ACL.",
151156
Elem: &schema.Resource{
152157
Schema: map[string]*schema.Schema{
153158
"protocol": {
154159
Type: schema.TypeString,
155160
Computed: true,
156-
Description: "Type of ip protocol. ",
161+
Description: "Type of ip protocol.",
157162
},
158163
"port": {
159164
Type: schema.TypeString,
@@ -170,6 +175,11 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource {
170175
Computed: true,
171176
Description: "An IP address network or segment.",
172177
},
178+
"description": {
179+
Type: schema.TypeString,
180+
Computed: true,
181+
Description: "Rule description.",
182+
},
173183
},
174184
},
175185
},
@@ -181,7 +191,7 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource {
181191
}
182192

183193
func dataSourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) error {
184-
defer logElapsed("data_source.tencentcloud_vpc_acl.read")()
194+
defer logElapsed("data_source.tencentcloud_vpc_acls.read")()
185195
var (
186196
logId = getLogId(contextNil)
187197
ctx = context.WithValue(context.TODO(), logIdKey, logId)
@@ -225,15 +235,15 @@ func dataSourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{})
225235
for i := range subnetInfo {
226236
v := subnetInfo[i]
227237
subnet := make(map[string]interface{}, 5)
228-
subnet["vpc_id"] = *v.VpcId
229-
subnet["subnet_id"] = *v.SubnetId
230-
subnet["subnet_name"] = *v.SubnetName
231-
subnet["cidr_block"] = *v.CidrBlock
238+
subnet["vpc_id"] = v.VpcId
239+
subnet["subnet_id"] = v.SubnetId
240+
subnet["subnet_name"] = v.SubnetName
241+
subnet["cidr_block"] = v.CidrBlock
232242

233-
tag := make(map[string]string, len(v.TagSet))
243+
tag := make(map[string]interface{}, len(v.TagSet))
234244
for t := range v.TagSet {
235245
tagValue := v.TagSet[t]
236-
tag[*tagValue.Key] = *tagValue.Value
246+
tag[*tagValue.Key] = tagValue.Value
237247
}
238248
subnet["tags"] = tag
239249

@@ -244,12 +254,12 @@ func dataSourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{})
244254
ingress := make([]map[string]interface{}, 0, len(ingressInfo))
245255
for i := range ingressInfo {
246256
v := ingressInfo[i]
247-
egressMap := make(map[string]interface{}, 4)
248-
egressMap["protocol"] = *v.Protocol
249-
egressMap["port"] = *v.Port
250-
egressMap["cidr_block"] = *v.CidrBlock
251-
egressMap["policy"] = *v.Action
252-
egressMap["description"] = *v.Description
257+
egressMap := make(map[string]interface{}, 5)
258+
egressMap["protocol"] = v.Protocol
259+
egressMap["port"] = v.Port
260+
egressMap["cidr_block"] = v.CidrBlock
261+
egressMap["policy"] = v.Action
262+
egressMap["description"] = v.Description
253263

254264
ingress = append(ingress, egressMap)
255265
}
@@ -258,12 +268,12 @@ func dataSourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{})
258268
egress := make([]map[string]interface{}, 0, len(egressInfo))
259269
for i := range egressInfo {
260270
v := egressInfo[i]
261-
egressMap := make(map[string]interface{}, 4)
262-
egressMap["protocol"] = *v.Protocol
263-
egressMap["port"] = *v.Port
264-
egressMap["cidr_block"] = *v.CidrBlock
265-
egressMap["policy"] = *v.Action
266-
egressMap["description"] = *v.Description
271+
egressMap := make(map[string]interface{}, 5)
272+
egressMap["protocol"] = v.Protocol
273+
egressMap["port"] = v.Port
274+
egressMap["cidr_block"] = v.CidrBlock
275+
egressMap["policy"] = v.Action
276+
egressMap["description"] = v.Description
267277

268278
egress = append(egress, egressMap)
269279
}

tencentcloud/data_source_tc_vpc_acls_test.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,16 @@ import (
66
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
77
)
88

9-
func TestAccDataSourceTencentCloudVpcACLBasic(t *testing.T) {
9+
func TestAccDataSourceTencentCloudVpcACL_Basic(t *testing.T) {
1010
resource.Test(t, resource.TestCase{
1111
PreCheck: func() { testAccPreCheck(t) },
1212
Providers: testAccProviders,
1313
Steps: []resource.TestStep{
1414
{
1515
Config: TestAccDataSourceTencentCloudVpcACLInstances,
16-
1716
Check: resource.ComposeTestCheckFunc(
18-
// id filter
19-
testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_acl.default"),
20-
resource.TestCheckResourceAttr("data.tencentcloud_vpc_acl.default", "name", "test_acl"),
21-
resource.TestCheckResourceAttr("data.tencentcloud_vpc_acl.default", "egress.#", "1"),
22-
resource.TestCheckResourceAttr("data.tencentcloud_vpc_acl.default", "ingress.#", "1"),
17+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_acls.default"),
18+
resource.TestCheckResourceAttr("data.tencentcloud_vpc_acls.default", "name", "test_acl"),
2319
),
2420
},
2521
},
@@ -41,7 +37,7 @@ resource "tencentcloud_vpc_acl" "foo" {
4137
]
4238
}
4339
44-
data "tencentcloud_vpc_instances" "default" {
40+
data "tencentcloud_vpc_acls" "default" {
4541
name = "test_acl"
4642
result_output_file="data_source_tc_vpc_acls.txt"
4743
}

tencentcloud/resource_tc_instance.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
961961
cvmService := CvmService{
962962
client: meta.(*TencentCloudClient).apiV3Conn,
963963
}
964+
964965
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
965966
errRet := cvmService.DeleteInstance(ctx, instanceId)
966967
if errRet != nil {
@@ -976,7 +977,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
976977
notExist := false
977978

978979
//check exist
979-
err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError {
980+
err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
980981
instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId)
981982
if errRet != nil {
982983
return retryError(errRet, InternalError)
@@ -985,13 +986,12 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
985986
notExist = true
986987
return nil
987988
}
988-
if *instance.InstanceState == CVM_STATUS_SHUTDOWN {
989+
if *instance.InstanceState == CVM_STATUS_SHUTDOWN && *instance.LatestOperationState != CVM_LATEST_OPERATION_STATE_OPERATING {
989990
//in recycling
990991
return nil
991992
}
992993
return resource.RetryableError(fmt.Errorf("cvm instance status is %s, retry...", *instance.InstanceState))
993994
})
994-
995995
if err != nil {
996996
return err
997997
}
@@ -1000,9 +1000,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
10001000
return nil
10011001
}
10021002

1003-
//exist in recycle
1004-
1005-
//delete again
1003+
// exist in recycle, delete again
10061004
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
10071005
errRet := cvmService.DeleteInstance(ctx, instanceId)
10081006
//when state is terminating, do not delete but check exist
@@ -1024,7 +1022,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
10241022
}
10251023

10261024
//describe and check not exist
1027-
err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError {
1025+
err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
10281026
instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId)
10291027
if errRet != nil {
10301028
return retryError(errRet, InternalError)
@@ -1034,10 +1032,9 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
10341032
}
10351033
return resource.RetryableError(fmt.Errorf("cvm instance status is %s, retry...", *instance.InstanceState))
10361034
})
1037-
10381035
if err != nil {
10391036
return err
10401037
}
1041-
return nil
10421038

1039+
return nil
10431040
}

tencentcloud/resource_tc_vpc_acl.go

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,21 @@ Provide a resource to create a VPC ACL instance.
44
Example Usage
55
66
```hcl
7-
data "tencentcloud_vpc_instances" "foo" {
7+
data "tencentcloud_vpc_instances" "default" {
88
}
99
10-
resource "resource_vpc_acl" "default" {
11-
vpc_id = data.tencentcloud_vpc_instances.foo.instance_list.0.vpc_id
12-
network_acl_name = "test_acl"
13-
ingress [
14-
"ACCEPT#192.168.1.0/24#80#TCP",
15-
"ACCEPT#192.168.1.0/24#80-90#TCP",
10+
resource "tencentcloud_vpc_acl" "foo" {
11+
vpc_id = data.tencentcloud_vpc_instances.default.instance_list.0.vpc_id
12+
name = "test_acl_update"
13+
ingress = [
14+
"ACCEPT#192.168.1.0/24#800#TCP",
15+
"ACCEPT#192.168.1.0/24#800-900#TCP",
1616
]
17-
egress [
18-
"ACCEPT#192.168.1.0/24#80#TCP",
19-
"ACCEPT#192.168.1.0/24#80-90#TCP",
17+
egress = [
18+
"ACCEPT#192.168.1.0/24#800#TCP",
19+
"ACCEPT#192.168.1.0/24#800-900#TCP",
2020
]
2121
}
22-
2322
```
2423
2524
Import
@@ -78,11 +77,6 @@ func resourceTencentCloudVpcACL() *schema.Resource {
7877
},
7978

8079
//compute
81-
"acl_id": {
82-
Type: schema.TypeString,
83-
Computed: true,
84-
Description: "`ID` of the network ACL instance.",
85-
},
8680
"create_time": {
8781
Type: schema.TypeString,
8882
Computed: true,
@@ -173,7 +167,6 @@ func resourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) er
173167
return errRet
174168
}
175169

176-
_ = d.Set("acl_id", id)
177170
_ = d.Set("vpc_id", vpcID)
178171
_ = d.Set("create_time", createTime)
179172
return nil
@@ -311,5 +304,20 @@ func resourceTencentCloudVpcACLDelete(d *schema.ResourceData, meta interface{})
311304
id = d.Id()
312305
)
313306

314-
return service.DeleteAcl(ctx, id)
307+
err := service.DeleteAcl(ctx, id)
308+
if err != nil {
309+
return err
310+
}
311+
312+
_, _, has, err := service.DescribeNetWorkByACLID(ctx, id)
313+
314+
if err != nil {
315+
return err
316+
}
317+
318+
if has > 0 {
319+
return fmt.Errorf("[CRITAL]%s delete network acl : %s failed\n", logId, id)
320+
}
321+
322+
return nil
315323
}

0 commit comments

Comments
 (0)