mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
namespace autoprovision externalization
This commit is contained in:
parent
b442c25325
commit
be7194e166
@ -12,13 +12,14 @@ go_library(
|
|||||||
importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/autoprovision",
|
importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/autoprovision",
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
|
|
||||||
"//pkg/client/listers/core/internalversion:go_default_library",
|
|
||||||
"//pkg/kubeapiserver/admission:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -28,15 +29,16 @@ go_test(
|
|||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
|
|
||||||
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
|
|
||||||
"//pkg/kubeapiserver/admission:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/testing:go_default_library",
|
"//staging/src/k8s.io/client-go/testing:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -20,14 +20,15 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
|
genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
|
corev1listers "k8s.io/client-go/listers/core/v1"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
||||||
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
|
|
||||||
corelisters "k8s.io/kubernetes/pkg/client/listers/core/internalversion"
|
|
||||||
kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// PluginName indicates name of admission plugin.
|
// PluginName indicates name of admission plugin.
|
||||||
@ -45,13 +46,13 @@ func Register(plugins *admission.Plugins) {
|
|||||||
// It is useful in deployments that do not want to restrict creation of a namespace prior to its usage.
|
// It is useful in deployments that do not want to restrict creation of a namespace prior to its usage.
|
||||||
type Provision struct {
|
type Provision struct {
|
||||||
*admission.Handler
|
*admission.Handler
|
||||||
client internalclientset.Interface
|
client kubernetes.Interface
|
||||||
namespaceLister corelisters.NamespaceLister
|
namespaceLister corev1listers.NamespaceLister
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ admission.MutationInterface = &Provision{}
|
var _ admission.MutationInterface = &Provision{}
|
||||||
var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&Provision{})
|
var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&Provision{})
|
||||||
var _ = kubeapiserveradmission.WantsInternalKubeClientSet(&Provision{})
|
var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&Provision{})
|
||||||
|
|
||||||
// Admit makes an admission decision based on the request attributes
|
// Admit makes an admission decision based on the request attributes
|
||||||
func (p *Provision) Admit(a admission.Attributes) error {
|
func (p *Provision) Admit(a admission.Attributes) error {
|
||||||
@ -80,12 +81,12 @@ func (p *Provision) Admit(a admission.Attributes) error {
|
|||||||
return admission.NewForbidden(a, err)
|
return admission.NewForbidden(a, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace := &api.Namespace{
|
namespace := &corev1.Namespace{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: a.GetNamespace(),
|
Name: a.GetNamespace(),
|
||||||
Namespace: "",
|
Namespace: "",
|
||||||
},
|
},
|
||||||
Status: api.NamespaceStatus{},
|
Status: corev1.NamespaceStatus{},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = p.client.Core().Namespaces().Create(namespace)
|
_, err = p.client.Core().Namespaces().Create(namespace)
|
||||||
@ -104,13 +105,13 @@ func NewProvision() *Provision {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetInternalKubeClientSet implements the WantsInternalKubeClientSet interface.
|
// SetInternalKubeClientSet implements the WantsInternalKubeClientSet interface.
|
||||||
func (p *Provision) SetInternalKubeClientSet(client internalclientset.Interface) {
|
func (p *Provision) SetExternalKubeClientSet(client kubernetes.Interface) {
|
||||||
p.client = client
|
p.client = client
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetInternalKubeInformerFactory implements the WantsInternalKubeInformerFactory interface.
|
// SetInternalKubeInformerFactory implements the WantsInternalKubeInformerFactory interface.
|
||||||
func (p *Provision) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
func (p *Provision) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
||||||
namespaceInformer := f.Core().InternalVersion().Namespaces()
|
namespaceInformer := f.Core().V1().Namespaces()
|
||||||
p.namespaceLister = namespaceInformer.Lister()
|
p.namespaceLister = namespaceInformer.Lister()
|
||||||
p.SetReadyFunc(namespaceInformer.Informer().HasSynced)
|
p.SetReadyFunc(namespaceInformer.Informer().HasSynced)
|
||||||
}
|
}
|
||||||
|
@ -21,24 +21,25 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
|
genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
core "k8s.io/client-go/testing"
|
core "k8s.io/client-go/testing"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
|
||||||
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
|
|
||||||
kubeadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// newHandlerForTest returns the admission controller configured for testing.
|
// newHandlerForTest returns the admission controller configured for testing.
|
||||||
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)
|
pluginInitializer := genericadmissioninitializer.New(c, f, nil, nil)
|
||||||
pluginInitializer.Initialize(handler)
|
pluginInitializer.Initialize(handler)
|
||||||
err := admission.ValidateInitialization(handler)
|
err := admission.ValidateInitialization(handler)
|
||||||
return handler, f, err
|
return handler, f, err
|
||||||
@ -48,13 +49,13 @@ func newHandlerForTest(c clientset.Interface) (admission.MutationInterface, info
|
|||||||
func newMockClientForTest(namespaces []string) *fake.Clientset {
|
func newMockClientForTest(namespaces []string) *fake.Clientset {
|
||||||
mockClient := &fake.Clientset{}
|
mockClient := &fake.Clientset{}
|
||||||
mockClient.AddReactor("list", "namespaces", func(action core.Action) (bool, runtime.Object, error) {
|
mockClient.AddReactor("list", "namespaces", func(action core.Action) (bool, runtime.Object, error) {
|
||||||
namespaceList := &api.NamespaceList{
|
namespaceList := &corev1.NamespaceList{
|
||||||
ListMeta: metav1.ListMeta{
|
ListMeta: metav1.ListMeta{
|
||||||
ResourceVersion: fmt.Sprintf("%d", len(namespaces)),
|
ResourceVersion: fmt.Sprintf("%d", len(namespaces)),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for i, ns := range namespaces {
|
for i, ns := range namespaces {
|
||||||
namespaceList.Items = append(namespaceList.Items, api.Namespace{
|
namespaceList.Items = append(namespaceList.Items, corev1.Namespace{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: ns,
|
Name: ns,
|
||||||
ResourceVersion: fmt.Sprintf("%d", i),
|
ResourceVersion: fmt.Sprintf("%d", i),
|
||||||
|
Loading…
Reference in New Issue
Block a user