@@ -42,16 +42,19 @@ func TestAuthorizer(t *testing.T) {
4242 g := NewGraph ()
4343
4444 opts := & sampleDataOpts {
45- nodes : 2 ,
46- namespaces : 2 ,
47- podsPerNode : 2 ,
48- attachmentsPerNode : 1 ,
49- sharedConfigMapsPerPod : 0 ,
50- uniqueConfigMapsPerPod : 1 ,
51- sharedSecretsPerPod : 1 ,
52- uniqueSecretsPerPod : 1 ,
53- sharedPVCsPerPod : 0 ,
54- uniquePVCsPerPod : 1 ,
45+ nodes : 2 ,
46+ namespaces : 2 ,
47+ podsPerNode : 2 ,
48+ attachmentsPerNode : 1 ,
49+ sharedConfigMapsPerPod : 0 ,
50+ uniqueConfigMapsPerPod : 1 ,
51+ sharedSecretsPerPod : 1 ,
52+ uniqueSecretsPerPod : 1 ,
53+ sharedPVCsPerPod : 0 ,
54+ uniquePVCsPerPod : 1 ,
55+ uniqueResourceClaimsPerPod : 1 ,
56+ uniqueResourceClaimTemplatesPerPod : 1 ,
57+ uniqueResourceClaimTemplatesWithClaimPerPod : 1 ,
5558 }
5659 nodes , pods , pvs , attachments := generate (opts )
5760 populate (g , nodes , pods , pvs , attachments )
@@ -117,6 +120,16 @@ func TestAuthorizer(t *testing.T) {
117120 attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "persistentvolumeclaims" , Name : "pvc0-pod0-node0" , Namespace : "ns0" },
118121 expect : authorizer .DecisionAllow ,
119122 },
123+ {
124+ name : "allowed resource claim" ,
125+ attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "resourceclaims" , APIGroup : "resource.k8s.io" , Name : "claim0-pod0-node0-ns0" , Namespace : "ns0" },
126+ expect : authorizer .DecisionAllow ,
127+ },
128+ {
129+ name : "allowed resource claim with template" ,
130+ attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "resourceclaims" , APIGroup : "resource.k8s.io" , Name : "generated-claim-pod0-node0-ns0-0" , Namespace : "ns0" },
131+ expect : authorizer .DecisionAllow ,
132+ },
120133 {
121134 name : "allowed pv" ,
122135 attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "persistentvolumes" , Name : "pv0-pod0-node0-ns0" , Namespace : "" },
@@ -142,6 +155,16 @@ func TestAuthorizer(t *testing.T) {
142155 attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "persistentvolumeclaims" , Name : "pvc0-pod0-node1" , Namespace : "ns0" },
143156 expect : authorizer .DecisionNoOpinion ,
144157 },
158+ {
159+ name : "disallowed resource claim, other node" ,
160+ attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "resourceclaims" , APIGroup : "resource.k8s.io" , Name : "claim0-pod0-node1-ns0" , Namespace : "ns0" },
161+ expect : authorizer .DecisionNoOpinion ,
162+ },
163+ {
164+ name : "disallowed resource claim with template" ,
165+ attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "resourceclaims" , APIGroup : "resource.k8s.io" , Name : "pod0-node1-claimtemplate0" , Namespace : "ns0" },
166+ expect : authorizer .DecisionNoOpinion ,
167+ },
145168 {
146169 name : "disallowed pv" ,
147170 attrs : authorizer.AttributesRecord {User : node0 , ResourceRequest : true , Verb : "get" , Resource : "persistentvolumes" , Name : "pv0-pod0-node1-ns0" , Namespace : "" },
@@ -468,9 +491,12 @@ type sampleDataOpts struct {
468491 sharedSecretsPerPod int
469492 sharedPVCsPerPod int
470493
471- uniqueSecretsPerPod int
472- uniqueConfigMapsPerPod int
473- uniquePVCsPerPod int
494+ uniqueSecretsPerPod int
495+ uniqueConfigMapsPerPod int
496+ uniquePVCsPerPod int
497+ uniqueResourceClaimsPerPod int
498+ uniqueResourceClaimTemplatesPerPod int
499+ uniqueResourceClaimTemplatesWithClaimPerPod int
474500}
475501
476502func BenchmarkPopulationAllocation (b * testing.B ) {
@@ -845,6 +871,40 @@ func generatePod(name, namespace, nodeName, svcAccountName string, opts *sampleD
845871 PersistentVolumeClaim : & corev1.PersistentVolumeClaimVolumeSource {ClaimName : pv .Spec .ClaimRef .Name },
846872 }})
847873 }
874+ for i := 0 ; i < opts .uniqueResourceClaimsPerPod ; i ++ {
875+ claimName := fmt .Sprintf ("claim%d-%s-%s" , i , pod .Name , pod .Namespace )
876+ pod .Spec .ResourceClaims = append (pod .Spec .ResourceClaims , corev1.PodResourceClaim {
877+ Name : fmt .Sprintf ("claim%d" , i ),
878+ Source : corev1.ClaimSource {
879+ ResourceClaimName : & claimName ,
880+ },
881+ })
882+ }
883+ for i := 0 ; i < opts .uniqueResourceClaimTemplatesPerPod ; i ++ {
884+ claimTemplateName := fmt .Sprintf ("claimtemplate%d-%s-%s" , i , pod .Name , pod .Namespace )
885+ podClaimName := fmt .Sprintf ("claimtemplate%d" , i )
886+ pod .Spec .ResourceClaims = append (pod .Spec .ResourceClaims , corev1.PodResourceClaim {
887+ Name : podClaimName ,
888+ Source : corev1.ClaimSource {
889+ ResourceClaimTemplateName : & claimTemplateName ,
890+ },
891+ })
892+ }
893+ for i := 0 ; i < opts .uniqueResourceClaimTemplatesWithClaimPerPod ; i ++ {
894+ claimTemplateName := fmt .Sprintf ("claimtemplate%d-%s-%s" , i , pod .Name , pod .Namespace )
895+ podClaimName := fmt .Sprintf ("claimtemplate-with-claim%d" , i )
896+ claimName := fmt .Sprintf ("generated-claim-%s-%s-%d" , pod .Name , pod .Namespace , i )
897+ pod .Spec .ResourceClaims = append (pod .Spec .ResourceClaims , corev1.PodResourceClaim {
898+ Name : podClaimName ,
899+ Source : corev1.ClaimSource {
900+ ResourceClaimTemplateName : & claimTemplateName ,
901+ },
902+ })
903+ pod .Status .ResourceClaimStatuses = append (pod .Status .ResourceClaimStatuses , corev1.PodResourceClaimStatus {
904+ Name : podClaimName ,
905+ ResourceClaimName : & claimName ,
906+ })
907+ }
848908 // Choose shared pvcs randomly from shared pvcs in a namespace.
849909 subset = randomSubset (opts .sharedPVCsPerPod , opts .sharedPVCsPerNamespace )
850910 for _ , i := range subset {
0 commit comments