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 }