123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- 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 admission
- import (
- "k8s.io/apimachinery/pkg/api/meta"
- "k8s.io/apiserver/pkg/admission"
- "k8s.io/apiserver/pkg/authorization/authorizer"
- "k8s.io/apiserver/pkg/util/webhook"
- quota "k8s.io/kubernetes/pkg/quota/v1"
- )
- // TODO add a `WantsToRun` which takes a stopCh. Might make it generic.
- // WantsCloudConfig defines a function which sets CloudConfig for admission plugins that need it.
- type WantsCloudConfig interface {
- SetCloudConfig([]byte)
- }
- // WantsRESTMapper defines a function which sets RESTMapper for admission plugins that need it.
- type WantsRESTMapper interface {
- SetRESTMapper(meta.RESTMapper)
- }
- // WantsQuotaConfiguration defines a function which sets quota configuration for admission plugins that need it.
- type WantsQuotaConfiguration interface {
- SetQuotaConfiguration(quota.Configuration)
- admission.InitializationValidator
- }
- // PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
- type PluginInitializer struct {
- authorizer authorizer.Authorizer
- cloudConfig []byte
- restMapper meta.RESTMapper
- quotaConfiguration quota.Configuration
- serviceResolver webhook.ServiceResolver
- authenticationInfoResolverWrapper webhook.AuthenticationInfoResolverWrapper
- }
- var _ admission.PluginInitializer = &PluginInitializer{}
- // NewPluginInitializer constructs new instance of PluginInitializer
- // TODO: switch these parameters to use the builder pattern or just make them
- // all public, this construction method is pointless boilerplate.
- func NewPluginInitializer(
- cloudConfig []byte,
- restMapper meta.RESTMapper,
- quotaConfiguration quota.Configuration,
- ) *PluginInitializer {
- return &PluginInitializer{
- cloudConfig: cloudConfig,
- restMapper: restMapper,
- quotaConfiguration: quotaConfiguration,
- }
- }
- // Initialize checks the initialization interfaces implemented by each plugin
- // and provide the appropriate initialization data
- func (i *PluginInitializer) Initialize(plugin admission.Interface) {
- if wants, ok := plugin.(WantsCloudConfig); ok {
- wants.SetCloudConfig(i.cloudConfig)
- }
- if wants, ok := plugin.(WantsRESTMapper); ok {
- wants.SetRESTMapper(i.restMapper)
- }
- if wants, ok := plugin.(WantsQuotaConfiguration); ok {
- wants.SetQuotaConfiguration(i.quotaConfiguration)
- }
- }
|