From 3e10b4f3d9a35090181163d4ea39d5d430be6d6a Mon Sep 17 00:00:00 2001 From: Amarpreet Minhas Date: Sat, 31 Dec 2022 21:06:10 +0000 Subject: [PATCH] Crappy little chart for sudosci backend for the migration --- sudoscientist-go-backend/.helmignore | 23 +++++++ sudoscientist-go-backend/Chart.lock | 6 ++ sudoscientist-go-backend/Chart.yaml | 11 +++ .../charts/common-1.2.0.tgz | Bin 0 -> 27879 bytes sudoscientist-go-backend/templates/NOTES.txt | 22 ++++++ .../templates/_helpers.tpl | 62 +++++++++++++++++ .../templates/deployment.yaml | 65 ++++++++++++++++++ .../templates/ingress.yaml | 61 ++++++++++++++++ .../templates/service.yaml | 15 ++++ .../templates/serviceaccount.yaml | 12 ++++ .../templates/tests/test-connection.yaml | 15 ++++ sudoscientist-go-backend/values.yaml | 23 +++++++ 12 files changed, 315 insertions(+) create mode 100644 sudoscientist-go-backend/.helmignore create mode 100644 sudoscientist-go-backend/Chart.lock create mode 100644 sudoscientist-go-backend/Chart.yaml create mode 100644 sudoscientist-go-backend/charts/common-1.2.0.tgz create mode 100644 sudoscientist-go-backend/templates/NOTES.txt create mode 100644 sudoscientist-go-backend/templates/_helpers.tpl create mode 100644 sudoscientist-go-backend/templates/deployment.yaml create mode 100644 sudoscientist-go-backend/templates/ingress.yaml create mode 100644 sudoscientist-go-backend/templates/service.yaml create mode 100644 sudoscientist-go-backend/templates/serviceaccount.yaml create mode 100644 sudoscientist-go-backend/templates/tests/test-connection.yaml create mode 100644 sudoscientist-go-backend/values.yaml diff --git a/sudoscientist-go-backend/.helmignore b/sudoscientist-go-backend/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/sudoscientist-go-backend/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/sudoscientist-go-backend/Chart.lock b/sudoscientist-go-backend/Chart.lock new file mode 100644 index 0000000..acbdb3c --- /dev/null +++ b/sudoscientist-go-backend/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://bjw-s.github.io/helm-charts/ + version: 1.2.0 +digest: sha256:4a59834889563e94dab9d298b62e8a095be18c459593c42307f99d5f1ea51027 +generated: "2022-12-31T18:26:05.702450278Z" diff --git a/sudoscientist-go-backend/Chart.yaml b/sudoscientist-go-backend/Chart.yaml new file mode 100644 index 0000000..1a4c534 --- /dev/null +++ b/sudoscientist-go-backend/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: sudoscientist-go-backend +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 +appVersion: "1.16.0" +# bjw-s common chart +dependencies: +- name: common + version: 1.2.0 + repository: https://bjw-s.github.io/helm-charts/ diff --git a/sudoscientist-go-backend/charts/common-1.2.0.tgz b/sudoscientist-go-backend/charts/common-1.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..33e54e556459286fe21492686e5da4ba09424535 GIT binary patch literal 27879 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

(7~6rB?Ik$hTI_KrP)G)K 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ℜkLGZi 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 W`}X%tfBy>r0RR8K_x*MNtO5Wkv!~+# literal 0 HcmV?d00001 diff --git a/sudoscientist-go-backend/templates/NOTES.txt b/sudoscientist-go-backend/templates/NOTES.txt new file mode 100644 index 0000000..62573e8 --- /dev/null +++ b/sudoscientist-go-backend/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "sudoscientist-go-backend.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "sudoscientist-go-backend.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "sudoscientist-go-backend.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "sudoscientist-go-backend.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/sudoscientist-go-backend/templates/_helpers.tpl b/sudoscientist-go-backend/templates/_helpers.tpl new file mode 100644 index 0000000..084e2b2 --- /dev/null +++ b/sudoscientist-go-backend/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "sudoscientist-go-backend.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "sudoscientist-go-backend.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "sudoscientist-go-backend.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "sudoscientist-go-backend.labels" -}} +helm.sh/chart: {{ include "sudoscientist-go-backend.chart" . }} +{{ include "sudoscientist-go-backend.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "sudoscientist-go-backend.selectorLabels" -}} +app.kubernetes.io/name: {{ include "sudoscientist-go-backend.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "sudoscientist-go-backend.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "sudoscientist-go-backend.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/sudoscientist-go-backend/templates/deployment.yaml b/sudoscientist-go-backend/templates/deployment.yaml new file mode 100644 index 0000000..bf0dc5a --- /dev/null +++ b/sudoscientist-go-backend/templates/deployment.yaml @@ -0,0 +1,65 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "sudoscientist-go-backend.fullname" . }} + labels: + {{- include "sudoscientist-go-backend.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "sudoscientist-go-backend.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "sudoscientist-go-backend.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "sudoscientist-go-backend.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + {{- if .Values.env }} + {{- toYaml .Values.env | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.service.port }} + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/sudoscientist-go-backend/templates/ingress.yaml b/sudoscientist-go-backend/templates/ingress.yaml new file mode 100644 index 0000000..cde0fcc --- /dev/null +++ b/sudoscientist-go-backend/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "sudoscientist-go-backend.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "sudoscientist-go-backend.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/sudoscientist-go-backend/templates/service.yaml b/sudoscientist-go-backend/templates/service.yaml new file mode 100644 index 0000000..dfcedf2 --- /dev/null +++ b/sudoscientist-go-backend/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "sudoscientist-go-backend.fullname" . }} + labels: + {{- include "sudoscientist-go-backend.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "sudoscientist-go-backend.selectorLabels" . | nindent 4 }} diff --git a/sudoscientist-go-backend/templates/serviceaccount.yaml b/sudoscientist-go-backend/templates/serviceaccount.yaml new file mode 100644 index 0000000..0f71f72 --- /dev/null +++ b/sudoscientist-go-backend/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "sudoscientist-go-backend.serviceAccountName" . }} + labels: + {{- include "sudoscientist-go-backend.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/sudoscientist-go-backend/templates/tests/test-connection.yaml b/sudoscientist-go-backend/templates/tests/test-connection.yaml new file mode 100644 index 0000000..3f4468e --- /dev/null +++ b/sudoscientist-go-backend/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "sudoscientist-go-backend.fullname" . }}-test-connection" + labels: + {{- include "sudoscientist-go-backend.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "sudoscientist-go-backend.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/sudoscientist-go-backend/values.yaml b/sudoscientist-go-backend/values.yaml new file mode 100644 index 0000000..e983743 --- /dev/null +++ b/sudoscientist-go-backend/values.yaml @@ -0,0 +1,23 @@ +image: + # -- image repository + repository: docker-repo.service.masked.name:5000/sudoscientist-go-backend + # -- image pull policy + pullPolicy: IfNotPresent + # -- image tag + # this example is not automatically updated, so be sure to use the latest image + tag: latest + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: false + +serviceAccount: + create: false + +serviceAccountName: sudoscientist + +autoscaling: + enable: false