github.com/iter8-tools/iter8@v1.1.2/controllers/k8sclient/simple.go (about) 1 package k8sclient 2 3 import ( 4 "context" 5 "errors" 6 7 "github.com/iter8-tools/iter8/base" 8 "github.com/iter8-tools/iter8/base/log" 9 "helm.sh/helm/v3/pkg/cli" 10 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 13 "k8s.io/apimachinery/pkg/runtime/schema" 14 "k8s.io/apimachinery/pkg/types" 15 16 // Import to initialize client auth plugins. 17 _ "k8s.io/client-go/plugin/pkg/client/auth" 18 19 "k8s.io/client-go/dynamic" 20 "k8s.io/client-go/kubernetes" 21 ) 22 23 // Client provides typed and dynamic Kubernetes clients 24 type Client struct { 25 // typed Kubernetes client 26 *kubernetes.Clientset 27 // dynamic Kubernetes client 28 *dynamic.DynamicClient 29 } 30 31 const iter8ControllerFieldManager = "iter8-controller" 32 33 // Patch performs a server-side apply of GVR 34 func (cl *Client) Patch(gvr schema.GroupVersionResource, objNamespace string, objName string, jsonBytes []byte) (*unstructured.Unstructured, error) { 35 return cl.DynamicClient.Resource(gvr).Namespace(objNamespace).Patch(context.TODO(), objName, types.ApplyPatchType, jsonBytes, metav1.PatchOptions{ 36 FieldManager: iter8ControllerFieldManager, 37 Force: base.BoolPointer(true), 38 }) 39 } 40 41 // New creates a new kubernetes client 42 func New(settings *cli.EnvSettings) (*Client, error) { 43 log.Logger.Trace("kubernetes client creation invoked...") 44 45 // get rest config 46 restConfig, err := settings.RESTClientGetter().ToRESTConfig() 47 if err != nil { 48 e := errors.New("unable to get Kubernetes REST config") 49 log.Logger.WithStackTrace(err.Error()).Error(e) 50 return nil, e 51 } 52 53 // get clientset 54 clientset, err := kubernetes.NewForConfig(restConfig) 55 if err != nil { 56 e := errors.New("unable to get Kubernetes clientset") 57 log.Logger.WithStackTrace(err.Error()).Error(e) 58 return nil, e 59 } 60 61 // get dynamic client 62 dynamicClient, err := dynamic.NewForConfig(restConfig) 63 if err != nil { 64 e := errors.New("unable to get Kubernetes dynamic client") 65 log.Logger.WithStackTrace(err.Error()).Error(e) 66 return nil, e 67 } 68 69 log.Logger.Trace("returning kubernetes client... ") 70 71 return &Client{ 72 Clientset: clientset, 73 DynamicClient: dynamicClient, 74 }, nil 75 76 }