Skip to content

Commit 21366f2

Browse files
committed
fixup! Adds a client that enables strict field validation for all requests
Construct client wrapper using validation as a parameter.
1 parent 725259f commit 21366f2

File tree

2 files changed

+41
-42
lines changed

2 files changed

+41
-42
lines changed

pkg/client/fieldvalidation.go

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -20,88 +20,87 @@ import (
2020
"context"
2121

2222
"k8s.io/apimachinery/pkg/api/meta"
23-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2423
"k8s.io/apimachinery/pkg/runtime"
2524
"k8s.io/apimachinery/pkg/runtime/schema"
2625
)
2726

28-
// WithStrictFieldValidation wraps a Client and configures strict field
29-
// validation, by default, for all write requests from this client. Users
30-
// can override the field validation for individual requests.
31-
func WithStrictFieldValidation(c Client) Client {
27+
// WithFieldValidation wraps a Client and configures field validation, by
28+
// default, for all write requests from this client. Users can override field
29+
// validation for individual write requests.
30+
func WithFieldValidation(c Client, validation FieldValidation) Client {
3231
return &clientWithFieldValidation{
33-
validation: metav1.FieldValidationStrict,
34-
c: c,
32+
validation: validation,
33+
client: c,
3534
Reader: c,
3635
}
3736
}
3837

3938
type clientWithFieldValidation struct {
40-
validation string
41-
c Client
39+
validation FieldValidation
40+
client Client
4241
Reader
4342
}
4443

45-
func (f *clientWithFieldValidation) Create(ctx context.Context, obj Object, opts ...CreateOption) error {
46-
return f.c.Create(ctx, obj, append([]CreateOption{FieldValidation(f.validation)}, opts...)...)
44+
func (c *clientWithFieldValidation) Create(ctx context.Context, obj Object, opts ...CreateOption) error {
45+
return c.client.Create(ctx, obj, append([]CreateOption{c.validation}, opts...)...)
4746
}
4847

49-
func (f *clientWithFieldValidation) Update(ctx context.Context, obj Object, opts ...UpdateOption) error {
50-
return f.c.Update(ctx, obj, append([]UpdateOption{FieldValidation(f.validation)}, opts...)...)
48+
func (c *clientWithFieldValidation) Update(ctx context.Context, obj Object, opts ...UpdateOption) error {
49+
return c.client.Update(ctx, obj, append([]UpdateOption{c.validation}, opts...)...)
5150
}
5251

53-
func (f *clientWithFieldValidation) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error {
54-
return f.c.Patch(ctx, obj, patch, append([]PatchOption{FieldValidation(f.validation)}, opts...)...)
52+
func (c *clientWithFieldValidation) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error {
53+
return c.client.Patch(ctx, obj, patch, append([]PatchOption{c.validation}, opts...)...)
5554
}
5655

57-
func (f *clientWithFieldValidation) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error {
58-
return f.c.Delete(ctx, obj, opts...)
56+
func (c *clientWithFieldValidation) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error {
57+
return c.client.Delete(ctx, obj, opts...)
5958
}
6059

61-
func (f *clientWithFieldValidation) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error {
62-
return f.c.DeleteAllOf(ctx, obj, opts...)
60+
func (c *clientWithFieldValidation) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error {
61+
return c.client.DeleteAllOf(ctx, obj, opts...)
6362
}
6463

65-
func (f *clientWithFieldValidation) Scheme() *runtime.Scheme { return f.c.Scheme() }
66-
func (f *clientWithFieldValidation) RESTMapper() meta.RESTMapper { return f.c.RESTMapper() }
67-
func (f *clientWithFieldValidation) GroupVersionKindFor(obj runtime.Object) (schema.GroupVersionKind, error) {
68-
return f.c.GroupVersionKindFor(obj)
64+
func (c *clientWithFieldValidation) Scheme() *runtime.Scheme { return c.client.Scheme() }
65+
func (c *clientWithFieldValidation) RESTMapper() meta.RESTMapper { return c.client.RESTMapper() }
66+
func (c *clientWithFieldValidation) GroupVersionKindFor(obj runtime.Object) (schema.GroupVersionKind, error) {
67+
return c.client.GroupVersionKindFor(obj)
6968
}
7069

71-
func (f *clientWithFieldValidation) IsObjectNamespaced(obj runtime.Object) (bool, error) {
72-
return f.c.IsObjectNamespaced(obj)
70+
func (c *clientWithFieldValidation) IsObjectNamespaced(obj runtime.Object) (bool, error) {
71+
return c.client.IsObjectNamespaced(obj)
7372
}
7473

75-
func (f *clientWithFieldValidation) Status() StatusWriter {
74+
func (c *clientWithFieldValidation) Status() StatusWriter {
7675
return &subresourceClientWithFieldValidation{
77-
validation: f.validation,
78-
subresourceWriter: f.c.Status(),
76+
validation: c.validation,
77+
subresourceWriter: c.client.Status(),
7978
}
8079
}
8180

82-
func (f *clientWithFieldValidation) SubResource(subresource string) SubResourceClient {
83-
c := f.c.SubResource(subresource)
81+
func (c *clientWithFieldValidation) SubResource(subresource string) SubResourceClient {
82+
srClient := c.client.SubResource(subresource)
8483
return &subresourceClientWithFieldValidation{
85-
validation: f.validation,
86-
subresourceWriter: c,
87-
SubResourceReader: c,
84+
validation: c.validation,
85+
subresourceWriter: srClient,
86+
SubResourceReader: srClient,
8887
}
8988
}
9089

9190
type subresourceClientWithFieldValidation struct {
92-
validation string
91+
validation FieldValidation
9392
subresourceWriter SubResourceWriter
9493
SubResourceReader
9594
}
9695

97-
func (f *subresourceClientWithFieldValidation) Create(ctx context.Context, obj Object, subresource Object, opts ...SubResourceCreateOption) error {
98-
return f.subresourceWriter.Create(ctx, obj, subresource, append([]SubResourceCreateOption{FieldValidation(f.validation)}, opts...)...)
96+
func (c *subresourceClientWithFieldValidation) Create(ctx context.Context, obj Object, subresource Object, opts ...SubResourceCreateOption) error {
97+
return c.subresourceWriter.Create(ctx, obj, subresource, append([]SubResourceCreateOption{c.validation}, opts...)...)
9998
}
10099

101-
func (f *subresourceClientWithFieldValidation) Update(ctx context.Context, obj Object, opts ...SubResourceUpdateOption) error {
102-
return f.subresourceWriter.Update(ctx, obj, append([]SubResourceUpdateOption{FieldValidation(f.validation)}, opts...)...)
100+
func (c *subresourceClientWithFieldValidation) Update(ctx context.Context, obj Object, opts ...SubResourceUpdateOption) error {
101+
return c.subresourceWriter.Update(ctx, obj, append([]SubResourceUpdateOption{c.validation}, opts...)...)
103102
}
104103

105-
func (f *subresourceClientWithFieldValidation) Patch(ctx context.Context, obj Object, patch Patch, opts ...SubResourcePatchOption) error {
106-
return f.subresourceWriter.Patch(ctx, obj, patch, append([]SubResourcePatchOption{FieldValidation(f.validation)}, opts...)...)
104+
func (c *subresourceClientWithFieldValidation) Patch(ctx context.Context, obj Object, patch Patch, opts ...SubResourcePatchOption) error {
105+
return c.subresourceWriter.Patch(ctx, obj, patch, append([]SubResourcePatchOption{c.validation}, opts...)...)
107106
}

pkg/client/fieldvalidation_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
func TestWithStrictFieldValidation(t *testing.T) {
3131
calls := 0
3232
fakeClient := testFieldValidationClient(t, metav1.FieldValidationStrict, func() { calls++ })
33-
wrappedClient := client.WithStrictFieldValidation(fakeClient)
33+
wrappedClient := client.WithFieldValidation(fakeClient, metav1.FieldValidationStrict)
3434

3535
ctx := context.Background()
3636
dummyObj := &corev1.Namespace{}
@@ -54,7 +54,7 @@ func TestWithStrictFieldValidationOverridden(t *testing.T) {
5454
calls := 0
5555

5656
fakeClient := testFieldValidationClient(t, metav1.FieldValidationWarn, func() { calls++ })
57-
wrappedClient := client.WithStrictFieldValidation(fakeClient)
57+
wrappedClient := client.WithFieldValidation(fakeClient, metav1.FieldValidationStrict)
5858

5959
ctx := context.Background()
6060
dummyObj := &corev1.Namespace{}

0 commit comments

Comments
 (0)