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 }