/
client.go
109 lines (95 loc) · 3.1 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package client
import (
"context"
"github.com/kyverno/chainsaw/pkg/client"
"github.com/kyverno/chainsaw/pkg/runner/logging"
"github.com/kyverno/kyverno/ext/output/color"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
)
func New(inner client.Client) client.Client {
return &runnerClient{
inner: inner,
}
}
type runnerClient struct {
inner client.Client
}
func (c *runnerClient) Create(ctx context.Context, obj ctrlclient.Object, opts ...ctrlclient.CreateOption) (_err error) {
gvk := obj.GetObjectKind().GroupVersionKind()
defer func() {
obj.GetObjectKind().SetGroupVersionKind(gvk)
if _err == nil {
c.ok(ctx, logging.Create, obj)
} else {
c.error(ctx, logging.Create, obj, _err)
}
}()
err := c.inner.Create(ctx, obj, opts...)
if err != nil {
return err
}
return nil
}
func (c *runnerClient) Update(ctx context.Context, obj ctrlclient.Object, opts ...ctrlclient.UpdateOption) (_err error) {
gvk := obj.GetObjectKind().GroupVersionKind()
defer func() {
obj.GetObjectKind().SetGroupVersionKind(gvk)
if _err == nil {
c.ok(ctx, logging.Patch, obj)
} else {
c.error(ctx, logging.Update, obj, _err)
}
}()
return c.inner.Update(ctx, obj, opts...)
}
func (c *runnerClient) Delete(ctx context.Context, obj ctrlclient.Object, opts ...ctrlclient.DeleteOption) (_err error) {
gvk := obj.GetObjectKind().GroupVersionKind()
defer func() {
obj.GetObjectKind().SetGroupVersionKind(gvk)
if _err == nil {
c.ok(ctx, logging.Delete, obj)
} else {
c.error(ctx, logging.Delete, obj, _err)
}
}()
return c.inner.Delete(ctx, obj, opts...)
}
func (c *runnerClient) Get(ctx context.Context, key types.NamespacedName, obj ctrlclient.Object, opts ...ctrlclient.GetOption) error {
return c.inner.Get(ctx, key, obj, opts...)
}
func (c *runnerClient) List(ctx context.Context, list ctrlclient.ObjectList, opts ...ctrlclient.ListOption) (_err error) {
return c.inner.List(ctx, list, opts...)
}
func (c *runnerClient) Patch(ctx context.Context, obj ctrlclient.Object, patch ctrlclient.Patch, opts ...ctrlclient.PatchOption) (_err error) {
gvk := obj.GetObjectKind().GroupVersionKind()
defer func() {
obj.GetObjectKind().SetGroupVersionKind(gvk)
if _err == nil {
c.ok(ctx, logging.Patch, obj)
} else {
c.error(ctx, logging.Patch, obj, _err)
}
}()
return c.inner.Patch(ctx, obj, patch, opts...)
}
func (c *runnerClient) IsObjectNamespaced(obj runtime.Object) (bool, error) {
return c.inner.IsObjectNamespaced(obj)
}
func (c *runnerClient) RESTMapper() meta.RESTMapper {
return c.inner.RESTMapper()
}
func (c *runnerClient) ok(ctx context.Context, op logging.Operation, obj ctrlclient.Object) {
logger := logging.FromContext(ctx)
if logger != nil {
logger.WithResource(obj).Log(op, logging.OkStatus, color.BoldGreen)
}
}
func (c *runnerClient) error(ctx context.Context, op logging.Operation, obj ctrlclient.Object, err error) {
logger := logging.FromContext(ctx)
if logger != nil {
logger.WithResource(obj).Log(op, logging.ErrorStatus, color.BoldYellow, logging.ErrSection(err))
}
}