Skip to content

Commit bf9ec11

Browse files
authored
fix(cvm): Fix optional parameters never being omitted from requests (#2988)
Initially noticed this problem when I tried to create a launch template containing the following block: ``` internet_accessible { public_ip_assigned = true internet_max_bandwidth_out = 100 } ``` This resulted in an error during apply like this: ``` Code=InvalidParameterValue, Message=The value `` specified in the parameter `.InternetAccessible.InternetChargeType` is invalid. ``` I figured okay, I'll just add what should be the defaults and get on with it. But ultimately I got the same error from the `BandwidthPackageId` field. There is no good default value for it, so I was unable to make the launch template. Turns out that throughout the SDK, all scalar fields are always included, at least wherever `InterfacesHeadMap` is used. The value of the individual fields is never checked, so every field ends up being sent, with the default value being not the default value defined in the schema, but the default value for the data type, which is definitely wrong. Since the default value for strings is an empty string, any field inside a block that takes an ID parameter of some kind will fail with an API validation error. In this commit I've only fixed the `internet_accessible` block for launch templates, but ultimately all locations where `InterfacesHeadMap` (and possibly others, I haven't investigated that much) need to be updated. FWIW, the AWS Terraform provider uses this very same way of dealing with this issue.
1 parent d4a56d5 commit bf9ec11

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

tencentcloud/services/cvm/resource_tc_cvm_launch_template.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -738,17 +738,17 @@ func resourceTencentCloudCvmLaunchTemplateCreate(d *schema.ResourceData, meta in
738738

739739
if dMap, ok := helper.InterfacesHeadMap(d, "internet_accessible"); ok {
740740
internetAccessible := cvm.InternetAccessible{}
741-
if v, ok := dMap["internet_charge_type"]; ok {
742-
internetAccessible.InternetChargeType = helper.String(v.(string))
741+
if v, ok := dMap["internet_charge_type"].(string); ok && v != "" {
742+
internetAccessible.InternetChargeType = helper.String(v)
743743
}
744-
if v, ok := dMap["internet_max_bandwidth_out"]; ok {
745-
internetAccessible.InternetMaxBandwidthOut = helper.IntInt64(v.(int))
744+
if v, ok := dMap["internet_max_bandwidth_out"].(int); ok && v != 0 {
745+
internetAccessible.InternetMaxBandwidthOut = helper.IntInt64(v)
746746
}
747-
if v, ok := dMap["public_ip_assigned"]; ok {
748-
internetAccessible.PublicIpAssigned = helper.Bool(v.(bool))
747+
if v, ok := dMap["public_ip_assigned"].(bool); ok && v {
748+
internetAccessible.PublicIpAssigned = helper.Bool(v)
749749
}
750-
if v, ok := dMap["bandwidth_package_id"]; ok {
751-
internetAccessible.BandwidthPackageId = helper.String(v.(string))
750+
if v, ok := dMap["bandwidth_package_id"].(string); ok && v != "" {
751+
internetAccessible.BandwidthPackageId = helper.String(v)
752752
}
753753
request.InternetAccessible = &internetAccessible
754754
}

0 commit comments

Comments
 (0)