From 117a0e525d72be56cd18c2c16dd5c0c8fd8baf0b Mon Sep 17 00:00:00 2001 From: wojtekt Date: Wed, 24 Jul 2019 14:56:17 +0200 Subject: [PATCH] Unify secret and configmap triggers --- pkg/registry/core/configmap/BUILD | 4 +++ pkg/registry/core/configmap/storage/BUILD | 1 + .../core/configmap/storage/storage.go | 7 +++- pkg/registry/core/configmap/strategy.go | 34 +++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/registry/core/configmap/BUILD b/pkg/registry/core/configmap/BUILD index b2876f202d4..9cafd0ebc91 100644 --- a/pkg/registry/core/configmap/BUILD +++ b/pkg/registry/core/configmap/BUILD @@ -17,9 +17,13 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", ], ) diff --git a/pkg/registry/core/configmap/storage/BUILD b/pkg/registry/core/configmap/storage/BUILD index 79422124a2d..b246229cb72 100644 --- a/pkg/registry/core/configmap/storage/BUILD +++ b/pkg/registry/core/configmap/storage/BUILD @@ -37,6 +37,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", ], ) diff --git a/pkg/registry/core/configmap/storage/storage.go b/pkg/registry/core/configmap/storage/storage.go index 31cdd1b0e09..8456bc10796 100644 --- a/pkg/registry/core/configmap/storage/storage.go +++ b/pkg/registry/core/configmap/storage/storage.go @@ -21,6 +21,7 @@ import ( "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/apiserver/pkg/storage" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/printers" printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" @@ -46,7 +47,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, } - options := &generic.StoreOptions{RESTOptions: optsGetter} + options := &generic.StoreOptions{ + RESTOptions: optsGetter, + AttrFunc: configmap.GetAttrs, + TriggerFunc: map[string]storage.IndexerFunc{"metadata.name": configmap.NameTriggerFunc}, + } if err := store.CompleteWithOptions(options); err != nil { panic(err) // TODO: Propagate error up } diff --git a/pkg/registry/core/configmap/strategy.go b/pkg/registry/core/configmap/strategy.go index 6cf9a6172a3..7979fa51579 100644 --- a/pkg/registry/core/configmap/strategy.go +++ b/pkg/registry/core/configmap/strategy.go @@ -18,10 +18,15 @@ package configmap import ( "context" + "fmt" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" + pkgstorage "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/names" "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" @@ -80,3 +85,32 @@ func (strategy) ValidateUpdate(ctx context.Context, newObj, oldObj runtime.Objec return validation.ValidateConfigMapUpdate(newCfg, oldCfg) } + +// GetAttrs returns labels and fields of a given object for filtering purposes. +func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { + configMap, ok := obj.(*api.ConfigMap) + if !ok { + return nil, nil, fmt.Errorf("not a configmap") + } + return labels.Set(configMap.Labels), SelectableFields(configMap), nil +} + +// Matcher returns a generic matcher for a given label and field selector. +func Matcher(label labels.Selector, field fields.Selector) pkgstorage.SelectionPredicate { + return pkgstorage.SelectionPredicate{ + Label: label, + Field: field, + GetAttrs: GetAttrs, + IndexFields: []string{"metadata.name"}, + } +} + +// NameTriggerFunc returns value metadata.namespace of given object. +func NameTriggerFunc(obj runtime.Object) string { + return obj.(*api.ConfigMap).ObjectMeta.Name +} + +// SelectableFields returns a field set that can be used for filter selection +func SelectableFields(obj *api.ConfigMap) fields.Set { + return generic.ObjectMetaFieldsSet(&obj.ObjectMeta, true) +}