@@ -208,7 +208,7 @@ func verifyDiskoffering(csMachine *infrav1.CloudStackMachine, c *client, diskOff
208208}
209209
210210// CheckAccountLimits Checks the account's limit of VM, CPU & Memory
211- func (c * client ) CheckAccountLimits (fd * infrav1.CloudStackFailureDomain , offering cloudstack.ServiceOffering ) error {
211+ func (c * client ) CheckAccountLimits (fd * infrav1.CloudStackFailureDomain , offering * cloudstack.ServiceOffering ) error {
212212 if c .user .Account .CPUAvailable != "Unlimited" {
213213 cpuAvailable , err := strconv .ParseInt (c .user .Account .CPUAvailable , 10 , 0 )
214214 if err == nil && int64 (offering .Cpunumber ) > cpuAvailable {
@@ -233,7 +233,7 @@ func (c *client) CheckAccountLimits(fd *infrav1.CloudStackFailureDomain, offerin
233233}
234234
235235// CheckDomainLimits Checks the domain's limit of VM, CPU & Memory
236- func (c * client ) CheckDomainLimits (fd * infrav1.CloudStackFailureDomain , offering cloudstack.ServiceOffering ) error {
236+ func (c * client ) CheckDomainLimits (fd * infrav1.CloudStackFailureDomain , offering * cloudstack.ServiceOffering ) error {
237237 if c .user .Account .Domain .CPUAvailable != "Unlimited" {
238238 cpuAvailable , err := strconv .ParseInt (c .user .Account .Domain .CPUAvailable , 10 , 0 )
239239 if err == nil && int64 (offering .Cpunumber ) > cpuAvailable {
@@ -257,8 +257,8 @@ func (c *client) CheckDomainLimits(fd *infrav1.CloudStackFailureDomain, offering
257257 return nil
258258}
259259
260- // CheckNetworkLimits Checks the available IPs for a shared network
261- func (c * client ) CheckNetworkLimits (fd * infrav1.CloudStackFailureDomain ) error {
260+ // CheckSharedNetworkFreeIps Checks the available IPs for a shared network
261+ func (c * client ) CheckSharedNetworkFreeIps (fd * infrav1.CloudStackFailureDomain ) error {
262262 if fd .Spec .Zone .Network .Type == NetworkTypeShared {
263263
264264 p := c .cs .Address .NewListPublicIpAddressesParams ()
@@ -280,43 +280,48 @@ func (c *client) CheckNetworkLimits(fd *infrav1.CloudStackFailureDomain) error {
280280 }
281281 }
282282 if freeIPCount < 1 {
283- return fmt .Errorf ("no public IPs available in the shared network id : %s name : %s" , fd .Spec .Zone .ID , fd .Spec .Zone .Name )
283+ return fmt .Errorf ("no public IPs available in the shared network. networkid : %s network : %s zone: %s zoneid: %s" , fd . Spec . Zone . Network . ID , fd . Spec . Zone . Network . Name , fd .Spec .Zone .ID , fd .Spec .Zone .Name )
284284 }
285285 }
286286 return nil
287287}
288288
289- // CheckLimitsAndCreateVM will check the account & domain limits and then create a
290- // VM instance, and sets the infrastructure machine spec and status accordingly.
291- func (c * client ) CheckLimitsAndCreateVM (
292- csMachine * infrav1.CloudStackMachine ,
293- capiMachine * clusterv1.Machine ,
294- csCluster * infrav1.CloudStackCluster ,
289+ // CheckLimits will check the account & domain limits
290+ func (c * client ) CheckLimits (
295291 fd * infrav1.CloudStackFailureDomain ,
296- affinity * infrav1.CloudStackAffinityGroup ,
297- userData string ,
292+ offering * cloudstack.ServiceOffering ,
298293) error {
299294
300- offering , err := c .ResolveServiceOffering ( csMachine , fd . Spec . Zone . ID )
295+ err := c .CheckAccountLimits ( fd , offering )
301296 if err != nil {
302297 return err
303298 }
304299
305- templateID , err := c .ResolveTemplate (csCluster , csMachine , fd .Spec .Zone .ID )
306- if err != nil {
307- return err
308- }
309- diskOfferingID , err := c .ResolveDiskOffering (csMachine , fd .Spec .Zone .ID )
300+ err = c .CheckDomainLimits (fd , offering )
310301 if err != nil {
311302 return err
312303 }
313304
314- err = c .CheckAccountLimits (fd , offering )
305+ return nil
306+ }
307+
308+ // DeployVM will create a VM instance,
309+ // and sets the infrastructure machine spec and status accordingly.
310+ func (c * client ) DeployVM (
311+ csMachine * infrav1.CloudStackMachine ,
312+ capiMachine * clusterv1.Machine ,
313+ csCluster * infrav1.CloudStackCluster ,
314+ fd * infrav1.CloudStackFailureDomain ,
315+ affinity * infrav1.CloudStackAffinityGroup ,
316+ offering * cloudstack.ServiceOffering ,
317+ userData string ,
318+ ) error {
319+
320+ templateID , err := c .ResolveTemplate (csCluster , csMachine , fd .Spec .Zone .ID )
315321 if err != nil {
316322 return err
317323 }
318-
319- err = c .CheckDomainLimits (fd , offering )
324+ diskOfferingID , err := c .ResolveDiskOffering (csMachine , fd .Spec .Zone .ID )
320325 if err != nil {
321326 return err
322327 }
@@ -393,12 +398,21 @@ func (c *client) GetOrCreateVMInstance(
393398 return err
394399 }
395400
396- if err := c .CheckNetworkLimits (fd ); err != nil {
401+ if err := c .CheckSharedNetworkFreeIps (fd ); err != nil {
402+ return err
403+ }
404+
405+ offering , err := c .ResolveServiceOffering (csMachine , fd .Spec .Zone .ID )
406+ if err != nil {
407+ return err
408+ }
409+
410+ err = c .CheckLimits (fd , & offering )
411+ if err != nil {
397412 return err
398413 }
399414
400- // Create VM instance.
401- if err := c .CheckLimitsAndCreateVM (csMachine , capiMachine , csCluster , fd , affinity , userData ); err != nil {
415+ if err := c .DeployVM (csMachine , capiMachine , csCluster , fd , affinity , & offering , userData ); err != nil {
402416 return err
403417 }
404418
0 commit comments