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
cebb4ee2
Commit
cebb4ee2
authored
Feb 16, 2019
by
Mehdy Bohlool
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove the propagated scheme from the Admission chain
parent
d08bc377
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
37 additions
and
113 deletions
+37
-113
aggregator.go
cmd/kube-apiserver/app/aggregator.go
+0
-1
apiextensions.go
cmd/kube-apiserver/app/apiextensions.go
+0
-1
server.go
cmd/kube-apiserver/app/server.go
+0
-1
admission.go
pkg/kubeapiserver/options/admission.go
+1
-3
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
options.go
...apiextensions-apiserver/pkg/cmd/server/options/options.go
+1
-1
initializer.go
...k8s.io/apiserver/pkg/admission/initializer/initializer.go
+0
-8
initializer_test.go
...o/apiserver/pkg/admission/initializer/initializer_test.go
+3
-31
interfaces.go
.../k8s.io/apiserver/pkg/admission/initializer/interfaces.go
+0
-7
admission_test.go
...kg/admission/plugin/namespace/lifecycle/admission_test.go
+1
-1
interfaces.go
...server/pkg/admission/plugin/webhook/generic/interfaces.go
+1
-1
webhook.go
...apiserver/pkg/admission/plugin/webhook/generic/webhook.go
+1
-6
dispatcher.go
...erver/pkg/admission/plugin/webhook/mutating/dispatcher.go
+11
-8
dispatcher_test.go
.../pkg/admission/plugin/webhook/mutating/dispatcher_test.go
+3
-4
plugin.go
...apiserver/pkg/admission/plugin/webhook/mutating/plugin.go
+0
-21
dispatcher.go
...ver/pkg/admission/plugin/webhook/validating/dispatcher.go
+2
-1
admission.go
staging/src/k8s.io/apiserver/pkg/server/options/admission.go
+1
-7
api_enablement.go
...src/k8s.io/apiserver/pkg/server/options/api_enablement.go
+1
-0
recommended.go
...ng/src/k8s.io/apiserver/pkg/server/options/recommended.go
+2
-3
start.go
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
+1
-1
admission_test.go
...iserver/pkg/admission/plugin/banflunder/admission_test.go
+1
-0
start.go
staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go
+1
-1
No files found.
cmd/kube-apiserver/app/aggregator.go
View file @
cebb4ee2
...
...
@@ -70,7 +70,6 @@ func createAggregatorConfig(
&
genericConfig
,
externalInformers
,
genericConfig
.
LoopbackClientConfig
,
aggregatorscheme
.
Scheme
,
pluginInitializers
...
)
if
err
!=
nil
{
return
nil
,
err
...
...
cmd/kube-apiserver/app/apiextensions.go
View file @
cebb4ee2
...
...
@@ -52,7 +52,6 @@ func createAPIExtensionsConfig(
&
genericConfig
,
externalInformers
,
genericConfig
.
LoopbackClientConfig
,
apiextensionsapiserver
.
Scheme
,
pluginInitializers
...
)
if
err
!=
nil
{
return
nil
,
err
...
...
cmd/kube-apiserver/app/server.go
View file @
cebb4ee2
...
...
@@ -490,7 +490,6 @@ func buildGenericConfig(
genericConfig
,
versionedInformers
,
kubeClientConfig
,
legacyscheme
.
Scheme
,
pluginInitializers
...
)
if
err
!=
nil
{
lastErr
=
fmt
.
Errorf
(
"failed to initialize admission: %v"
,
err
)
...
...
pkg/kubeapiserver/options/admission.go
View file @
cebb4ee2
...
...
@@ -22,7 +22,6 @@ import (
"github.com/spf13/pflag"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/server"
...
...
@@ -108,7 +107,6 @@ func (a *AdmissionOptions) ApplyTo(
c
*
server
.
Config
,
informers
informers
.
SharedInformerFactory
,
kubeAPIServerClientConfig
*
rest
.
Config
,
scheme
*
runtime
.
Scheme
,
pluginInitializers
...
admission
.
PluginInitializer
,
)
error
{
if
a
==
nil
{
...
...
@@ -120,7 +118,7 @@ func (a *AdmissionOptions) ApplyTo(
a
.
GenericAdmission
.
EnablePlugins
,
a
.
GenericAdmission
.
DisablePlugins
=
computePluginNames
(
a
.
PluginNames
,
a
.
GenericAdmission
.
RecommendedPluginOrder
)
}
return
a
.
GenericAdmission
.
ApplyTo
(
c
,
informers
,
kubeAPIServerClientConfig
,
scheme
,
pluginInitializers
...
)
return
a
.
GenericAdmission
.
ApplyTo
(
c
,
informers
,
kubeAPIServerClientConfig
,
pluginInitializers
...
)
}
// explicitly disable all plugins that are not in the enabled list
...
...
plugin/pkg/admission/gc/gc_admission_test.go
View file @
cebb4ee2
...
...
@@ -100,7 +100,7 @@ func newGCPermissionsEnforcement() (*gcPermissionsEnforcement, error) {
whiteList
:
whiteList
,
}
genericPluginInitializer
:=
initializer
.
New
(
nil
,
nil
,
fakeAuthorizer
{}
,
nil
)
genericPluginInitializer
:=
initializer
.
New
(
nil
,
nil
,
fakeAuthorizer
{})
fakeDiscoveryClient
:=
&
fakediscovery
.
FakeDiscovery
{
Fake
:
&
coretesting
.
Fake
{}}
fakeDiscoveryClient
.
Resources
=
[]
*
metav1
.
APIResourceList
{
{
...
...
plugin/pkg/admission/limitranger/admission_test.go
View file @
cebb4ee2
...
...
@@ -788,7 +788,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
if
err
!=
nil
{
return
nil
,
f
,
err
}
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
plugin/pkg/admission/namespace/autoprovision/admission_test.go
View file @
cebb4ee2
...
...
@@ -39,7 +39,7 @@ import (
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
MutationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewProvision
()
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
plugin/pkg/admission/namespace/exists/admission_test.go
View file @
cebb4ee2
...
...
@@ -38,7 +38,7 @@ import (
func
newHandlerForTest
(
c
kubernetes
.
Interface
)
(
admission
.
ValidationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewExists
()
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
plugin/pkg/admission/podnodeselector/admission_test.go
View file @
cebb4ee2
...
...
@@ -197,7 +197,7 @@ func TestHandles(t *testing.T) {
func
newHandlerForTest
(
c
kubernetes
.
Interface
)
(
*
podNodeSelector
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewPodNodeSelector
(
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
plugin/pkg/admission/podtolerationrestriction/admission_test.go
View file @
cebb4ee2
...
...
@@ -346,7 +346,7 @@ func newHandlerForTest(c kubernetes.Interface) (*podTolerationsPlugin, informers
return
nil
,
nil
,
err
}
handler
:=
NewPodTolerationsPlugin
(
pluginConfig
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go
View file @
cebb4ee2
...
...
@@ -91,7 +91,7 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err
}
serverConfig
:=
genericapiserver
.
NewRecommendedConfig
(
apiserver
.
Codecs
)
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
,
apiserver
.
Scheme
);
err
!=
nil
{
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
o
.
APIEnablement
.
ApplyTo
(
&
serverConfig
.
Config
,
apiserver
.
DefaultAPIResourceConfigSource
(),
apiserver
.
Scheme
);
err
!=
nil
{
...
...
staging/src/k8s.io/apiserver/pkg/admission/initializer/initializer.go
View file @
cebb4ee2
...
...
@@ -17,7 +17,6 @@ limitations under the License.
package
initializer
import
(
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/client-go/informers"
...
...
@@ -28,7 +27,6 @@ type pluginInitializer struct {
externalClient
kubernetes
.
Interface
externalInformers
informers
.
SharedInformerFactory
authorizer
authorizer
.
Authorizer
scheme
*
runtime
.
Scheme
}
// New creates an instance of admission plugins initializer.
...
...
@@ -37,13 +35,11 @@ func New(
extClientset
kubernetes
.
Interface
,
extInformers
informers
.
SharedInformerFactory
,
authz
authorizer
.
Authorizer
,
scheme
*
runtime
.
Scheme
,
)
pluginInitializer
{
return
pluginInitializer
{
externalClient
:
extClientset
,
externalInformers
:
extInformers
,
authorizer
:
authz
,
scheme
:
scheme
,
}
}
...
...
@@ -61,10 +57,6 @@ func (i pluginInitializer) Initialize(plugin admission.Interface) {
if
wants
,
ok
:=
plugin
.
(
WantsAuthorizer
);
ok
{
wants
.
SetAuthorizer
(
i
.
authorizer
)
}
if
wants
,
ok
:=
plugin
.
(
WantsScheme
);
ok
{
wants
.
SetScheme
(
i
.
scheme
)
}
}
var
_
admission
.
PluginInitializer
=
pluginInitializer
{}
staging/src/k8s.io/apiserver/pkg/admission/initializer/initializer_test.go
View file @
cebb4ee2
...
...
@@ -20,7 +20,6 @@ import (
"testing"
"time"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/apiserver/pkg/authorization/authorizer"
...
...
@@ -29,22 +28,10 @@ import (
"k8s.io/client-go/kubernetes/fake"
)
// TestWantsScheme ensures that the scheme is injected when
// the WantsScheme interface is implemented by a plugin.
func
TestWantsScheme
(
t
*
testing
.
T
)
{
scheme
:=
runtime
.
NewScheme
()
target
:=
initializer
.
New
(
nil
,
nil
,
nil
,
scheme
)
wantSchemeAdmission
:=
&
WantSchemeAdmission
{}
target
.
Initialize
(
wantSchemeAdmission
)
if
wantSchemeAdmission
.
scheme
!=
scheme
{
t
.
Errorf
(
"expected scheme to be initialized"
)
}
}
// TestWantsAuthorizer ensures that the authorizer is injected
// when the WantsAuthorizer interface is implemented by a plugin.
func
TestWantsAuthorizer
(
t
*
testing
.
T
)
{
target
:=
initializer
.
New
(
nil
,
nil
,
&
TestAuthorizer
{}
,
nil
)
target
:=
initializer
.
New
(
nil
,
nil
,
&
TestAuthorizer
{})
wantAuthorizerAdmission
:=
&
WantAuthorizerAdmission
{}
target
.
Initialize
(
wantAuthorizerAdmission
)
if
wantAuthorizerAdmission
.
auth
==
nil
{
...
...
@@ -56,7 +43,7 @@ func TestWantsAuthorizer(t *testing.T) {
// when the WantsExternalKubeClientSet interface is implemented by a plugin.
func
TestWantsExternalKubeClientSet
(
t
*
testing
.
T
)
{
cs
:=
&
fake
.
Clientset
{}
target
:=
initializer
.
New
(
cs
,
nil
,
&
TestAuthorizer
{}
,
nil
)
target
:=
initializer
.
New
(
cs
,
nil
,
&
TestAuthorizer
{})
wantExternalKubeClientSet
:=
&
WantExternalKubeClientSet
{}
target
.
Initialize
(
wantExternalKubeClientSet
)
if
wantExternalKubeClientSet
.
cs
!=
cs
{
...
...
@@ -69,7 +56,7 @@ func TestWantsExternalKubeClientSet(t *testing.T) {
func
TestWantsExternalKubeInformerFactory
(
t
*
testing
.
T
)
{
cs
:=
&
fake
.
Clientset
{}
sf
:=
informers
.
NewSharedInformerFactory
(
cs
,
time
.
Duration
(
1
)
*
time
.
Second
)
target
:=
initializer
.
New
(
cs
,
sf
,
&
TestAuthorizer
{}
,
nil
)
target
:=
initializer
.
New
(
cs
,
sf
,
&
TestAuthorizer
{})
wantExternalKubeInformerFactory
:=
&
WantExternalKubeInformerFactory
{}
target
.
Initialize
(
wantExternalKubeInformerFactory
)
if
wantExternalKubeInformerFactory
.
sf
!=
sf
{
...
...
@@ -142,18 +129,3 @@ func (s *clientCertWanter) Admit(a admission.Attributes, o admission.ObjectInter
}
func
(
s
*
clientCertWanter
)
Handles
(
o
admission
.
Operation
)
bool
{
return
false
}
func
(
s
*
clientCertWanter
)
ValidateInitialization
()
error
{
return
nil
}
// WantSchemeAdmission is a test stub that fulfills the WantsScheme interface.
type
WantSchemeAdmission
struct
{
scheme
*
runtime
.
Scheme
}
func
(
self
*
WantSchemeAdmission
)
SetScheme
(
s
*
runtime
.
Scheme
)
{
self
.
scheme
=
s
}
func
(
self
*
WantSchemeAdmission
)
Admit
(
a
admission
.
Attributes
,
o
admission
.
ObjectInterfaces
)
error
{
return
nil
}
func
(
self
*
WantSchemeAdmission
)
Handles
(
o
admission
.
Operation
)
bool
{
return
false
}
func
(
self
*
WantSchemeAdmission
)
ValidateInitialization
()
error
{
return
nil
}
var
_
admission
.
Interface
=
&
WantSchemeAdmission
{}
var
_
initializer
.
WantsScheme
=
&
WantSchemeAdmission
{}
staging/src/k8s.io/apiserver/pkg/admission/initializer/interfaces.go
View file @
cebb4ee2
...
...
@@ -17,7 +17,6 @@ limitations under the License.
package
initializer
import
(
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/client-go/informers"
...
...
@@ -41,9 +40,3 @@ type WantsAuthorizer interface {
SetAuthorizer
(
authorizer
.
Authorizer
)
admission
.
InitializationValidator
}
// WantsScheme defines a function that accepts runtime.Scheme for admission plugins that need it.
type
WantsScheme
interface
{
SetScheme
(
*
runtime
.
Scheme
)
admission
.
InitializationValidator
}
staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission_test.go
View file @
cebb4ee2
...
...
@@ -48,7 +48,7 @@ func newHandlerForTestWithClock(c clientset.Interface, cacheClock clock.Clock) (
if
err
!=
nil
{
return
nil
,
f
,
err
}
pluginInitializer
:=
kubeadmission
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
:=
kubeadmission
.
New
(
c
,
f
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/interfaces.go
View file @
cebb4ee2
...
...
@@ -41,5 +41,5 @@ type VersionedAttributes struct {
// Dispatcher dispatches webhook call to a list of webhooks with admission attributes as argument.
type
Dispatcher
interface
{
// Dispatch a request to the webhooks using the given webhooks. A non-nil error means the request is rejected.
Dispatch
(
ctx
context
.
Context
,
a
*
VersionedAttributes
,
hooks
[]
*
v1beta1
.
Webhook
)
error
Dispatch
(
ctx
context
.
Context
,
a
*
VersionedAttributes
,
o
admission
.
ObjectInterfaces
,
hooks
[]
*
v1beta1
.
Webhook
)
error
}
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/webhook.go
View file @
cebb4ee2
...
...
@@ -24,7 +24,6 @@ import (
admissionv1beta1
"k8s.io/api/admission/v1beta1"
"k8s.io/api/admissionregistration/v1beta1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/admission"
genericadmissioninit
"k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/apiserver/pkg/admission/plugin/webhook/config"
...
...
@@ -96,10 +95,6 @@ func (a *Webhook) SetServiceResolver(sr webhook.ServiceResolver) {
a
.
clientManager
.
SetServiceResolver
(
sr
)
}
// SetScheme sets a serializer(NegotiatedSerializer) which is derived from the scheme
func
(
a
*
Webhook
)
SetScheme
(
scheme
*
runtime
.
Scheme
)
{
}
// SetExternalKubeClientSet implements the WantsExternalKubeInformerFactory interface.
// It sets external ClientSet for admission plugins that need it
func
(
a
*
Webhook
)
SetExternalKubeClientSet
(
client
clientset
.
Interface
)
{
...
...
@@ -193,5 +188,5 @@ func (a *Webhook) Dispatch(attr admission.Attributes, o admission.ObjectInterfac
}
versionedAttr
.
VersionedObject
=
out
}
return
a
.
dispatcher
.
Dispatch
(
ctx
,
&
versionedAttr
,
relevantHooks
)
return
a
.
dispatcher
.
Dispatch
(
ctx
,
&
versionedAttr
,
o
,
relevantHooks
)
}
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go
View file @
cebb4ee2
...
...
@@ -31,7 +31,9 @@ import (
apierrors
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer/json"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apiserver/pkg/admission"
admissionmetrics
"k8s.io/apiserver/pkg/admission/metrics"
webhookerrors
"k8s.io/apiserver/pkg/admission/plugin/webhook/errors"
"k8s.io/apiserver/pkg/admission/plugin/webhook/generic"
...
...
@@ -53,10 +55,10 @@ func newMutatingDispatcher(p *Plugin) func(cm *webhook.ClientManager) generic.Di
var
_
generic
.
Dispatcher
=
&
mutatingDispatcher
{}
func
(
a
*
mutatingDispatcher
)
Dispatch
(
ctx
context
.
Context
,
attr
*
generic
.
VersionedAttributes
,
relevantHooks
[]
*
v1beta1
.
Webhook
)
error
{
func
(
a
*
mutatingDispatcher
)
Dispatch
(
ctx
context
.
Context
,
attr
*
generic
.
VersionedAttributes
,
o
admission
.
ObjectInterfaces
,
relevantHooks
[]
*
v1beta1
.
Webhook
)
error
{
for
_
,
hook
:=
range
relevantHooks
{
t
:=
time
.
Now
()
err
:=
a
.
callAttrMutatingHook
(
ctx
,
hook
,
attr
)
err
:=
a
.
callAttrMutatingHook
(
ctx
,
hook
,
attr
,
o
)
admissionmetrics
.
Metrics
.
ObserveWebhook
(
time
.
Since
(
t
),
err
!=
nil
,
attr
.
Attributes
,
"admit"
,
hook
.
Name
)
if
err
==
nil
{
continue
...
...
@@ -76,13 +78,13 @@ func (a *mutatingDispatcher) Dispatch(ctx context.Context, attr *generic.Version
// convert attr.VersionedObject to the internal version in the underlying admission.Attributes
if
attr
.
VersionedObject
!=
nil
{
return
a
.
plugin
.
scheme
.
Convert
(
attr
.
VersionedObject
,
attr
.
Attributes
.
GetObject
(),
nil
)
return
o
.
GetObjectConvertor
()
.
Convert
(
attr
.
VersionedObject
,
attr
.
Attributes
.
GetObject
(),
nil
)
}
return
nil
}
// note that callAttrMutatingHook updates attr
func
(
a
*
mutatingDispatcher
)
callAttrMutatingHook
(
ctx
context
.
Context
,
h
*
v1beta1
.
Webhook
,
attr
*
generic
.
VersionedAttributes
)
error
{
func
(
a
*
mutatingDispatcher
)
callAttrMutatingHook
(
ctx
context
.
Context
,
h
*
v1beta1
.
Webhook
,
attr
*
generic
.
VersionedAttributes
,
o
admission
.
ObjectInterfaces
)
error
{
if
attr
.
IsDryRun
()
{
if
h
.
SideEffects
==
nil
{
return
&
webhook
.
ErrCallingWebhook
{
WebhookName
:
h
.
Name
,
Reason
:
fmt
.
Errorf
(
"Webhook SideEffects is nil"
)}
...
...
@@ -135,7 +137,8 @@ func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta
return
apierrors
.
NewInternalError
(
fmt
.
Errorf
(
"admission webhook %q attempted to modify the object, which is not supported for this operation"
,
h
.
Name
))
}
objJS
,
err
:=
runtime
.
Encode
(
a
.
plugin
.
jsonSerializer
,
attr
.
VersionedObject
)
jsonSerializer
:=
json
.
NewSerializer
(
json
.
DefaultMetaFactory
,
o
.
GetObjectCreater
(),
o
.
GetObjectTyper
(),
false
)
objJS
,
err
:=
runtime
.
Encode
(
jsonSerializer
,
attr
.
VersionedObject
)
if
err
!=
nil
{
return
apierrors
.
NewInternalError
(
err
)
}
...
...
@@ -150,17 +153,17 @@ func (a *mutatingDispatcher) callAttrMutatingHook(ctx context.Context, h *v1beta
// They are represented as Unstructured.
newVersionedObject
=
&
unstructured
.
Unstructured
{}
}
else
{
newVersionedObject
,
err
=
a
.
plugin
.
scheme
.
New
(
attr
.
GetKind
())
newVersionedObject
,
err
=
o
.
GetObjectCreater
()
.
New
(
attr
.
GetKind
())
if
err
!=
nil
{
return
apierrors
.
NewInternalError
(
err
)
}
}
// TODO: if we have multiple mutating webhooks, we can remember the json
// instead of encoding and decoding for each one.
if
_
,
_
,
err
:=
a
.
plugin
.
jsonSerializer
.
Decode
(
patchedJS
,
nil
,
newVersionedObject
);
err
!=
nil
{
if
_
,
_
,
err
:=
jsonSerializer
.
Decode
(
patchedJS
,
nil
,
newVersionedObject
);
err
!=
nil
{
return
apierrors
.
NewInternalError
(
err
)
}
attr
.
VersionedObject
=
newVersionedObject
a
.
plugin
.
scheme
.
Default
(
attr
.
VersionedObject
)
o
.
GetObjectDefaulter
()
.
Default
(
attr
.
VersionedObject
)
return
nil
}
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher_test.go
View file @
cebb4ee2
...
...
@@ -49,6 +49,7 @@ func TestDispatch(t *testing.T) {
require
.
NoError
(
t
,
example
.
AddToScheme
(
scheme
))
require
.
NoError
(
t
,
examplev1
.
AddToScheme
(
scheme
))
require
.
NoError
(
t
,
example2v1
.
AddToScheme
(
scheme
))
objectInterfaces
:=
&
admission
.
SchemeBasedObjectInterfaces
{
scheme
}
tests
:=
[]
struct
{
name
string
...
...
@@ -118,16 +119,14 @@ func TestDispatch(t *testing.T) {
for
_
,
test
:=
range
tests
{
t
.
Run
(
test
.
name
,
func
(
t
*
testing
.
T
)
{
a
:=
&
mutatingDispatcher
{
plugin
:
&
Plugin
{
scheme
:
scheme
,
},
plugin
:
&
Plugin
{},
}
attr
:=
generic
.
VersionedAttributes
{
Attributes
:
admission
.
NewAttributesRecord
(
test
.
out
,
nil
,
schema
.
GroupVersionKind
{},
""
,
""
,
schema
.
GroupVersionResource
{},
""
,
admission
.
Operation
(
""
),
false
,
nil
),
VersionedOldObject
:
nil
,
VersionedObject
:
test
.
in
,
}
if
err
:=
a
.
Dispatch
(
context
.
TODO
(),
&
attr
,
nil
);
err
!=
nil
{
if
err
:=
a
.
Dispatch
(
context
.
TODO
(),
&
attr
,
objectInterfaces
,
nil
);
err
!=
nil
{
t
.
Fatalf
(
"%s: unexpected error: %v"
,
test
.
name
,
err
)
}
if
!
reflect
.
DeepEqual
(
attr
.
Attributes
.
GetObject
(),
test
.
expectedObj
)
{
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/plugin.go
View file @
cebb4ee2
...
...
@@ -17,11 +17,8 @@ limitations under the License.
package
mutating
import
(
"fmt"
"io"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission/configuration"
"k8s.io/apiserver/pkg/admission/plugin/webhook/generic"
...
...
@@ -47,9 +44,6 @@ func Register(plugins *admission.Plugins) {
// Plugin is an implementation of admission.Interface.
type
Plugin
struct
{
*
generic
.
Webhook
scheme
*
runtime
.
Scheme
jsonSerializer
*
json
.
Serializer
}
var
_
admission
.
MutationInterface
=
&
Plugin
{}
...
...
@@ -67,26 +61,11 @@ func NewMutatingWebhook(configFile io.Reader) (*Plugin, error) {
return
p
,
nil
}
// SetScheme sets a serializer(NegotiatedSerializer) which is derived from the scheme
func
(
a
*
Plugin
)
SetScheme
(
scheme
*
runtime
.
Scheme
)
{
a
.
Webhook
.
SetScheme
(
scheme
)
if
scheme
!=
nil
{
a
.
scheme
=
scheme
a
.
jsonSerializer
=
json
.
NewSerializer
(
json
.
DefaultMetaFactory
,
scheme
,
scheme
,
false
)
}
}
// ValidateInitialization implements the InitializationValidator interface.
func
(
a
*
Plugin
)
ValidateInitialization
()
error
{
if
err
:=
a
.
Webhook
.
ValidateInitialization
();
err
!=
nil
{
return
err
}
if
a
.
scheme
==
nil
{
return
fmt
.
Errorf
(
"scheme is not properly setup"
)
}
if
a
.
jsonSerializer
==
nil
{
return
fmt
.
Errorf
(
"jsonSerializer is not properly setup"
)
}
return
nil
}
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go
View file @
cebb4ee2
...
...
@@ -28,6 +28,7 @@ import (
"k8s.io/api/admissionregistration/v1beta1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apiserver/pkg/admission"
admissionmetrics
"k8s.io/apiserver/pkg/admission/metrics"
webhookerrors
"k8s.io/apiserver/pkg/admission/plugin/webhook/errors"
"k8s.io/apiserver/pkg/admission/plugin/webhook/generic"
...
...
@@ -46,7 +47,7 @@ func newValidatingDispatcher(cm *webhook.ClientManager) generic.Dispatcher {
var
_
generic
.
Dispatcher
=
&
validatingDispatcher
{}
func
(
d
*
validatingDispatcher
)
Dispatch
(
ctx
context
.
Context
,
attr
*
generic
.
VersionedAttributes
,
relevantHooks
[]
*
v1beta1
.
Webhook
)
error
{
func
(
d
*
validatingDispatcher
)
Dispatch
(
ctx
context
.
Context
,
attr
*
generic
.
VersionedAttributes
,
o
admission
.
ObjectInterfaces
,
relevantHooks
[]
*
v1beta1
.
Webhook
)
error
{
wg
:=
sync
.
WaitGroup
{}
errCh
:=
make
(
chan
error
,
len
(
relevantHooks
))
wg
.
Add
(
len
(
relevantHooks
))
...
...
staging/src/k8s.io/apiserver/pkg/server/options/admission.go
View file @
cebb4ee2
...
...
@@ -114,18 +114,12 @@ func (a *AdmissionOptions) ApplyTo(
c
*
server
.
Config
,
informers
informers
.
SharedInformerFactory
,
kubeAPIServerClientConfig
*
rest
.
Config
,
scheme
*
runtime
.
Scheme
,
pluginInitializers
...
admission
.
PluginInitializer
,
)
error
{
if
a
==
nil
{
return
nil
}
// Admission need scheme to construct admission initializer.
if
scheme
==
nil
{
return
fmt
.
Errorf
(
"admission depends on a scheme, it cannot be nil"
)
}
// Admission depends on CoreAPI to set SharedInformerFactory and ClientConfig.
if
informers
==
nil
{
return
fmt
.
Errorf
(
"admission depends on a Kubernetes core API shared informer, it cannot be nil"
)
...
...
@@ -142,7 +136,7 @@ func (a *AdmissionOptions) ApplyTo(
if
err
!=
nil
{
return
err
}
genericInitializer
:=
initializer
.
New
(
clientset
,
informers
,
c
.
Authorization
.
Authorizer
,
scheme
)
genericInitializer
:=
initializer
.
New
(
clientset
,
informers
,
c
.
Authorization
.
Authorizer
)
initializersChain
:=
admission
.
PluginInitializers
{}
pluginInitializers
=
append
(
pluginInitializers
,
genericInitializer
)
initializersChain
=
append
(
initializersChain
,
pluginInitializers
...
)
...
...
staging/src/k8s.io/apiserver/pkg/server/options/api_enablement.go
View file @
cebb4ee2
...
...
@@ -84,6 +84,7 @@ func (s *APIEnablementOptions) Validate(registries ...GroupRegisty) []error {
// ApplyTo override MergedResourceConfig with defaults and registry
func
(
s
*
APIEnablementOptions
)
ApplyTo
(
c
*
server
.
Config
,
defaultResourceConfig
*
serverstore
.
ResourceConfig
,
registry
resourceconfig
.
GroupVersionRegistry
)
error
{
if
s
==
nil
{
return
nil
}
...
...
staging/src/k8s.io/apiserver/pkg/server/options/recommended.go
View file @
cebb4ee2
...
...
@@ -82,9 +82,8 @@ func (o *RecommendedOptions) AddFlags(fs *pflag.FlagSet) {
}
// ApplyTo adds RecommendedOptions to the server configuration.
// scheme is the scheme of the apiserver types that are sent to the admission chain.
// pluginInitializers can be empty, it is only need for additional initializers.
func
(
o
*
RecommendedOptions
)
ApplyTo
(
config
*
server
.
RecommendedConfig
,
scheme
*
runtime
.
Scheme
)
error
{
func
(
o
*
RecommendedOptions
)
ApplyTo
(
config
*
server
.
RecommendedConfig
)
error
{
if
err
:=
o
.
Etcd
.
ApplyTo
(
&
config
.
Config
);
err
!=
nil
{
return
err
}
...
...
@@ -108,7 +107,7 @@ func (o *RecommendedOptions) ApplyTo(config *server.RecommendedConfig, scheme *r
}
if
initializers
,
err
:=
o
.
ExtraAdmissionInitializers
(
config
);
err
!=
nil
{
return
err
}
else
if
err
:=
o
.
Admission
.
ApplyTo
(
&
config
.
Config
,
config
.
SharedInformerFactory
,
config
.
ClientConfig
,
scheme
,
initializers
...
);
err
!=
nil
{
}
else
if
err
:=
o
.
Admission
.
ApplyTo
(
&
config
.
Config
,
config
.
SharedInformerFactory
,
config
.
ClientConfig
,
initializers
...
);
err
!=
nil
{
return
err
}
...
...
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
View file @
cebb4ee2
...
...
@@ -122,7 +122,7 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
serverConfig
:=
genericapiserver
.
NewRecommendedConfig
(
aggregatorscheme
.
Codecs
)
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
,
aggregatorscheme
.
Scheme
);
err
!=
nil
{
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
);
err
!=
nil
{
return
err
}
if
err
:=
o
.
APIEnablement
.
ApplyTo
(
&
serverConfig
.
Config
,
apiserver
.
DefaultAPIResourceConfigSource
(),
aggregatorscheme
.
Scheme
);
err
!=
nil
{
...
...
staging/src/k8s.io/sample-apiserver/pkg/admission/plugin/banflunder/admission_test.go
View file @
cebb4ee2
...
...
@@ -138,6 +138,7 @@ func TestBanflunderAdmissionPlugin(t *testing.T) {
admission
.
Create
,
false
,
nil
),
nil
,
)
// validate
...
...
staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go
View file @
cebb4ee2
...
...
@@ -120,7 +120,7 @@ func (o *WardleServerOptions) Config() (*apiserver.Config, error) {
}
serverConfig
:=
genericapiserver
.
NewRecommendedConfig
(
apiserver
.
Codecs
)
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
,
apiserver
.
Scheme
);
err
!=
nil
{
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
);
err
!=
nil
{
return
nil
,
err
}
...
...
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