Fix userdata details being improperly serialized - #295
Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates the provider’s handling of userdata_details for CloudStack instances by switching to the newer CloudStack API expectations (key-value pairs), aligning behavior with the upstream fix in cloudstack-go and preventing user data templates from rendering incorrectly.
Changes:
- Bump
github.com/apache/cloudstack-go/v2fromv2.18.1tov2.19.0(includes upstream userdata details serialization fix). - Update
cloudstack_instancecreate/update logic to passuserdata_detailsas{KEY=VALUE}rather than the deprecated/incorrect indexed format.
Reviewed changes
Copilot reviewed 2 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| go.mod | Updates cloudstack-go dependency to v2.19.0. |
| go.sum | Updates checksums for the cloudstack-go version bump. |
| cloudstack/resource_cloudstack_instance.go | Changes instance create/update to set user data details as direct key-value pairs for CloudStack. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 3 changed files in this pull request and generated no new comments.
Suppressed comments (2)
cloudstack/resource_cloudstack_instance.go:830
- The update path for
userdata_detailschanged behavior but there’s no test that exercises an in-place update (change the map and verify CloudStack reflects it). Adding a focused acceptance test step that updatesuserdata_detailsand validates the API-side representation would help prevent regressions in the serialization format.
ud := make(map[string]string)
for k, v := range userdataDetails.(map[string]interface{}) {
ud[k] = v.(string)
}
p.SetUserdatadetails(ud)
cloudstack/resource_cloudstack_instance.go:469
- The new userdata_details -> Userdatadetails request mapping is not covered by any acceptance tests. Since this bug is silent and depends on request serialization, consider adding an acc test that sets
userdata_detailsand then asserts via the CloudStack API (e.g.,VirtualMachine.Userdatadetailson the returned VM, or another suitable API field) that the expected key/value shows up after create.
This issue also appears on line 826 of the same file.
ud := make(map[string]string)
for k, v := range userdataDetails.(map[string]interface{}) {
ud[k] = v.(string)
}
p.SetUserdatadetails(ud)
As of this PR, the provider incorrectly passes user data details to CloudStack, causing templates to render improperly without producing any visible errors.
The provider currently sends user data details in the following format:
However, recent versions of CloudStack expect details to be provided as key-value pairs in the following format:
The previously used format appears to be deprecated or is no longer supported, resulting in user data not being processed correctly. This issue has already been fixed upstream in cloudstack-go apache/cloudstack-go@3aaf3aa which is included in v2.19.0.