Skip to content

Commit 06da7fc

Browse files
authored
Merge pull request #3513 from Skarlso/ipv6
Add ipv6 support for EKS
2 parents 818abca + b358bd9 commit 06da7fc

File tree

76 files changed

+3750
-171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+3750
-171
lines changed

api/v1alpha3/awscluster_conversion.go

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ limitations under the License.
1717
package v1alpha3
1818

1919
import (
20-
"unsafe"
20+
"fmt"
2121

2222
apiconversion "k8s.io/apimachinery/pkg/conversion"
23-
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2423
clusterv1alpha3 "sigs.k8s.io/cluster-api/api/v1alpha3"
2524
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2625
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
2726
"sigs.k8s.io/controller-runtime/pkg/conversion"
27+
28+
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2829
)
2930

3031
// ConvertTo converts the v1alpha3 AWSCluster receiver to a v1beta1 AWSCluster.
@@ -55,6 +56,37 @@ func (r *AWSCluster) ConvertTo(dstRaw conversion.Hub) error {
5556
}
5657

5758
dst.Spec.S3Bucket = restored.Spec.S3Bucket
59+
if restored.Spec.NetworkSpec.VPC.IPv6 != nil {
60+
if dst.Spec.NetworkSpec.VPC.IPv6 == nil {
61+
dst.Spec.NetworkSpec.VPC.IPv6 = &infrav1.IPv6{}
62+
}
63+
dst.Spec.NetworkSpec.VPC.IPv6.EgressOnlyInternetGatewayID = restored.Spec.NetworkSpec.VPC.IPv6.EgressOnlyInternetGatewayID
64+
dst.Spec.NetworkSpec.VPC.IPv6.CidrBlock = restored.Spec.NetworkSpec.VPC.IPv6.CidrBlock
65+
dst.Spec.NetworkSpec.VPC.IPv6.PoolID = restored.Spec.NetworkSpec.VPC.IPv6.PoolID
66+
}
67+
68+
for i := range dst.Spec.NetworkSpec.Subnets {
69+
var found bool
70+
for k := range restored.Spec.NetworkSpec.Subnets {
71+
if dst.Spec.NetworkSpec.Subnets[i].ID == restored.Spec.NetworkSpec.Subnets[k].ID {
72+
dst.Spec.NetworkSpec.Subnets[i].IsIPv6 = restored.Spec.NetworkSpec.Subnets[i].IsIPv6
73+
dst.Spec.NetworkSpec.Subnets[i].IPv6CidrBlock = restored.Spec.NetworkSpec.Subnets[i].IPv6CidrBlock
74+
found = true
75+
break
76+
}
77+
}
78+
if !found {
79+
return fmt.Errorf("subnet with id %s not found amongst restored subnets", dst.Spec.NetworkSpec.Subnets[i].ID)
80+
}
81+
}
82+
83+
for k, v := range restored.Status.Network.SecurityGroups {
84+
if dst.Status.Network.SecurityGroups == nil {
85+
dst.Status.Network.SecurityGroups = make(map[infrav1.SecurityGroupRole]infrav1.SecurityGroup)
86+
}
87+
// This will overwrite the whole rule set... But maybe that's fine?
88+
dst.Status.Network.SecurityGroups[k] = v
89+
}
5890

5991
return nil
6092
}
@@ -108,7 +140,19 @@ func Convert_v1beta1_APIEndpoint_To_v1alpha3_APIEndpoint(in *clusterv1.APIEndpoi
108140

109141
// Convert_v1alpha3_Network_To_v1alpha4_NetworkStatus is based on the autogenerated function and handles the renaming of the Network struct to NetworkStatus
110142
func Convert_v1alpha3_Network_To_v1beta1_NetworkStatus(in *Network, out *infrav1.NetworkStatus, s apiconversion.Scope) error {
111-
out.SecurityGroups = *(*map[infrav1.SecurityGroupRole]infrav1.SecurityGroup)(unsafe.Pointer(&in.SecurityGroups))
143+
if in.SecurityGroups != nil {
144+
in, out := &in.SecurityGroups, &out.SecurityGroups
145+
*out = make(map[infrav1.SecurityGroupRole]infrav1.SecurityGroup, len(*in))
146+
for key, val := range *in {
147+
newVal := new(infrav1.SecurityGroup)
148+
if err := Convert_v1alpha3_SecurityGroup_To_v1beta1_SecurityGroup(&val, newVal, s); err != nil {
149+
return err
150+
}
151+
(*out)[infrav1.SecurityGroupRole(key)] = *newVal
152+
}
153+
} else {
154+
out.SecurityGroups = nil
155+
}
112156
if err := Convert_v1alpha3_ClassicELB_To_v1beta1_ClassicELB(&in.APIServerELB, &out.APIServerELB, s); err != nil {
113157
return err
114158
}
@@ -117,7 +161,19 @@ func Convert_v1alpha3_Network_To_v1beta1_NetworkStatus(in *Network, out *infrav1
117161

118162
// Convert_v1alpha4_NetworkStatus_To_v1alpha3_Network is based on the autogenerated function and handles the renaming of the NetworkStatus struct to Network
119163
func Convert_v1beta1_NetworkStatus_To_v1alpha3_Network(in *infrav1.NetworkStatus, out *Network, s apiconversion.Scope) error {
120-
out.SecurityGroups = *(*map[SecurityGroupRole]SecurityGroup)(unsafe.Pointer(&in.SecurityGroups))
164+
if in.SecurityGroups != nil {
165+
in, out := &in.SecurityGroups, &out.SecurityGroups
166+
*out = make(map[SecurityGroupRole]SecurityGroup, len(*in))
167+
for key, val := range *in {
168+
newVal := new(SecurityGroup)
169+
if err := Convert_v1beta1_SecurityGroup_To_v1alpha3_SecurityGroup(&val, newVal, s); err != nil {
170+
return err
171+
}
172+
(*out)[SecurityGroupRole(key)] = *newVal
173+
}
174+
} else {
175+
out.SecurityGroups = nil
176+
}
121177
if err := Convert_v1beta1_ClassicELB_To_v1alpha3_ClassicELB(&in.APIServerELB, &out.APIServerELB, s); err != nil {
122178
return err
123179
}
@@ -131,3 +187,15 @@ func Convert_v1beta1_AWSLoadBalancerSpec_To_v1alpha3_AWSLoadBalancerSpec(in *inf
131187
func Convert_v1beta1_AWSClusterSpec_To_v1alpha3_AWSClusterSpec(in *infrav1.AWSClusterSpec, out *AWSClusterSpec, s apiconversion.Scope) error {
132188
return autoConvert_v1beta1_AWSClusterSpec_To_v1alpha3_AWSClusterSpec(in, out, s)
133189
}
190+
191+
func Convert_v1beta1_VPCSpec_To_v1alpha3_VPCSpec(in *infrav1.VPCSpec, out *VPCSpec, s apiconversion.Scope) error {
192+
return autoConvert_v1beta1_VPCSpec_To_v1alpha3_VPCSpec(in, out, s)
193+
}
194+
195+
func Convert_v1beta1_SubnetSpec_To_v1alpha3_SubnetSpec(in *infrav1.SubnetSpec, out *SubnetSpec, s apiconversion.Scope) error {
196+
return autoConvert_v1beta1_SubnetSpec_To_v1alpha3_SubnetSpec(in, out, s)
197+
}
198+
199+
func Convert_v1beta1_IngressRule_To_v1alpha3_IngressRule(in *infrav1.IngressRule, out *IngressRule, s apiconversion.Scope) error {
200+
return autoConvert_v1beta1_IngressRule_To_v1alpha3_IngressRule(in, out, s)
201+
}

api/v1alpha3/zz_generated.conversion.go

Lines changed: 63 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1alpha4/awscluster_conversion.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@ limitations under the License.
1717
package v1alpha4
1818

1919
import (
20+
"fmt"
21+
2022
apiconversion "k8s.io/apimachinery/pkg/conversion"
21-
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2223
clusterv1alpha4 "sigs.k8s.io/cluster-api/api/v1alpha4"
2324
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2425
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
2526
"sigs.k8s.io/controller-runtime/pkg/conversion"
27+
28+
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2629
)
2730

2831
// ConvertTo converts the v1alpha4 AWSCluster receiver to a v1beta1 AWSCluster.
@@ -46,6 +49,37 @@ func (src *AWSCluster) ConvertTo(dstRaw conversion.Hub) error {
4649
}
4750

4851
dst.Spec.S3Bucket = restored.Spec.S3Bucket
52+
if restored.Spec.NetworkSpec.VPC.IPv6 != nil {
53+
if dst.Spec.NetworkSpec.VPC.IPv6 == nil {
54+
dst.Spec.NetworkSpec.VPC.IPv6 = &infrav1.IPv6{}
55+
}
56+
dst.Spec.NetworkSpec.VPC.IPv6.EgressOnlyInternetGatewayID = restored.Spec.NetworkSpec.VPC.IPv6.EgressOnlyInternetGatewayID
57+
dst.Spec.NetworkSpec.VPC.IPv6.CidrBlock = restored.Spec.NetworkSpec.VPC.IPv6.CidrBlock
58+
dst.Spec.NetworkSpec.VPC.IPv6.PoolID = restored.Spec.NetworkSpec.VPC.IPv6.PoolID
59+
}
60+
61+
for i := range dst.Spec.NetworkSpec.Subnets {
62+
var found bool
63+
for k := range restored.Spec.NetworkSpec.Subnets {
64+
if dst.Spec.NetworkSpec.Subnets[i].ID == restored.Spec.NetworkSpec.Subnets[k].ID {
65+
dst.Spec.NetworkSpec.Subnets[i].IsIPv6 = restored.Spec.NetworkSpec.Subnets[i].IsIPv6
66+
dst.Spec.NetworkSpec.Subnets[i].IPv6CidrBlock = restored.Spec.NetworkSpec.Subnets[i].IPv6CidrBlock
67+
found = true
68+
break
69+
}
70+
}
71+
if !found {
72+
return fmt.Errorf("subnet with id %s not found amongst restored subnets", dst.Spec.NetworkSpec.Subnets[i].ID)
73+
}
74+
}
75+
76+
for k, v := range restored.Status.Network.SecurityGroups {
77+
if dst.Status.Network.SecurityGroups == nil {
78+
dst.Status.Network.SecurityGroups = make(map[infrav1.SecurityGroupRole]infrav1.SecurityGroup)
79+
}
80+
// This will overwrite the whole rule set... But maybe that's fine?
81+
dst.Status.Network.SecurityGroups[k] = v
82+
}
4983

5084
return nil
5185
}
@@ -100,3 +134,7 @@ func (r *AWSClusterList) ConvertFrom(srcRaw conversion.Hub) error {
100134
func Convert_v1beta1_AWSLoadBalancerSpec_To_v1alpha4_AWSLoadBalancerSpec(in *infrav1.AWSLoadBalancerSpec, out *AWSLoadBalancerSpec, s apiconversion.Scope) error {
101135
return autoConvert_v1beta1_AWSLoadBalancerSpec_To_v1alpha4_AWSLoadBalancerSpec(in, out, s)
102136
}
137+
138+
func Convert_v1beta1_SubnetSpec_To_v1alpha4_SubnetSpec(in *infrav1.SubnetSpec, out *SubnetSpec, s apiconversion.Scope) error {
139+
return autoConvert_v1beta1_SubnetSpec_To_v1alpha4_SubnetSpec(in, out, s)
140+
}

api/v1alpha4/conversion.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,18 @@ package v1alpha4
1818

1919
import (
2020
"k8s.io/apimachinery/pkg/conversion"
21+
2122
"sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2223
)
2324

2425
func Convert_v1beta1_AWSClusterSpec_To_v1alpha4_AWSClusterSpec(in *v1beta1.AWSClusterSpec, out *AWSClusterSpec, s conversion.Scope) error {
2526
return autoConvert_v1beta1_AWSClusterSpec_To_v1alpha4_AWSClusterSpec(in, out, s)
2627
}
28+
29+
func Convert_v1beta1_VPCSpec_To_v1alpha4_VPCSpec(in *v1beta1.VPCSpec, out *VPCSpec, s conversion.Scope) error {
30+
return autoConvert_v1beta1_VPCSpec_To_v1alpha4_VPCSpec(in, out, s)
31+
}
32+
33+
func Convert_v1beta1_IngressRule_To_v1alpha4_IngressRule(in *v1beta1.IngressRule, out *IngressRule, s conversion.Scope) error {
34+
return autoConvert_v1beta1_IngressRule_To_v1alpha4_IngressRule(in, out, s)
35+
}

0 commit comments

Comments
 (0)