@@ -3,6 +3,7 @@ package handlers
33import (
44 "fmt"
55 "log"
6+ "strings"
67
78 v1 "cloudstackctl/apis/v1"
89 "cloudstackctl/pkg/cloudstack"
@@ -166,6 +167,30 @@ func ApplyVirtualMachineManaged(vm *v1.VirtualMachine, managed bool) (string, er
166167 }
167168 params .SetSecuritygroupids (sgIDs )
168169 }
170+ // Resolve affinity group names to IDs and attach them to the deploy params.
171+ if len (vm .Spec .AffinityGroups ) > 0 {
172+ agIDs := make ([]string , 0 , len (vm .Spec .AffinityGroups ))
173+ for _ , ag := range vm .Spec .AffinityGroups {
174+ id , agerr := ResolveAffinityGroup (ag )
175+ if agerr != nil {
176+ return "" , fmt .Errorf ("failed to resolve affinity group %s: %w" , ag , agerr )
177+ }
178+ agIDs = append (agIDs , id )
179+ }
180+ params .SetAffinitygroupids (agIDs )
181+ }
182+ // Resolve userdata names to IDs; CloudStack accepts a comma-separated list.
183+ if len (vm .Spec .UserDataRefs ) > 0 {
184+ udIDs := make ([]string , 0 , len (vm .Spec .UserDataRefs ))
185+ for _ , ud := range vm .Spec .UserDataRefs {
186+ id , uderr := ResolveUserData (ud )
187+ if uderr != nil {
188+ return "" , fmt .Errorf ("failed to resolve userdata %s: %w" , ud , uderr )
189+ }
190+ udIDs = append (udIDs , id )
191+ }
192+ params .SetUserdataid (strings .Join (udIDs , "," ))
193+ }
169194 // If parameters are provided, pass them as the CloudStack 'details' map
170195 // first (supported by the SDK).
171196 if vm .Spec .Parameters != nil {
0 commit comments