@@ -2,6 +2,7 @@ package ami_test
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"strings"
6
7
7
8
"github.com/aws/aws-sdk-go-v2/aws"
@@ -233,17 +234,212 @@ var _ = Describe("AMI Auto Resolution", func() {
233
234
234
235
})
235
236
236
- Context ("and Ubuntu family" , func () {
237
+ Context ("and Ubuntu1804 family" , func () {
237
238
BeforeEach (func () {
238
239
p = mockprovider .NewMockProvider ()
239
- imageFamily = "Ubuntu2004"
240
+ instanceType = "t2.medium"
241
+ imageFamily = "Ubuntu1804"
240
242
})
241
243
242
244
It ("should return an error" , func () {
243
245
resolver := NewSSMResolver (p .MockSSM ())
244
246
resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
245
247
246
248
Expect (err ).To (HaveOccurred ())
249
+ Expect (err ).To (MatchError ("SSM Parameter lookups for Ubuntu1804 AMIs is not supported" ))
250
+ })
251
+
252
+ })
253
+
254
+ Context ("and Ubuntu2004 family" , func () {
255
+ BeforeEach (func () {
256
+ p = mockprovider .NewMockProvider ()
257
+ instanceType = "t2.medium"
258
+ imageFamily = "Ubuntu2004"
259
+ })
260
+
261
+ DescribeTable ("should return an error" ,
262
+ func (version string ) {
263
+ resolver := NewSSMResolver (p .MockSSM ())
264
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
265
+
266
+ Expect (err ).To (HaveOccurred ())
267
+ Expect (err ).To (MatchError ("Ubuntu2004 requires EKS version greater or equal than 1.21 and lower than 1.29" ))
268
+ },
269
+ EntryDescription ("When EKS version is %s" ),
270
+ Entry (nil , "1.20" ),
271
+ Entry (nil , "1.30" ),
272
+ )
273
+
274
+ DescribeTable ("should return a valid AMI" ,
275
+ func (version string ) {
276
+ addMockGetParameter (p , fmt .Sprintf ("/aws/service/canonical/ubuntu/eks/20.04/%s/stable/current/amd64/hvm/ebs-gp2/ami-id" , version ), expectedAmi )
277
+
278
+ resolver := NewSSMResolver (p .MockSSM ())
279
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
280
+
281
+ Expect (err ).NotTo (HaveOccurred ())
282
+ Expect (p .MockSSM ().AssertNumberOfCalls (GinkgoT (), "GetParameter" , 1 )).To (BeTrue ())
283
+ Expect (resolvedAmi ).To (BeEquivalentTo (expectedAmi ))
284
+ },
285
+ EntryDescription ("When EKS version is %s" ),
286
+ Entry (nil , "1.21" ),
287
+ Entry (nil , "1.22" ),
288
+ Entry (nil , "1.23" ),
289
+ Entry (nil , "1.24" ),
290
+ Entry (nil , "1.25" ),
291
+ Entry (nil , "1.26" ),
292
+ Entry (nil , "1.27" ),
293
+ Entry (nil , "1.28" ),
294
+ Entry (nil , "1.29" ),
295
+ )
296
+
297
+ Context ("for arm instance type" , func () {
298
+ BeforeEach (func () {
299
+ instanceType = "a1.large"
300
+ })
301
+ DescribeTable ("should return a valid AMI for arm64" ,
302
+ func (version string ) {
303
+ addMockGetParameter (p , fmt .Sprintf ("/aws/service/canonical/ubuntu/eks/20.04/%s/stable/current/arm64/hvm/ebs-gp2/ami-id" , version ), expectedAmi )
304
+
305
+ resolver := NewSSMResolver (p .MockSSM ())
306
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
307
+
308
+ Expect (err ).NotTo (HaveOccurred ())
309
+ Expect (p .MockSSM ().AssertNumberOfCalls (GinkgoT (), "GetParameter" , 1 )).To (BeTrue ())
310
+ Expect (resolvedAmi ).To (BeEquivalentTo (expectedAmi ))
311
+ },
312
+ EntryDescription ("When EKS version is %s" ),
313
+ Entry (nil , "1.21" ),
314
+ Entry (nil , "1.22" ),
315
+ Entry (nil , "1.23" ),
316
+ Entry (nil , "1.24" ),
317
+ Entry (nil , "1.25" ),
318
+ Entry (nil , "1.26" ),
319
+ Entry (nil , "1.27" ),
320
+ Entry (nil , "1.28" ),
321
+ Entry (nil , "1.29" ),
322
+ )
323
+ })
324
+ })
325
+
326
+ Context ("and Ubuntu2204 family" , func () {
327
+ BeforeEach (func () {
328
+ p = mockprovider .NewMockProvider ()
329
+ instanceType = "t2.medium"
330
+ imageFamily = "Ubuntu2204"
331
+ })
332
+
333
+ DescribeTable ("should return an error" ,
334
+ func (version string ) {
335
+ resolver := NewSSMResolver (p .MockSSM ())
336
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
337
+
338
+ Expect (err ).To (HaveOccurred ())
339
+ Expect (err ).To (MatchError ("Ubuntu2204 requires EKS version greater or equal than 1.29" ))
340
+ },
341
+ EntryDescription ("When EKS version is %s" ),
342
+ Entry (nil , "1.21" ),
343
+ Entry (nil , "1.28" ),
344
+ )
345
+
346
+ DescribeTable ("should return a valid AMI" ,
347
+ func (version string ) {
348
+ addMockGetParameter (p , fmt .Sprintf ("/aws/service/canonical/ubuntu/eks/22.04/%s/stable/current/amd64/hvm/ebs-gp2/ami-id" , version ), expectedAmi )
349
+
350
+ resolver := NewSSMResolver (p .MockSSM ())
351
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
352
+
353
+ Expect (err ).NotTo (HaveOccurred ())
354
+ Expect (p .MockSSM ().AssertNumberOfCalls (GinkgoT (), "GetParameter" , 1 )).To (BeTrue ())
355
+ Expect (resolvedAmi ).To (BeEquivalentTo (expectedAmi ))
356
+ },
357
+ EntryDescription ("When EKS version is %s" ),
358
+ Entry (nil , "1.29" ),
359
+ Entry (nil , "1.30" ),
360
+ Entry (nil , "1.31" ),
361
+ )
362
+
363
+ Context ("for arm instance type" , func () {
364
+ BeforeEach (func () {
365
+ instanceType = "a1.large"
366
+ })
367
+ DescribeTable ("should return a valid AMI for arm64" ,
368
+ func (version string ) {
369
+ addMockGetParameter (p , fmt .Sprintf ("/aws/service/canonical/ubuntu/eks/22.04/%s/stable/current/arm64/hvm/ebs-gp2/ami-id" , version ), expectedAmi )
370
+
371
+ resolver := NewSSMResolver (p .MockSSM ())
372
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
373
+
374
+ Expect (err ).NotTo (HaveOccurred ())
375
+ Expect (p .MockSSM ().AssertNumberOfCalls (GinkgoT (), "GetParameter" , 1 )).To (BeTrue ())
376
+ Expect (resolvedAmi ).To (BeEquivalentTo (expectedAmi ))
377
+ },
378
+ EntryDescription ("When EKS version is %s" ),
379
+ Entry (nil , "1.29" ),
380
+ Entry (nil , "1.30" ),
381
+ Entry (nil , "1.31" ),
382
+ )
383
+ })
384
+ })
385
+
386
+ Context ("and UbuntuPro2204 family" , func () {
387
+ BeforeEach (func () {
388
+ p = mockprovider .NewMockProvider ()
389
+ instanceType = "t2.medium"
390
+ imageFamily = "UbuntuPro2204"
391
+ })
392
+
393
+ DescribeTable ("should return an error" ,
394
+ func (version string ) {
395
+ resolver := NewSSMResolver (p .MockSSM ())
396
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
397
+
398
+ Expect (err ).To (HaveOccurred ())
399
+ Expect (err ).To (MatchError ("UbuntuPro2204 requires EKS version greater or equal than 1.29" ))
400
+ },
401
+ EntryDescription ("When EKS version is %s" ),
402
+ Entry (nil , "1.21" ),
403
+ Entry (nil , "1.28" ),
404
+ )
405
+
406
+ DescribeTable ("should return a valid AMI" ,
407
+ func (version string ) {
408
+ addMockGetParameter (p , fmt .Sprintf ("/aws/service/canonical/ubuntu/eks-pro/22.04/%s/stable/current/amd64/hvm/ebs-gp2/ami-id" , version ), expectedAmi )
409
+
410
+ resolver := NewSSMResolver (p .MockSSM ())
411
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
412
+
413
+ Expect (err ).NotTo (HaveOccurred ())
414
+ Expect (p .MockSSM ().AssertNumberOfCalls (GinkgoT (), "GetParameter" , 1 )).To (BeTrue ())
415
+ Expect (resolvedAmi ).To (BeEquivalentTo (expectedAmi ))
416
+ },
417
+ EntryDescription ("When EKS version is %s" ),
418
+ Entry (nil , "1.29" ),
419
+ Entry (nil , "1.30" ),
420
+ Entry (nil , "1.31" ),
421
+ )
422
+
423
+ Context ("for arm instance type" , func () {
424
+ BeforeEach (func () {
425
+ instanceType = "a1.large"
426
+ })
427
+ DescribeTable ("should return a valid AMI for arm64" ,
428
+ func (version string ) {
429
+ addMockGetParameter (p , fmt .Sprintf ("/aws/service/canonical/ubuntu/eks-pro/22.04/%s/stable/current/arm64/hvm/ebs-gp2/ami-id" , version ), expectedAmi )
430
+
431
+ resolver := NewSSMResolver (p .MockSSM ())
432
+ resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
433
+
434
+ Expect (err ).NotTo (HaveOccurred ())
435
+ Expect (p .MockSSM ().AssertNumberOfCalls (GinkgoT (), "GetParameter" , 1 )).To (BeTrue ())
436
+ Expect (resolvedAmi ).To (BeEquivalentTo (expectedAmi ))
437
+ },
438
+ EntryDescription ("When EKS version is %s" ),
439
+ Entry (nil , "1.29" ),
440
+ Entry (nil , "1.30" ),
441
+ Entry (nil , "1.31" ),
442
+ )
247
443
})
248
444
})
249
445
0 commit comments