2016-02-22 16:14:25 +00:00
/ *
2016-06-03 00:25:58 +00:00
Copyright 2016 The Kubernetes Authors .
2016-02-22 16:14:25 +00:00
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 (
2017-01-11 14:09:48 +00:00
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
2017-01-17 21:42:13 +00:00
"k8s.io/apiserver/pkg/admission"
2017-10-27 15:07:01 +00:00
"k8s.io/client-go/tools/cache"
2017-11-08 22:34:54 +00:00
api "k8s.io/kubernetes/pkg/apis/core"
2016-02-22 16:14:25 +00:00
)
// 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 [ ] api . ResourceQuotaScope
2016-12-07 20:44:16 +00:00
// Resources are the set of resources to include in the measurement
2017-12-22 11:06:29 +00:00
Resources [ ] api . ResourceName
ScopeSelector * api . ScopeSelector
2016-02-22 16:14:25 +00:00
}
// UsageStats is result of measuring observed resource use in the system
type UsageStats struct {
// Used maps resource to quantity used
Used api . ResourceList
}
2017-10-27 15:07:01 +00:00
// Evaluator knows how to evaluate quota usage for a particular group resource
2016-02-22 16:14:25 +00:00
type Evaluator interface {
// Constraints ensures that each required resource is present on item
Constraints ( required [ ] api . ResourceName , item runtime . Object ) error
2017-10-27 15:07:01 +00:00
// GroupResource returns the groupResource that this object knows how to evaluate
GroupResource ( ) schema . GroupResource
2017-08-23 04:14:13 +00:00
// Handles determines if quota could be impacted by the specified attribute.
2016-12-07 20:44:16 +00:00
// If true, admission control must perform quota processing for the operation, otherwise it is safe to ignore quota.
2017-08-23 04:14:13 +00:00
Handles ( operation admission . Attributes ) bool
2016-02-22 16:14:25 +00:00
// Matches returns true if the specified quota matches the input item
2016-12-07 20:44:16 +00:00
Matches ( resourceQuota * api . ResourceQuota , item runtime . Object ) ( bool , error )
2017-12-22 11:06:29 +00:00
// 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 [ ] api . ScopedResourceSelectorRequirement ) ( [ ] api . 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 [ ] api . ScopedResourceSelectorRequirement , matchedQuotaScopes [ ] api . ScopedResourceSelectorRequirement ) ( [ ] api . ScopedResourceSelectorRequirement , error )
2016-12-07 20:44:16 +00:00
// MatchingResources takes the input specified list of resources and returns the set of resources evaluator matches.
MatchingResources ( input [ ] api . ResourceName ) [ ] api . ResourceName
2016-02-22 16:14:25 +00:00
// Usage returns the resource usage for the specified object
2016-12-07 20:44:16 +00:00
Usage ( item runtime . Object ) ( api . ResourceList , error )
2016-02-22 16:14:25 +00:00
// UsageStats calculates latest observed usage stats for all objects
UsageStats ( options UsageStatsOptions ) ( UsageStats , error )
}
2017-10-27 15:07:01 +00:00
// 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
2016-02-22 16:14:25 +00:00
}
2016-07-07 16:14:39 +00:00
2017-10-27 15:07:01 +00:00
// 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
2016-07-07 16:14:39 +00:00
}
2017-10-27 15:07:01 +00:00
// ListerForResourceFunc knows how to get a lister for a specific resource
type ListerForResourceFunc func ( schema . GroupVersionResource ) ( cache . GenericLister , error )