Skip to content

Commit da4c4c4

Browse files
author
Matthew Wong
committed
Add bootstrap cluster role for external pv provisioners
1 parent 39ceb75 commit da4c4c4

File tree

3 files changed

+82
-17
lines changed

3 files changed

+82
-17
lines changed

pkg/cmd/server/bootstrappolicy/constants.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,23 +67,24 @@ const (
6767
BuildStrategySourceRoleName = "system:build-strategy-source"
6868
BuildStrategyJenkinsPipelineRoleName = "system:build-strategy-jenkinspipeline"
6969

70-
ImageAuditorRoleName = "system:image-auditor"
71-
ImagePullerRoleName = "system:image-puller"
72-
ImagePusherRoleName = "system:image-pusher"
73-
ImageBuilderRoleName = "system:image-builder"
74-
ImagePrunerRoleName = "system:image-pruner"
75-
ImageSignerRoleName = "system:image-signer"
76-
DeployerRoleName = "system:deployer"
77-
RouterRoleName = "system:router"
78-
RegistryRoleName = "system:registry"
79-
MasterRoleName = "system:master"
80-
NodeRoleName = "system:node"
81-
NodeProxierRoleName = "system:node-proxier"
82-
SDNReaderRoleName = "system:sdn-reader"
83-
SDNManagerRoleName = "system:sdn-manager"
84-
OAuthTokenDeleterRoleName = "system:oauth-token-deleter"
85-
WebHooksRoleName = "system:webhook"
86-
DiscoveryRoleName = "system:discovery"
70+
ImageAuditorRoleName = "system:image-auditor"
71+
ImagePullerRoleName = "system:image-puller"
72+
ImagePusherRoleName = "system:image-pusher"
73+
ImageBuilderRoleName = "system:image-builder"
74+
ImagePrunerRoleName = "system:image-pruner"
75+
ImageSignerRoleName = "system:image-signer"
76+
DeployerRoleName = "system:deployer"
77+
RouterRoleName = "system:router"
78+
RegistryRoleName = "system:registry"
79+
MasterRoleName = "system:master"
80+
NodeRoleName = "system:node"
81+
NodeProxierRoleName = "system:node-proxier"
82+
SDNReaderRoleName = "system:sdn-reader"
83+
SDNManagerRoleName = "system:sdn-manager"
84+
OAuthTokenDeleterRoleName = "system:oauth-token-deleter"
85+
WebHooksRoleName = "system:webhook"
86+
DiscoveryRoleName = "system:discovery"
87+
PersistentVolumeProvisionerRoleName = "system:persistent-volume-provisioner"
8788

8889
// NodeAdmin has full access to the API provided by the kubelet
8990
NodeAdminRoleName = "system:node-admin"

pkg/cmd/server/bootstrappolicy/policy.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,22 @@ func GetBootstrapClusterRoles() []authorizationapi.ClusterRole {
815815
authorizationapi.DiscoveryRule,
816816
},
817817
},
818+
{
819+
ObjectMeta: kapi.ObjectMeta{
820+
Name: PersistentVolumeProvisionerRoleName,
821+
Annotations: map[string]string{
822+
roleSystemOnly: roleIsSystemOnly,
823+
},
824+
},
825+
Rules: []authorizationapi.PolicyRule{
826+
authorizationapi.NewRule("get", "list", "watch", "create", "delete").Groups(kapiGroup).Resources("persistentvolumes").RuleOrDie(),
827+
// update is needed in addition to read access for setting lock annotations on PVCs
828+
authorizationapi.NewRule("get", "list", "watch", "update").Groups(kapiGroup).Resources("persistentvolumeclaims").RuleOrDie(),
829+
authorizationapi.NewRule(read...).Groups(storageGroup).Resources("storageclasses").RuleOrDie(),
830+
// Needed for watching provisioning success and failure events
831+
authorizationapi.NewRule("create", "update", "patch", "watch").Groups(kapiGroup).Resources("events").RuleOrDie(),
832+
},
833+
},
818834

819835
{
820836
ObjectMeta: kapi.ObjectMeta{

test/testdata/bootstrappolicy/bootstrap_cluster_roles.yaml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2344,6 +2344,54 @@ items:
23442344
resources: []
23452345
verbs:
23462346
- get
2347+
- apiVersion: v1
2348+
kind: ClusterRole
2349+
metadata:
2350+
annotations:
2351+
authorization.openshift.io/system-only: "true"
2352+
creationTimestamp: null
2353+
name: system:persistent-volume-provisioner
2354+
rules:
2355+
- apiGroups:
2356+
- ""
2357+
attributeRestrictions: null
2358+
resources:
2359+
- persistentvolumes
2360+
verbs:
2361+
- create
2362+
- delete
2363+
- get
2364+
- list
2365+
- watch
2366+
- apiGroups:
2367+
- ""
2368+
attributeRestrictions: null
2369+
resources:
2370+
- persistentvolumeclaims
2371+
verbs:
2372+
- get
2373+
- list
2374+
- update
2375+
- watch
2376+
- apiGroups:
2377+
- storage.k8s.io
2378+
attributeRestrictions: null
2379+
resources:
2380+
- storageclasses
2381+
verbs:
2382+
- get
2383+
- list
2384+
- watch
2385+
- apiGroups:
2386+
- ""
2387+
attributeRestrictions: null
2388+
resources:
2389+
- events
2390+
verbs:
2391+
- create
2392+
- patch
2393+
- update
2394+
- watch
23472395
- apiVersion: v1
23482396
kind: ClusterRole
23492397
metadata:

0 commit comments

Comments
 (0)