2018-01-09 18:57:14 +00:00
/ *
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 (
2018-11-26 18:23:56 +00:00
corev1 "k8s.io/api/core/v1"
2018-01-09 18:57:14 +00:00
"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
2018-11-26 18:23:56 +00:00
Scopes [ ] corev1 . ResourceQuotaScope
2018-01-09 18:57:14 +00:00
// Resources are the set of resources to include in the measurement
2018-11-26 18:23:56 +00:00
Resources [ ] corev1 . ResourceName
ScopeSelector * corev1 . ScopeSelector
2018-01-09 18:57:14 +00:00
}
// UsageStats is result of measuring observed resource use in the system
type UsageStats struct {
// Used maps resource to quantity used
2018-11-26 18:23:56 +00:00
Used corev1 . ResourceList
2018-01-09 18:57:14 +00:00
}
// 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
2018-11-26 18:23:56 +00:00
Constraints ( required [ ] corev1 . ResourceName , item runtime . Object ) error
2018-01-09 18:57:14 +00:00
// 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
2018-11-26 18:23:56 +00:00
Matches ( resourceQuota * corev1 . ResourceQuota , item runtime . Object ) ( bool , error )
2018-07-18 14:47:22 +00:00
// MatchingScopes takes the input specified list of scopes and input object and returns the set of scopes that matches input object.
2018-11-26 18:23:56 +00:00
MatchingScopes ( item runtime . Object , scopes [ ] corev1 . ScopedResourceSelectorRequirement ) ( [ ] corev1 . ScopedResourceSelectorRequirement , error )
2018-07-18 14:47:22 +00:00
// 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
2018-11-26 18:23:56 +00:00
UncoveredQuotaScopes ( limitedScopes [ ] corev1 . ScopedResourceSelectorRequirement , matchedQuotaScopes [ ] corev1 . ScopedResourceSelectorRequirement ) ( [ ] corev1 . ScopedResourceSelectorRequirement , error )
2018-01-09 18:57:14 +00:00
// MatchingResources takes the input specified list of resources and returns the set of resources evaluator matches.
2018-11-26 18:23:56 +00:00
MatchingResources ( input [ ] corev1 . ResourceName ) [ ] corev1 . ResourceName
2018-01-09 18:57:14 +00:00
// Usage returns the resource usage for the specified object
2018-11-26 18:23:56 +00:00
Usage ( item runtime . Object ) ( corev1 . ResourceList , error )
2018-01-09 18:57:14 +00:00
// 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 )