k8s.io/apiserver@v0.31.1/pkg/quota/v1/interfaces.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package v1 18 19 import ( 20 corev1 "k8s.io/api/core/v1" 21 "k8s.io/apimachinery/pkg/runtime" 22 "k8s.io/apimachinery/pkg/runtime/schema" 23 "k8s.io/apiserver/pkg/admission" 24 "k8s.io/client-go/tools/cache" 25 ) 26 27 // UsageStatsOptions is an options structs that describes how stats should be calculated 28 type UsageStatsOptions struct { 29 // Namespace where stats should be calculate 30 Namespace string 31 // Scopes that must match counted objects 32 Scopes []corev1.ResourceQuotaScope 33 // Resources are the set of resources to include in the measurement 34 Resources []corev1.ResourceName 35 ScopeSelector *corev1.ScopeSelector 36 } 37 38 // UsageStats is result of measuring observed resource use in the system 39 type UsageStats struct { 40 // Used maps resource to quantity used 41 Used corev1.ResourceList 42 } 43 44 // Evaluator knows how to evaluate quota usage for a particular group resource 45 type Evaluator interface { 46 // Constraints ensures that each required resource is present on item 47 Constraints(required []corev1.ResourceName, item runtime.Object) error 48 // GroupResource returns the groupResource that this object knows how to evaluate 49 GroupResource() schema.GroupResource 50 // Handles determines if quota could be impacted by the specified attribute. 51 // If true, admission control must perform quota processing for the operation, otherwise it is safe to ignore quota. 52 Handles(operation admission.Attributes) bool 53 // Matches returns true if the specified quota matches the input item 54 Matches(resourceQuota *corev1.ResourceQuota, item runtime.Object) (bool, error) 55 // MatchingScopes takes the input specified list of scopes and input object and returns the set of scopes that matches input object. 56 MatchingScopes(item runtime.Object, scopes []corev1.ScopedResourceSelectorRequirement) ([]corev1.ScopedResourceSelectorRequirement, error) 57 // UncoveredQuotaScopes takes the input matched scopes which are limited by configuration and the matched quota scopes. It returns the scopes which are in limited scopes but don't have a corresponding covering quota scope 58 UncoveredQuotaScopes(limitedScopes []corev1.ScopedResourceSelectorRequirement, matchedQuotaScopes []corev1.ScopedResourceSelectorRequirement) ([]corev1.ScopedResourceSelectorRequirement, error) 59 // MatchingResources takes the input specified list of resources and returns the set of resources evaluator matches. 60 MatchingResources(input []corev1.ResourceName) []corev1.ResourceName 61 // Usage returns the resource usage for the specified object 62 Usage(item runtime.Object) (corev1.ResourceList, error) 63 // UsageStats calculates latest observed usage stats for all objects 64 UsageStats(options UsageStatsOptions) (UsageStats, error) 65 } 66 67 // Configuration defines how the quota system is configured. 68 type Configuration interface { 69 // IgnoredResources are ignored by quota. 70 IgnoredResources() map[schema.GroupResource]struct{} 71 // Evaluators for quota evaluation. 72 Evaluators() []Evaluator 73 } 74 75 // Registry maintains a list of evaluators 76 type Registry interface { 77 // Add to registry 78 Add(e Evaluator) 79 // Remove from registry 80 Remove(e Evaluator) 81 // Get by group resource 82 Get(gr schema.GroupResource) Evaluator 83 // List from registry 84 List() []Evaluator 85 } 86 87 // ListerForResourceFunc knows how to get a lister for a specific resource 88 type ListerForResourceFunc func(schema.GroupVersionResource) (cache.GenericLister, error)