mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
namespace exists externalization
This commit is contained in:
parent
be7194e166
commit
a097e23efc
@ -104,12 +104,12 @@ func NewProvision() *Provision {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetInternalKubeClientSet implements the WantsInternalKubeClientSet interface.
|
// SetExternalKubeClientSet implements the WantsExternalKubeClientSet interface.
|
||||||
func (p *Provision) SetExternalKubeClientSet(client kubernetes.Interface) {
|
func (p *Provision) SetExternalKubeClientSet(client kubernetes.Interface) {
|
||||||
p.client = client
|
p.client = client
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetInternalKubeInformerFactory implements the WantsInternalKubeInformerFactory interface.
|
// SetExternalKubeInformerFactory implements the WantsExternalKubeInformerFactory interface.
|
||||||
func (p *Provision) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
func (p *Provision) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
||||||
namespaceInformer := f.Core().V1().Namespaces()
|
namespaceInformer := f.Core().V1().Namespaces()
|
||||||
p.namespaceLister = namespaceInformer.Lister()
|
p.namespaceLister = namespaceInformer.Lister()
|
||||||
|
@ -12,13 +12,13 @@ go_library(
|
|||||||
importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/exists",
|
importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/exists",
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset: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,14 +28,15 @@ 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/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",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -23,11 +23,11 @@ import (
|
|||||||
"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"
|
||||||
|
informers "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 +45,13 @@ func Register(plugins *admission.Plugins) {
|
|||||||
// It is useful in deployments that want to enforce pre-declaration of a Namespace resource.
|
// It is useful in deployments that want to enforce pre-declaration of a Namespace resource.
|
||||||
type Exists struct {
|
type Exists struct {
|
||||||
*admission.Handler
|
*admission.Handler
|
||||||
client internalclientset.Interface
|
client kubernetes.Interface
|
||||||
namespaceLister corelisters.NamespaceLister
|
namespaceLister corev1listers.NamespaceLister
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ admission.ValidationInterface = &Exists{}
|
var _ admission.ValidationInterface = &Exists{}
|
||||||
var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&Exists{})
|
var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&Exists{})
|
||||||
var _ = kubeapiserveradmission.WantsInternalKubeClientSet(&Exists{})
|
var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&Exists{})
|
||||||
|
|
||||||
// Validate makes an admission decision based on the request attributes
|
// Validate makes an admission decision based on the request attributes
|
||||||
func (e *Exists) Validate(a admission.Attributes) error {
|
func (e *Exists) Validate(a admission.Attributes) error {
|
||||||
@ -93,14 +93,14 @@ func NewExists() *Exists {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetInternalKubeClientSet implements the WantsInternalKubeClientSet interface.
|
// SetExternalKubeClientSet implements the WantsExternalKubeClientSet interface.
|
||||||
func (e *Exists) SetInternalKubeClientSet(client internalclientset.Interface) {
|
func (e *Exists) SetExternalKubeClientSet(client kubernetes.Interface) {
|
||||||
e.client = client
|
e.client = client
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetInternalKubeInformerFactory implements the WantsInternalKubeInformerFactory interface.
|
// SetExternalKubeInformerFactory implements the WantsExternalKubeInformerFactory interface.
|
||||||
func (e *Exists) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
func (e *Exists) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
||||||
namespaceInformer := f.Core().InternalVersion().Namespaces()
|
namespaceInformer := f.Core().V1().Namespaces()
|
||||||
e.namespaceLister = namespaceInformer.Lister()
|
e.namespaceLister = namespaceInformer.Lister()
|
||||||
e.SetReadyFunc(namespaceInformer.Informer().HasSynced)
|
e.SetReadyFunc(namespaceInformer.Informer().HasSynced)
|
||||||
}
|
}
|
||||||
|
@ -21,23 +21,24 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
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"
|
||||||
|
informers "k8s.io/client-go/informers"
|
||||||
|
"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.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 := 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
|
||||||
@ -47,13 +48,13 @@ func newHandlerForTest(c clientset.Interface) (admission.ValidationInterface, in
|
|||||||
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