@@ -27,56 +27,65 @@ import (
2727type Role string
2828
2929const (
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
8291func (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