Skip to content

Commit 9fa8793

Browse files
Merge pull request #15594 from deads2k/server-15-storage
Automatic merge from submit-queue (batch tested with PRs 15594, 15161, 15619, 15628) Create default storage selection functions Starts helping #15267 so that I never have to update a bajillion little methods that I don't care about. @smarterclayton @liggitt @enj what do you think?
2 parents ebdb298 + c68bed4 commit 9fa8793

File tree

10 files changed

+79
-103
lines changed

10 files changed

+79
-103
lines changed

pkg/authorization/registry/clusterpolicy/etcd/etcd.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@ func NewREST(optsGetter restoptions.Getter) (*REST, error) {
2222
NewFunc: func() runtime.Object { return &authorizationapi.ClusterPolicy{} },
2323
NewListFunc: func() runtime.Object { return &authorizationapi.ClusterPolicyList{} },
2424
QualifiedResource: authorizationapi.Resource("clusterpolicies"),
25-
PredicateFunc: clusterpolicy.Matcher,
2625

2726
CreateStrategy: clusterpolicy.Strategy,
2827
UpdateStrategy: clusterpolicy.Strategy,
2928
DeleteStrategy: clusterpolicy.Strategy,
3029
}
3130

32-
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: clusterpolicy.GetAttrs}
31+
options := &generic.StoreOptions{RESTOptions: optsGetter}
3332
if err := store.CompleteWithOptions(options); err != nil {
3433
return nil, err
3534
}

pkg/authorization/registry/clusterpolicy/strategy.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package clusterpolicy
22

33
import (
4-
"fmt"
5-
6-
"k8s.io/apimachinery/pkg/fields"
7-
"k8s.io/apimachinery/pkg/labels"
84
"k8s.io/apimachinery/pkg/runtime"
95
"k8s.io/apimachinery/pkg/util/validation/field"
106
apirequest "k8s.io/apiserver/pkg/endpoints/request"
11-
kstorage "k8s.io/apiserver/pkg/storage"
127
kapi "k8s.io/kubernetes/pkg/api"
138

149
authorizationapi "github.com/openshift/origin/pkg/authorization/apis/authorization"
@@ -65,21 +60,3 @@ func (strategy) Validate(ctx apirequest.Context, obj runtime.Object) field.Error
6560
func (strategy) ValidateUpdate(ctx apirequest.Context, obj, old runtime.Object) field.ErrorList {
6661
return validation.ValidateClusterPolicyUpdate(obj.(*authorizationapi.ClusterPolicy), old.(*authorizationapi.ClusterPolicy))
6762
}
68-
69-
// GetAttrs returns labels and fields of a given object for filtering purposes
70-
func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) {
71-
policy, ok := obj.(*authorizationapi.ClusterPolicy)
72-
if !ok {
73-
return nil, nil, false, fmt.Errorf("not a ClusterPolicy")
74-
}
75-
return labels.Set(policy.ObjectMeta.Labels), authorizationapi.ClusterPolicyToSelectableFields(policy), policy.Initializers != nil, nil
76-
}
77-
78-
// Matcher returns a generic matcher for a given label and field selector.
79-
func Matcher(label labels.Selector, field fields.Selector) kstorage.SelectionPredicate {
80-
return kstorage.SelectionPredicate{
81-
Label: label,
82-
Field: field,
83-
GetAttrs: GetAttrs,
84-
}
85-
}

pkg/authorization/registry/clusterpolicybinding/etcd/etcd.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,14 @@ func NewREST(optsGetter restoptions.Getter) (*REST, error) {
2121
Copier: kapi.Scheme,
2222
NewFunc: func() runtime.Object { return &authorizationapi.ClusterPolicyBinding{} },
2323
NewListFunc: func() runtime.Object { return &authorizationapi.ClusterPolicyBindingList{} },
24-
PredicateFunc: clusterpolicybinding.Matcher,
2524
QualifiedResource: authorizationapi.Resource("clusterpolicybindings"),
2625

2726
CreateStrategy: clusterpolicybinding.Strategy,
2827
UpdateStrategy: clusterpolicybinding.Strategy,
2928
DeleteStrategy: clusterpolicybinding.Strategy,
3029
}
3130

32-
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: clusterpolicybinding.GetAttrs}
31+
options := &generic.StoreOptions{RESTOptions: optsGetter}
3332
if err := store.CompleteWithOptions(options); err != nil {
3433
return nil, err
3534
}

pkg/authorization/registry/clusterpolicybinding/strategy.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package clusterpolicybinding
22

33
import (
4-
"fmt"
5-
6-
"k8s.io/apimachinery/pkg/fields"
7-
"k8s.io/apimachinery/pkg/labels"
84
"k8s.io/apimachinery/pkg/runtime"
95
"k8s.io/apimachinery/pkg/util/validation/field"
106
apirequest "k8s.io/apiserver/pkg/endpoints/request"
11-
kstorage "k8s.io/apiserver/pkg/storage"
127
kapi "k8s.io/kubernetes/pkg/api"
138

149
authorizationapi "github.com/openshift/origin/pkg/authorization/apis/authorization"
@@ -81,21 +76,3 @@ func (strategy) Validate(ctx apirequest.Context, obj runtime.Object) field.Error
8176
func (strategy) ValidateUpdate(ctx apirequest.Context, obj, old runtime.Object) field.ErrorList {
8277
return validation.ValidateClusterPolicyBindingUpdate(obj.(*authorizationapi.ClusterPolicyBinding), old.(*authorizationapi.ClusterPolicyBinding))
8378
}
84-
85-
// GetAttrs returns labels and fields of a given object for filtering purposes
86-
func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) {
87-
policyBinding, ok := obj.(*authorizationapi.ClusterPolicyBinding)
88-
if !ok {
89-
return nil, nil, false, fmt.Errorf("not a ClusterPolicyBinding")
90-
}
91-
return labels.Set(policyBinding.ObjectMeta.Labels), authorizationapi.ClusterPolicyBindingToSelectableFields(policyBinding), policyBinding.Initializers != nil, nil
92-
}
93-
94-
// Matcher returns a generic matcher for a given label and field selector.
95-
func Matcher(label labels.Selector, field fields.Selector) kstorage.SelectionPredicate {
96-
return kstorage.SelectionPredicate{
97-
Label: label,
98-
Field: field,
99-
GetAttrs: GetAttrs,
100-
}
101-
}

pkg/authorization/registry/policy/etcd/etcd.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,14 @@ func NewREST(optsGetter restoptions.Getter) (*REST, error) {
2121
Copier: kapi.Scheme,
2222
NewFunc: func() runtime.Object { return &authorizationapi.Policy{} },
2323
NewListFunc: func() runtime.Object { return &authorizationapi.PolicyList{} },
24-
PredicateFunc: policy.Matcher,
2524
QualifiedResource: authorizationapi.Resource("policies"),
2625

2726
CreateStrategy: policy.Strategy,
2827
UpdateStrategy: policy.Strategy,
2928
DeleteStrategy: policy.Strategy,
3029
}
3130

32-
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: policy.GetAttrs}
31+
options := &generic.StoreOptions{RESTOptions: optsGetter}
3332
if err := store.CompleteWithOptions(options); err != nil {
3433
return nil, err
3534
}

pkg/authorization/registry/policy/strategy.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package policy
22

33
import (
4-
"fmt"
5-
6-
"k8s.io/apimachinery/pkg/fields"
7-
"k8s.io/apimachinery/pkg/labels"
84
"k8s.io/apimachinery/pkg/runtime"
95
"k8s.io/apimachinery/pkg/util/validation/field"
106
apirequest "k8s.io/apiserver/pkg/endpoints/request"
11-
kstorage "k8s.io/apiserver/pkg/storage"
127
kapi "k8s.io/kubernetes/pkg/api"
138

149
authorizationapi "github.com/openshift/origin/pkg/authorization/apis/authorization"
@@ -66,21 +61,3 @@ func (strategy) Validate(ctx apirequest.Context, obj runtime.Object) field.Error
6661
func (strategy) ValidateUpdate(ctx apirequest.Context, obj, old runtime.Object) field.ErrorList {
6762
return validation.ValidateLocalPolicyUpdate(obj.(*authorizationapi.Policy), old.(*authorizationapi.Policy))
6863
}
69-
70-
// GetAttrs returns labels and fields of a given object for filtering purposes
71-
func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) {
72-
policy, ok := obj.(*authorizationapi.Policy)
73-
if !ok {
74-
return nil, nil, false, fmt.Errorf("not a Policy")
75-
}
76-
return labels.Set(policy.ObjectMeta.Labels), authorizationapi.PolicyToSelectableFields(policy), policy.Initializers != nil, nil
77-
}
78-
79-
// Matcher returns a generic matcher for a given label and field selector.
80-
func Matcher(label labels.Selector, field fields.Selector) kstorage.SelectionPredicate {
81-
return kstorage.SelectionPredicate{
82-
Label: label,
83-
Field: field,
84-
GetAttrs: GetAttrs,
85-
}
86-
}

pkg/authorization/registry/policybinding/etcd/etcd.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package etcd
22

33
import (
4+
"fmt"
5+
6+
"k8s.io/apimachinery/pkg/fields"
47
"k8s.io/apimachinery/pkg/runtime"
58
"k8s.io/apiserver/pkg/registry/generic"
69
"k8s.io/apiserver/pkg/registry/generic/registry"
10+
"k8s.io/apiserver/pkg/storage"
711
kapi "k8s.io/kubernetes/pkg/api"
812

913
authorizationapi "github.com/openshift/origin/pkg/authorization/apis/authorization"
@@ -22,17 +26,26 @@ func NewREST(optsGetter restoptions.Getter) (*REST, error) {
2226
NewFunc: func() runtime.Object { return &authorizationapi.PolicyBinding{} },
2327
NewListFunc: func() runtime.Object { return &authorizationapi.PolicyBindingList{} },
2428
QualifiedResource: authorizationapi.Resource("policybindings"),
25-
PredicateFunc: policybinding.Matcher,
2629

2730
CreateStrategy: policybinding.Strategy,
2831
UpdateStrategy: policybinding.Strategy,
2932
DeleteStrategy: policybinding.Strategy,
3033
}
3134

32-
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: policybinding.GetAttrs}
35+
options := &generic.StoreOptions{RESTOptions: optsGetter,
36+
AttrFunc: storage.AttrFunc(storage.DefaultNamespaceScopedAttr).WithFieldMutation(FieldSetMutator)}
3337
if err := store.CompleteWithOptions(options); err != nil {
3438
return nil, err
3539
}
3640

3741
return &REST{store}, nil
3842
}
43+
44+
func FieldSetMutator(obj runtime.Object, fieldSet fields.Set) error {
45+
policyBinding, ok := obj.(*authorizationapi.PolicyBinding)
46+
if !ok {
47+
return fmt.Errorf("%T not a PolicyBinding", obj)
48+
}
49+
fieldSet["policyRef.namespace"] = policyBinding.PolicyRef.Namespace
50+
return nil
51+
}

pkg/authorization/registry/policybinding/strategy.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
package policybinding
22

33
import (
4-
"fmt"
5-
64
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7-
"k8s.io/apimachinery/pkg/fields"
8-
"k8s.io/apimachinery/pkg/labels"
95
"k8s.io/apimachinery/pkg/runtime"
106
"k8s.io/apimachinery/pkg/util/validation/field"
117
apirequest "k8s.io/apiserver/pkg/endpoints/request"
12-
kstorage "k8s.io/apiserver/pkg/storage"
138
kapi "k8s.io/kubernetes/pkg/api"
149

1510
authorizationapi "github.com/openshift/origin/pkg/authorization/apis/authorization"
@@ -82,24 +77,6 @@ func (strategy) ValidateUpdate(ctx apirequest.Context, obj, old runtime.Object)
8277
return validation.ValidateLocalPolicyBindingUpdate(obj.(*authorizationapi.PolicyBinding), old.(*authorizationapi.PolicyBinding))
8378
}
8479

85-
// GetAttrs returns labels and fields of a given object for filtering purposes
86-
func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) {
87-
policyBinding, ok := obj.(*authorizationapi.PolicyBinding)
88-
if !ok {
89-
return nil, nil, false, fmt.Errorf("not a PolicyBinding")
90-
}
91-
return labels.Set(policyBinding.ObjectMeta.Labels), authorizationapi.PolicyBindingToSelectableFields(policyBinding), policyBinding.Initializers != nil, nil
92-
}
93-
94-
// Matcher returns a generic matcher for a given label and field selector.
95-
func Matcher(label labels.Selector, field fields.Selector) kstorage.SelectionPredicate {
96-
return kstorage.SelectionPredicate{
97-
Label: label,
98-
Field: field,
99-
GetAttrs: GetAttrs,
100-
}
101-
}
102-
10380
func NewEmptyPolicyBinding(namespace, policyNamespace, policyBindingName string) *authorizationapi.PolicyBinding {
10481
binding := &authorizationapi.PolicyBinding{}
10582
binding.Name = policyBindingName

vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go

Lines changed: 18 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/selection_predicate.go

Lines changed: 43 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)