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

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