@@ -225,91 +225,6 @@ func GenerateRoles(ctx *genall.GenerationContext, roleName string) ([]interface{
225
225
}
226
226
}
227
227
228
- // NormalizeRules merge Rule with the same ruleKey and sort the Rules
229
- NormalizeRules := func (rules []* Rule ) []rbacv1.PolicyRule {
230
- ruleMap := make (map [ruleKey ]* Rule )
231
- // all the Rules having the same ruleKey will be merged into the first Rule
232
- for _ , rule := range rules {
233
- key := rule .key ()
234
- if _ , ok := ruleMap [key ]; ! ok {
235
- ruleMap [key ] = rule
236
- continue
237
- }
238
- ruleMap [key ].addVerbs (rule .Verbs )
239
- }
240
-
241
- // deduplicate resources
242
- // 1. create map based on key without resources
243
- ruleMapWithoutResources := make (map [string ][]* Rule )
244
- for _ , rule := range ruleMap {
245
- // get key without Resources
246
- key := rule .keyWithGroupResourceNamesURLsVerbs ()
247
- ruleMapWithoutResources [key ] = append (ruleMapWithoutResources [key ], rule )
248
- }
249
- // 2. merge to ruleMap
250
- ruleMap = make (map [ruleKey ]* Rule )
251
- for _ , rules := range ruleMapWithoutResources {
252
- rule := rules [0 ]
253
- for _ , mergeRule := range rules [1 :] {
254
- rule .Resources = append (rule .Resources , mergeRule .Resources ... )
255
- }
256
-
257
- key := rule .key ()
258
- ruleMap [key ] = rule
259
- }
260
-
261
- // deduplicate groups
262
- // 1. create map based on key without group
263
- ruleMapWithoutGroup := make (map [string ][]* Rule )
264
- for _ , rule := range ruleMap {
265
- // get key without Group
266
- key := rule .keyWithResourcesResourceNamesURLsVerbs ()
267
- ruleMapWithoutGroup [key ] = append (ruleMapWithoutGroup [key ], rule )
268
- }
269
- // 2. merge to ruleMap
270
- ruleMap = make (map [ruleKey ]* Rule )
271
- for _ , rules := range ruleMapWithoutGroup {
272
- rule := rules [0 ]
273
- for _ , mergeRule := range rules [1 :] {
274
- rule .Groups = append (rule .Groups , mergeRule .Groups ... )
275
- }
276
- key := rule .key ()
277
- ruleMap [key ] = rule
278
- }
279
-
280
- // deduplicate URLs
281
- // 1. create map based on key without URLs
282
- ruleMapWithoutURLs := make (map [string ][]* Rule )
283
- for _ , rule := range ruleMap {
284
- // get key without Group
285
- key := rule .keyWitGroupResourcesResourceNamesVerbs ()
286
- ruleMapWithoutURLs [key ] = append (ruleMapWithoutURLs [key ], rule )
287
- }
288
- // 2. merge to ruleMap
289
- ruleMap = make (map [ruleKey ]* Rule )
290
- for _ , rules := range ruleMapWithoutURLs {
291
- rule := rules [0 ]
292
- for _ , mergeRule := range rules [1 :] {
293
- rule .URLs = append (rule .URLs , mergeRule .URLs ... )
294
- }
295
- key := rule .key ()
296
- ruleMap [key ] = rule
297
- }
298
-
299
- // sort the Rules in rules according to their ruleKeys
300
- keys := make ([]ruleKey , 0 , len (ruleMap ))
301
- for key := range ruleMap {
302
- keys = append (keys , key )
303
- }
304
- sort .Sort (ruleKeys (keys ))
305
-
306
- var policyRules []rbacv1.PolicyRule
307
- for _ , key := range keys {
308
- policyRules = append (policyRules , ruleMap [key ].ToRule ())
309
- }
310
- return policyRules
311
- }
312
-
313
228
// collect all the namespaces and sort them
314
229
var namespaces []string
315
230
for ns := range rulesByNSResource {
@@ -376,3 +291,88 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
376
291
377
292
return ctx .WriteYAML ("role.yaml" , headerText , objs , genall .WithTransform (genall .TransformRemoveCreationTimestamp ))
378
293
}
294
+
295
+ // NormalizeRules merge Rule with the same ruleKey and sort the Rules
296
+ func NormalizeRules (rules []* Rule ) []rbacv1.PolicyRule {
297
+ ruleMap := make (map [ruleKey ]* Rule )
298
+ // all the Rules having the same ruleKey will be merged into the first Rule
299
+ for _ , rule := range rules {
300
+ key := rule .key ()
301
+ if _ , ok := ruleMap [key ]; ! ok {
302
+ ruleMap [key ] = rule
303
+ continue
304
+ }
305
+ ruleMap [key ].addVerbs (rule .Verbs )
306
+ }
307
+
308
+ // deduplicate resources
309
+ // 1. create map based on key without resources
310
+ ruleMapWithoutResources := make (map [string ][]* Rule )
311
+ for _ , rule := range ruleMap {
312
+ // get key without Resources
313
+ key := rule .keyWithGroupResourceNamesURLsVerbs ()
314
+ ruleMapWithoutResources [key ] = append (ruleMapWithoutResources [key ], rule )
315
+ }
316
+ // 2. merge to ruleMap
317
+ ruleMap = make (map [ruleKey ]* Rule )
318
+ for _ , rules := range ruleMapWithoutResources {
319
+ rule := rules [0 ]
320
+ for _ , mergeRule := range rules [1 :] {
321
+ rule .Resources = append (rule .Resources , mergeRule .Resources ... )
322
+ }
323
+
324
+ key := rule .key ()
325
+ ruleMap [key ] = rule
326
+ }
327
+
328
+ // deduplicate groups
329
+ // 1. create map based on key without group
330
+ ruleMapWithoutGroup := make (map [string ][]* Rule )
331
+ for _ , rule := range ruleMap {
332
+ // get key without Group
333
+ key := rule .keyWithResourcesResourceNamesURLsVerbs ()
334
+ ruleMapWithoutGroup [key ] = append (ruleMapWithoutGroup [key ], rule )
335
+ }
336
+ // 2. merge to ruleMap
337
+ ruleMap = make (map [ruleKey ]* Rule )
338
+ for _ , rules := range ruleMapWithoutGroup {
339
+ rule := rules [0 ]
340
+ for _ , mergeRule := range rules [1 :] {
341
+ rule .Groups = append (rule .Groups , mergeRule .Groups ... )
342
+ }
343
+ key := rule .key ()
344
+ ruleMap [key ] = rule
345
+ }
346
+
347
+ // deduplicate URLs
348
+ // 1. create map based on key without URLs
349
+ ruleMapWithoutURLs := make (map [string ][]* Rule )
350
+ for _ , rule := range ruleMap {
351
+ // get key without Group
352
+ key := rule .keyWitGroupResourcesResourceNamesVerbs ()
353
+ ruleMapWithoutURLs [key ] = append (ruleMapWithoutURLs [key ], rule )
354
+ }
355
+ // 2. merge to ruleMap
356
+ ruleMap = make (map [ruleKey ]* Rule )
357
+ for _ , rules := range ruleMapWithoutURLs {
358
+ rule := rules [0 ]
359
+ for _ , mergeRule := range rules [1 :] {
360
+ rule .URLs = append (rule .URLs , mergeRule .URLs ... )
361
+ }
362
+ key := rule .key ()
363
+ ruleMap [key ] = rule
364
+ }
365
+
366
+ // sort the Rules in rules according to their ruleKeys
367
+ keys := make ([]ruleKey , 0 , len (ruleMap ))
368
+ for key := range ruleMap {
369
+ keys = append (keys , key )
370
+ }
371
+ sort .Sort (ruleKeys (keys ))
372
+
373
+ var policyRules []rbacv1.PolicyRule
374
+ for _ , key := range keys {
375
+ policyRules = append (policyRules , ruleMap [key ].ToRule ())
376
+ }
377
+ return policyRules
378
+ }
0 commit comments