@@ -52,13 +52,15 @@ type roleBindingInterface interface {
52
52
Subjects () []rbacv1.Subject
53
53
}
54
54
55
- type roleInterface interface {
55
+ // RoleInterface is an interface for generic access to role-like object, such
56
+ // as rbac.Role and rbac.ClusterRole
57
+ type RoleInterface interface {
56
58
Name () string
57
59
Namespace () string
58
60
Rules () []rbacv1.PolicyRule
59
61
}
60
62
61
- func usefulRolesKey (r roleInterface ) string {
63
+ func usefulRolesKey (r RoleInterface ) string {
62
64
return fmt .Sprintf ("%s/%s" , r .Namespace (), r .Name ())
63
65
}
64
66
@@ -110,7 +112,9 @@ type roleObj struct {
110
112
clusterRole * rbacv1.ClusterRole
111
113
}
112
114
113
- func newRoleObj (obj interface {}) (roleInterface , error ) {
115
+ // NewRoleObj expects either a Role or a ClusterRole as its `obj` input argument,
116
+ // it returns an object that allows generic access to the role-like object
117
+ func NewRoleObj (obj interface {}) (RoleInterface , error ) {
114
118
switch r := obj .(type ) {
115
119
case * rbacv1.ClusterRole :
116
120
return & roleObj {
@@ -237,7 +241,7 @@ func (c *SAToSCCCache) handleRoleModified(obj interface{}) {
237
241
return
238
242
}
239
243
240
- role , err := newRoleObj (obj )
244
+ role , err := NewRoleObj (obj )
241
245
if err != nil {
242
246
klog .Warningf ("unexpected error, this may be a bug: %v" , err )
243
247
return
@@ -256,7 +260,7 @@ func (c *SAToSCCCache) handleRoleModified(obj interface{}) {
256
260
}
257
261
258
262
func (c * SAToSCCCache ) handleRoleRemoved (obj interface {}) {
259
- role , err := newRoleObj (obj )
263
+ role , err := NewRoleObj (obj )
260
264
if err != nil {
261
265
klog .Warningf ("unexpected error, this may be a bug: %v" , err )
262
266
return
@@ -374,7 +378,7 @@ func (c *SAToSCCCache) SCCsFor(serviceAccount *corev1.ServiceAccount) (sets.Stri
374
378
}
375
379
376
380
// getRoleFromRoleRef tries to retrieve the role or clusterrole from roleRef.
377
- func (c * SAToSCCCache ) getRoleFromRoleRef (ns string , roleRef rbacv1.RoleRef ) (roleInterface , error ) {
381
+ func (c * SAToSCCCache ) getRoleFromRoleRef (ns string , roleRef rbacv1.RoleRef ) (RoleInterface , error ) {
378
382
var err error
379
383
var role interface {}
380
384
switch kind := roleRef .Kind ; kind {
@@ -394,7 +398,7 @@ func (c *SAToSCCCache) getRoleFromRoleRef(ns string, roleRef rbacv1.RoleRef) (ro
394
398
return nil , fmt .Errorf ("unknown kind in roleRef: %s" , kind )
395
399
}
396
400
397
- return newRoleObj (role )
401
+ return NewRoleObj (role )
398
402
}
399
403
400
404
// IsRoleBindingRelevant returns true if the cluster/rolebinding supplied binds
@@ -426,7 +430,7 @@ func (c *SAToSCCCache) IsRoleInvolvesSCCs(obj interface{}, isRoleUpdate bool) bo
426
430
c .usefulRolesLock .Lock ()
427
431
defer c .usefulRolesLock .Unlock ()
428
432
429
- role , err := newRoleObj (obj )
433
+ role , err := NewRoleObj (obj )
430
434
if err != nil {
431
435
klog .Warningf ("unexpected error, this may be a bug: %v" , err )
432
436
return false
@@ -473,15 +477,15 @@ func (c *SAToSCCCache) ReinitializeRoleCache() error {
473
477
}
474
478
475
479
for _ , r := range roles {
476
- role , err := newRoleObj (r )
480
+ role , err := NewRoleObj (r )
477
481
if err != nil {
478
482
panic (err )
479
483
}
480
484
c .syncRoleCache (role , r .Rules , sccs )
481
485
}
482
486
483
487
for _ , r := range clusterRoles {
484
- role , err := newRoleObj (r )
488
+ role , err := NewRoleObj (r )
485
489
if err != nil {
486
490
panic (err )
487
491
}
@@ -494,7 +498,7 @@ func (c *SAToSCCCache) ReinitializeRoleCache() error {
494
498
// syncRoleCache will write the current mapping of "role->SCCs it allows" to the cache.
495
499
// It expects the c.usefulRolesLock to be already locked as even the wrapping context
496
500
// handling roles and SCCs likely requires synchronization.
497
- func (c * SAToSCCCache ) syncRoleCache (role roleInterface , rules []rbacv1.PolicyRule , sccs []* securityv1.SecurityContextConstraints ) {
501
+ func (c * SAToSCCCache ) syncRoleCache (role RoleInterface , rules []rbacv1.PolicyRule , sccs []* securityv1.SecurityContextConstraints ) {
498
502
if c .usefulRolesLock .TryLock () {
499
503
c .usefulRolesLock .Unlock ()
500
504
panic ("syncRoleCache() requires the usefulRolesLock to be always locked before entering the function" )
0 commit comments