@@ -208,7 +208,7 @@ func verifyDiskoffering(csMachine *infrav1.CloudStackMachine, c *client, diskOff
208
208
}
209
209
210
210
// 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 {
212
212
if c .user .Account .CPUAvailable != "Unlimited" {
213
213
cpuAvailable , err := strconv .ParseInt (c .user .Account .CPUAvailable , 10 , 0 )
214
214
if err == nil && int64 (offering .Cpunumber ) > cpuAvailable {
@@ -233,7 +233,7 @@ func (c *client) CheckAccountLimits(fd *infrav1.CloudStackFailureDomain, offerin
233
233
}
234
234
235
235
// 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 {
237
237
if c .user .Account .Domain .CPUAvailable != "Unlimited" {
238
238
cpuAvailable , err := strconv .ParseInt (c .user .Account .Domain .CPUAvailable , 10 , 0 )
239
239
if err == nil && int64 (offering .Cpunumber ) > cpuAvailable {
@@ -257,8 +257,8 @@ func (c *client) CheckDomainLimits(fd *infrav1.CloudStackFailureDomain, offering
257
257
return nil
258
258
}
259
259
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 {
262
262
if fd .Spec .Zone .Network .Type == NetworkTypeShared {
263
263
264
264
p := c .cs .Address .NewListPublicIpAddressesParams ()
@@ -280,43 +280,48 @@ func (c *client) CheckNetworkLimits(fd *infrav1.CloudStackFailureDomain) error {
280
280
}
281
281
}
282
282
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 )
284
284
}
285
285
}
286
286
return nil
287
287
}
288
288
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 (
295
291
fd * infrav1.CloudStackFailureDomain ,
296
- affinity * infrav1.CloudStackAffinityGroup ,
297
- userData string ,
292
+ offering * cloudstack.ServiceOffering ,
298
293
) error {
299
294
300
- offering , err := c .ResolveServiceOffering ( csMachine , fd . Spec . Zone . ID )
295
+ err := c .CheckAccountLimits ( fd , offering )
301
296
if err != nil {
302
297
return err
303
298
}
304
299
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 )
310
301
if err != nil {
311
302
return err
312
303
}
313
304
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 )
315
321
if err != nil {
316
322
return err
317
323
}
318
-
319
- err = c .CheckDomainLimits (fd , offering )
324
+ diskOfferingID , err := c .ResolveDiskOffering (csMachine , fd .Spec .Zone .ID )
320
325
if err != nil {
321
326
return err
322
327
}
@@ -393,12 +398,21 @@ func (c *client) GetOrCreateVMInstance(
393
398
return err
394
399
}
395
400
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 {
397
412
return err
398
413
}
399
414
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 {
402
416
return err
403
417
}
404
418
0 commit comments