@@ -2,12 +2,18 @@ package handlers
22
33import (
44 "fmt"
5+ "regexp"
56
67 "cloudstackctl/pkg/cloudstack"
78)
89
910// ResolveZone returns the CloudStack zone ID for a zone name.
1011func ResolveZone (name string ) (string , error ) {
12+ // If the value already looks like a UUID, treat it as an ID and return it.
13+ if IsUUID (name ) {
14+ return name , nil
15+ }
16+
1117 client , err := cloudstack .NewClient ()
1218 if err != nil {
1319 return "" , fmt .Errorf ("failed to create CloudStack client: %w" , err )
@@ -26,6 +32,11 @@ func ResolveZone(name string) (string, error) {
2632
2733// ResolveServiceOffering returns the service offering ID for a name.
2834func ResolveServiceOffering (name string ) (string , error ) {
35+ // If the value looks like a UUID, treat it as an ID and return it.
36+ if IsUUID (name ) {
37+ return name , nil
38+ }
39+
2940 client , err := cloudstack .NewClient ()
3041 if err != nil {
3142 return "" , fmt .Errorf ("failed to create CloudStack client: %w" , err )
@@ -44,6 +55,11 @@ func ResolveServiceOffering(name string) (string, error) {
4455
4556// ResolveDiskOffering returns the disk offering ID for a name.
4657func ResolveDiskOffering (name string ) (string , error ) {
58+ // If the value looks like a UUID, treat it as an ID and return it.
59+ if IsUUID (name ) {
60+ return name , nil
61+ }
62+
4763 client , err := cloudstack .NewClient ()
4864 if err != nil {
4965 return "" , fmt .Errorf ("failed to create CloudStack client: %w" , err )
@@ -62,6 +78,11 @@ func ResolveDiskOffering(name string) (string, error) {
6278
6379// ResolveProject returns the CloudStack project ID for a given project name.
6480func ResolveProject (name string ) (string , error ) {
81+ // If the value looks like a UUID, treat it as an ID and return it.
82+ if IsUUID (name ) {
83+ return name , nil
84+ }
85+
6586 client , err := cloudstack .NewClient ()
6687 if err != nil {
6788 return "" , fmt .Errorf ("failed to create CloudStack client: %w" , err )
@@ -77,3 +98,9 @@ func ResolveProject(name string) (string, error) {
7798 }
7899 return resp .Projects [0 ].Id , nil
79100}
101+
102+ // IsUUID returns true if the provided string matches a UUID pattern.
103+ func IsUUID (s string ) bool {
104+ var uuidRegex = regexp .MustCompile (`(?i)^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$` )
105+ return uuidRegex .MatchString (s )
106+ }
0 commit comments