Skip to content

Commit d173967

Browse files
authored
add vpc ipv6 (#1860)
* add vpc ipv6 * add changelog * add changelog
1 parent 9c1cb7a commit d173967

19 files changed

+1704
-0
lines changed

.changelog/1860.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
```release-note:new-resource
2+
tencentcloud_vpc_ipv6_cidr_block
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_vpc_ipv6_subnet_cidr_block
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_vpc_ipv6_eni_address
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_vpc_local_gateway
15+
```
16+
17+
```release-note:new-resource
18+
tencentcloud_vpc_resume_snapshot_instance
19+
```

tencentcloud/provider.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,11 @@ Virtual Private Cloud(VPC)
866866
tencentcloud_vpc_snapshot_policy_config
867867
tencentcloud_vpc_net_detect
868868
tencentcloud_vpc_dhcp_ip
869+
tencentcloud_vpc_ipv6_cidr_block
870+
tencentcloud_vpc_ipv6_subnet_cidr_block
871+
tencentcloud_vpc_ipv6_eni_address
872+
tencentcloud_vpc_local_gateway
873+
tencentcloud_vpc_resume_snapshot_instance
869874
tencentcloud_subnet
870875
tencentcloud_security_group
871876
tencentcloud_security_group_rule
@@ -1902,7 +1907,12 @@ func Provider() *schema.Provider {
19021907
"tencentcloud_vpc_flow_log_config": resourceTencentCloudVpcFlowLogConfig(),
19031908
"tencentcloud_vpc_classic_link_attachment": resourceTencentCloudVpcClassicLinkAttachment(),
19041909
"tencentcloud_vpc_dhcp_ip": resourceTencentCloudVpcDhcpIp(),
1910+
"tencentcloud_vpc_ipv6_cidr_block": resourceTencentCloudVpcIpv6CidrBlock(),
1911+
"tencentcloud_vpc_ipv6_subnet_cidr_block": resourceTencentCloudVpcIpv6SubnetCidrBlock(),
1912+
"tencentcloud_vpc_ipv6_eni_address": resourceTencentCloudVpcIpv6EniAddress(),
19051913
"tencentcloud_vpc_dhcp_associate_address": resourceTencentCloudVpcDhcpAssociateAddress(),
1914+
"tencentcloud_vpc_local_gateway": resourceTencentCloudVpcLocalGateway(),
1915+
"tencentcloud_vpc_resume_snapshot_instance": resourceTencentCloudVpcResumeSnapshotInstance(),
19061916
"tencentcloud_ipv6_address_bandwidth": resourceTencentCloudIpv6AddressBandwidth(),
19071917
"tencentcloud_subnet": resourceTencentCloudVpcSubnet(),
19081918
"tencentcloud_route_entry": resourceTencentCloudRouteEntry(),
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
/*
2+
Provides a resource to create a vpc ipv6_cidr_block
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_vpc" "cidr-block" {
8+
name = "ipv6-cidr-block-for-test"
9+
cidr_block = "10.0.0.0/16"
10+
is_multicast = false
11+
}
12+
13+
resource "tencentcloud_vpc_ipv6_cidr_block" "ipv6_cidr_block" {
14+
vpc_id = tencentcloud_vpc.cidr-block.id
15+
}
16+
```
17+
18+
Import
19+
20+
vpc ipv6_cidr_block can be imported using the id, e.g.
21+
22+
```
23+
terraform import tencentcloud_vpc_ipv6_cidr_block.ipv6_cidr_block vpc_id
24+
```
25+
*/
26+
package tencentcloud
27+
28+
import (
29+
"context"
30+
"log"
31+
32+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
33+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
34+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
35+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
36+
)
37+
38+
func resourceTencentCloudVpcIpv6CidrBlock() *schema.Resource {
39+
return &schema.Resource{
40+
Create: resourceTencentCloudVpcIpv6CidrBlockCreate,
41+
Read: resourceTencentCloudVpcIpv6CidrBlockRead,
42+
Delete: resourceTencentCloudVpcIpv6CidrBlockDelete,
43+
Importer: &schema.ResourceImporter{
44+
State: schema.ImportStatePassthrough,
45+
},
46+
Schema: map[string]*schema.Schema{
47+
"vpc_id": {
48+
Required: true,
49+
Type: schema.TypeString,
50+
ForceNew: true,
51+
Description: "`VPC` instance `ID`, in the form of `vpc-f49l6u0z`.",
52+
},
53+
"ipv6_cidr_block": {
54+
Type: schema.TypeString,
55+
Computed: true,
56+
Description: "ipv6 cidr block.",
57+
},
58+
},
59+
}
60+
}
61+
62+
func resourceTencentCloudVpcIpv6CidrBlockCreate(d *schema.ResourceData, meta interface{}) error {
63+
defer logElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.create")()
64+
defer inconsistentCheck(d, meta)()
65+
66+
logId := getLogId(contextNil)
67+
68+
var (
69+
request = vpc.NewAssignIpv6CidrBlockRequest()
70+
vpcId string
71+
)
72+
if v, ok := d.GetOk("vpc_id"); ok {
73+
vpcId = v.(string)
74+
request.VpcId = helper.String(vpcId)
75+
}
76+
77+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
78+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssignIpv6CidrBlock(request)
79+
if e != nil {
80+
return retryError(e)
81+
} else {
82+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
83+
}
84+
return nil
85+
})
86+
if err != nil {
87+
log.Printf("[CRITAL]%s create vpc ipv6CidrBlock failed, reason:%+v", logId, err)
88+
return err
89+
}
90+
91+
d.SetId(vpcId)
92+
93+
return resourceTencentCloudVpcIpv6CidrBlockRead(d, meta)
94+
}
95+
96+
func resourceTencentCloudVpcIpv6CidrBlockRead(d *schema.ResourceData, meta interface{}) error {
97+
defer logElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.read")()
98+
defer inconsistentCheck(d, meta)()
99+
100+
logId := getLogId(contextNil)
101+
102+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
103+
104+
service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn}
105+
106+
vpcId := d.Id()
107+
108+
instance, err := service.DescribeVpcById(ctx, vpcId)
109+
if err != nil {
110+
return err
111+
}
112+
113+
if instance == nil {
114+
d.SetId("")
115+
log.Printf("[WARN]%s resource `VpcIpv6CidrBlock` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
116+
return nil
117+
}
118+
119+
if instance.VpcId != nil {
120+
_ = d.Set("vpc_id", instance.VpcId)
121+
}
122+
123+
if instance.Ipv6CidrBlock != nil {
124+
_ = d.Set("ipv6_cidr_block", instance.Ipv6CidrBlock)
125+
}
126+
127+
return nil
128+
}
129+
130+
func resourceTencentCloudVpcIpv6CidrBlockDelete(d *schema.ResourceData, meta interface{}) error {
131+
defer logElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.delete")()
132+
defer inconsistentCheck(d, meta)()
133+
134+
logId := getLogId(contextNil)
135+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
136+
137+
service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn}
138+
vpcId := d.Id()
139+
140+
if err := service.DeleteVpcIpv6CidrBlockById(ctx, vpcId); err != nil {
141+
return err
142+
}
143+
144+
return nil
145+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudVpcIpv6CidrBlockResource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccVpcIpv6CidrBlock,
19+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_vpc_ipv6_cidr_block.ipv6_cidr_block", "id")),
20+
},
21+
{
22+
ResourceName: "tencentcloud_vpc_ipv6_cidr_block.ipv6_cidr_block",
23+
ImportState: true,
24+
ImportStateVerify: true,
25+
},
26+
},
27+
})
28+
}
29+
30+
const testAccVpcIpv6CidrBlock = `
31+
32+
resource "tencentcloud_vpc" "cidr-block" {
33+
name = "ipv6-cidr-block-for-test"
34+
cidr_block = "10.0.0.0/16"
35+
is_multicast = false
36+
}
37+
38+
resource "tencentcloud_vpc_ipv6_cidr_block" "ipv6_cidr_block" {
39+
vpc_id = tencentcloud_vpc.cidr-block.id
40+
}
41+
42+
`

0 commit comments

Comments
 (0)