externalize storageclass

This commit is contained in:
yue9944882 2018-08-22 21:04:28 +08:00
parent 444373b404
commit 8dd3919d12
3 changed files with 34 additions and 34 deletions

View File

@ -13,14 +13,14 @@ go_library(
deps = [ deps = [
"//pkg/apis/core:go_default_library", "//pkg/apis/core:go_default_library",
"//pkg/apis/core/helper:go_default_library", "//pkg/apis/core/helper:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/apis/storage/util:go_default_library", "//pkg/apis/storage/util:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library",
"//pkg/client/listers/storage/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/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels: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/listers/storage/v1:go_default_library",
"//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/golang/glog:go_default_library",
], ],
) )
@ -31,12 +31,12 @@ 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/apis/storage:go_default_library",
"//pkg/apis/storage/util:go_default_library", "//pkg/apis/storage/util:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/controller:go_default_library", "//pkg/controller:go_default_library",
"//staging/src/k8s.io/api/storage/v1: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/client-go/informers:go_default_library",
"//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/golang/glog:go_default_library",
], ],
) )

View File

@ -22,16 +22,16 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
storagev1 "k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
admission "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/client-go/informers"
storagev1listers "k8s.io/client-go/listers/storage/v1"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/core/helper" "k8s.io/kubernetes/pkg/apis/core/helper"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil "k8s.io/kubernetes/pkg/apis/storage/util" storageutil "k8s.io/kubernetes/pkg/apis/storage/util"
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
storagelisters "k8s.io/kubernetes/pkg/client/listers/storage/internalversion"
kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
) )
const ( const (
@ -51,12 +51,12 @@ func Register(plugins *admission.Plugins) {
type claimDefaulterPlugin struct { type claimDefaulterPlugin struct {
*admission.Handler *admission.Handler
lister storagelisters.StorageClassLister lister storagev1listers.StorageClassLister
} }
var _ admission.Interface = &claimDefaulterPlugin{} var _ admission.Interface = &claimDefaulterPlugin{}
var _ admission.MutationInterface = &claimDefaulterPlugin{} var _ admission.MutationInterface = &claimDefaulterPlugin{}
var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&claimDefaulterPlugin{}) var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&claimDefaulterPlugin{})
// newPlugin creates a new admission plugin. // newPlugin creates a new admission plugin.
func newPlugin() *claimDefaulterPlugin { func newPlugin() *claimDefaulterPlugin {
@ -65,8 +65,8 @@ func newPlugin() *claimDefaulterPlugin {
} }
} }
func (a *claimDefaulterPlugin) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) { func (a *claimDefaulterPlugin) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
informer := f.Storage().InternalVersion().StorageClasses() informer := f.Storage().V1().StorageClasses()
a.lister = informer.Lister() a.lister = informer.Lister()
a.SetReadyFunc(informer.Informer().HasSynced) a.SetReadyFunc(informer.Informer().HasSynced)
} }
@ -122,13 +122,13 @@ func (a *claimDefaulterPlugin) Admit(attr admission.Attributes) error {
} }
// getDefaultClass returns the default StorageClass from the store, or nil. // getDefaultClass returns the default StorageClass from the store, or nil.
func getDefaultClass(lister storagelisters.StorageClassLister) (*storage.StorageClass, error) { func getDefaultClass(lister storagev1listers.StorageClassLister) (*storagev1.StorageClass, error) {
list, err := lister.List(labels.Everything()) list, err := lister.List(labels.Everything())
if err != nil { if err != nil {
return nil, err return nil, err
} }
defaultClasses := []*storage.StorageClass{} defaultClasses := []*storagev1.StorageClass{}
for _, class := range list { for _, class := range list {
if storageutil.IsDefaultAnnotation(class.ObjectMeta) { if storageutil.IsDefaultAnnotation(class.ObjectMeta) {
defaultClasses = append(defaultClasses, class) defaultClasses = append(defaultClasses, class)

View File

@ -21,12 +21,12 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
storagev1 "k8s.io/api/storage/v1"
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"
"k8s.io/client-go/informers"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil "k8s.io/kubernetes/pkg/apis/storage/util" storageutil "k8s.io/kubernetes/pkg/apis/storage/util"
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
"k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller"
) )
@ -34,7 +34,7 @@ func TestAdmission(t *testing.T) {
empty := "" empty := ""
foo := "foo" foo := "foo"
defaultClass1 := &storage.StorageClass{ defaultClass1 := &storagev1.StorageClass{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "StorageClass", Kind: "StorageClass",
}, },
@ -46,7 +46,7 @@ func TestAdmission(t *testing.T) {
}, },
Provisioner: "default1", Provisioner: "default1",
} }
defaultClass2 := &storage.StorageClass{ defaultClass2 := &storagev1.StorageClass{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "StorageClass", Kind: "StorageClass",
}, },
@ -59,7 +59,7 @@ func TestAdmission(t *testing.T) {
Provisioner: "default2", Provisioner: "default2",
} }
// Class that has explicit default = false // Class that has explicit default = false
classWithFalseDefault := &storage.StorageClass{ classWithFalseDefault := &storagev1.StorageClass{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "StorageClass", Kind: "StorageClass",
}, },
@ -72,7 +72,7 @@ func TestAdmission(t *testing.T) {
Provisioner: "nondefault1", Provisioner: "nondefault1",
} }
// Class with missing default annotation (=non-default) // Class with missing default annotation (=non-default)
classWithNoDefault := &storage.StorageClass{ classWithNoDefault := &storagev1.StorageClass{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "StorageClass", Kind: "StorageClass",
}, },
@ -82,7 +82,7 @@ func TestAdmission(t *testing.T) {
Provisioner: "nondefault1", Provisioner: "nondefault1",
} }
// Class with empty default annotation (=non-default) // Class with empty default annotation (=non-default)
classWithEmptyDefault := &storage.StorageClass{ classWithEmptyDefault := &storagev1.StorageClass{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "StorageClass", Kind: "StorageClass",
}, },
@ -131,56 +131,56 @@ func TestAdmission(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
classes []*storage.StorageClass classes []*storagev1.StorageClass
claim *api.PersistentVolumeClaim claim *api.PersistentVolumeClaim
expectError bool expectError bool
expectedClassName string expectedClassName string
}{ }{
{ {
"no default, no modification of PVCs", "no default, no modification of PVCs",
[]*storage.StorageClass{classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithNoClass, claimWithNoClass,
false, false,
"", "",
}, },
{ {
"one default, modify PVC with class=nil", "one default, modify PVC with class=nil",
[]*storage.StorageClass{defaultClass1, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{defaultClass1, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithNoClass, claimWithNoClass,
false, false,
"default1", "default1",
}, },
{ {
"one default, no modification of PVC with class=''", "one default, no modification of PVC with class=''",
[]*storage.StorageClass{defaultClass1, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{defaultClass1, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithEmptyClass, claimWithEmptyClass,
false, false,
"", "",
}, },
{ {
"one default, no modification of PVC with class='foo'", "one default, no modification of PVC with class='foo'",
[]*storage.StorageClass{defaultClass1, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{defaultClass1, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithClass, claimWithClass,
false, false,
"foo", "foo",
}, },
{ {
"two defaults, error with PVC with class=nil", "two defaults, error with PVC with class=nil",
[]*storage.StorageClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithNoClass, claimWithNoClass,
true, true,
"", "",
}, },
{ {
"two defaults, no modification of PVC with class=''", "two defaults, no modification of PVC with class=''",
[]*storage.StorageClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithEmptyClass, claimWithEmptyClass,
false, false,
"", "",
}, },
{ {
"two defaults, no modification of PVC with class='foo'", "two defaults, no modification of PVC with class='foo'",
[]*storage.StorageClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault}, []*storagev1.StorageClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
claimWithClass, claimWithClass,
false, false,
"foo", "foo",
@ -195,9 +195,9 @@ func TestAdmission(t *testing.T) {
ctrl := newPlugin() ctrl := newPlugin()
informerFactory := informers.NewSharedInformerFactory(nil, controller.NoResyncPeriodFunc()) informerFactory := informers.NewSharedInformerFactory(nil, controller.NoResyncPeriodFunc())
ctrl.SetInternalKubeInformerFactory(informerFactory) ctrl.SetExternalKubeInformerFactory(informerFactory)
for _, c := range test.classes { for _, c := range test.classes {
informerFactory.Storage().InternalVersion().StorageClasses().Informer().GetStore().Add(c) informerFactory.Storage().V1().StorageClasses().Informer().GetStore().Add(c)
} }
attrs := admission.NewAttributesRecord( attrs := admission.NewAttributesRecord(
claim, // new object claim, // new object