Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
e19257f2
Commit
e19257f2
authored
Nov 15, 2017
by
Dr. Stefan Schimanski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
admission/webhook: move webhook initializer into plugin
parent
3df3c580
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
191 additions
and
82 deletions
+191
-82
BUILD
cmd/kube-apiserver/app/BUILD
+1
-0
server.go
cmd/kube-apiserver/app/server.go
+10
-8
BUILD
pkg/kubeapiserver/admission/BUILD
+2
-5
initializer.go
pkg/kubeapiserver/admission/initializer.go
+6
-40
initializer_test.go
pkg/kubeapiserver/admission/initializer_test.go
+49
-0
gc_admission_test.go
plugin/pkg/admission/gc/gc_admission_test.go
+1
-1
admission_test.go
plugin/pkg/admission/limitranger/admission_test.go
+1
-1
admission_test.go
...n/pkg/admission/namespace/autoprovision/admission_test.go
+1
-1
admission_test.go
plugin/pkg/admission/namespace/exists/admission_test.go
+1
-1
admission_test.go
plugin/pkg/admission/podnodeselector/admission_test.go
+1
-1
admission_test.go
.../pkg/admission/podtolerationrestriction/admission_test.go
+1
-1
BUILD
staging/src/k8s.io/apiserver/pkg/admission/BUILD
+1
-0
BUILD
.../apiserver/pkg/admission/plugin/webhook/initializer/BUILD
+37
-0
initializer.go
...r/pkg/admission/plugin/webhook/initializer/initializer.go
+76
-0
initializer_test.go
.../admission/plugin/webhook/initializer/initializer_test.go
+3
-23
No files found.
cmd/kube-apiserver/app/BUILD
View file @
e19257f2
...
@@ -61,6 +61,7 @@ go_library(
...
@@ -61,6 +61,7 @@ go_library(
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
...
...
cmd/kube-apiserver/app/server.go
View file @
e19257f2
...
@@ -55,13 +55,16 @@ import (
...
@@ -55,13 +55,16 @@ import (
aggregatorapiserver
"k8s.io/kube-aggregator/pkg/apiserver"
aggregatorapiserver
"k8s.io/kube-aggregator/pkg/apiserver"
openapi
"k8s.io/kube-openapi/pkg/common"
openapi
"k8s.io/kube-openapi/pkg/common"
webhookinit
"k8s.io/apiserver/pkg/admission/plugin/webhook/initializer"
"k8s.io/apiserver/pkg/storage/etcd3/preflight"
"k8s.io/apiserver/pkg/storage/etcd3/preflight"
clientgoinformers
"k8s.io/client-go/informers"
clientgoinformers
"k8s.io/client-go/informers"
clientgoclientset
"k8s.io/client-go/kubernetes"
clientgoclientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/apis/apps"
"k8s.io/kubernetes/pkg/apis/apps"
"k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/kubernetes/pkg/apis/batch"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/networking"
"k8s.io/kubernetes/pkg/apis/networking"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
...
@@ -86,8 +89,6 @@ import (
...
@@ -86,8 +89,6 @@ import (
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/pkg/version"
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap"
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap"
"k8s.io/client-go/rest"
api
"k8s.io/kubernetes/pkg/apis/core"
_
"k8s.io/kubernetes/pkg/util/reflector/prometheus"
// for reflector metric registration
_
"k8s.io/kubernetes/pkg/util/reflector/prometheus"
// for reflector metric registration
_
"k8s.io/kubernetes/pkg/util/workqueue/prometheus"
// for workqueue metric registration
_
"k8s.io/kubernetes/pkg/util/workqueue/prometheus"
// for workqueue metric registration
)
)
...
@@ -462,7 +463,7 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
...
@@ -462,7 +463,7 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
return
ret
,
err
return
ret
,
err
})
})
}
}
pluginInitializer
,
err
:=
BuildAdmissionPluginInitializer
(
pluginInitializer
s
,
err
:=
BuildAdmissionPluginInitializers
(
s
,
s
,
client
,
client
,
sharedInformers
,
sharedInformers
,
...
@@ -478,7 +479,7 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
...
@@ -478,7 +479,7 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
versionedInformers
,
versionedInformers
,
kubeClientConfig
,
kubeClientConfig
,
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
pluginInitializer
)
pluginInitializer
s
...
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"failed to initialize admission: %v"
,
err
)
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"failed to initialize admission: %v"
,
err
)
}
}
...
@@ -486,8 +487,8 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
...
@@ -486,8 +487,8 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
return
genericConfig
,
sharedInformers
,
versionedInformers
,
insecureServingOptions
,
serviceResolver
,
nil
return
genericConfig
,
sharedInformers
,
versionedInformers
,
insecureServingOptions
,
serviceResolver
,
nil
}
}
// BuildAdmissionPluginInitializer constructs the admission plugin initializer
// BuildAdmissionPluginInitializer
s
constructs the admission plugin initializer
func
BuildAdmissionPluginInitializer
(
s
*
options
.
ServerRunOptions
,
client
internalclientset
.
Interface
,
sharedInformers
informers
.
SharedInformerFactory
,
serviceResolver
aggregatorapiserver
.
ServiceResolver
,
webhookAuthWrapper
webhookconfig
.
AuthenticationInfoResolverWrapper
)
(
admission
.
PluginInitializer
,
error
)
{
func
BuildAdmissionPluginInitializer
s
(
s
*
options
.
ServerRunOptions
,
client
internalclientset
.
Interface
,
sharedInformers
informers
.
SharedInformerFactory
,
serviceResolver
aggregatorapiserver
.
ServiceResolver
,
webhookAuthWrapper
webhookconfig
.
AuthenticationInfoResolverWrapper
)
([]
admission
.
PluginInitializer
,
error
)
{
var
cloudConfig
[]
byte
var
cloudConfig
[]
byte
if
s
.
CloudProvider
.
CloudConfigFile
!=
""
{
if
s
.
CloudProvider
.
CloudConfigFile
!=
""
{
...
@@ -503,9 +504,10 @@ func BuildAdmissionPluginInitializer(s *options.ServerRunOptions, client interna
...
@@ -503,9 +504,10 @@ func BuildAdmissionPluginInitializer(s *options.ServerRunOptions, client interna
quotaConfiguration
:=
quotainstall
.
NewQuotaConfigurationForAdmission
()
quotaConfiguration
:=
quotainstall
.
NewQuotaConfigurationForAdmission
()
pluginInitializer
:=
kubeapiserveradmission
.
NewPluginInitializer
(
client
,
sharedInformers
,
cloudConfig
,
restMapper
,
quotaConfiguration
,
webhookAuthWrapper
,
serviceResolver
)
kubePluginInitializer
:=
kubeapiserveradmission
.
NewPluginInitializer
(
client
,
sharedInformers
,
cloudConfig
,
restMapper
,
quotaConfiguration
)
webhookPluginInitializer
:=
webhookinit
.
NewPluginInitializer
(
webhookAuthWrapper
,
serviceResolver
)
return
pluginInitializer
,
nil
return
[]
admission
.
PluginInitializer
{
webhookPluginInitializer
,
kubePluginInitializer
}
,
nil
}
}
// BuildAuthenticator constructs the authenticator
// BuildAuthenticator constructs the authenticator
...
...
pkg/kubeapiserver/admission/BUILD
View file @
e19257f2
...
@@ -8,13 +8,10 @@ load(
...
@@ -8,13 +8,10 @@ load(
go_test(
go_test(
name = "go_default_test",
name = "go_default_test",
srcs = ["init_test.go"],
srcs = ["init
ializer
_test.go"],
importpath = "k8s.io/kubernetes/pkg/kubeapiserver/admission",
importpath = "k8s.io/kubernetes/pkg/kubeapiserver/admission",
library = ":go_default_library",
library = ":go_default_library",
deps = [
deps = ["//vendor/k8s.io/apiserver/pkg/admission:go_default_library"],
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config:go_default_library",
],
)
)
go_library(
go_library(
...
...
pkg/kubeapiserver/admission/initializer.go
View file @
e19257f2
...
@@ -17,8 +17,6 @@ limitations under the License.
...
@@ -17,8 +17,6 @@ limitations under the License.
package
admission
package
admission
import
(
import
(
"net/url"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
webhookconfig
"k8s.io/apiserver/pkg/admission/plugin/webhook/config"
webhookconfig
"k8s.io/apiserver/pkg/admission/plugin/webhook/config"
...
@@ -59,25 +57,7 @@ type WantsQuotaConfiguration interface {
...
@@ -59,25 +57,7 @@ type WantsQuotaConfiguration interface {
admission
.
InitializationValidator
admission
.
InitializationValidator
}
}
// WantsServiceResolver defines a fuction that accepts a ServiceResolver for
// PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
// admission plugins that need to make calls to services.
type
WantsServiceResolver
interface
{
SetServiceResolver
(
webhookconfig
.
ServiceResolver
)
}
// ServiceResolver knows how to convert a service reference into an actual
// location.
type
ServiceResolver
interface
{
ResolveEndpoint
(
namespace
,
name
string
)
(
*
url
.
URL
,
error
)
}
// WantsAuthenticationInfoResolverWrapper defines a function that wraps the standard AuthenticationInfoResolver
// to allow the apiserver to control what is returned as auth info
type
WantsAuthenticationInfoResolverWrapper
interface
{
SetAuthenticationInfoResolverWrapper
(
webhookconfig
.
AuthenticationInfoResolverWrapper
)
admission
.
InitializationValidator
}
type
PluginInitializer
struct
{
type
PluginInitializer
struct
{
internalClient
internalclientset
.
Interface
internalClient
internalclientset
.
Interface
externalClient
clientset
.
Interface
externalClient
clientset
.
Interface
...
@@ -101,17 +81,13 @@ func NewPluginInitializer(
...
@@ -101,17 +81,13 @@ func NewPluginInitializer(
cloudConfig
[]
byte
,
cloudConfig
[]
byte
,
restMapper
meta
.
RESTMapper
,
restMapper
meta
.
RESTMapper
,
quotaConfiguration
quota
.
Configuration
,
quotaConfiguration
quota
.
Configuration
,
authenticationInfoResolverWrapper
webhookconfig
.
AuthenticationInfoResolverWrapper
,
serviceResolver
webhookconfig
.
ServiceResolver
,
)
*
PluginInitializer
{
)
*
PluginInitializer
{
return
&
PluginInitializer
{
return
&
PluginInitializer
{
internalClient
:
internalClient
,
internalClient
:
internalClient
,
informers
:
sharedInformers
,
informers
:
sharedInformers
,
cloudConfig
:
cloudConfig
,
cloudConfig
:
cloudConfig
,
restMapper
:
restMapper
,
restMapper
:
restMapper
,
quotaConfiguration
:
quotaConfiguration
,
quotaConfiguration
:
quotaConfiguration
,
authenticationInfoResolverWrapper
:
authenticationInfoResolverWrapper
,
serviceResolver
:
serviceResolver
,
}
}
}
}
...
@@ -137,14 +113,4 @@ func (i *PluginInitializer) Initialize(plugin admission.Interface) {
...
@@ -137,14 +113,4 @@ func (i *PluginInitializer) Initialize(plugin admission.Interface) {
if
wants
,
ok
:=
plugin
.
(
WantsQuotaConfiguration
);
ok
{
if
wants
,
ok
:=
plugin
.
(
WantsQuotaConfiguration
);
ok
{
wants
.
SetQuotaConfiguration
(
i
.
quotaConfiguration
)
wants
.
SetQuotaConfiguration
(
i
.
quotaConfiguration
)
}
}
if
wants
,
ok
:=
plugin
.
(
WantsServiceResolver
);
ok
{
wants
.
SetServiceResolver
(
i
.
serviceResolver
)
}
if
wants
,
ok
:=
plugin
.
(
WantsAuthenticationInfoResolverWrapper
);
ok
{
if
i
.
authenticationInfoResolverWrapper
!=
nil
{
wants
.
SetAuthenticationInfoResolverWrapper
(
i
.
authenticationInfoResolverWrapper
)
}
}
}
}
pkg/kubeapiserver/admission/initializer_test.go
0 → 100644
View file @
e19257f2
/*
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
(
"testing"
"k8s.io/apiserver/pkg/admission"
)
type
doNothingAdmission
struct
{}
func
(
doNothingAdmission
)
Admit
(
a
admission
.
Attributes
)
error
{
return
nil
}
func
(
doNothingAdmission
)
Handles
(
o
admission
.
Operation
)
bool
{
return
false
}
func
(
doNothingAdmission
)
Validate
()
error
{
return
nil
}
type
WantsCloudConfigAdmissionPlugin
struct
{
doNothingAdmission
cloudConfig
[]
byte
}
func
(
self
*
WantsCloudConfigAdmissionPlugin
)
SetCloudConfig
(
cloudConfig
[]
byte
)
{
self
.
cloudConfig
=
cloudConfig
}
func
TestCloudConfigAdmissionPlugin
(
t
*
testing
.
T
)
{
cloudConfig
:=
[]
byte
(
"cloud-configuration"
)
initializer
:=
NewPluginInitializer
(
nil
,
nil
,
cloudConfig
,
nil
,
nil
)
wantsCloudConfigAdmission
:=
&
WantsCloudConfigAdmissionPlugin
{}
initializer
.
Initialize
(
wantsCloudConfigAdmission
)
if
wantsCloudConfigAdmission
.
cloudConfig
==
nil
{
t
.
Errorf
(
"Expected cloud config to be initialized but found nil"
)
}
}
plugin/pkg/admission/gc/gc_admission_test.go
View file @
e19257f2
...
@@ -87,7 +87,7 @@ func newGCPermissionsEnforcement() (*gcPermissionsEnforcement, error) {
...
@@ -87,7 +87,7 @@ func newGCPermissionsEnforcement() (*gcPermissionsEnforcement, error) {
}
}
genericPluginInitializer
:=
initializer
.
New
(
nil
,
nil
,
fakeAuthorizer
{},
nil
)
genericPluginInitializer
:=
initializer
.
New
(
nil
,
nil
,
fakeAuthorizer
{},
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
nil
,
nil
,
nil
,
legacyscheme
.
Registry
.
RESTMapper
(),
nil
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
nil
,
nil
,
nil
,
legacyscheme
.
Registry
.
RESTMapper
(),
nil
)
initializersChain
:=
admission
.
PluginInitializers
{}
initializersChain
:=
admission
.
PluginInitializers
{}
initializersChain
=
append
(
initializersChain
,
genericPluginInitializer
)
initializersChain
=
append
(
initializersChain
,
genericPluginInitializer
)
initializersChain
=
append
(
initializersChain
,
pluginInitializer
)
initializersChain
=
append
(
initializersChain
,
pluginInitializer
)
...
...
plugin/pkg/admission/limitranger/admission_test.go
View file @
e19257f2
...
@@ -760,7 +760,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
...
@@ -760,7 +760,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
f
,
err
return
nil
,
f
,
err
}
}
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
return
handler
,
f
,
err
...
...
plugin/pkg/admission/namespace/autoprovision/admission_test.go
View file @
e19257f2
...
@@ -38,7 +38,7 @@ import (
...
@@ -38,7 +38,7 @@ import (
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
MutationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
MutationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewProvision
()
handler
:=
NewProvision
()
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
return
handler
,
f
,
err
...
...
plugin/pkg/admission/namespace/exists/admission_test.go
View file @
e19257f2
...
@@ -37,7 +37,7 @@ import (
...
@@ -37,7 +37,7 @@ import (
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
ValidationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
ValidationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewExists
()
handler
:=
NewExists
()
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
return
handler
,
f
,
err
...
...
plugin/pkg/admission/podnodeselector/admission_test.go
View file @
e19257f2
...
@@ -253,7 +253,7 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) {
...
@@ -253,7 +253,7 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) {
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
*
podNodeSelector
,
informers
.
SharedInformerFactory
,
error
)
{
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
*
podNodeSelector
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewPodNodeSelector
(
nil
)
handler
:=
NewPodNodeSelector
(
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
return
handler
,
f
,
err
...
...
plugin/pkg/admission/podtolerationrestriction/admission_test.go
View file @
e19257f2
...
@@ -361,7 +361,7 @@ func newHandlerForTest(c clientset.Interface) (*podTolerationsPlugin, informers.
...
@@ -361,7 +361,7 @@ func newHandlerForTest(c clientset.Interface) (*podTolerationsPlugin, informers.
return
nil
,
nil
,
err
return
nil
,
nil
,
err
}
}
handler
:=
NewPodTolerationsPlugin
(
pluginConfig
)
handler
:=
NewPodTolerationsPlugin
(
pluginConfig
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
return
handler
,
f
,
err
...
...
staging/src/k8s.io/apiserver/pkg/admission/BUILD
View file @
e19257f2
...
@@ -80,6 +80,7 @@ filegroup(
...
@@ -80,6 +80,7 @@ filegroup(
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/config:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/config:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/errors:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/errors:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/namespace:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/namespace:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/request:all-srcs",
"//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/request:all-srcs",
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer/BUILD
0 → 100644
View file @
e19257f2
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
srcs = ["initializer.go"],
importpath = "k8s.io/apiserver/pkg/admission/plugin/webhook/initializer",
visibility = ["//visibility:public"],
deps = [
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = ["initializer_test.go"],
importpath = "k8s.io/apiserver/pkg/admission/plugin/webhook/initializer",
library = ":go_default_library",
deps = [
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer/initializer.go
0 → 100644
View file @
e19257f2
/*
Copyright 2017 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
initializer
import
(
"net/url"
"k8s.io/apiserver/pkg/admission"
webhookconfig
"k8s.io/apiserver/pkg/admission/plugin/webhook/config"
)
// WantsServiceResolver defines a fuction that accepts a ServiceResolver for
// admission plugins that need to make calls to services.
type
WantsServiceResolver
interface
{
SetServiceResolver
(
webhookconfig
.
ServiceResolver
)
}
// ServiceResolver knows how to convert a service reference into an actual
// location.
type
ServiceResolver
interface
{
ResolveEndpoint
(
namespace
,
name
string
)
(
*
url
.
URL
,
error
)
}
// WantsAuthenticationInfoResolverWrapper defines a function that wraps the standard AuthenticationInfoResolver
// to allow the apiserver to control what is returned as auth info
type
WantsAuthenticationInfoResolverWrapper
interface
{
SetAuthenticationInfoResolverWrapper
(
webhookconfig
.
AuthenticationInfoResolverWrapper
)
admission
.
InitializationValidator
}
// PluginInitializer is used for initialization of the webhook admission plugin.
type
PluginInitializer
struct
{
serviceResolver
webhookconfig
.
ServiceResolver
authenticationInfoResolverWrapper
webhookconfig
.
AuthenticationInfoResolverWrapper
}
var
_
admission
.
PluginInitializer
=
&
PluginInitializer
{}
// NewPluginInitializer constructs new instance of PluginInitializer
func
NewPluginInitializer
(
authenticationInfoResolverWrapper
webhookconfig
.
AuthenticationInfoResolverWrapper
,
serviceResolver
webhookconfig
.
ServiceResolver
,
)
*
PluginInitializer
{
return
&
PluginInitializer
{
authenticationInfoResolverWrapper
:
authenticationInfoResolverWrapper
,
serviceResolver
:
serviceResolver
,
}
}
// 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
.
(
WantsServiceResolver
);
ok
{
wants
.
SetServiceResolver
(
i
.
serviceResolver
)
}
if
wants
,
ok
:=
plugin
.
(
WantsAuthenticationInfoResolverWrapper
);
ok
{
if
i
.
authenticationInfoResolverWrapper
!=
nil
{
wants
.
SetAuthenticationInfoResolverWrapper
(
i
.
authenticationInfoResolverWrapper
)
}
}
}
pkg/kubeapiserver/admission/init
_test.go
→
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer/initializer
_test.go
View file @
e19257f2
/*
/*
Copyright 201
6
The Kubernetes Authors.
Copyright 201
7
The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
you may not use this file except in compliance with the License.
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
*/
*/
package
admission
package
initializer
import
(
import
(
"net/url"
"net/url"
...
@@ -30,26 +30,6 @@ func (doNothingAdmission) Admit(a admission.Attributes) error { return nil }
...
@@ -30,26 +30,6 @@ func (doNothingAdmission) Admit(a admission.Attributes) error { return nil }
func
(
doNothingAdmission
)
Handles
(
o
admission
.
Operation
)
bool
{
return
false
}
func
(
doNothingAdmission
)
Handles
(
o
admission
.
Operation
)
bool
{
return
false
}
func
(
doNothingAdmission
)
Validate
()
error
{
return
nil
}
func
(
doNothingAdmission
)
Validate
()
error
{
return
nil
}
type
WantsCloudConfigAdmissionPlugin
struct
{
doNothingAdmission
cloudConfig
[]
byte
}
func
(
self
*
WantsCloudConfigAdmissionPlugin
)
SetCloudConfig
(
cloudConfig
[]
byte
)
{
self
.
cloudConfig
=
cloudConfig
}
func
TestCloudConfigAdmissionPlugin
(
t
*
testing
.
T
)
{
cloudConfig
:=
[]
byte
(
"cloud-configuration"
)
initializer
:=
NewPluginInitializer
(
nil
,
nil
,
cloudConfig
,
nil
,
nil
,
nil
,
nil
)
wantsCloudConfigAdmission
:=
&
WantsCloudConfigAdmissionPlugin
{}
initializer
.
Initialize
(
wantsCloudConfigAdmission
)
if
wantsCloudConfigAdmission
.
cloudConfig
==
nil
{
t
.
Errorf
(
"Expected cloud config to be initialized but found nil"
)
}
}
type
fakeServiceResolver
struct
{}
type
fakeServiceResolver
struct
{}
func
(
f
*
fakeServiceResolver
)
ResolveEndpoint
(
namespace
,
name
string
)
(
*
url
.
URL
,
error
)
{
func
(
f
*
fakeServiceResolver
)
ResolveEndpoint
(
namespace
,
name
string
)
(
*
url
.
URL
,
error
)
{
...
@@ -66,7 +46,7 @@ func (s *serviceWanter) SetServiceResolver(sr config.ServiceResolver) { s.got =
...
@@ -66,7 +46,7 @@ func (s *serviceWanter) SetServiceResolver(sr config.ServiceResolver) { s.got =
func
TestWantsServiceResolver
(
t
*
testing
.
T
)
{
func
TestWantsServiceResolver
(
t
*
testing
.
T
)
{
sw
:=
&
serviceWanter
{}
sw
:=
&
serviceWanter
{}
fsr
:=
&
fakeServiceResolver
{}
fsr
:=
&
fakeServiceResolver
{}
i
:=
NewPluginInitializer
(
nil
,
nil
,
nil
,
nil
,
nil
,
nil
,
fsr
)
i
:=
NewPluginInitializer
(
nil
,
fsr
)
i
.
Initialize
(
sw
)
i
.
Initialize
(
sw
)
if
got
,
ok
:=
sw
.
got
.
(
*
fakeServiceResolver
);
!
ok
||
got
!=
fsr
{
if
got
,
ok
:=
sw
.
got
.
(
*
fakeServiceResolver
);
!
ok
||
got
!=
fsr
{
t
.
Errorf
(
"plumbing fail - %v %v#"
,
ok
,
got
)
t
.
Errorf
(
"plumbing fail - %v %v#"
,
ok
,
got
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment