1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- Copyright 2016 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package quota
- import (
- corev1 "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/apimachinery/pkg/runtime/schema"
- "k8s.io/apiserver/pkg/admission"
- "k8s.io/client-go/tools/cache"
- )
- // UsageStatsOptions is an options structs that describes how stats should be calculated
- type UsageStatsOptions struct {
- // Namespace where stats should be calculate
- Namespace string
- // Scopes that must match counted objects
- Scopes []corev1.ResourceQuotaScope
- // Resources are the set of resources to include in the measurement
- Resources []corev1.ResourceName
- ScopeSelector *corev1.ScopeSelector
- }
- // UsageStats is result of measuring observed resource use in the system
- type UsageStats struct {
- // Used maps resource to quantity used
- Used corev1.ResourceList
- }
- // Evaluator knows how to evaluate quota usage for a particular group resource
- type Evaluator interface {
- // Constraints ensures that each required resource is present on item
- Constraints(required []corev1.ResourceName, item runtime.Object) error
- // GroupResource returns the groupResource that this object knows how to evaluate
- GroupResource() schema.GroupResource
- // Handles determines if quota could be impacted by the specified attribute.
- // If true, admission control must perform quota processing for the operation, otherwise it is safe to ignore quota.
- Handles(operation admission.Attributes) bool
- // Matches returns true if the specified quota matches the input item
- Matches(resourceQuota *corev1.ResourceQuota, item runtime.Object) (bool, error)
- // MatchingScopes takes the input specified list of scopes and input object and returns the set of scopes that matches input object.
- MatchingScopes(item runtime.Object, scopes []corev1.ScopedResourceSelectorRequirement) ([]corev1.ScopedResourceSelectorRequirement, error)
- // 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 dont have a corresponding covering quota scope
- UncoveredQuotaScopes(limitedScopes []corev1.ScopedResourceSelectorRequirement, matchedQuotaScopes []corev1.ScopedResourceSelectorRequirement) ([]corev1.ScopedResourceSelectorRequirement, error)
- // MatchingResources takes the input specified list of resources and returns the set of resources evaluator matches.
- MatchingResources(input []corev1.ResourceName) []corev1.ResourceName
- // Usage returns the resource usage for the specified object
- Usage(item runtime.Object) (corev1.ResourceList, error)
- // UsageStats calculates latest observed usage stats for all objects
- UsageStats(options UsageStatsOptions) (UsageStats, error)
- }
- // Configuration defines how the quota system is configured.
- type Configuration interface {
- // IgnoredResources are ignored by quota.
- IgnoredResources() map[schema.GroupResource]struct{}
- // Evaluators for quota evaluation.
- Evaluators() []Evaluator
- }
- // Registry maintains a list of evaluators
- type Registry interface {
- // Add to registry
- Add(e Evaluator)
- // Remove from registry
- Remove(e Evaluator)
- // Get by group resource
- Get(gr schema.GroupResource) Evaluator
- // List from registry
- List() []Evaluator
- }
- // ListerForResourceFunc knows how to get a lister for a specific resource
- type ListerForResourceFunc func(schema.GroupVersionResource) (cache.GenericLister, error)
|