Skip to content

fix(vpc): [123705166] tencentcloud_vpc_ipv6_cidr_block support address_type #3328

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 24, 2025
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
3 changes: 3 additions & 0 deletions .changelog/3328.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_vpc_ipv6_cidr_block: support `address_type`
```
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1135
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1145
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1148
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1128
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111
Expand Down Expand Up @@ -96,7 +96,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1122
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1148
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1037
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
Expand Down
5 changes: 5 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -942,8 +942,11 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1133/go.mod
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1135 h1:NAu4sH5c+kGTZQ0rwhnuYjIXbentw3Np+TbwimH22uc=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1135/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1136/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1142/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1145 h1:DETyir/MtG+GLOD0OatzjrQTTXRguFSJo1ZtPXtbIQw=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1145/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1148 h1:+2jHvXzO0ljzTtqdnZ6ug0wMLYSaMwyr1zJa0z/DqyE=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1148/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
Expand Down Expand Up @@ -1068,6 +1071,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860 h1:vW2NgAH
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860/go.mod h1:uCkDh/AW/tb8JGq5b2kqLjqZuhCFR+6oTsq1SrrvT44=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1122 h1:K9uRaby+EqZdqZHcTsRRIxgyaCWomFHPqQMZDrsiTM0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1122/go.mod h1:8xCo14lGkAvl5EhpYpmLk5ztoFcHdpBLzLzAawxjl+Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1148 h1:qtzL3QscVftBw9ZVKI7fmebCkc6zL+3zSkRFtj77HpI=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1148/go.mod h1:NHVGgF5BAXq5emdefxsC+P1/MsL3ryr5s2jHpxDTYJM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1037 h1:sgHOHqVFcO266dnoh0KJ0CoxrRglRZYKW78iBh41Giw=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1037/go.mod h1:QM5m6aZ65kaxaES0D44BNKmemn+9WBf5vr3HDDPrh8U=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=
Expand Down
49 changes: 34 additions & 15 deletions tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,20 @@ func ResourceTencentCloudVpcIpv6CidrBlock() *schema.Resource {
},
Schema: map[string]*schema.Schema{
"vpc_id": {
Required: true,
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "`VPC` instance `ID`, in the form of `vpc-f49l6u0z`.",
},

"address_type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
Description: "Apply for the type of IPv6 Cidr, GUA (Global Unicast Address), ULA (Unique Local Address).",
},

"ipv6_cidr_block": {
Type: schema.TypeString,
Computed: true,
Expand All @@ -41,26 +50,32 @@ func resourceTencentCloudVpcIpv6CidrBlockCreate(d *schema.ResourceData, meta int
defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.create")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
request = vpc.NewAssignIpv6CidrBlockRequest()
vpcId string
)

if v, ok := d.GetOk("vpc_id"); ok {
vpcId = v.(string)
request.VpcId = helper.String(vpcId)
}

if v, ok := d.GetOk("address_type"); ok {
request.AddressType = helper.String(v.(string))
}

err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssignIpv6CidrBlock(request)
if e != nil {
return tccommon.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 {
log.Printf("[CRITAL]%s create vpc ipv6CidrBlock failed, reason:%+v", logId, err)
return err
Expand All @@ -75,13 +90,12 @@ func resourceTencentCloudVpcIpv6CidrBlockRead(d *schema.ResourceData, meta inter
defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.read")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)

service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}

vpcId := d.Id()
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
vpcId = d.Id()
)

instance, err := service.DescribeVpcById(ctx, vpcId)
if err != nil {
Expand All @@ -98,6 +112,10 @@ func resourceTencentCloudVpcIpv6CidrBlockRead(d *schema.ResourceData, meta inter
_ = d.Set("vpc_id", instance.VpcId)
}

if instance.Ipv6CidrBlockSet != nil && len(instance.Ipv6CidrBlockSet) != 0 {
_ = d.Set("address_type", instance.Ipv6CidrBlockSet[0].AddressType)
}

if instance.Ipv6CidrBlock != nil {
_ = d.Set("ipv6_cidr_block", instance.Ipv6CidrBlock)
}
Expand All @@ -109,11 +127,12 @@ func resourceTencentCloudVpcIpv6CidrBlockDelete(d *schema.ResourceData, meta int
defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.delete")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)

service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
vpcId := d.Id()
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
vpcId = d.Id()
)

if err := service.DeleteVpcIpv6CidrBlockById(ctx, vpcId); err != nil {
return err
Expand Down
15 changes: 12 additions & 3 deletions tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Provides a resource to create a vpc ipv6_cidr_block
Provides a resource to create a VPC ipv6 cidr block

Example Usage

Expand All @@ -13,10 +13,19 @@ resource "tencentcloud_vpc_ipv6_cidr_block" "example" {
}
```

Or

```hcl
resource "tencentcloud_vpc_ipv6_cidr_block" "example" {
vpc_id = tencentcloud_vpc.vpc.id
address_type = "ULA"
}
```

Import

vpc ipv6_cidr_block can be imported using the id, e.g.

```
terraform import tencentcloud_vpc_ipv6_cidr_block.ipv6_cidr_block vpc_id
```
terraform import tencentcloud_vpc_ipv6_cidr_block.example vpc-826mi3hd
```
30 changes: 25 additions & 5 deletions tencentcloud/services/vpc/service_tencentcloud_vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -6842,6 +6842,7 @@ func (me *VpcService) DescribeVpcById(ctx context.Context, vpcId string) (instan
logId := tccommon.GetLogId(ctx)

request := vpc.NewDescribeVpcsRequest()
response := vpc.NewDescribeVpcsResponse()
request.VpcIds = []*string{&vpcId}

defer func() {
Expand All @@ -6860,16 +6861,27 @@ func (me *VpcService) DescribeVpcById(ctx context.Context, vpcId string) (instan
for {
request.Offset = helper.Int64ToStrPoint(offset)
request.Limit = helper.Int64ToStrPoint(limit)
response, err := me.client.UseVpcClient().DescribeVpcs(request)
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
result, e := me.client.UseVpcClient().DescribeVpcs(request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

response = result
return nil
})

if err != nil {
errRet = err
return
}
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

if response == nil || len(response.Response.VpcSet) < 1 {
break
}

instances = append(instances, response.Response.VpcSet...)
if len(response.Response.VpcSet) < int(limit) {
break
Expand Down Expand Up @@ -6897,14 +6909,22 @@ func (me *VpcService) DeleteVpcIpv6CidrBlockById(ctx context.Context, vpcId stri
}
}()

ratelimit.Check(request.GetAction())
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
result, e := me.client.UseVpcClient().UnassignIpv6CidrBlock(request)
if e != nil {
return tccommon.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
})

response, err := me.client.UseVpcClient().UnassignIpv6CidrBlock(request)
if err != nil {
errRet = err
return
}
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

return
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading