github.com/verrazzano/verrazzano-monitoring-operator@v0.0.30/test/integ/client/client.go (about) 1 // Copyright (C) 2020, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package client 5 6 import ( 7 "context" 8 "errors" 9 10 "k8s.io/apimachinery/pkg/runtime" 11 "k8s.io/apimachinery/pkg/runtime/serializer" 12 "k8s.io/client-go/rest" 13 14 vmcontrollerv1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1" 15 ) 16 17 // VMOCR provides a client interface for vmo CRs. 18 type VMOCR interface { 19 // Create creates a vmo CR with the desired CR. 20 Create(ctx context.Context, cl *vmcontrollerv1.VerrazzanoMonitoringInstance) (*vmcontrollerv1.VerrazzanoMonitoringInstance, error) 21 22 // Get returns the specified vmo CR. 23 Get(ctx context.Context, namespace, name string) (*vmcontrollerv1.VerrazzanoMonitoringInstance, error) 24 25 // Delete deletes the specified vmo CR. 26 Delete(ctx context.Context, namespace, name string) error 27 28 // Update updates the vmo CR. 29 Update(ctx context.Context, vmo *vmcontrollerv1.VerrazzanoMonitoringInstance) (*vmcontrollerv1.VerrazzanoMonitoringInstance, error) 30 } 31 32 type vmoCR struct { 33 client *rest.RESTClient 34 crScheme *runtime.Scheme 35 paramCodec runtime.ParameterCodec 36 } 37 38 // NewCRClient creates a new vmo CR client. 39 func NewCRClient(cfg *rest.Config) (VMOCR, error) { 40 cli, crScheme, err := new1(cfg) 41 if err != nil { 42 return nil, err 43 } 44 return &vmoCR{ 45 client: cli, 46 crScheme: crScheme, 47 paramCodec: runtime.NewParameterCodec(crScheme), 48 }, nil 49 } 50 51 func new1(cfg *rest.Config) (*rest.RESTClient, *runtime.Scheme, error) { 52 crScheme := runtime.NewScheme() 53 if err := vmcontrollerv1.AddToScheme(crScheme); err != nil { 54 return nil, nil, err 55 } 56 57 config := *cfg 58 config.GroupVersion = &vmcontrollerv1.SchemeGroupVersion 59 config.APIPath = "/apis" 60 config.ContentType = runtime.ContentTypeJSON 61 config.NegotiatedSerializer = serializer.WithoutConversionCodecFactory{ 62 CodecFactory: serializer.NewCodecFactory(crScheme), 63 } 64 65 client, err := rest.RESTClientFor(&config) 66 if err != nil { 67 return nil, nil, err 68 } 69 70 return client, crScheme, nil 71 } 72 73 func (c *vmoCR) Create(ctx context.Context, vmo *vmcontrollerv1.VerrazzanoMonitoringInstance) (*vmcontrollerv1.VerrazzanoMonitoringInstance, error) { 74 if len(vmo.Namespace) == 0 { 75 return nil, errors.New("need to set metadata.Namespace in vmo CR") 76 } 77 result := &vmcontrollerv1.VerrazzanoMonitoringInstance{} 78 err := c.client.Post(). 79 Namespace(vmo.Namespace). 80 Resource("verrazzanomonitoringinstances"). 81 Body(vmo). 82 Do(ctx). 83 Into(result) 84 return result, err 85 } 86 87 func (c *vmoCR) Get(ctx context.Context, namespace, name string) (*vmcontrollerv1.VerrazzanoMonitoringInstance, error) { 88 result := &vmcontrollerv1.VerrazzanoMonitoringInstance{} 89 err := c.client.Get(). 90 Namespace(namespace). 91 Resource("verrazzanomonitoringinstances"). 92 Name(name). 93 Do(ctx). 94 Into(result) 95 return result, err 96 } 97 98 func (c *vmoCR) Delete(ctx context.Context, namespace, name string) error { 99 return c.client.Delete(). 100 Namespace(namespace). 101 Resource("verrazzanomonitoringinstances"). 102 Name(name). 103 Do(ctx). 104 Error() 105 } 106 107 func (c *vmoCR) Update(ctx context.Context, vmo *vmcontrollerv1.VerrazzanoMonitoringInstance) (*vmcontrollerv1.VerrazzanoMonitoringInstance, error) { 108 if len(vmo.Namespace) == 0 { 109 return nil, errors.New("need to set metadata.Namespace in vmo CR") 110 } 111 if len(vmo.Name) == 0 { 112 return nil, errors.New("need to set metadata.Name in vmo CR") 113 } 114 115 result := &vmcontrollerv1.VerrazzanoMonitoringInstance{} 116 err := c.client.Put(). 117 Namespace(vmo.Namespace). 118 Resource("verrazzanomonitoringinstances"). 119 Name(vmo.Name). 120 Body(vmo). 121 Do(ctx). 122 Into(result) 123 return result, err 124 }