mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Update admission initializers.
Moved RestMapper and add DynamicClient
This commit is contained in:
parent
a949227be1
commit
c8a089de46
@ -30,11 +30,6 @@ type WantsCloudConfig interface {
|
|||||||
SetCloudConfig([]byte)
|
SetCloudConfig([]byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WantsRESTMapper defines a function which sets RESTMapper for admission plugins that need it.
|
|
||||||
type WantsRESTMapper interface {
|
|
||||||
SetRESTMapper(meta.RESTMapper)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
|
// PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
|
||||||
type PluginInitializer struct {
|
type PluginInitializer struct {
|
||||||
cloudConfig []byte
|
cloudConfig []byte
|
||||||
@ -66,7 +61,7 @@ func (i *PluginInitializer) Initialize(plugin admission.Interface) {
|
|||||||
wants.SetCloudConfig(i.cloudConfig)
|
wants.SetCloudConfig(i.cloudConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
if wants, ok := plugin.(WantsRESTMapper); ok {
|
if wants, ok := plugin.(initializer.WantsRESTMapper); ok {
|
||||||
wants.SetRESTMapper(i.restMapper)
|
wants.SetRESTMapper(i.restMapper)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ func newGCPermissionsEnforcement() (*gcPermissionsEnforcement, error) {
|
|||||||
whiteList: whiteList,
|
whiteList: whiteList,
|
||||||
}
|
}
|
||||||
|
|
||||||
genericPluginInitializer := initializer.New(nil, nil, fakeAuthorizer{}, nil, nil)
|
genericPluginInitializer := initializer.New(nil, nil, nil, fakeAuthorizer{}, nil, nil)
|
||||||
fakeDiscoveryClient := &fakediscovery.FakeDiscovery{Fake: &coretesting.Fake{}}
|
fakeDiscoveryClient := &fakediscovery.FakeDiscovery{Fake: &coretesting.Fake{}}
|
||||||
fakeDiscoveryClient.Resources = []*metav1.APIResourceList{
|
fakeDiscoveryClient.Resources = []*metav1.APIResourceList{
|
||||||
{
|
{
|
||||||
|
@ -792,7 +792,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, f, err
|
return nil, f, err
|
||||||
}
|
}
|
||||||
pluginInitializer := genericadmissioninitializer.New(c, f, nil, nil, nil)
|
pluginInitializer := genericadmissioninitializer.New(c, nil, 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
|
||||||
|
@ -41,7 +41,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 := genericadmissioninitializer.New(c, f, nil, nil, nil)
|
pluginInitializer := genericadmissioninitializer.New(c, nil, 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
|
||||||
|
@ -39,7 +39,7 @@ import (
|
|||||||
func newHandlerForTest(c kubernetes.Interface) (admission.ValidationInterface, informers.SharedInformerFactory, error) {
|
func newHandlerForTest(c kubernetes.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 := genericadmissioninitializer.New(c, f, nil, nil, nil)
|
pluginInitializer := genericadmissioninitializer.New(c, nil, 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
|
||||||
|
@ -198,7 +198,7 @@ func TestHandles(t *testing.T) {
|
|||||||
func newHandlerForTest(c kubernetes.Interface) (*Plugin, informers.SharedInformerFactory, error) {
|
func newHandlerForTest(c kubernetes.Interface) (*Plugin, informers.SharedInformerFactory, error) {
|
||||||
f := informers.NewSharedInformerFactory(c, 5*time.Minute)
|
f := informers.NewSharedInformerFactory(c, 5*time.Minute)
|
||||||
handler := NewPodNodeSelector(nil)
|
handler := NewPodNodeSelector(nil)
|
||||||
pluginInitializer := genericadmissioninitializer.New(c, f, nil, nil, nil)
|
pluginInitializer := genericadmissioninitializer.New(c, nil, 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
|
||||||
|
@ -355,7 +355,7 @@ func newHandlerForTest(c kubernetes.Interface) (*Plugin, informers.SharedInforme
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
handler := NewPodTolerationsPlugin(pluginConfig)
|
handler := NewPodTolerationsPlugin(pluginConfig)
|
||||||
pluginInitializer := genericadmissioninitializer.New(c, f, nil, nil, nil)
|
pluginInitializer := genericadmissioninitializer.New(c, nil, 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
|
||||||
|
@ -107,7 +107,7 @@ func createHandlerWithConfig(kubeClient kubernetes.Interface, informerFactory in
|
|||||||
}
|
}
|
||||||
|
|
||||||
initializers := admission.PluginInitializers{
|
initializers := admission.PluginInitializers{
|
||||||
genericadmissioninitializer.New(kubeClient, informerFactory, nil, nil, stopCh),
|
genericadmissioninitializer.New(kubeClient, nil, informerFactory, nil, nil, stopCh),
|
||||||
kubeapiserveradmission.NewPluginInitializer(nil, nil, quotaConfiguration),
|
kubeapiserveradmission.NewPluginInitializer(nil, nil, quotaConfiguration),
|
||||||
}
|
}
|
||||||
initializers.Initialize(handler)
|
initializers.Initialize(handler)
|
||||||
|
@ -19,6 +19,7 @@ package initializer
|
|||||||
import (
|
import (
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
|
"k8s.io/client-go/dynamic"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
@ -26,6 +27,7 @@ import (
|
|||||||
|
|
||||||
type pluginInitializer struct {
|
type pluginInitializer struct {
|
||||||
externalClient kubernetes.Interface
|
externalClient kubernetes.Interface
|
||||||
|
dynamicClient dynamic.Interface
|
||||||
externalInformers informers.SharedInformerFactory
|
externalInformers informers.SharedInformerFactory
|
||||||
authorizer authorizer.Authorizer
|
authorizer authorizer.Authorizer
|
||||||
featureGates featuregate.FeatureGate
|
featureGates featuregate.FeatureGate
|
||||||
@ -37,6 +39,7 @@ type pluginInitializer struct {
|
|||||||
// during compilation when they update a level.
|
// during compilation when they update a level.
|
||||||
func New(
|
func New(
|
||||||
extClientset kubernetes.Interface,
|
extClientset kubernetes.Interface,
|
||||||
|
dynamicClient dynamic.Interface,
|
||||||
extInformers informers.SharedInformerFactory,
|
extInformers informers.SharedInformerFactory,
|
||||||
authz authorizer.Authorizer,
|
authz authorizer.Authorizer,
|
||||||
featureGates featuregate.FeatureGate,
|
featureGates featuregate.FeatureGate,
|
||||||
@ -44,6 +47,7 @@ func New(
|
|||||||
) pluginInitializer {
|
) pluginInitializer {
|
||||||
return pluginInitializer{
|
return pluginInitializer{
|
||||||
externalClient: extClientset,
|
externalClient: extClientset,
|
||||||
|
dynamicClient: dynamicClient,
|
||||||
externalInformers: extInformers,
|
externalInformers: extInformers,
|
||||||
authorizer: authz,
|
authorizer: authz,
|
||||||
featureGates: featureGates,
|
featureGates: featureGates,
|
||||||
@ -68,6 +72,10 @@ func (i pluginInitializer) Initialize(plugin admission.Interface) {
|
|||||||
wants.SetExternalKubeClientSet(i.externalClient)
|
wants.SetExternalKubeClientSet(i.externalClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if wants, ok := plugin.(WantsDynamicClient); ok {
|
||||||
|
wants.SetDynamicClient(i.dynamicClient)
|
||||||
|
}
|
||||||
|
|
||||||
if wants, ok := plugin.(WantsExternalKubeInformerFactory); ok {
|
if wants, ok := plugin.(WantsExternalKubeInformerFactory); ok {
|
||||||
wants.SetExternalKubeInformerFactory(i.externalInformers)
|
wants.SetExternalKubeInformerFactory(i.externalInformers)
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ import (
|
|||||||
// TestWantsAuthorizer ensures that the authorizer is injected
|
// TestWantsAuthorizer ensures that the authorizer is injected
|
||||||
// when the WantsAuthorizer interface is implemented by a plugin.
|
// when the WantsAuthorizer interface is implemented by a plugin.
|
||||||
func TestWantsAuthorizer(t *testing.T) {
|
func TestWantsAuthorizer(t *testing.T) {
|
||||||
target := initializer.New(nil, nil, &TestAuthorizer{}, nil, nil)
|
target := initializer.New(nil, nil, nil, &TestAuthorizer{}, nil, nil)
|
||||||
wantAuthorizerAdmission := &WantAuthorizerAdmission{}
|
wantAuthorizerAdmission := &WantAuthorizerAdmission{}
|
||||||
target.Initialize(wantAuthorizerAdmission)
|
target.Initialize(wantAuthorizerAdmission)
|
||||||
if wantAuthorizerAdmission.auth == nil {
|
if wantAuthorizerAdmission.auth == nil {
|
||||||
@ -44,7 +44,7 @@ func TestWantsAuthorizer(t *testing.T) {
|
|||||||
// when the WantsExternalKubeClientSet interface is implemented by a plugin.
|
// when the WantsExternalKubeClientSet interface is implemented by a plugin.
|
||||||
func TestWantsExternalKubeClientSet(t *testing.T) {
|
func TestWantsExternalKubeClientSet(t *testing.T) {
|
||||||
cs := &fake.Clientset{}
|
cs := &fake.Clientset{}
|
||||||
target := initializer.New(cs, nil, &TestAuthorizer{}, nil, nil)
|
target := initializer.New(cs, nil, nil, &TestAuthorizer{}, nil, nil)
|
||||||
wantExternalKubeClientSet := &WantExternalKubeClientSet{}
|
wantExternalKubeClientSet := &WantExternalKubeClientSet{}
|
||||||
target.Initialize(wantExternalKubeClientSet)
|
target.Initialize(wantExternalKubeClientSet)
|
||||||
if wantExternalKubeClientSet.cs != cs {
|
if wantExternalKubeClientSet.cs != cs {
|
||||||
@ -57,7 +57,7 @@ func TestWantsExternalKubeClientSet(t *testing.T) {
|
|||||||
func TestWantsExternalKubeInformerFactory(t *testing.T) {
|
func TestWantsExternalKubeInformerFactory(t *testing.T) {
|
||||||
cs := &fake.Clientset{}
|
cs := &fake.Clientset{}
|
||||||
sf := informers.NewSharedInformerFactory(cs, time.Duration(1)*time.Second)
|
sf := informers.NewSharedInformerFactory(cs, time.Duration(1)*time.Second)
|
||||||
target := initializer.New(cs, sf, &TestAuthorizer{}, nil, nil)
|
target := initializer.New(cs, nil, sf, &TestAuthorizer{}, nil, nil)
|
||||||
wantExternalKubeInformerFactory := &WantExternalKubeInformerFactory{}
|
wantExternalKubeInformerFactory := &WantExternalKubeInformerFactory{}
|
||||||
target.Initialize(wantExternalKubeInformerFactory)
|
target.Initialize(wantExternalKubeInformerFactory)
|
||||||
if wantExternalKubeInformerFactory.sf != sf {
|
if wantExternalKubeInformerFactory.sf != sf {
|
||||||
@ -69,7 +69,7 @@ func TestWantsExternalKubeInformerFactory(t *testing.T) {
|
|||||||
// when the WantsShutdownSignal interface is implemented by a plugin.
|
// when the WantsShutdownSignal interface is implemented by a plugin.
|
||||||
func TestWantsShutdownNotification(t *testing.T) {
|
func TestWantsShutdownNotification(t *testing.T) {
|
||||||
stopCh := make(chan struct{})
|
stopCh := make(chan struct{})
|
||||||
target := initializer.New(nil, nil, &TestAuthorizer{}, nil, stopCh)
|
target := initializer.New(nil, nil, nil, &TestAuthorizer{}, nil, stopCh)
|
||||||
wantDrainedNotification := &WantDrainedNotification{}
|
wantDrainedNotification := &WantDrainedNotification{}
|
||||||
target.Initialize(wantDrainedNotification)
|
target.Initialize(wantDrainedNotification)
|
||||||
if wantDrainedNotification.stopCh == nil {
|
if wantDrainedNotification.stopCh == nil {
|
||||||
|
@ -17,9 +17,11 @@ limitations under the License.
|
|||||||
package initializer
|
package initializer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
quota "k8s.io/apiserver/pkg/quota/v1"
|
quota "k8s.io/apiserver/pkg/quota/v1"
|
||||||
|
"k8s.io/client-go/dynamic"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
@ -68,3 +70,14 @@ type WantsFeatures interface {
|
|||||||
InspectFeatureGates(featuregate.FeatureGate)
|
InspectFeatureGates(featuregate.FeatureGate)
|
||||||
admission.InitializationValidator
|
admission.InitializationValidator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WantsDynamicClient interface {
|
||||||
|
SetDynamicClient(dynamic.Interface)
|
||||||
|
admission.InitializationValidator
|
||||||
|
}
|
||||||
|
|
||||||
|
// WantsRESTMapper defines a function which sets RESTMapper for admission plugins that need it.
|
||||||
|
type WantsRESTMapper interface {
|
||||||
|
SetRESTMapper(meta.RESTMapper)
|
||||||
|
admission.InitializationValidator
|
||||||
|
}
|
||||||
|
@ -53,7 +53,7 @@ func newHandlerForTestWithClock(c clientset.Interface, cacheClock clock.Clock) (
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, f, err
|
return nil, f, err
|
||||||
}
|
}
|
||||||
pluginInitializer := kubeadmission.New(c, f, nil, nil, nil)
|
pluginInitializer := kubeadmission.New(c, nil, 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
|
||||||
|
@ -35,6 +35,7 @@ import (
|
|||||||
apiserverapiv1 "k8s.io/apiserver/pkg/apis/apiserver/v1"
|
apiserverapiv1 "k8s.io/apiserver/pkg/apis/apiserver/v1"
|
||||||
apiserverapiv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1"
|
apiserverapiv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1"
|
||||||
"k8s.io/apiserver/pkg/server"
|
"k8s.io/apiserver/pkg/server"
|
||||||
|
"k8s.io/client-go/dynamic"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
@ -145,7 +146,11 @@ func (a *AdmissionOptions) ApplyTo(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
genericInitializer := initializer.New(clientset, informers, c.Authorization.Authorizer, features, c.DrainedNotify())
|
dynamicClient, err := dynamic.NewForConfig(kubeAPIServerClientConfig)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
genericInitializer := initializer.New(clientset, dynamicClient, informers, c.Authorization.Authorizer, features, c.DrainedNotify())
|
||||||
initializersChain := admission.PluginInitializers{genericInitializer}
|
initializersChain := admission.PluginInitializers{genericInitializer}
|
||||||
initializersChain = append(initializersChain, pluginInitializers...)
|
initializersChain = append(initializersChain, pluginInitializers...)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user