Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(cvm): Fix optional parameters never being omitted from requests
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.
- Loading branch information