@@ -85,16 +85,22 @@ func fillCreateConfig(createConfig *linodego.InstanceCreateOptions, machineScope
85
85
// In that case we default to legacy interfaces.
86
86
if createConfig .InterfaceGeneration == "" {
87
87
createConfig .InterfaceGeneration = linodego .GenerationLegacyConfig
88
+ } else if createConfig .InterfaceGeneration == linodego .GenerationLinode {
89
+ // networkHelper is only applicable for Linode interfaces.
90
+ // legacy interfaces have nework helper configured in reconcilePreflightConfigure at the instance level.
91
+ if machineScope .LinodeMachine .Spec .NetworkHelper != nil {
92
+ createConfig .NetworkHelper = machineScope .LinodeMachine .Spec .NetworkHelper
93
+ } else {
94
+ createConfig .NetworkHelper = ptr .To (true )
95
+ }
88
96
}
97
+
89
98
if machineScope .LinodeMachine .Spec .PrivateIP != nil {
90
99
createConfig .PrivateIP = * machineScope .LinodeMachine .Spec .PrivateIP
91
100
} else {
92
101
if createConfig .InterfaceGeneration == linodego .GenerationLegacyConfig {
93
102
// Supported only for legacy network interfaces.
94
103
createConfig .PrivateIP = true
95
- } else {
96
- // Network Helper is not supported for the new network interfaces.
97
- createConfig .NetworkHelper = nil
98
104
}
99
105
}
100
106
@@ -631,7 +637,7 @@ func getVPCLinodeInterfaceConfig(ctx context.Context, machineScope *scope.Machin
631
637
for _ , subnet := range linodeVPC .Spec .Subnets {
632
638
if subnet .Label == subnetName {
633
639
subnetID = subnet .SubnetID
634
- ipv6Config = getVPCInterfaceIPv6Config (machineScope , len (subnet .IPv6 ))
640
+ ipv6Config = getVPCLinodeInterfaceIPv6Config (machineScope , len (subnet .IPv6 ))
635
641
break
636
642
}
637
643
}
@@ -641,7 +647,7 @@ func getVPCLinodeInterfaceConfig(ctx context.Context, machineScope *scope.Machin
641
647
}
642
648
} else {
643
649
subnetID = linodeVPC .Spec .Subnets [0 ].SubnetID // get first subnet if nothing specified
644
- ipv6Config = getVPCInterfaceIPv6Config (machineScope , len (linodeVPC .Spec .Subnets [0 ].IPv6 ))
650
+ ipv6Config = getVPCLinodeInterfaceIPv6Config (machineScope , len (linodeVPC .Spec .Subnets [0 ].IPv6 ))
645
651
}
646
652
647
653
if subnetID == 0 {
@@ -731,7 +737,7 @@ func getVPCLinodeInterfaceConfigFromDirectID(ctx context.Context, machineScope *
731
737
for _ , subnet := range vpc .Subnets {
732
738
if subnet .Label == subnetName {
733
739
subnetID = subnet .ID
734
- ipv6Config = getVPCInterfaceIPv6Config (machineScope , len (subnet .IPv6 ))
740
+ ipv6Config = getVPCLinodeInterfaceIPv6Config (machineScope , len (subnet .IPv6 ))
735
741
break
736
742
}
737
743
}
@@ -740,7 +746,7 @@ func getVPCLinodeInterfaceConfigFromDirectID(ctx context.Context, machineScope *
740
746
}
741
747
} else {
742
748
subnetID = vpc .Subnets [0 ].ID
743
- ipv6Config = getVPCInterfaceIPv6Config (machineScope , len (vpc .Subnets [0 ].IPv6 ))
749
+ ipv6Config = getVPCLinodeInterfaceIPv6Config (machineScope , len (vpc .Subnets [0 ].IPv6 ))
744
750
}
745
751
746
752
// Check if a VPC interface already exists
@@ -890,12 +896,12 @@ func getMachineIPv6Config(machineScope *scope.MachineScope, numIPv6RangesInSubne
890
896
return intfOpts
891
897
}
892
898
893
- // getVPCInterfaceIPv6Config returns the IPv6 configuration for a LinodeMachine.
899
+ // getVPCLinodeInterfaceIPv6Config returns the IPv6 configuration for a LinodeMachine.
894
900
// It checks the LinodeMachine's IPv6Options for SLAAC and Ranges settings.
895
901
// If `EnableSLAAC` is set, it will enable SLAAC with the default IPv6 CIDR range.
896
902
// If `EnableRanges` is set, it will enable IPv6 ranges with the default IPv6 CIDR range.
897
903
// If `IsPublicIPv6` is set, it will be used to determine if the IPv6 range should be publicly routable or not.
898
- func getVPCInterfaceIPv6Config (machineScope * scope.MachineScope , numIPv6RangesInSubnet int ) * linodego.VPCInterfaceIPv6CreateOptions {
904
+ func getVPCLinodeInterfaceIPv6Config (machineScope * scope.MachineScope , numIPv6RangesInSubnet int ) * linodego.VPCInterfaceIPv6CreateOptions {
899
905
intfOpts := & linodego.VPCInterfaceIPv6CreateOptions {}
900
906
901
907
// If there are no IPv6 ranges in the subnet or if IPv6 options are not specified, return nil.
@@ -928,8 +934,6 @@ func getVPCInterfaceIPv6Config(machineScope *scope.MachineScope, numIPv6RangesIn
928
934
929
935
// Unfortunately, this is necessary since DeepCopy can't be generated for linodego.LinodeInterfaceCreateOptions
930
936
// so here we manually create the options for Linode interfaces.
931
- //
932
- //nolint:gocognit,cyclop,gocritic,nestif,nolintlint // Also, unfortunately, this cannot be made any reasonably simpler with how complicated the linodego struct is
933
937
func constructLinodeInterfaceCreateOpts (createOpts []infrav1alpha2.LinodeInterfaceCreateOptions ) []linodego.LinodeInterfaceCreateOptions {
934
938
linodeInterfaces := make ([]linodego.LinodeInterfaceCreateOptions , len (createOpts ))
935
939
for idx , iface := range createOpts {
@@ -943,91 +947,11 @@ func constructLinodeInterfaceCreateOpts(createOpts []infrav1alpha2.LinodeInterfa
943
947
}
944
948
// Handle VPC
945
949
if iface .VPC != nil {
946
- var (
947
- ipv4Addrs []linodego.VPCInterfaceIPv4AddressCreateOptions
948
- ipv4Ranges []linodego.VPCInterfaceIPv4RangeCreateOptions
949
- ipv6Ranges []linodego.VPCInterfaceIPv6RangeCreateOptions
950
- ipv6SLAAC []linodego.VPCInterfaceIPv6SLAACCreateOptions
951
- ipv6IsPublic bool
952
- )
953
- if iface .VPC .IPv4 != nil {
954
- for _ , addr := range iface .VPC .IPv4 .Addresses {
955
- ipv4Addrs = append (ipv4Addrs , linodego.VPCInterfaceIPv4AddressCreateOptions {
956
- Address : addr .Address ,
957
- Primary : addr .Primary ,
958
- NAT1To1Address : addr .NAT1To1Address ,
959
- })
960
- }
961
- for _ , rng := range iface .VPC .IPv4 .Ranges {
962
- ipv4Ranges = append (ipv4Ranges , linodego.VPCInterfaceIPv4RangeCreateOptions {
963
- Range : rng .Range ,
964
- })
965
- }
966
- } else {
967
- // If no IPv4 addresses are specified, we set a default NAT1To1 address to "any"
968
- ipv4Addrs = []linodego.VPCInterfaceIPv4AddressCreateOptions {
969
- {
970
- Primary : ptr .To (true ),
971
- NAT1To1Address : ptr .To ("auto" ),
972
- Address : "auto" , // Default to auto-assigned address
973
- },
974
- }
975
- }
976
- if iface .VPC .IPv6 != nil {
977
- for _ , slaac := range iface .VPC .IPv6 .SLAAC {
978
- ipv6SLAAC = append (ipv6SLAAC , linodego.VPCInterfaceIPv6SLAACCreateOptions {
979
- Range : slaac .Range ,
980
- })
981
- }
982
- for _ , rng := range iface .VPC .IPv6 .Ranges {
983
- ipv6Ranges = append (ipv6Ranges , linodego.VPCInterfaceIPv6RangeCreateOptions {
984
- Range : rng .Range ,
985
- })
986
- }
987
- ipv6IsPublic = iface .VPC .IPv6 .IsPublic
988
- }
989
- ifaceCreateOpts .VPC = & linodego.VPCInterfaceCreateOptions {
990
- SubnetID : iface .VPC .SubnetID ,
991
- IPv4 : & linodego.VPCInterfaceIPv4CreateOptions {
992
- Addresses : ipv4Addrs ,
993
- Ranges : ipv4Ranges ,
994
- },
995
- IPv6 : & linodego.VPCInterfaceIPv6CreateOptions {
996
- SLAAC : ipv6SLAAC ,
997
- Ranges : ipv6Ranges ,
998
- IsPublic : ipv6IsPublic ,
999
- },
1000
- }
950
+ ifaceCreateOpts .VPC = constructLinodeInterfaceVPC (iface )
1001
951
}
1002
952
// Handle Public Interface
1003
953
if iface .Public != nil {
1004
- var (
1005
- ipv4Addrs []linodego.PublicInterfaceIPv4AddressCreateOptions
1006
- ipv6Ranges []linodego.PublicInterfaceIPv6RangeCreateOptions
1007
- )
1008
- if iface .Public .IPv4 != nil {
1009
- for _ , addr := range iface .Public .IPv4 .Addresses {
1010
- ipv4Addrs = append (ipv4Addrs , linodego.PublicInterfaceIPv4AddressCreateOptions {
1011
- Address : addr .Address ,
1012
- Primary : addr .Primary ,
1013
- })
1014
- }
1015
- }
1016
- if iface .Public .IPv6 != nil {
1017
- for _ , rng := range iface .Public .IPv6 .Ranges {
1018
- ipv6Ranges = append (ipv6Ranges , linodego.PublicInterfaceIPv6RangeCreateOptions {
1019
- Range : rng .Range ,
1020
- })
1021
- }
1022
- }
1023
- ifaceCreateOpts .Public = & linodego.PublicInterfaceCreateOptions {
1024
- IPv4 : & linodego.PublicInterfaceIPv4CreateOptions {
1025
- Addresses : ipv4Addrs ,
1026
- },
1027
- IPv6 : & linodego.PublicInterfaceIPv6CreateOptions {
1028
- Ranges : ipv6Ranges ,
1029
- },
1030
- }
954
+ ifaceCreateOpts .Public = constructLinodeInterfacePublic (iface )
1031
955
}
1032
956
// Handle Default Route
1033
957
if iface .DefaultRoute != nil {
@@ -1044,6 +968,96 @@ func constructLinodeInterfaceCreateOpts(createOpts []infrav1alpha2.LinodeInterfa
1044
968
return linodeInterfaces
1045
969
}
1046
970
971
+ // constructLinodeInterfaceVPC constructs a Linode VPC interface configuration from the provided LinodeInterfaceCreateOptions.
972
+ func constructLinodeInterfaceVPC (iface infrav1alpha2.LinodeInterfaceCreateOptions ) * linodego.VPCInterfaceCreateOptions {
973
+ var (
974
+ ipv4Addrs []linodego.VPCInterfaceIPv4AddressCreateOptions
975
+ ipv4Ranges []linodego.VPCInterfaceIPv4RangeCreateOptions
976
+ ipv6Ranges []linodego.VPCInterfaceIPv6RangeCreateOptions
977
+ ipv6SLAAC []linodego.VPCInterfaceIPv6SLAACCreateOptions
978
+ ipv6IsPublic bool
979
+ )
980
+ if iface .VPC .IPv4 != nil {
981
+ for _ , addr := range iface .VPC .IPv4 .Addresses {
982
+ ipv4Addrs = append (ipv4Addrs , linodego.VPCInterfaceIPv4AddressCreateOptions {
983
+ Address : addr .Address ,
984
+ Primary : addr .Primary ,
985
+ NAT1To1Address : addr .NAT1To1Address ,
986
+ })
987
+ }
988
+ for _ , rng := range iface .VPC .IPv4 .Ranges {
989
+ ipv4Ranges = append (ipv4Ranges , linodego.VPCInterfaceIPv4RangeCreateOptions {
990
+ Range : rng .Range ,
991
+ })
992
+ }
993
+ } else {
994
+ // If no IPv4 addresses are specified, we set a default NAT1To1 address to "any"
995
+ ipv4Addrs = []linodego.VPCInterfaceIPv4AddressCreateOptions {
996
+ {
997
+ Primary : ptr .To (true ),
998
+ NAT1To1Address : ptr .To ("auto" ),
999
+ Address : "auto" , // Default to auto-assigned address
1000
+ },
1001
+ }
1002
+ }
1003
+ if iface .VPC .IPv6 != nil {
1004
+ for _ , slaac := range iface .VPC .IPv6 .SLAAC {
1005
+ ipv6SLAAC = append (ipv6SLAAC , linodego.VPCInterfaceIPv6SLAACCreateOptions {
1006
+ Range : slaac .Range ,
1007
+ })
1008
+ }
1009
+ for _ , rng := range iface .VPC .IPv6 .Ranges {
1010
+ ipv6Ranges = append (ipv6Ranges , linodego.VPCInterfaceIPv6RangeCreateOptions {
1011
+ Range : rng .Range ,
1012
+ })
1013
+ }
1014
+ ipv6IsPublic = iface .VPC .IPv6 .IsPublic
1015
+ }
1016
+ return & linodego.VPCInterfaceCreateOptions {
1017
+ SubnetID : iface .VPC .SubnetID ,
1018
+ IPv4 : & linodego.VPCInterfaceIPv4CreateOptions {
1019
+ Addresses : ipv4Addrs ,
1020
+ Ranges : ipv4Ranges ,
1021
+ },
1022
+ IPv6 : & linodego.VPCInterfaceIPv6CreateOptions {
1023
+ SLAAC : ipv6SLAAC ,
1024
+ Ranges : ipv6Ranges ,
1025
+ IsPublic : ipv6IsPublic ,
1026
+ },
1027
+ }
1028
+ }
1029
+
1030
+ // constructLinodeInterfacePublic constructs a Linode Public interface configuration from the provided LinodeInterfaceCreateOptions.
1031
+ func constructLinodeInterfacePublic (iface infrav1alpha2.LinodeInterfaceCreateOptions ) * linodego.PublicInterfaceCreateOptions {
1032
+ var (
1033
+ ipv4Addrs []linodego.PublicInterfaceIPv4AddressCreateOptions
1034
+ ipv6Ranges []linodego.PublicInterfaceIPv6RangeCreateOptions
1035
+ )
1036
+ if iface .Public .IPv4 != nil {
1037
+ for _ , addr := range iface .Public .IPv4 .Addresses {
1038
+ ipv4Addrs = append (ipv4Addrs , linodego.PublicInterfaceIPv4AddressCreateOptions {
1039
+ Address : addr .Address ,
1040
+ Primary : addr .Primary ,
1041
+ })
1042
+ }
1043
+ }
1044
+ if iface .Public .IPv6 != nil {
1045
+ for _ , rng := range iface .Public .IPv6 .Ranges {
1046
+ ipv6Ranges = append (ipv6Ranges , linodego.PublicInterfaceIPv6RangeCreateOptions {
1047
+ Range : rng .Range ,
1048
+ })
1049
+ }
1050
+ }
1051
+ return & linodego.PublicInterfaceCreateOptions {
1052
+ IPv4 : & linodego.PublicInterfaceIPv4CreateOptions {
1053
+ Addresses : ipv4Addrs ,
1054
+ },
1055
+ IPv6 : & linodego.PublicInterfaceIPv6CreateOptions {
1056
+ Ranges : ipv6Ranges ,
1057
+ },
1058
+ }
1059
+ }
1060
+
1047
1061
// For converting LinodeMachineSpec to linodego.InstanceCreateOptions. Any defaulting should be done in fillCreateConfig instead
1048
1062
func linodeMachineSpecToInstanceCreateConfig (machineSpec infrav1alpha2.LinodeMachineSpec , machineTags []string ) * linodego.InstanceCreateOptions {
1049
1063
instCreateOpts := & linodego.InstanceCreateOptions {
0 commit comments