This is an automated email from the ASF dual-hosted git repository.
abh1sar pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git
The following commit(s) were added to refs/heads/main by this push:
new e2d3072 Fix panic when serializing UUID-typed request parameters
(#160)
e2d3072 is described below
commit e2d30721b069355d5de6b130397a24efc7e713b9
Author: Abhisar Sinha <[email protected]>
AuthorDate: Wed Aug 5 20:55:30 2026 +0530
Fix panic when serializing UUID-typed request parameters (#160)
generateConvertCode treated the generated "UUID" Go type the same as
"string" when building toURLValues(), emitting v.(string) for a value
that is actually stored as cloudstack.UUID. That type assertion panics
at runtime since Go requires an exact dynamic type match.
Affects managementserverid, currently the only parameter routed
through the UUID type, on listAsyncJobs, listHosts, listHostsMetrics,
triggerShutdown, cancelShutdown, prepareForShutdown,
listWebhookDeliveries, and deleteWebhookDelivery. It was previously
dormant since the parameter is optional on all of them and the setter
was never exercised by the standard generated tests.
Assert the value as UUID and convert to string, instead of asserting
it as string.
---
cloudstack/AsyncjobService.go | 2 +-
cloudstack/HostService.go | 4 ++--
cloudstack/ManagementService.go | 8 ++++----
cloudstack/WebhookService.go | 4 ++--
generate/generate.go | 4 +++-
5 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/cloudstack/AsyncjobService.go b/cloudstack/AsyncjobService.go
index fe29bc4..471289f 100644
--- a/cloudstack/AsyncjobService.go
+++ b/cloudstack/AsyncjobService.go
@@ -60,7 +60,7 @@ func (p *ListAsyncJobsParams) toURLValues() url.Values {
u.Set("listall", vv)
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
if v, found := p.p["page"]; found {
vv := strconv.Itoa(v.(int))
diff --git a/cloudstack/HostService.go b/cloudstack/HostService.go
index 16f9009..f7d14e8 100644
--- a/cloudstack/HostService.go
+++ b/cloudstack/HostService.go
@@ -2842,7 +2842,7 @@ func (p *ListHostsParams) toURLValues() url.Values {
u.Set("keyword", v.(string))
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
if v, found := p.p["name"]; found {
u.Set("name", v.(string))
@@ -3546,7 +3546,7 @@ func (p *ListHostsMetricsParams) toURLValues() url.Values
{
u.Set("keyword", v.(string))
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
if v, found := p.p["name"]; found {
u.Set("name", v.(string))
diff --git a/cloudstack/ManagementService.go b/cloudstack/ManagementService.go
index a8370f2..af4b6e5 100644
--- a/cloudstack/ManagementService.go
+++ b/cloudstack/ManagementService.go
@@ -58,7 +58,7 @@ func (p *CancelShutdownParams) toURLValues() url.Values {
return u
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
return u
}
@@ -765,7 +765,7 @@ func (p *PrepareForShutdownParams) toURLValues() url.Values
{
return u
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
return u
}
@@ -838,7 +838,7 @@ func (p *ReadyForShutdownParams) toURLValues() url.Values {
return u
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
return u
}
@@ -914,7 +914,7 @@ func (p *TriggerShutdownParams) toURLValues() url.Values {
return u
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
return u
}
diff --git a/cloudstack/WebhookService.go b/cloudstack/WebhookService.go
index 3b295cd..c53f114 100644
--- a/cloudstack/WebhookService.go
+++ b/cloudstack/WebhookService.go
@@ -458,7 +458,7 @@ func (p *DeleteWebhookDeliveryParams) toURLValues()
url.Values {
u.Set("id", v.(string))
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
if v, found := p.p["startdate"]; found {
u.Set("startdate", v.(string))
@@ -878,7 +878,7 @@ func (p *ListWebhookDeliveriesParams) toURLValues()
url.Values {
u.Set("keyword", v.(string))
}
if v, found := p.p["managementserverid"]; found {
- u.Set("managementserverid", v.(string))
+ u.Set("managementserverid", string(v.(UUID)))
}
if v, found := p.p["page"]; found {
vv := strconv.Itoa(v.(int))
diff --git a/generate/generate.go b/generate/generate.go
index c967967..57a81e2 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -1355,8 +1355,10 @@ func (s *service) generateConvertCode(cmd, name, typ
string) {
pn := s.pn
switch typ {
- case "string", "UUID":
+ case "string":
pn("u.Set(\"%s\", v.(string))", name)
+ case "UUID":
+ pn("u.Set(\"%s\", string(v.(UUID)))", name)
case "int":
pn("vv := strconv.Itoa(v.(int))")
pn("u.Set(\"%s\", vv)", name)