Skip to content

Commit ed7177c

Browse files
committed
Tests for aggregated cluster roles
1 parent 9abd660 commit ed7177c

File tree

7 files changed

+3112
-50
lines changed

7 files changed

+3112
-50
lines changed

actions/rbac/rbac.go

Lines changed: 139 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -27,56 +27,65 @@ import (
2727
type Role string
2828

2929
const (
30-
Admin Role = "admin"
31-
BaseUser Role = "user-base"
32-
StandardUser Role = "user"
33-
ClusterOwner Role = "cluster-owner"
34-
ClusterMember Role = "cluster-member"
35-
ProjectOwner Role = "project-owner"
36-
ProjectMember Role = "project-member"
37-
CreateNS Role = "create-ns"
38-
ReadOnly Role = "read-only"
39-
CustomManageProjectMember Role = "projectroletemplatebindings-manage"
40-
CrtbView Role = "clusterroletemplatebindings-view"
41-
PrtbView Role = "projectroletemplatebindings-view"
42-
ProjectsCreate Role = "projects-create"
43-
ProjectsView Role = "projects-view"
44-
ManageWorkloads Role = "workloads-manage"
45-
ActiveStatus = "active"
46-
ForbiddenError = "403 Forbidden"
47-
RancherDeploymentNamespace = "cattle-system"
48-
DefaultNamespace = "fleet-default"
49-
RancherDeploymentName = "rancher"
50-
CattleResyncEnvVarName = "CATTLE_RESYNC_DEFAULT"
51-
LocalCluster = "local"
52-
UserKind = "User"
53-
ImageName = "nginx"
54-
ManageUsersVerb = "manage-users"
55-
UpdatePsaVerb = "updatepsa"
56-
ManagementAPIGroup = "management.cattle.io"
57-
UsersResource = "users"
58-
UserAttributeResource = "userattribute"
59-
GroupsResource = "groups"
60-
GroupMembersResource = "groupmembers"
61-
ProjectResource = "projects"
62-
PrtbResource = "projectroletemplatebindings"
63-
SecretsResource = "secrets"
64-
ClusterContext = "cluster"
65-
ProjectContext = "project"
66-
GrbOwnerLabel = "authz.management.cattle.io/grb-owner"
67-
GlobalDataNS = "cattle-global-data"
68-
MembershipBindingOwnerLabel = "membership-binding-owner"
69-
PSALabelKey = "pod-security.kubernetes.io/"
70-
PSAEnforceLabelKey = "pod-security.kubernetes.io/enforce"
71-
PSAWarnLabelKey = "pod-security.kubernetes.io/warn"
72-
PSAAuditLabelKey = "pod-security.kubernetes.io/audit"
73-
PSAPrivilegedPolicy = "privileged"
74-
PSABaselinePolicy = "baseline"
75-
PSARestrictedPolicy = "restricted"
76-
PSAEnforceVersionLabelKey = "pod-security.kubernetes.io/enforce-version"
77-
PSAWarnVersionLabelKey = "pod-security.kubernetes.io/warn-version"
78-
PSAAuditVersionLabelKey = "pod-security.kubernetes.io/audit-version"
79-
PSALatestValue = "latest"
30+
Admin Role = "admin"
31+
BaseUser Role = "user-base"
32+
StandardUser Role = "user"
33+
ClusterOwner Role = "cluster-owner"
34+
ClusterMember Role = "cluster-member"
35+
ProjectOwner Role = "project-owner"
36+
ProjectMember Role = "project-member"
37+
CreateNS Role = "create-ns"
38+
ReadOnly Role = "read-only"
39+
CustomManageProjectMember Role = "projectroletemplatebindings-manage"
40+
CrtbView Role = "clusterroletemplatebindings-view"
41+
PrtbView Role = "projectroletemplatebindings-view"
42+
ProjectsCreate Role = "projects-create"
43+
ProjectsView Role = "projects-view"
44+
ManageWorkloads Role = "workloads-manage"
45+
ActiveStatus = "active"
46+
ForbiddenError = "403 Forbidden"
47+
RancherDeploymentNamespace = "cattle-system"
48+
DefaultNamespace = "fleet-default"
49+
RancherDeploymentName = "rancher"
50+
CattleResyncEnvVarName = "CATTLE_RESYNC_DEFAULT"
51+
LocalCluster = "local"
52+
UserKind = "User"
53+
ImageName = "nginx"
54+
ManageUsersVerb = "manage-users"
55+
UpdatePsaVerb = "updatepsa"
56+
ManagementAPIGroup = "management.cattle.io"
57+
UsersResource = "users"
58+
UserAttributeResource = "userattribute"
59+
GroupsResource = "groups"
60+
GroupMembersResource = "groupmembers"
61+
ProjectResource = "projects"
62+
PrtbResource = "projectroletemplatebindings"
63+
SecretsResource = "secrets"
64+
ClusterContext = "cluster"
65+
ProjectContext = "project"
66+
GrbOwnerLabel = "authz.management.cattle.io/grb-owner"
67+
GlobalDataNS = "cattle-global-data"
68+
MembershipBindingOwnerLabel = "membership-binding-owner"
69+
PSALabelKey = "pod-security.kubernetes.io/"
70+
PSAEnforceLabelKey = "pod-security.kubernetes.io/enforce"
71+
PSAWarnLabelKey = "pod-security.kubernetes.io/warn"
72+
PSAAuditLabelKey = "pod-security.kubernetes.io/audit"
73+
PSAPrivilegedPolicy = "privileged"
74+
PSABaselinePolicy = "baseline"
75+
PSARestrictedPolicy = "restricted"
76+
PSAEnforceVersionLabelKey = "pod-security.kubernetes.io/enforce-version"
77+
PSAWarnVersionLabelKey = "pod-security.kubernetes.io/warn-version"
78+
PSAAuditVersionLabelKey = "pod-security.kubernetes.io/audit-version"
79+
PSALatestValue = "latest"
80+
RkeCattleAPIGroup = "rke.cattle.io"
81+
ProjectCattleAPIGroup = "project.cattle.io"
82+
AppsAPIGroup = "apps"
83+
CrtbOwnerLabel = "authz.cluster.cattle.io/crtb-owner"
84+
PrtbOwnerLabel = "authz.cluster.cattle.io/prtb-owner"
85+
ClusterNameAnnotationKey = "cluster.cattle.io/name"
86+
RegularResourceAggregator = "-aggregator"
87+
ClusterMgmtResourceAggregator = "-cluster-mgmt-aggregator"
88+
ProjectMgmtResourceAggregator = "-project-mgmt-aggregator"
8089
)
8190

8291
func (r Role) String() string {
@@ -713,3 +722,83 @@ func CreateGlobalRoleWithInheritedClusterRolesWrangler(client *rancher.Client, i
713722

714723
return createdGlobalRole, nil
715724
}
725+
726+
// DeleteClusterRoleTemplateBinding deletes the cluster role template binding using wrangler context
727+
func DeleteClusterRoleTemplateBinding(client *rancher.Client, crtbNamespace, crtbName string) error {
728+
err := client.WranglerContext.Mgmt.ClusterRoleTemplateBinding().Delete(crtbNamespace, crtbName, &metav1.DeleteOptions{})
729+
if err != nil {
730+
return fmt.Errorf("failed to delete ClusterRoleTemplateBinding %s: %w", crtbName, err)
731+
}
732+
733+
err = kwait.PollUntilContextTimeout(context.TODO(), defaults.FiveHundredMillisecondTimeout, defaults.OneMinuteTimeout, false, func(ctx context.Context) (done bool, err error) {
734+
_, err = client.WranglerContext.Mgmt.ClusterRoleTemplateBinding().Get(crtbNamespace, crtbName, metav1.GetOptions{})
735+
736+
if apierrors.IsNotFound(err) {
737+
return true, nil
738+
}
739+
740+
if err != nil {
741+
return false, fmt.Errorf("error checking CRTB deletion status: %w", err)
742+
}
743+
744+
return false, nil
745+
})
746+
747+
if err != nil {
748+
return fmt.Errorf("timed out waiting for ClusterRoleTemplateBinding %s to be deleted: %w", crtbName, err)
749+
}
750+
751+
return nil
752+
}
753+
754+
// DeleteProjectRoleTemplateBinding deletes the project role template binding using wrangler context
755+
func DeleteProjectRoleTemplateBinding(client *rancher.Client, prtbNamespace, prtbName string) error {
756+
err := client.WranglerContext.Mgmt.ProjectRoleTemplateBinding().Delete(prtbNamespace, prtbName, &metav1.DeleteOptions{})
757+
if err != nil {
758+
return fmt.Errorf("failed to delete ProjectRoleTemplateBinding %s: %w", prtbName, err)
759+
}
760+
761+
err = kwait.PollUntilContextTimeout(context.TODO(), defaults.FiveHundredMillisecondTimeout, defaults.OneMinuteTimeout, false, func(ctx context.Context) (done bool, err error) {
762+
_, err = client.WranglerContext.Mgmt.ProjectRoleTemplateBinding().Get(prtbNamespace, prtbName, metav1.GetOptions{})
763+
764+
if apierrors.IsNotFound(err) {
765+
return true, nil
766+
}
767+
768+
if err != nil {
769+
return false, fmt.Errorf("error checking PRTB deletion status: %w", err)
770+
}
771+
772+
return false, nil
773+
})
774+
775+
if err != nil {
776+
return fmt.Errorf("timed out waiting for ProjectRoleTemplateBinding %s to be deleted: %w", prtbName, err)
777+
}
778+
779+
return nil
780+
}
781+
782+
// UpdateRoleTemplateInheritance updates the inheritance of a role template using wrangler context
783+
func UpdateRoleTemplateInheritance(client *rancher.Client, roleTemplateName string, inheritedRoles []*v3.RoleTemplate) (*v3.RoleTemplate, error) {
784+
var roleTemplateNames []string
785+
for _, inheritedRole := range inheritedRoles {
786+
if inheritedRole != nil {
787+
roleTemplateNames = append(roleTemplateNames, inheritedRole.Name)
788+
}
789+
}
790+
791+
existingRoleTemplate, err := GetRoleTemplateByName(client, roleTemplateName)
792+
if err != nil {
793+
return nil, fmt.Errorf("failed to get existing RoleTemplate: %w", err)
794+
}
795+
796+
existingRoleTemplate.RoleTemplateNames = roleTemplateNames
797+
798+
updatedRoleTemplate, err := client.WranglerContext.Mgmt.RoleTemplate().Update(existingRoleTemplate)
799+
if err != nil {
800+
return nil, fmt.Errorf("failed to update RoleTemplate inheritance: %w", err)
801+
}
802+
803+
return GetRoleTemplateByName(client, updatedRoleTemplate.Name)
804+
}

0 commit comments

Comments
 (0)