@@ -19,6 +19,7 @@ package cloud
19
19
import (
20
20
"encoding/base64"
21
21
"fmt"
22
+ "net"
22
23
"strconv"
23
24
"strings"
24
25
@@ -31,8 +32,6 @@ import (
31
32
"github.com/pkg/errors"
32
33
corev1 "k8s.io/api/core/v1"
33
34
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
34
-
35
- netpkg "net"
36
35
)
37
36
38
37
type VMIface interface {
@@ -339,7 +338,7 @@ func (c *client) isFreeIPAvailable(networkID, ip string) (bool, error) {
339
338
340
339
func (c * client ) buildIPEntry (resolvedNet * cloudstack.Network , ip string ) (map [string ]string , error ) {
341
340
if ip != "" {
342
- if err := c . validateIPInCIDR (ip , resolvedNet , resolvedNet . Id ); err != nil {
341
+ if err := validateIPInCIDR (ip , resolvedNet . Cidr ); err != nil {
343
342
return nil , err
344
343
}
345
344
}
@@ -417,21 +416,51 @@ func (c *client) resolveNetwork(net infrav1.NetworkSpec) (*cloudstack.Network, e
417
416
return resolvedNet , nil
418
417
}
419
418
420
- func ( c * client ) validateIPInCIDR (ipStr string , net * cloudstack. Network , netID string ) error {
421
- ip := netpkg .ParseIP (ipStr )
419
+ func validateIPInCIDR (ipStr , cidrStr string ) error {
420
+ ip := net .ParseIP (ipStr )
422
421
if ip == nil {
423
422
return errors .Errorf ("invalid IP address %q" , ipStr )
424
423
}
425
424
426
- _ , cidr , err := netpkg .ParseCIDR (net . Cidr )
425
+ _ , cidr , err := net .ParseCIDR (cidrStr )
427
426
if err != nil {
428
- return errors .Wrapf (err , "invalid CIDR %q for network %q " , net . Cidr , netID )
427
+ return errors .Wrapf (err , "invalid CIDR %q" , cidrStr )
429
428
}
430
429
431
430
if ! cidr .Contains (ip ) {
432
- return errors .Errorf ("IP %q is not within network CIDR %q" , ipStr , net .Cidr )
431
+ return errors .Errorf ("IP %q is not within network CIDR %q" , ipStr , cidrStr )
432
+ }
433
+
434
+ return nil
435
+ }
436
+
437
+ func (c * client ) configureNetworkParams (
438
+ p * cloudstack.DeployVirtualMachineParams ,
439
+ csMachine * infrav1.CloudStackMachine ,
440
+ fd * infrav1.CloudStackFailureDomain ,
441
+ ) error {
442
+ if len (csMachine .Spec .Networks ) == 0 && fd .Spec .Zone .Network .ID != "" {
443
+ p .SetNetworkids ([]string {fd .Spec .Zone .Network .ID })
444
+ return nil
445
+ }
446
+
447
+ firstNetwork := csMachine .Spec .Networks [0 ]
448
+ zoneNet := fd .Spec .Zone .Network
449
+
450
+ // Validate match between zone network and first template network.
451
+ if zoneNet .ID != "" && firstNetwork .ID != "" && firstNetwork .ID != zoneNet .ID {
452
+ return errors .Errorf ("first network ID %q does not match zone network ID %q" , firstNetwork .ID , zoneNet .ID )
453
+ }
454
+ if zoneNet .Name != "" && firstNetwork .Name != "" && firstNetwork .Name != zoneNet .Name {
455
+ return errors .Errorf ("first network name %q does not match zone network name %q" , firstNetwork .Name , zoneNet .Name )
456
+ }
457
+
458
+ ipToNetworkList , err := c .buildIPToNetworkList (csMachine )
459
+ if err != nil {
460
+ return err
433
461
}
434
462
463
+ p .SetIptonetworklist (ipToNetworkList )
435
464
return nil
436
465
}
437
466
@@ -456,24 +485,8 @@ func (c *client) DeployVM(
456
485
457
486
p := c .cs .VirtualMachine .NewDeployVirtualMachineParams (offering .Id , templateID , fd .Spec .Zone .ID )
458
487
459
- if len (csMachine .Spec .Networks ) == 0 && fd .Spec .Zone .Network .ID != "" {
460
- p .SetNetworkids ([]string {fd .Spec .Zone .Network .ID })
461
- } else {
462
- firstNetwork := csMachine .Spec .Networks [0 ]
463
- zoneNet := fd .Spec .Zone .Network
464
-
465
- if zoneNet .ID != "" && firstNetwork .ID != "" && firstNetwork .ID != zoneNet .ID {
466
- return errors .Errorf ("first network ID %q does not match zone network ID %q" , firstNetwork .ID , zoneNet .ID )
467
- }
468
- if zoneNet .Name != "" && firstNetwork .Name != "" && firstNetwork .Name != zoneNet .Name {
469
- return errors .Errorf ("first network name %q does not match zone network name %q" , firstNetwork .Name , zoneNet .Name )
470
- }
471
-
472
- ipToNetworkList , err := c .buildIPToNetworkList (csMachine )
473
- if err != nil {
474
- return err
475
- }
476
- p .SetIptonetworklist (ipToNetworkList )
488
+ if err := c .configureNetworkParams (p , csMachine , fd ); err != nil {
489
+ return err
477
490
}
478
491
479
492
setIfNotEmpty (csMachine .Name , p .SetName )
0 commit comments