Skip to content

Fix userdata details being improperly serialized - #295

Open
bddvlpr wants to merge 1 commit into
apache:mainfrom
bddvlpr:bump-version
Open

Fix userdata details being improperly serialized#295
bddvlpr wants to merge 1 commit into
apache:mainfrom
bddvlpr:bump-version

Conversation

@bddvlpr

@bddvlpr bddvlpr commented Jun 9, 2026

Copy link
Copy Markdown

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:

{value=VALUE HERE, key=KEY HERE}

However, recent versions of CloudStack expect details to be provided as key-value pairs in the following format:

{KEY HERE=VALUE HERE}

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/v2 from v2.18.1 to v2.19.0 (includes upstream userdata details serialization fix).
  • Update cloudstack_instance create/update logic to pass userdata_details as {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.

Comment thread cloudstack/resource_cloudstack_instance.go
Comment thread cloudstack/resource_cloudstack_instance.go
Copilot AI review requested due to automatic review settings July 31, 2026 09:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_details changed 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 updates userdata_details and 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_details and then asserts via the CloudStack API (e.g., VirtualMachine.Userdatadetails on 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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants