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