@@ -66,11 +66,24 @@ var _ = Describe("Create", func() {
66
66
genericErr = fmt .Errorf ("ERR" )
67
67
)
68
68
69
- mockDescribeAddon := func (provider * mockprovider.MockProvider , err error ) {
69
+ mockDescribeAddon := func (provider * mockprovider.MockProvider , err error , autoMode bool ) {
70
70
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 ).
73
79
Once ()
80
+ if ! autoMode {
81
+ mockProvider .MockEKS ().
82
+ On ("DescribeAddon" , mock .Anything , mock .Anything ).
83
+ Return (nil , err ).
84
+ Once ()
85
+
86
+ }
74
87
}
75
88
76
89
createFakeServiceAccount := func (clientSet * fake.Clientset , namespace , serviceAccountName , roleARN string ) {
@@ -139,14 +152,14 @@ var _ = Describe("Create", func() {
139
152
},
140
153
Entry ("[API errors] describing pod identity agent addon fails" , migrateToPodIdentityAssociationEntry {
141
154
mockEKS : func (provider * mockprovider.MockProvider ) {
142
- mockDescribeAddon (provider , genericErr )
155
+ mockDescribeAddon (provider , genericErr , false )
143
156
},
144
157
expectedErr : fmt .Sprintf ("calling %q" , fmt .Sprintf ("EKS::DescribeAddon::%s" , api .PodIdentityAgentAddon )),
145
158
}),
146
159
147
160
Entry ("[API errors] fetching iamserviceaccounts fails" , migrateToPodIdentityAssociationEntry {
148
161
mockEKS : func (provider * mockprovider.MockProvider ) {
149
- mockDescribeAddon (provider , nil )
162
+ mockDescribeAddon (provider , nil , false )
150
163
},
151
164
mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
152
165
stackUpdater .GetIAMServiceAccountsReturns (nil , genericErr )
@@ -158,7 +171,7 @@ var _ = Describe("Create", func() {
158
171
mockEKS : func (provider * mockprovider.MockProvider ) {
159
172
mockDescribeAddon (provider , & ekstypes.ResourceNotFoundException {
160
173
Message : aws .String (genericErr .Error ()),
161
- })
174
+ }, false )
162
175
},
163
176
mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
164
177
stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {}, nil )
@@ -173,7 +186,7 @@ var _ = Describe("Create", func() {
173
186
174
187
Entry ("[taskTree] contains tasks to remove IRSAv1 EKS Role annotation if remove trust option is specified" , migrateToPodIdentityAssociationEntry {
175
188
mockEKS : func (provider * mockprovider.MockProvider ) {
176
- mockDescribeAddon (provider , nil )
189
+ mockDescribeAddon (provider , nil , false )
177
190
},
178
191
mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
179
192
stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {}, nil )
@@ -191,7 +204,7 @@ var _ = Describe("Create", func() {
191
204
192
205
Entry ("[taskTree] contains all other expected tasks" , migrateToPodIdentityAssociationEntry {
193
206
mockEKS : func (provider * mockprovider.MockProvider ) {
194
- mockDescribeAddon (provider , nil )
207
+ mockDescribeAddon (provider , nil , false )
195
208
},
196
209
mockCFN : func (stackUpdater * fakes.FakeStackUpdater ) {
197
210
stackUpdater .GetIAMServiceAccountsReturns ([]* api.ClusterIAMServiceAccount {
@@ -220,7 +233,88 @@ var _ = Describe("Create", func() {
220
233
221
234
Entry ("completes all tasks successfully" , migrateToPodIdentityAssociationEntry {
222
235
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 )
224
318
225
319
mockProvider .MockEKS ().
226
320
On ("CreatePodIdentityAssociation" , mock .Anything , mock .Anything ).
0 commit comments