@@ -2,6 +2,7 @@ package ami_test
22
33import (
44 "context"
5+ "fmt"
56 "strings"
67
78 "github.com/aws/aws-sdk-go-v2/aws"
@@ -233,17 +234,212 @@ var _ = Describe("AMI Auto Resolution", func() {
233234
234235 })
235236
236- Context ("and Ubuntu family" , func () {
237+ Context ("and Ubuntu1804 family" , func () {
237238 BeforeEach (func () {
238239 p = mockprovider .NewMockProvider ()
239- imageFamily = "Ubuntu2004"
240+ instanceType = "t2.medium"
241+ imageFamily = "Ubuntu1804"
240242 })
241243
242244 It ("should return an error" , func () {
243245 resolver := NewSSMResolver (p .MockSSM ())
244246 resolvedAmi , err = resolver .Resolve (context .Background (), region , version , instanceType , imageFamily )
245247
246248 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+ )
247443 })
248444 })
249445
0 commit comments