Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions pkg/sdk/resources/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (b *ResourceBuilder) CreateRoleBinding(name, roleRef, serviceAccount, servi

// CreateRole creates role
func (b *ResourceBuilder) CreateRole(name string, rules []rbacv1.PolicyRule) *rbacv1.Role {
return &rbacv1.Role{
role := &rbacv1.Role{
TypeMeta: metav1.TypeMeta{
APIVersion: "rbac.authorization.k8s.io/v1",
Kind: "Role",
Expand All @@ -61,8 +61,12 @@ func (b *ResourceBuilder) CreateRole(name string, rules []rbacv1.PolicyRule) *rb
Name: name,
Labels: b.WithCommonLabels(nil),
},
Rules: rules,
}
if len(rules) > 0 {
// avoid hotloop over empty rules/nil
role.Rules = rules
}
return role
}

// CreateClusterRoleBinding creates cluster role binding
Expand Down Expand Up @@ -132,7 +136,7 @@ func CreateClusterRoleBinding(name, roleRef, serviceAccount, serviceAccountNames

// CreateClusterRole creates a cluster role
func CreateClusterRole(name string, rules []rbacv1.PolicyRule, labels map[string]string) *rbacv1.ClusterRole {
return &rbacv1.ClusterRole{
clusterRole := &rbacv1.ClusterRole{
TypeMeta: metav1.TypeMeta{
APIVersion: "rbac.authorization.k8s.io/v1",
Kind: "ClusterRole",
Expand All @@ -141,6 +145,10 @@ func CreateClusterRole(name string, rules []rbacv1.PolicyRule, labels map[string
Name: name,
Labels: labels,
},
Rules: rules,
}
if len(rules) > 0 {
// avoid hotloop over empty rules/nil
clusterRole.Rules = rules
}
return clusterRole
}
30 changes: 30 additions & 0 deletions pkg/sdk/resources/rbac_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package resources

import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"

rbacv1 "k8s.io/api/rbac/v1"
)

var _ = Describe("RBAC Resources", func() {
var builder ResourceBuilder

BeforeEach(func() {
builder = NewResourceBuilder(
map[string]string{"common": "label"},
map[string]string{"operator": "label"},
)
})

It("should treat empty rules as nil for Role", func() {
role := builder.CreateRole("test-role", []rbacv1.PolicyRule{})
Expect(role.Rules).To(BeNil())
})

It("should treat empty rules as nil for ClusterRole", func() {
labels := map[string]string{"test": "label"}
clusterRole := CreateClusterRole("test-clusterrole", []rbacv1.PolicyRule{}, labels)
Expect(clusterRole.Rules).To(BeNil())
})
})
13 changes: 13 additions & 0 deletions pkg/sdk/resources/resources_suite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package resources

import (
"testing"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)

func TestResources(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Resources Suite")
}