@@ -66,11 +66,24 @@ var _ = Describe("Create", func() {
6666 genericErr = fmt .Errorf ("ERR" )
6767 )
6868
69- mockDescribeAddon := func (provider * mockprovider.MockProvider , err error ) {
69+ mockDescribeAddon := func (provider * mockprovider.MockProvider , err error , autoMode bool ) {
7070 mockProvider .MockEKS ().
71- On ("DescribeAddon" , mock .Anything , mock .Anything ).
72- Return (nil , err ).
71+ On ("DescribeCluster" , mock .Anything , mock .Anything ).
72+ Return (& awseks.DescribeClusterOutput {
73+ Cluster : & ekstypes.Cluster {
74+ ComputeConfig : & ekstypes.ComputeConfigResponse {
75+ Enabled : aws .Bool (autoMode ),
76+ },
77+ },
78+ }, nil ).
7379 Once ()
80+ if ! autoMode {
81+ mockProvider .MockEKS ().
82+ On ("DescribeAddon" , mock .Anything , mock .Anything ).
83+ Return (nil , err ).
84+ Once ()
85+
86+ }
7487 }
7588
7689 createFakeServiceAccount := func (clientSet * fake.Clientset , namespace , serviceAccountName , roleARN string ) {
@@ -139,14 +152,14 @@ var _ = Describe("Create", func() {
139152 },
140153 Entry ("[API errors] describing pod identity agent addon fails" , migrateToPodIdentityAssociationEntry {
141154 mockEKS : func (provider * mockprovider.MockProvider ) {
142- mockDescribeAddon (provider , genericErr )
155+ mockDescribeAddon (provider , genericErr , false )
143156 },
144157 expectedErr : fmt .Sprintf ("calling %q" , fmt .Sprintf ("EKS::DescribeAddon::%s" , api .PodIdentityAgentAddon )),
145158 }),
146159
147160 Entry ("[API errors] fetching iamserviceaccounts fails" , migrateToPodIdentityAssociationEntry {
148161 mockEKS : func (provider * mockprovider.MockProvider ) {
149- mockDescribeAddon (provider , nil )
162+ mockDescribeAddon (provider , nil , false )
150163 },
151164 mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
152165 stackUpdater .GetIAMServiceAccountsReturns (nil , genericErr )
@@ -158,7 +171,7 @@ var _ = Describe("Create", func() {
158171 mockEKS : func (provider * mockprovider.MockProvider ) {
159172 mockDescribeAddon (provider , & ekstypes.ResourceNotFoundException {
160173 Message : aws .String (genericErr .Error ()),
161- })
174+ }, false )
162175 },
163176 mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
164177 stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {}, nil )
@@ -173,7 +186,7 @@ var _ = Describe("Create", func() {
173186
174187 Entry ("[taskTree] contains tasks to remove IRSAv1 EKS Role annotation if remove trust option is specified" , migrateToPodIdentityAssociationEntry {
175188 mockEKS : func (provider * mockprovider.MockProvider ) {
176- mockDescribeAddon (provider , nil )
189+ mockDescribeAddon (provider , nil , false )
177190 },
178191 mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
179192 stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {}, nil )
@@ -191,7 +204,7 @@ var _ = Describe("Create", func() {
191204
192205 Entry ("[taskTree] contains all other expected tasks" , migrateToPodIdentityAssociationEntry {
193206 mockEKS : func (provider * mockprovider.MockProvider ) {
194- mockDescribeAddon (provider , nil )
207+ mockDescribeAddon (provider , nil , false )
195208 },
196209 mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
197210 stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {
@@ -220,7 +233,88 @@ var _ = Describe("Create", func() {
220233
221234 Entry ("completes all tasks successfully" , migrateToPodIdentityAssociationEntry {
222235 mockEKS : func (provider * mockprovider.MockProvider ) {
223- mockDescribeAddon (provider , nil )
236+ mockDescribeAddon (provider , nil , false )
237+
238+ mockProvider .MockEKS ().
239+ On ("CreatePodIdentityAssociation" , mock .Anything , mock .Anything ).
240+ Run (func (args mock.Arguments ) {
241+ Expect (args ).To (HaveLen (2 ))
242+ Expect (args [1 ]).To (BeAssignableToTypeOf (& awseks.CreatePodIdentityAssociationInput {}))
243+ }).
244+ Return (nil , nil ).
245+ Twice ()
246+
247+ mockProvider .MockIAM ().
248+ On ("GetRole" , mock .Anything , mock .Anything ).
249+ Return (& awsiam.GetRoleOutput {
250+ Role : & iamtypes.Role {
251+ AssumeRolePolicyDocument : policyDocument ,
252+ },
253+ }, nil ).
254+ Twice ()
255+
256+ mockProvider .MockIAM ().
257+ On ("UpdateAssumeRolePolicy" , mock .Anything , mock .Anything ).
258+ Run (func (args mock.Arguments ) {
259+ Expect (args ).To (HaveLen (2 ))
260+ Expect (args [1 ]).To (BeAssignableToTypeOf (& awsiam.UpdateAssumeRolePolicyInput {}))
261+ input := args [1 ].(* awsiam.UpdateAssumeRolePolicyInput )
262+
263+ var trustPolicy api.IAMPolicyDocument
264+ Expect (json .Unmarshal ([]byte (* input .PolicyDocument ), & trustPolicy )).NotTo (HaveOccurred ())
265+ Expect (trustPolicy .Statements ).To (HaveLen (1 ))
266+ value , exists := trustPolicy .Statements [0 ].Principal ["Service" ]
267+ Expect (exists ).To (BeTrue ())
268+ Expect (value ).To (ConsistOf ([]string {api .EKSServicePrincipal }))
269+ }).
270+ Return (nil , nil ).
271+ Once ()
272+ },
273+ mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
274+ stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {
275+ {
276+ Status : & api.ClusterIAMServiceAccountStatus {
277+ RoleARN : aws .String (roleARN1 ),
278+ StackName : aws .String (makeIRSAv1StackName (podidentityassociation.Identifier {
279+ Namespace : nsDefault ,
280+ ServiceAccountName : sa1 ,
281+ })),
282+ Capabilities : []string {"CAPABILITY_IAM" },
283+ },
284+ },
285+ }, nil )
286+
287+ stackUpdater .GetStackTemplateReturnsOnCall (0 , iamRoleStackTemplate (nsDefault , sa1 ), nil )
288+ stackUpdater .GetStackTemplateReturnsOnCall (1 , iamRoleStackTemplate (nsDefault , sa2 ), nil )
289+
290+ stackUpdater .MustUpdateStackStub = func (ctx context.Context , options manager.UpdateStackOptions ) error {
291+ Expect (options .Stack ).NotTo (BeNil ())
292+ Expect (options .Stack .Tags ).To (ConsistOf ([]cfntypes.Tag {
293+ {
294+ Key : aws .String (api .PodIdentityAssociationNameTag ),
295+ Value : aws .String (nsDefault + "/" + sa1 ),
296+ },
297+ }))
298+ Expect (options .Stack .Capabilities ).To (ConsistOf ([]cfntypes.Capability {"CAPABILITY_IAM" }))
299+ template := string (options .TemplateData .(manager.TemplateBody ))
300+ Expect (template ).To (ContainSubstring (api .EKSServicePrincipal ))
301+ Expect (template ).NotTo (ContainSubstring ("oidc" ))
302+ return nil
303+ }
304+ },
305+ mockK8s : func (clientSet * fake.Clientset ) {
306+ createFakeServiceAccount (clientSet , nsDefault , sa1 , roleARN1 )
307+ createFakeServiceAccount (clientSet , nsDefault , sa2 , roleARN2 )
308+ },
309+ options : podidentityassociation.PodIdentityMigrationOptions {
310+ RemoveOIDCProviderTrustRelationship : true ,
311+ Approve : true ,
312+ },
313+ }),
314+
315+ Entry ("completes all tasks successfully for auto-mode" , migrateToPodIdentityAssociationEntry {
316+ mockEKS : func (provider * mockprovider.MockProvider ) {
317+ mockDescribeAddon (provider , nil , true )
224318
225319 mockProvider .MockEKS ().
226320 On ("CreatePodIdentityAssociation" , mock .Anything , mock .Anything ).
0 commit comments