@@ -20,13 +20,15 @@ import (
20
20
"context"
21
21
"testing"
22
22
23
+ "github.com/aws/aws-sdk-go/aws"
23
24
"github.com/golang/mock/gomock"
24
25
. "github.com/onsi/gomega"
25
26
v1 "k8s.io/api/apps/v1"
26
27
corev1 "k8s.io/api/core/v1"
27
28
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28
29
"sigs.k8s.io/controller-runtime/pkg/client"
29
30
31
+ infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
30
32
ekscontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/controlplane/eks/api/v1beta1"
31
33
"sigs.k8s.io/cluster-api-provider-aws/pkg/cloud/scope"
32
34
)
@@ -206,6 +208,92 @@ func TestReconcileCniVpcCniValues(t *testing.T) {
206
208
}
207
209
}
208
210
211
+ func TestReconcileCniVpcCniValuesWithSecondaryCidrBlock (t * testing.T ) {
212
+ mockCtrl := gomock .NewController (t )
213
+ defer mockCtrl .Finish ()
214
+ g := NewWithT (t )
215
+ daemonSet := & v1.DaemonSet {
216
+ TypeMeta : metav1.TypeMeta {
217
+ Kind : "DaemonSet" ,
218
+ },
219
+ ObjectMeta : metav1.ObjectMeta {
220
+ Name : "aws-node" ,
221
+ Namespace : "kube-system" ,
222
+ },
223
+ Spec : v1.DaemonSetSpec {
224
+ Template : corev1.PodTemplateSpec {
225
+ ObjectMeta : metav1.ObjectMeta {},
226
+ Spec : corev1.PodSpec {
227
+ Containers : []corev1.Container {
228
+ {
229
+ Name : "aws-node" ,
230
+ Env : []corev1.EnvVar {
231
+ {
232
+ Name : "NAME1" ,
233
+ Value : "OVERWRITE" ,
234
+ },
235
+ {
236
+ Name : "NAME3" ,
237
+ Value : "VALUE3" ,
238
+ },
239
+ },
240
+ },
241
+ },
242
+ },
243
+ },
244
+ },
245
+ }
246
+ values := ekscontrolplanev1.VpcCni {
247
+ Env : []corev1.EnvVar {
248
+ {
249
+ Name : "NAME1" ,
250
+ Value : "VALUE1" ,
251
+ },
252
+ },
253
+ }
254
+ mockClient := & cachingClient {
255
+ getValue : daemonSet ,
256
+ }
257
+ m := & mockScope {
258
+ client : mockClient ,
259
+ cni : values ,
260
+ secondaryCidrBlock : aws .String ("100.0.0.1/20" ),
261
+ securityGroups : map [infrav1.SecurityGroupRole ]infrav1.SecurityGroup {
262
+ "node" : {
263
+ ID : "sg-1234" ,
264
+ Name : "node" ,
265
+ },
266
+ },
267
+ subnets : []infrav1.SubnetSpec {},
268
+ }
269
+ s := NewService (m )
270
+
271
+ err := s .ReconcileCNI (context .Background ())
272
+ g .Expect (err ).NotTo (HaveOccurred ())
273
+ g .Expect (mockClient .updateChain ).NotTo (BeEmpty ())
274
+ ds , ok := mockClient .updateChain [0 ].(* v1.DaemonSet )
275
+ g .Expect (ok ).To (BeTrue ())
276
+ g .Expect (ds .Spec .Template .Spec .Containers ).NotTo (BeEmpty ())
277
+ g .Expect (ds .Spec .Template .Spec .Containers [0 ].Env ).To (ConsistOf ([]corev1.EnvVar {
278
+ {
279
+ Name : "NAME1" ,
280
+ Value : "VALUE1" ,
281
+ },
282
+ {
283
+ Name : "NAME3" ,
284
+ Value : "VALUE3" ,
285
+ },
286
+ {
287
+ Name : "AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG" ,
288
+ Value : "true" ,
289
+ },
290
+ {
291
+ Name : "ENI_CONFIG_LABEL_DEF" ,
292
+ Value : "failure-domain.beta.kubernetes.io/zone" ,
293
+ },
294
+ }))
295
+ }
296
+
209
297
type cachingClient struct {
210
298
client.Client
211
299
getValue client.Object
@@ -225,10 +313,17 @@ func (c *cachingClient) Update(ctx context.Context, obj client.Object, opts ...c
225
313
return nil
226
314
}
227
315
316
+ func (c * cachingClient ) List (ctx context.Context , list client.ObjectList , opts ... client.ListOption ) error {
317
+ return nil
318
+ }
319
+
228
320
type mockScope struct {
229
321
scope.AWSNodeScope
230
- client client.Client
231
- cni ekscontrolplanev1.VpcCni
322
+ client client.Client
323
+ cni ekscontrolplanev1.VpcCni
324
+ secondaryCidrBlock * string
325
+ securityGroups map [infrav1.SecurityGroupRole ]infrav1.SecurityGroup
326
+ subnets infrav1.Subnets
232
327
}
233
328
234
329
func (s * mockScope ) RemoteClient () (client.Client , error ) {
@@ -256,5 +351,13 @@ func (s *mockScope) DisableVPCCNI() bool {
256
351
}
257
352
258
353
func (s * mockScope ) SecondaryCidrBlock () * string {
259
- return nil
354
+ return s .secondaryCidrBlock
355
+ }
356
+
357
+ func (s * mockScope ) SecurityGroups () map [infrav1.SecurityGroupRole ]infrav1.SecurityGroup {
358
+ return s .securityGroups
359
+ }
360
+
361
+ func (s * mockScope ) Subnets () infrav1.Subnets {
362
+ return s .subnets
260
363
}
0 commit comments