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  }