@@ -27,6 +27,7 @@ import (
2727 "github.com/openshift/installer/pkg/types"
2828 "github.com/openshift/installer/pkg/types/azure"
2929 "github.com/openshift/installer/pkg/types/dns"
30+ "github.com/openshift/installer/pkg/types/network"
3031)
3132
3233// GenerateClusterAssets generates the manifests for the cluster-api.
@@ -38,10 +39,10 @@ func GenerateClusterAssets(installConfig *installconfig.InstallConfig, clusterID
3839 networkSecurityGroup := installConfig .Config .Platform .Azure .NetworkSecurityGroupName (clusterID .InfraID )
3940 securityGroup := capz.SecurityGroup {Name : networkSecurityGroup }
4041
41- CIDRs := capiutils .CIDRsFromInstallConfig (installConfig )
42- addressFamilySubnets , err := getAddressFamilySubnets (CIDRs )
42+ cidrs := capiutils .CIDRsFromInstallConfig (installConfig )
43+ addressFamilySubnets , err := getAddressFamilySubnets (cidrs )
4344 if err != nil {
44- return nil , errors .Wrap (err , "failed to split CIDRs into subnets" )
45+ return nil , errors .Wrap (err , "failed to split cidrs into subnets" )
4546 }
4647
4748 securityRule := capz.SecurityRule {
@@ -105,8 +106,11 @@ func GenerateClusterAssets(installConfig *installconfig.InstallConfig, clusterID
105106 splitLength = len (zones ) + 1
106107 }
107108
108- addressFamilySubnets .SplitComputeSubnet (splitLength )
109- virtualNetworkAddressPrefixes := getVirtualNetworkAddressPrefixes (CIDRs )
109+ err = addressFamilySubnets .SplitComputeSubnet (splitLength )
110+ if err != nil {
111+ return nil , errors .Wrap (err , "unable to split compute subnet" )
112+ }
113+ virtualNetworkAddressPrefixes := getVirtualNetworkAddressPrefixes (cidrs )
110114
111115 // CAPZ expects the capz-system to be created.
112116 azureNamespace := & corev1.Namespace {ObjectMeta : metav1.ObjectMeta {Name : "capz-system" }}
@@ -154,7 +158,7 @@ func GenerateClusterAssets(installConfig *installconfig.InstallConfig, clusterID
154158 }
155159
156160 // IPv6 outbound load balancer for worker subnet(s)
157- var nodeOutboundLB * capz.LoadBalancerSpec = nil
161+ var nodeOutboundLB * capz.LoadBalancerSpec
158162 if addressFamilySubnets .IsDualStack () {
159163 lbip6 , err := getLBIP (addressFamilySubnets .GetIPv6Subnets (), installConfig )
160164 if err != nil {
@@ -362,23 +366,6 @@ func GenerateClusterAssets(installConfig *installconfig.InstallConfig, clusterID
362366 }, nil
363367}
364368
365- func getCIDRBlocks (subnets []* net.IPNet ) ([]string , []string , []string ) {
366- var controlPlaneCIDRBlocks , computeCIDRBlocks , otherCIDRBlocks []string
367-
368- for i , subnet := range subnets {
369- switch i {
370- case 0 :
371- controlPlaneCIDRBlocks = append (controlPlaneCIDRBlocks , subnet .String ())
372- case 1 :
373- computeCIDRBlocks = append (computeCIDRBlocks , subnet .String ())
374- default :
375- otherCIDRBlocks = append (otherCIDRBlocks , subnet .String ())
376- }
377- }
378-
379- return controlPlaneCIDRBlocks , computeCIDRBlocks , otherCIDRBlocks
380- }
381-
382369func getSubnetSpec (installConfig * installconfig.InstallConfig , controlPlaneSubnet , computeSubnet string , securityGroup capz.SecurityGroup , addressFamilySubnets * AddressFamilySubnets , nodeSubnetID string , infraID string , zones []string ) ([]capz.SubnetSpec , error ) {
383370 ipv4Subnets := addressFamilySubnets .GetIPv4AdditionalSubnets ()
384371 ipv6Subnets := addressFamilySubnets .GetIPv6AdditionalSubnets ()
@@ -658,12 +645,14 @@ func stringifyAddressPrefixes(addressPrefixes []*net.IPNet) []string {
658645 return strAddressPrefixes
659646}
660647
648+ // AddressFamilySubnet holds an IPv4 and IPv6 subnet pair.
661649type AddressFamilySubnet struct {
662650 IPv4Subnet * net.IPNet
663651 IPv6Subnet * net.IPNet
664652 SubnetRole * capz.SubnetRole
665653}
666654
655+ // AddressFamilySubnets keeps track of IPv4 and IPv6 subnets.
667656type AddressFamilySubnets struct {
668657 addressFamilySubnets []AddressFamilySubnet
669658 length int
@@ -673,22 +662,27 @@ type AddressFamilySubnets struct {
673662 isDualStack bool
674663}
675664
665+ // Length returns the number of subnets in the list.
676666func (a AddressFamilySubnets ) Length () int {
677667 return a .length
678668}
679669
670+ // IPv4Count returns the number of IPv4 subnets in the list.
680671func (a AddressFamilySubnets ) IPv4Count () int {
681672 return a .ipv4Count
682673}
683674
675+ // IPv6Count returns the number of IPv6 subnets in the list.
684676func (a AddressFamilySubnets ) IPv6Count () int {
685677 return a .ipv6Count
686678}
687679
680+ // IsDualStack determines if we are using single or dual stack networking.
688681func (a AddressFamilySubnets ) IsDualStack () bool {
689682 return a .isDualStack
690683}
691684
685+ // GetIPv4Subnets returns all IPv4 subnets in the list.
692686func (a AddressFamilySubnets ) GetIPv4Subnets () []* net.IPNet {
693687 var ipv4Subnets []* net.IPNet
694688 for _ , ipv4Subnet := range a .addressFamilySubnets {
@@ -699,6 +693,7 @@ func (a AddressFamilySubnets) GetIPv4Subnets() []*net.IPNet {
699693 return ipv4Subnets
700694}
701695
696+ // GetIPv6Subnets returns all IPv6 subnets in the list.
702697func (a AddressFamilySubnets ) GetIPv6Subnets () []* net.IPNet {
703698 var ipv6Subnets []* net.IPNet
704699 for _ , ipv6Subnet := range a .addressFamilySubnets {
@@ -709,27 +704,31 @@ func (a AddressFamilySubnets) GetIPv6Subnets() []*net.IPNet {
709704 return ipv6Subnets
710705}
711706
707+ // GetControlPlaneSubnet returns the control plane subnet.
712708func (a AddressFamilySubnets ) GetControlPlaneSubnet () AddressFamilySubnet {
713709 if a .length > 0 {
714710 return a .addressFamilySubnets [0 ]
715711 }
716712 return AddressFamilySubnet {}
717713}
718714
715+ // SplitIPv4ComputeSubnets splits the IPv4 compute subnet into the number of subnets specified.
719716func (a AddressFamilySubnets ) SplitIPv4ComputeSubnets (numSubnets int ) ([]* net.IPNet , error ) {
720717 if a .ipv4Count > 1 && numSubnets > 0 {
721718 return cidr .SplitIntoSubnetsIPv4 (a .GetIPv4Subnets ()[1 ].String (), numSubnets )
722719 }
723720 return []* net.IPNet {}, nil
724721}
725722
723+ // SplitIPv6ComputeSubnets splits the IPv6 compute subnet into the number of subnets specified.
726724func (a AddressFamilySubnets ) SplitIPv6ComputeSubnets (numSubnets int ) ([]* net.IPNet , error ) {
727725 if a .ipv6Count > 1 && numSubnets > 0 {
728726 return cidr .SplitIntoSubnetsIPv6 (a .GetIPv6Subnets ()[1 ].String (), numSubnets )
729727 }
730728 return []* net.IPNet {}, nil
731729}
732730
731+ // SplitComputeSubnet splits the compute subnet into the number of subnets specified.
733732func (a * AddressFamilySubnets ) SplitComputeSubnet (numSubnets int ) error {
734733 if numSubnets <= 0 {
735734 return nil
@@ -754,7 +753,7 @@ func (a *AddressFamilySubnets) SplitComputeSubnet(numSubnets int) error {
754753 ipv6Count = len (ipv6ComputeSubnets )
755754 }
756755
757- var addressFamilySubnets []AddressFamilySubnet
756+ addressFamilySubnets := make ( []AddressFamilySubnet , 0 )
758757 for i , ipv4ComputeSubnet := range ipv4ComputeSubnets {
759758 addressFamilySubnet := AddressFamilySubnet {
760759 IPv4Subnet : ipv4ComputeSubnet ,
@@ -779,6 +778,7 @@ func (a *AddressFamilySubnets) SplitComputeSubnet(numSubnets int) error {
779778 return nil
780779}
781780
781+ // GetComputeSubnets returns the compute subnets.
782782func (a AddressFamilySubnets ) GetComputeSubnets () []AddressFamilySubnet {
783783 var computeSubnets []AddressFamilySubnet
784784
@@ -791,6 +791,7 @@ func (a AddressFamilySubnets) GetComputeSubnets() []AddressFamilySubnet {
791791 return computeSubnets
792792}
793793
794+ // GetIPv4ComputeSubnets returns the IPv4 compute subnets.
794795func (a AddressFamilySubnets ) GetIPv4ComputeSubnets () []* net.IPNet {
795796 computeSubnets := a .GetComputeSubnets ()
796797
@@ -804,6 +805,7 @@ func (a AddressFamilySubnets) GetIPv4ComputeSubnets() []*net.IPNet {
804805 return ipv4ComputeSubnets
805806}
806807
808+ // GetIPv6ComputeSubnets returns the IPv6 compute subnets.
807809func (a AddressFamilySubnets ) GetIPv6ComputeSubnets () []* net.IPNet {
808810 computeSubnets := a .GetComputeSubnets ()
809811
@@ -817,6 +819,7 @@ func (a AddressFamilySubnets) GetIPv6ComputeSubnets() []*net.IPNet {
817819 return ipv6ComputeSubnets
818820}
819821
822+ // GetAdditionalSubnets returns any additional subnets.
820823func (a AddressFamilySubnets ) GetAdditionalSubnets () []AddressFamilySubnet {
821824 var additionalSubnets []AddressFamilySubnet
822825
@@ -829,6 +832,7 @@ func (a AddressFamilySubnets) GetAdditionalSubnets() []AddressFamilySubnet {
829832 return additionalSubnets
830833}
831834
835+ // GetIPv4AdditionalSubnets returns any additional IPv4 subnets.
832836func (a AddressFamilySubnets ) GetIPv4AdditionalSubnets () []* net.IPNet {
833837 nonComputeSubnets := a .GetAdditionalSubnets ()
834838
@@ -842,6 +846,7 @@ func (a AddressFamilySubnets) GetIPv4AdditionalSubnets() []*net.IPNet {
842846 return ipv4Subnets
843847}
844848
849+ // GetIPv6AdditionalSubnets returns any additional IPv6 subnets.
845850func (a AddressFamilySubnets ) GetIPv6AdditionalSubnets () []* net.IPNet {
846851 nonComputeSubnets := a .GetAdditionalSubnets ()
847852
@@ -855,6 +860,7 @@ func (a AddressFamilySubnets) GetIPv6AdditionalSubnets() []*net.IPNet {
855860 return ipv6Subnets
856861}
857862
863+ // GetIPv4CIDRBlocks returns all IPv4 CIDR blocks.
858864func (a AddressFamilySubnets ) GetIPv4CIDRBlocks () []string {
859865 var ipv4CIDRBlocks []string
860866
@@ -867,6 +873,7 @@ func (a AddressFamilySubnets) GetIPv4CIDRBlocks() []string {
867873 return ipv4CIDRBlocks
868874}
869875
876+ // GetIPv6CIDRBlocks returns all IPv6 CIDR blocks.
870877func (a AddressFamilySubnets ) GetIPv6CIDRBlocks () []string {
871878 var ipv6CIDRBlocks []string
872879
@@ -879,6 +886,7 @@ func (a AddressFamilySubnets) GetIPv6CIDRBlocks() []string {
879886 return ipv6CIDRBlocks
880887}
881888
889+ // GetIPv4ControlPlaneCIDRBlocks returns all IPv4 control plane CIDR blocks.
882890func (a AddressFamilySubnets ) GetIPv4ControlPlaneCIDRBlocks () string {
883891 ipv4Subnet := a .GetControlPlaneSubnet ()
884892 if ipv4Subnet .IPv4Subnet != nil {
@@ -887,6 +895,7 @@ func (a AddressFamilySubnets) GetIPv4ControlPlaneCIDRBlocks() string {
887895 return ""
888896}
889897
898+ // GetIPv6ControlPlaneCIDRBlocks returns all IPv6 control plane CIDR blocks.
890899func (a AddressFamilySubnets ) GetIPv6ControlPlaneCIDRBlocks () string {
891900 ipv6Subnet := a .GetControlPlaneSubnet ()
892901 if ipv6Subnet .IPv6Subnet != nil {
@@ -895,6 +904,7 @@ func (a AddressFamilySubnets) GetIPv6ControlPlaneCIDRBlocks() string {
895904 return ""
896905}
897906
907+ // GetIPv4ComputeCIDRBlocks returns all IPv4 compute CIDR blocks.
898908func (a AddressFamilySubnets ) GetIPv4ComputeCIDRBlocks () []string {
899909 var ipv4CIDRBlocks []string
900910
@@ -907,6 +917,7 @@ func (a AddressFamilySubnets) GetIPv4ComputeCIDRBlocks() []string {
907917 return ipv4CIDRBlocks
908918}
909919
920+ // GetIPv6ComputeCIDRBlocks returns all IPv6 compute CIDR blocks.
910921func (a AddressFamilySubnets ) GetIPv6ComputeCIDRBlocks () []string {
911922 var ipv6CIDRBlocks []string
912923
@@ -919,6 +930,7 @@ func (a AddressFamilySubnets) GetIPv6ComputeCIDRBlocks() []string {
919930 return ipv6CIDRBlocks
920931}
921932
933+ // GetIPv4AdditionalCIDRBlocks returns all additional IPv4 CIDR blocks.
922934func (a AddressFamilySubnets ) GetIPv4AdditionalCIDRBlocks () []string {
923935 nonComputeSubnets := a .GetAdditionalSubnets ()
924936
@@ -932,6 +944,7 @@ func (a AddressFamilySubnets) GetIPv4AdditionalCIDRBlocks() []string {
932944 return ipv4CIDRBlocks
933945}
934946
947+ // GetIPv6AdditionalCIDRBlocks returns all additional IPv6 CIDR blocks.
935948func (a AddressFamilySubnets ) GetIPv6AdditionalCIDRBlocks () []string {
936949 nonComputeSubnets := a .GetAdditionalSubnets ()
937950
@@ -945,48 +958,48 @@ func (a AddressFamilySubnets) GetIPv6AdditionalCIDRBlocks() []string {
945958 return ipv6CIDRBlocks
946959}
947960
948- func getAddressFamilySubnets (CIDRs []ipnet.IPNet ) (AddressFamilySubnets , error ) {
961+ func getAddressFamilySubnets (cidrs []ipnet.IPNet ) (AddressFamilySubnets , error ) {
949962 var addressFamilySubnets AddressFamilySubnets
950963 var err error
951964
952- // Split CIDRs into IPv4 and IPv6 CIDRs
953- var ipv4CIDRs , ipv6CIDRs []ipnet.IPNet
954- for _ , CIDR := range CIDRs {
955- switch len (CIDR .IP ) {
965+ // Split cidrs into IPv4 and IPv6 cidrs
966+ var ipv4Cidrs , ipv6Cidrs []ipnet.IPNet
967+ for _ , cidr := range cidrs {
968+ switch len (cidr .IP ) {
956969 case net .IPv4len :
957- ipv4CIDRs = append (ipv4CIDRs , CIDR )
970+ ipv4Cidrs = append (ipv4Cidrs , cidr )
958971 case net .IPv6len :
959- ipv6CIDRs = append (ipv6CIDRs , CIDR )
972+ ipv6Cidrs = append (ipv6Cidrs , cidr )
960973 }
961974 }
962975
963- // Split IPv4 CIDRs into IPv4 subnets
976+ // Split IPv4 cidrs into IPv4 subnets
964977 var ipv4Subnets []* net.IPNet
965- switch len (ipv4CIDRs ) {
978+ switch len (ipv4Cidrs ) {
966979 case 1 :
967- ipv4Subnets , err = cidr .SplitIntoSubnetsIPv4 (ipv4CIDRs [0 ].String (), 2 )
980+ ipv4Subnets , err = cidr .SplitIntoSubnetsIPv4 (ipv4Cidrs [0 ].String (), 2 )
968981 if err != nil {
969982 return addressFamilySubnets , err
970983 }
971984 default :
972- for _ , ipv4Cidr := range ipv4CIDRs {
985+ for _ , ipv4Cidr := range ipv4Cidrs {
973986 ipv4Subnets = append (ipv4Subnets , & net.IPNet {
974987 IP : ipv4Cidr .IP ,
975988 Mask : ipv4Cidr .Mask ,
976989 })
977990 }
978991 }
979992
980- // Split IPv6 CIDRs into IPv6 subnets
993+ // Split IPv6 cidrs into IPv6 subnets
981994 var ipv6Subnets []* net.IPNet
982- switch len (ipv6CIDRs ) {
995+ switch len (ipv6Cidrs ) {
983996 case 1 :
984- ipv6Subnets , err = cidr .SplitIntoSubnetsIPv6 (ipv6CIDRs [0 ].String (), 2 )
997+ ipv6Subnets , err = cidr .SplitIntoSubnetsIPv6 (ipv6Cidrs [0 ].String (), 2 )
985998 if err != nil {
986999 return addressFamilySubnets , err
9871000 }
9881001 default :
989- for _ , ipv6Cidr := range ipv6CIDRs {
1002+ for _ , ipv6Cidr := range ipv6Cidrs {
9901003 ipv6Subnets = append (ipv6Subnets , & net.IPNet {
9911004 IP : ipv6Cidr .IP ,
9921005 Mask : ipv6Cidr .Mask ,
@@ -1018,39 +1031,10 @@ func getAddressFamilySubnets(CIDRs []ipnet.IPNet) (AddressFamilySubnets, error)
10181031 return addressFamilySubnets , err
10191032}
10201033
1021- func getIPFamilyCIDRs (CIDRs []ipnet.IPNet , ipFamilyLength int ) (ipFamilyCIDRs []ipnet.IPNet ) {
1022- for _ , CIDR := range CIDRs {
1023- if len (CIDR .IP ) == ipFamilyLength {
1024- ipFamilyCIDRs = append (ipFamilyCIDRs , CIDR )
1025- }
1026- }
1027- return
1028- }
1029-
1030- func getIPFamilySubnets (CIDRs []ipnet.IPNet , ipFamilyLength int ) (ipFamilySubnets []* net.IPNet , err error ) {
1031- switch len (CIDRs ) {
1032- case 1 :
1033- switch ipFamilyLength {
1034- case net .IPv4len :
1035- ipFamilySubnets , err = cidr .SplitIntoSubnetsIPv4 (CIDRs [0 ].String (), 2 )
1036- case net .IPv6len :
1037- ipFamilySubnets , err = cidr .SplitIntoSubnetsIPv6 (CIDRs [0 ].String (), 2 )
1038- }
1039- default :
1040- for _ , ipFamilyCIDR := range CIDRs {
1041- ipFamilySubnets = append (ipFamilySubnets , & net.IPNet {
1042- IP : ipFamilyCIDR .IP ,
1043- Mask : ipFamilyCIDR .Mask ,
1044- })
1045- }
1046- }
1047- return
1048- }
1049-
1050- func getVirtualNetworkAddressPrefixes (CIDRs []ipnet.IPNet ) []string {
1051- var virtualNetworkAddressPrefixes []string
1052- for _ , CIDR := range CIDRs {
1053- virtualNetworkAddressPrefixes = append (virtualNetworkAddressPrefixes , CIDR .String ())
1034+ func getVirtualNetworkAddressPrefixes (cidrs []ipnet.IPNet ) []string {
1035+ virtualNetworkAddressPrefixes := make ([]string , 0 )
1036+ for _ , cidr := range cidrs {
1037+ virtualNetworkAddressPrefixes = append (virtualNetworkAddressPrefixes , cidr .String ())
10541038 }
10551039
10561040 // XXX: I don't know if this is necessary, but copying it over for now
0 commit comments