Skip to content

Commit b9c39b6

Browse files
authored
Merge pull request #1499 from tencentcloudstack/feat/eip_support_bgp_id
eip support set bgp id
2 parents cd963b9 + 04241ac commit b9c39b6

File tree

4 files changed

+75
-3
lines changed

4 files changed

+75
-3
lines changed

.changelog/1499.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_eip: support set `BandwidthPackageId`
3+
```

tencentcloud/resource_tc_eip.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ Example Usage
55
66
```hcl
77
resource "tencentcloud_eip" "foo" {
8-
name = "awesome_gateway_ip"
8+
name = "awesome_gateway_ip"
9+
bandwidth_package_id = "bwp-jtvzuky6"
10+
internet_charge_type = "BANDWIDTH_PACKAGE"
11+
type = "EIP"
912
}
1013
```
1114
@@ -91,7 +94,11 @@ func resourceTencentCloudEip() *schema.Resource {
9194
Optional: true,
9295
Description: "The tags of eip.",
9396
},
94-
97+
"bandwidth_package_id": {
98+
Type: schema.TypeString,
99+
Optional: true,
100+
Description: "ID of bandwidth package, it will set when `internet_charge_type` is `BANDWIDTH_PACKAGE`.",
101+
},
95102
// computed
96103
"public_ip": {
97104
Type: schema.TypeString,
@@ -143,6 +150,9 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err
143150
request.Tags = append(request.Tags, &tag)
144151
}
145152
}
153+
if v, ok := d.GetOk("bandwidth_package_id"); ok {
154+
request.BandwidthPackageId = helper.String(v.(string))
155+
}
146156

147157
eipId := ""
148158
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
@@ -243,12 +253,20 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error
243253
return err
244254
}
245255

256+
bgp, err := vpcService.DescribeVpcBandwidthPackageByEip(ctx, eipId)
257+
if err != nil {
258+
log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err)
259+
return err
260+
}
246261
_ = d.Set("name", eip.AddressName)
247262
_ = d.Set("type", eip.AddressType)
248263
_ = d.Set("public_ip", eip.AddressIp)
249264
_ = d.Set("status", eip.AddressStatus)
250265
_ = d.Set("internet_charge_type", eip.InternetChargeType)
251266
_ = d.Set("tags", tags)
267+
if bgp != nil {
268+
_ = d.Set("bandwidth_package_id", bgp.BandwidthPackageId)
269+
}
252270
return nil
253271
}
254272

@@ -267,6 +285,15 @@ func resourceTencentCloudEipUpdate(d *schema.ResourceData, meta interface{}) err
267285

268286
d.Partial(true)
269287

288+
unsupportedUpdateFields := []string{
289+
"bandwidth_package_id",
290+
}
291+
for _, field := range unsupportedUpdateFields {
292+
if d.HasChange(field) {
293+
return fmt.Errorf("tencentcloud_eip update on %s is not support yet", field)
294+
}
295+
}
296+
270297
if d.HasChange("name") {
271298
name := d.Get("name").(string)
272299
err := vpcService.ModifyEipName(ctx, eipId, name)

tencentcloud/service_tencentcloud_vpc.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5726,3 +5726,41 @@ func (me *VpcService) DeleteVpcEndPointServiceWhiteListById(ctx context.Context,
57265726

57275727
return
57285728
}
5729+
5730+
func (me *VpcService) DescribeVpcBandwidthPackageByEip(ctx context.Context, eipId string) (resource *vpc.BandwidthPackage, errRet error) {
5731+
var (
5732+
logId = getLogId(ctx)
5733+
request = vpc.NewDescribeBandwidthPackagesRequest()
5734+
)
5735+
5736+
defer func() {
5737+
if errRet != nil {
5738+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
5739+
logId, "query object", request.ToJsonString(), errRet.Error())
5740+
}
5741+
}()
5742+
5743+
request.Filters = append(
5744+
request.Filters,
5745+
&vpc.Filter{
5746+
Name: helper.String("resource.resource-id"),
5747+
Values: []*string{&eipId},
5748+
},
5749+
)
5750+
ratelimit.Check(request.GetAction())
5751+
response, err := me.client.UseVpcClient().DescribeBandwidthPackages(request)
5752+
if err != nil {
5753+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
5754+
logId, request.GetAction(), request.ToJsonString(), err.Error())
5755+
errRet = err
5756+
return
5757+
}
5758+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
5759+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
5760+
5761+
if response != nil && len(response.Response.BandwidthPackageSet) > 0 {
5762+
resource = response.Response.BandwidthPackageSet[0]
5763+
}
5764+
5765+
return
5766+
}

website/docs/r/eip.html.markdown

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ Provides an EIP resource.
1515

1616
```hcl
1717
resource "tencentcloud_eip" "foo" {
18-
name = "awesome_gateway_ip"
18+
name = "awesome_gateway_ip"
19+
bandwidth_package_id = "bwp-jtvzuky6"
20+
internet_charge_type = "BANDWIDTH_PACKAGE"
21+
type = "EIP"
1922
}
2023
```
2124

@@ -25,6 +28,7 @@ The following arguments are supported:
2528

2629
* `anycast_zone` - (Optional, String, ForceNew) The zone of anycast. Valid value: `ANYCAST_ZONE_GLOBAL` and `ANYCAST_ZONE_OVERSEAS`.
2730
* `applicable_for_clb` - (Optional, Bool, **Deprecated**) It has been deprecated from version 1.27.0. Indicates whether the anycast eip can be associated to a CLB.
31+
* `bandwidth_package_id` - (Optional, String) ID of bandwidth package, it will set when `internet_charge_type` is `BANDWIDTH_PACKAGE`.
2832
* `internet_charge_type` - (Optional, String, ForceNew) The charge type of eip. Valid values: `BANDWIDTH_PACKAGE`, `BANDWIDTH_POSTPAID_BY_HOUR`, `BANDWIDTH_PREPAID_BY_MONTH` and `TRAFFIC_POSTPAID_BY_HOUR`.
2933
* `internet_max_bandwidth_out` - (Optional, Int) The bandwidth limit of EIP, unit is Mbps.
3034
* `internet_service_provider` - (Optional, String, ForceNew) Internet service provider of eip. Valid value: `BGP`, `CMCC`, `CTCC` and `CUCC`.

0 commit comments

Comments
 (0)