-
Notifications
You must be signed in to change notification settings - Fork 34
/
simple.go
76 lines (61 loc) · 2.08 KB
/
simple.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
package k8sclient
import (
"context"
"errors"
"github.com/iter8-tools/iter8/base"
"github.com/iter8-tools/iter8/base/log"
"helm.sh/helm/v3/pkg/cli"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
// Import to initialize client auth plugins.
_ "k8s.io/client-go/plugin/pkg/client/auth"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
)
// Client provides typed and dynamic Kubernetes clients
type Client struct {
// typed Kubernetes client
*kubernetes.Clientset
// dynamic Kubernetes client
*dynamic.DynamicClient
}
const iter8ControllerFieldManager = "iter8-controller"
// Patch performs a server-side apply of GVR
func (cl *Client) Patch(gvr schema.GroupVersionResource, objNamespace string, objName string, jsonBytes []byte) (*unstructured.Unstructured, error) {
return cl.DynamicClient.Resource(gvr).Namespace(objNamespace).Patch(context.TODO(), objName, types.ApplyPatchType, jsonBytes, metav1.PatchOptions{
FieldManager: iter8ControllerFieldManager,
Force: base.BoolPointer(true),
})
}
// New creates a new kubernetes client
func New(settings *cli.EnvSettings) (*Client, error) {
log.Logger.Trace("kubernetes client creation invoked...")
// get rest config
restConfig, err := settings.RESTClientGetter().ToRESTConfig()
if err != nil {
e := errors.New("unable to get Kubernetes REST config")
log.Logger.WithStackTrace(err.Error()).Error(e)
return nil, e
}
// get clientset
clientset, err := kubernetes.NewForConfig(restConfig)
if err != nil {
e := errors.New("unable to get Kubernetes clientset")
log.Logger.WithStackTrace(err.Error()).Error(e)
return nil, e
}
// get dynamic client
dynamicClient, err := dynamic.NewForConfig(restConfig)
if err != nil {
e := errors.New("unable to get Kubernetes dynamic client")
log.Logger.WithStackTrace(err.Error()).Error(e)
return nil, e
}
log.Logger.Trace("returning kubernetes client... ")
return &Client{
Clientset: clientset,
DynamicClient: dynamicClient,
}, nil
}