Skip to content

Commit 7d540cb

Browse files
authored
fix(cvm): [125902956] support AntiDDos Eip (#3451)
* add * add * add * add * add
1 parent 5c9ff1d commit 7d540cb

File tree

13 files changed

+676
-133
lines changed

13 files changed

+676
-133
lines changed

.changelog/3451.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_instance: support AntiDDos Eip
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_as_scaling_config: support AntiDDos Eip
7+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ require (
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1148
4949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8
50-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153
50+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1206
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
5353
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,12 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.825 h1:yiC2lsZ
829829
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.825/go.mod h1:6qtSa8OZKwJOWoOCYWVZd6+T62O96AxbPll0I43d4yw=
830830
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.1.4 h1:9EguBiOzGyfCm4ZlO4QnnsZf/kpyTWS6DHz3bse9lNY=
831831
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.1.4/go.mod h1:jUF68ck1rxCqXkdmYRT2B2GtLrXAxmp7T0CcyWZ8BbM=
832+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1078 h1:61WsmpYC2LEyJ492SYQ7/ABvcZGw5u6pS+wibvQVMY8=
833+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1078/go.mod h1:PC3PuWjgDqScMDrVXe9+QEH/r95FHd4p560GjkDf2rk=
834+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1164 h1:XsqO8lrHWTphz8jmgkU09gcX+V6XnPN2QMOiZezrISk=
835+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1164/go.mod h1:hEhWTzJLNl5WkKi4cIWi9rtEAectaRY02RqYqC4Twi4=
836+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1211 h1:KLzI3CUZCNqflU0FRWI31dcWBIgBaBMoRgML9wNZ70U=
837+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1211/go.mod h1:IBzy/+ZfDywz9Ln6tzRP9SiyPONBBTya/TiHaVvNonY=
832838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi v1.0.824 h1:DVKvZ6h+qd7tadUrCjVAkCCmE3TsbK2ZmwGd3AJcpWc=
833839
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi v1.0.824/go.mod h1:DvBpDX/qdJG4KKLeULmRvhAjPYiw8za0HeTSu2y/lFw=
834840
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071 h1:2CeivXYc7PtD2kgZEJXk9/SDQA9dzLejH5FmNzAW3QU=
@@ -940,12 +946,18 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5 h1:o96wtY
940946
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
941947
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8 h1:Qxwajpf0YHFDcDJ0crRzK2QOaWTG5+UNZivhbBbq88w=
942948
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
949+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1206 h1:RVM/x8Sx4XL7zda5IRE1HL3czh9wLAdl+UbrbVPcf2k=
950+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1206/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
951+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1211 h1:Y97J0JA6dYIhsMeswB1G6RCiTH8qUIBEBrng9onSl60=
952+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1211/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
943953
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
944954
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
945955
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
946956
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
947957
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153 h1:ENSIHfoHuFw4IQrkPvUyBFEvE++QVdIxY3lSFo9jho0=
948958
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153/go.mod h1:lBiTrRc+WW71B71du+uodZRhpa+QlnsqwT4sVSEaPac=
959+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1206 h1:tx8L5srClwK2T5dte7yw3N8PfxqtuHbT8fWfUZMOUwk=
960+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1206/go.mod h1:zkdrFNYxTFX7E3QRgNVayQi7fq/A1TYRKLkGE8NS0lQ=
949961
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
950962
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
951963
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161 h1:0oG7oMuDBXN2WyRtTU/650zRhLAAmYBgpttNn53NhK0=

tencentcloud/services/as/resource_tc_as_scaling_config.go

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,29 @@ func ResourceTencentCloudAsScalingConfig() *schema.Resource {
156156
Optional: true,
157157
Description: "Specify whether to assign an Internet IP address.",
158158
},
159+
"bandwidth_package_id": {
160+
Type: schema.TypeString,
161+
Optional: true,
162+
Description: "Bandwidth package ID.",
163+
},
164+
"ipv4_address_type": {
165+
Type: schema.TypeString,
166+
Optional: true,
167+
Computed: true,
168+
ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"WanIP", "HighQualityEIP", "AntiDDoSEIP"}),
169+
Description: "AddressType. Default value: WanIP. For beta users of dedicated IP. the value can be: HighQualityEIP: Dedicated IP. Note that dedicated IPs are only available in partial regions. For beta users of Anti-DDoS IP, the value can be: AntiDDoSEIP: Anti-DDoS EIP. Note that Anti-DDoS IPs are only available in partial regions.",
170+
},
171+
"anti_ddos_package_id": {
172+
Type: schema.TypeString,
173+
Optional: true,
174+
Description: "Anti-DDoS service package ID. This is required when you want to request an AntiDDoS IP.",
175+
},
176+
"is_keep_eip": {
177+
Type: schema.TypeBool,
178+
Optional: true,
179+
Computed: true,
180+
Description: "Whether to delete the bound EIP when the instance is destroyed. Range of values: True: retain the EIP; False: not retain the EIP. Note that when the IPv4AddressType field specifies the EIP type, the default behavior is not to retain the EIP. WanIP is unaffected by this field and will always be deleted with the instance. Changing this field configuration will take effect immediately for resources already bound to a scaling group.",
181+
},
159182
"password": {
160183
Type: schema.TypeString,
161184
Optional: true,
@@ -370,6 +393,18 @@ func resourceTencentCloudAsScalingConfigCreate(d *schema.ResourceData, meta inte
370393
publicIpAssigned := v.(bool)
371394
request.InternetAccessible.PublicIpAssigned = &publicIpAssigned
372395
}
396+
if v, ok := d.GetOk("bandwidth_package_id"); ok {
397+
request.InternetAccessible.BandwidthPackageId = helper.String(v.(string))
398+
}
399+
if v, ok := d.GetOk("ipv4_address_type"); ok {
400+
request.InternetAccessible.IPv4AddressType = helper.String(v.(string))
401+
}
402+
if v, ok := d.GetOk("anti_ddos_package_id"); ok {
403+
request.InternetAccessible.AntiDDoSPackageId = helper.String(v.(string))
404+
}
405+
if v, ok := d.GetOkExists("is_keep_eip"); ok {
406+
request.InternetAccessible.IsKeepEIP = helper.Bool(v.(bool))
407+
}
373408

374409
request.LoginSettings = &as.LoginSettings{}
375410
if v, ok := d.GetOk("password"); ok {
@@ -610,6 +645,24 @@ func resourceTencentCloudAsScalingConfigRead(d *schema.ResourceData, meta interf
610645

611646
_ = d.Set("cam_role_name", *config.CamRoleName)
612647

648+
if config.InternetAccessible != nil {
649+
if config.InternetAccessible.BandwidthPackageId != nil {
650+
_ = d.Set("bandwidth_package_id", config.InternetAccessible.BandwidthPackageId)
651+
}
652+
653+
if config.InternetAccessible.IPv4AddressType != nil {
654+
_ = d.Set("ipv4_address_type", config.InternetAccessible.IPv4AddressType)
655+
}
656+
657+
if config.InternetAccessible.AntiDDoSPackageId != nil {
658+
_ = d.Set("anti_ddos_package_id", config.InternetAccessible.AntiDDoSPackageId)
659+
}
660+
661+
if config.InternetAccessible.IsKeepEIP != nil {
662+
_ = d.Set("is_keep_eip", config.InternetAccessible.IsKeepEIP)
663+
}
664+
}
665+
613666
if config.HostNameSettings != nil {
614667
isEmptySettings := true
615668
settings := map[string]interface{}{}
@@ -749,7 +802,8 @@ func resourceTencentCloudAsScalingConfigUpdate(d *schema.ResourceData, meta inte
749802
}
750803
}
751804

752-
if d.HasChange("internet_charge_type") || d.HasChange("internet_max_bandwidth_out") || d.HasChange("public_ip_assigned") {
805+
if d.HasChange("internet_charge_type") || d.HasChange("internet_max_bandwidth_out") || d.HasChange("public_ip_assigned") ||
806+
d.HasChange("bandwidth_package_id") || d.HasChange("ipv4_address_type") || d.HasChange("anti_ddos_package_id") || d.HasChange("is_keep_eip") {
753807
request.InternetAccessible = &as.InternetAccessible{}
754808
if v, ok := d.GetOk("internet_charge_type"); ok {
755809
request.InternetAccessible.InternetChargeType = helper.String(v.(string))
@@ -761,6 +815,18 @@ func resourceTencentCloudAsScalingConfigUpdate(d *schema.ResourceData, meta inte
761815
publicIpAssigned := v.(bool)
762816
request.InternetAccessible.PublicIpAssigned = &publicIpAssigned
763817
}
818+
if v, ok := d.GetOk("bandwidth_package_id"); ok {
819+
request.InternetAccessible.BandwidthPackageId = helper.String(v.(string))
820+
}
821+
if v, ok := d.GetOk("ipv4_address_type"); ok {
822+
request.InternetAccessible.IPv4AddressType = helper.String(v.(string))
823+
}
824+
if v, ok := d.GetOk("anti_ddos_package_id"); ok {
825+
request.InternetAccessible.AntiDDoSPackageId = helper.String(v.(string))
826+
}
827+
if v, ok := d.GetOkExists("is_keep_eip"); ok {
828+
request.InternetAccessible.IsKeepEIP = helper.Bool(v.(bool))
829+
}
764830
}
765831

766832
if d.HasChange("security_group_ids") {

tencentcloud/services/as/resource_tc_as_scaling_config.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ resource "tencentcloud_as_scaling_config" "example" {
5050
}
5151
```
5252

53-
Using `SPOTPAID` charge type
53+
Using SPOTPAID charge type
5454

5555
```hcl
5656
data "tencentcloud_images" "example" {
@@ -177,6 +177,57 @@ resource "tencentcloud_as_scaling_config" "example" {
177177
}
178178
```
179179

180+
Create configuration with AntiDDos Eip
181+
182+
```hcl
183+
data "tencentcloud_images" "example" {
184+
image_type = ["PUBLIC_IMAGE"]
185+
os_name = "TencentOS Server 4 for x86_64"
186+
}
187+
188+
resource "tencentcloud_as_scaling_config" "example" {
189+
configuration_name = "tf-example"
190+
image_id = data.tencentcloud_images.example.images.0.image_id
191+
instance_types = ["SA5.MEDIUM4"]
192+
project_id = 0
193+
system_disk_type = "CLOUD_HSSD"
194+
system_disk_size = "50"
195+
security_group_ids = ["sg-l222vn6w"]
196+
197+
data_disk {
198+
disk_type = "CLOUD_HSSD"
199+
disk_size = 50
200+
}
201+
202+
internet_charge_type = "BANDWIDTH_PACKAGE"
203+
internet_max_bandwidth_out = 100
204+
public_ip_assigned = true
205+
bandwidth_package_id = "bwp-rp2nx3ab"
206+
ipv4_address_type = "AntiDDoSEIP"
207+
anti_ddos_package_id = "bgp-31400fvq"
208+
is_keep_eip = true
209+
password = "Test@123#"
210+
enhanced_security_service = false
211+
enhanced_monitor_service = false
212+
enhanced_automation_tools_service = false
213+
user_data = "dGVzdA=="
214+
215+
host_name_settings {
216+
host_name = "host-name"
217+
host_name_style = "UNIQUE"
218+
}
219+
220+
instance_tags = {
221+
tag = "example"
222+
}
223+
224+
tags = {
225+
"createdBy" = "Terraform"
226+
"owner" = "tf"
227+
}
228+
}
229+
```
230+
180231
Import
181232

182233
AutoScaling Configuration can be imported using the id, e.g.

tencentcloud/services/cvm/resource_tc_instance.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,21 @@ func ResourceTencentCloudInstance() *schema.Resource {
197197
ForceNew: true,
198198
Description: "Associate a public IP address with an instance in a VPC or Classic. Boolean value, Default is false.",
199199
},
200+
"ipv4_address_type": {
201+
Type: schema.TypeString,
202+
Optional: true,
203+
ForceNew: true,
204+
Computed: true,
205+
ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"WanIP", "HighQualityEIP", "AntiDDoSEIP"}),
206+
Description: "AddressType. Default value: WanIP. For beta users of dedicated IP. the value can be: HighQualityEIP: Dedicated IP. Note that dedicated IPs are only available in partial regions. For beta users of Anti-DDoS IP, the value can be: AntiDDoSEIP: Anti-DDoS EIP. Note that Anti-DDoS IPs are only available in partial regions.",
207+
},
208+
"anti_ddos_package_id": {
209+
Type: schema.TypeString,
210+
Optional: true,
211+
ForceNew: true,
212+
Computed: true,
213+
Description: "Anti-DDoS service package ID. This is required when you want to request an AntiDDoS IP.",
214+
},
200215
// vpc
201216
"vpc_id": {
202217
Type: schema.TypeString,
@@ -654,6 +669,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
654669
netWorkFlag = true
655670
}
656671

672+
if v, ok := d.GetOk("ipv4_address_type"); ok {
673+
internetAccessible.IPv4AddressType = helper.String(v.(string))
674+
netWorkFlag = true
675+
}
676+
677+
if v, ok := d.GetOk("anti_ddos_package_id"); ok {
678+
internetAccessible.AntiDDoSPackageId = helper.String(v.(string))
679+
netWorkFlag = true
680+
}
681+
657682
if netWorkFlag {
658683
request.InternetAccessible = &internetAccessible
659684
}
@@ -1162,6 +1187,16 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
11621187
_ = d.Set("allocate_public_ip", len(instance.PublicIpAddresses) > 0)
11631188
}
11641189

1190+
if instance.InternetAccessible != nil {
1191+
if instance.InternetAccessible.IPv4AddressType != nil {
1192+
_ = d.Set("ipv4_address_type", instance.InternetAccessible.IPv4AddressType)
1193+
}
1194+
1195+
if instance.InternetAccessible.AntiDDoSPackageId != nil {
1196+
_ = d.Set("anti_ddos_package_id", instance.InternetAccessible.AntiDDoSPackageId)
1197+
}
1198+
}
1199+
11651200
tagService := svctag.NewTagService(client)
11661201

11671202
tags, err := tagService.DescribeResourceTags(ctx, "cvm", "instance", client.Region, d.Id())

tencentcloud/services/cvm/resource_tc_instance.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Provides a CVM instance resource.
88

99
~> **NOTE:** When creating a CVM instance using a `launch_template_id`, if you set other parameter values ​​at the same time, the template definition values ​​will be overwritten.
1010

11+
~> **NOTE:** It is recommended to use resource `tencentcloud_eip` to create a AntiDDos Eip, and then call resource `tencentcloud_eip_association` to bind it to resource `tencentcloud_instance`.
12+
1113
Example Usage
1214

1315
Create a general POSTPAID_BY_HOUR CVM instance
@@ -243,6 +245,38 @@ resource "tencentcloud_instance" "example" {
243245
}
244246
```
245247

248+
Create CVM instance with AntiDDos Eip
249+
250+
```hcl
251+
resource "tencentcloud_instance" "example" {
252+
instance_name = "tf-example"
253+
availability_zone = "ap-guangzhou-6"
254+
image_id = "img-eb30mz89"
255+
instance_type = "S5.MEDIUM4"
256+
system_disk_type = "CLOUD_HSSD"
257+
system_disk_size = 50
258+
hostname = "user"
259+
project_id = 0
260+
vpc_id = "vpc-i5yyodl9"
261+
subnet_id = "subnet-hhi88a58"
262+
orderly_security_groups = ["sg-l222vn6w"]
263+
internet_charge_type = "BANDWIDTH_PACKAGE"
264+
bandwidth_package_id = "bwp-rp2nx3ab"
265+
ipv4_address_type = "AntiDDoSEIP"
266+
anti_ddos_package_id = "bgp-31400fvq"
267+
allocate_public_ip = true
268+
internet_max_bandwidth_out = 100
269+
data_disks {
270+
data_disk_type = "CLOUD_HSSD"
271+
data_disk_size = 100
272+
encrypt = false
273+
}
274+
tags = {
275+
tagKey = "tagValue"
276+
}
277+
}
278+
```
279+
246280
Import
247281

248282
CVM instance can be imported using the id, e.g.

0 commit comments

Comments
 (0)