github.com/smartcontractkit/chainlink-testing-framework/libs@v0.0.0-20240227141906-ec710b4eb1a3/k8s/pkg/cdk8s/http_dummy/dummy.go (about)

     1  package dummy
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2"
     7  	"github.com/rs/zerolog/log"
     8  
     9  	"github.com/smartcontractkit/chainlink-testing-framework/libs/k8s/client"
    10  	"github.com/smartcontractkit/chainlink-testing-framework/libs/k8s/environment"
    11  	"github.com/smartcontractkit/chainlink-testing-framework/libs/k8s/imports/k8s"
    12  	a "github.com/smartcontractkit/chainlink-testing-framework/libs/k8s/pkg/alias"
    13  	"github.com/smartcontractkit/chainlink-testing-framework/libs/utils/ptr"
    14  )
    15  
    16  const (
    17  	URLsKey = "goc"
    18  )
    19  
    20  type Chart struct {
    21  	Props *Props
    22  }
    23  
    24  func (m *Chart) IsDeploymentNeeded() bool {
    25  	return true
    26  }
    27  
    28  func (m Chart) GetName() string {
    29  	return "goc"
    30  }
    31  
    32  func (m Chart) GetProps() interface{} {
    33  	return m.Props
    34  }
    35  
    36  func (m Chart) GetPath() string {
    37  	return ""
    38  }
    39  
    40  func (m Chart) GetVersion() string {
    41  	return ""
    42  }
    43  
    44  func (m Chart) GetValues() *map[string]interface{} {
    45  	return nil
    46  }
    47  
    48  func (m Chart) ExportData(e *environment.Environment) error {
    49  	url, err := e.Fwd.FindPort(
    50  		fmt.Sprintf("%s:0", m.GetName()),
    51  		m.GetName(), "http").
    52  		As(client.LocalConnection, client.HTTP)
    53  	if err != nil {
    54  		return err
    55  	}
    56  	log.Info().Str("URL", url).Msg("goc coverage service")
    57  	e.URLs[URLsKey] = []string{url}
    58  	return nil
    59  }
    60  
    61  func New() func(root cdk8s.Chart) environment.ConnectedChart {
    62  	return func(root cdk8s.Chart) environment.ConnectedChart {
    63  		c := &Chart{}
    64  		vars := vars{
    65  			Labels: &map[string]*string{
    66  				"app": ptr.Ptr(c.GetName()),
    67  			},
    68  			ConfigMapName: fmt.Sprintf("%s-cm", c.GetName()),
    69  			BaseName:      c.GetName(),
    70  			Port:          7777,
    71  		}
    72  		service(root, vars)
    73  		deployment(root, vars)
    74  		return c
    75  	}
    76  }
    77  
    78  type Props struct {
    79  	Name string
    80  }
    81  
    82  // vars some shared labels/selectors and names that must match in resources
    83  type vars struct {
    84  	Labels        *map[string]*string
    85  	BaseName      string
    86  	ConfigMapName string
    87  	Port          float64
    88  	Props         *Props
    89  }
    90  
    91  func service(chart cdk8s.Chart, vars vars) {
    92  	k8s.NewKubeService(chart, ptr.Ptr(fmt.Sprintf("%s-service", vars.BaseName)), &k8s.KubeServiceProps{
    93  		Metadata: &k8s.ObjectMeta{
    94  			Name: ptr.Ptr(vars.BaseName),
    95  		},
    96  		Spec: &k8s.ServiceSpec{
    97  			Ports: &[]*k8s.ServicePort{
    98  				{
    99  					Name:       ptr.Ptr("http"),
   100  					Port:       ptr.Ptr(vars.Port),
   101  					TargetPort: k8s.IntOrString_FromNumber(ptr.Ptr[float64](7777)),
   102  				},
   103  			},
   104  			Selector: vars.Labels,
   105  		},
   106  	})
   107  }
   108  
   109  func deployment(chart cdk8s.Chart, vars vars) {
   110  	k8s.NewKubeDeployment(
   111  		chart,
   112  		ptr.Ptr(fmt.Sprintf("%s-deployment", vars.BaseName)),
   113  		&k8s.KubeDeploymentProps{
   114  			Metadata: &k8s.ObjectMeta{
   115  				Name: ptr.Ptr(vars.BaseName),
   116  			},
   117  			Spec: &k8s.DeploymentSpec{
   118  				Selector: &k8s.LabelSelector{
   119  					MatchLabels: vars.Labels,
   120  				},
   121  				Template: &k8s.PodTemplateSpec{
   122  					Metadata: &k8s.ObjectMeta{
   123  						Labels: vars.Labels,
   124  					},
   125  					Spec: &k8s.PodSpec{
   126  						ServiceAccountName: ptr.Ptr("default"),
   127  						Containers: &[]*k8s.Container{
   128  							container(vars),
   129  						},
   130  					},
   131  				},
   132  			},
   133  		})
   134  }
   135  
   136  func container(vars vars) *k8s.Container {
   137  	return &k8s.Container{
   138  		Name:            ptr.Ptr(vars.BaseName),
   139  		Image:           ptr.Ptr("public.ecr.aws/chainlink/goc:latest"),
   140  		ImagePullPolicy: ptr.Ptr("Always"),
   141  		Ports: &[]*k8s.ContainerPort{
   142  			{
   143  				Name:          ptr.Ptr("http"),
   144  				ContainerPort: ptr.Ptr(vars.Port),
   145  			},
   146  		},
   147  		ReadinessProbe: &k8s.Probe{
   148  			HttpGet: &k8s.HttpGetAction{
   149  				Port: k8s.IntOrString_FromNumber(ptr.Ptr(vars.Port)),
   150  				Path: ptr.Ptr("/v1/cover/list"),
   151  			},
   152  			InitialDelaySeconds: ptr.Ptr[float64](20),
   153  			PeriodSeconds:       ptr.Ptr[float64](5),
   154  		},
   155  		Env:       &[]*k8s.EnvVar{},
   156  		Resources: a.ContainerResources("200m", "512Mi", "200m", "512Mi"),
   157  	}
   158  }