A lot of work on the workload library
This commit is contained in:
		| @@ -1,3 +1,6 @@ | |||||||
| # helm-library | # Softplayer helm library | ||||||
|  |  | ||||||
| A helm library for the chart maintained by Bad Houseplants | ## About | ||||||
|  | ... | ||||||
|  | ## How to use? | ||||||
|  | ... | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| apiVersion: v2 | apiVersion: v2 | ||||||
| name: softplayer-lib-testing | name: softplayer-lib-crd | ||||||
| description: A library to be reused accross softplayer charts | description: A library to be reused accross softplayer charts | ||||||
| type: library | type: library | ||||||
| version: 0.1.0 | version: 0.1.0 | ||||||
							
								
								
									
										16
									
								
								charts/crds/templates/_crds.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								charts/crds/templates/_crds.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | {{- define "lib.crds" -}} | ||||||
|  | {{- range $crd := .Values.crds }} | ||||||
|  | {{ $manifest := $.Files.Get (printf "files/%s.yaml" $crd.file) | fromYaml }} | ||||||
|  | --- | ||||||
|  | apiVersion: apiextensions.k8s.io/v1 | ||||||
|  | kind: CustomResourceDefinition | ||||||
|  | {{- include "lib.metadata" (dict "Context" $ "customName" $manifest.metadata.name )}} | ||||||
|  | spec: | ||||||
|  |   group: {{ $manifest.spec.group }} | ||||||
|  |   names:  | ||||||
|  | {{ $manifest.spec.names | toYaml | indent 4 }} | ||||||
|  |   scope: {{ $manifest.spec.scope }} | ||||||
|  |   versions:  | ||||||
|  | {{ $manifest.spec.versions | toYaml | indent 4 }} | ||||||
|  | {{- end }} | ||||||
|  | {{- end }} | ||||||
| @@ -49,15 +49,3 @@ Selector labels | |||||||
| app.kubernetes.io/name: {{ include "chart.name" . }} | app.kubernetes.io/name: {{ include "chart.name" . }} | ||||||
| app.kubernetes.io/instance: {{ .Release.Name }} | app.kubernetes.io/instance: {{ .Release.Name }} | ||||||
| {{- end }} | {{- end }} | ||||||
| 
 |  | ||||||
| {{/* |  | ||||||
| Create the name of the service account to use |  | ||||||
| */}} |  | ||||||
| {{- define "chart.serviceAccountName" -}} |  | ||||||
| {{- if .Values.serviceAccount.create }} |  | ||||||
| {{- default (include "chart.fullname" .) .Values.serviceAccount.name }} |  | ||||||
| {{- else }} |  | ||||||
| {{- default "default" .Values.serviceAccount.name }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| 
 |  | ||||||
| @@ -1,20 +0,0 @@ | |||||||
| {{- define "lib.env" -}} |  | ||||||
| {{- range $k, $v := .Values.env }} |  | ||||||
| {{- $customName := printf "%s-%s" (include "chart.fullname" $) $k }} |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| {{- if not $v.sensitive }} |  | ||||||
| kind: ConfigMap |  | ||||||
| {{- include "lib.metadata" (dict "Context" $ "customName" $customName)}} |  | ||||||
| data: |  | ||||||
| {{- else }} |  | ||||||
| kind: Secret |  | ||||||
| {{- include "lib.metadata" (dict "Context" $ "customName" $customName)}} |  | ||||||
| stringData: |  | ||||||
| {{- end }} |  | ||||||
| {{- with $v.data }} |  | ||||||
| {{ toYaml . | indent 2}} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
|  |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| {{- define "lib.deployment" -}} |  | ||||||
| # --------------------------------------------------------------------- |  | ||||||
| # The deployment is build withing the helm library |  | ||||||
| # please check the lib/tempaltes/deployment/base |  | ||||||
| # --------------------------------------------------------------------- |  | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| {{- include "lib.metadata" (dict "Context" . "customName" "")}} |  | ||||||
| {{- include "deployment.spec" . }} |  | ||||||
| {{- end -}} |  | ||||||
|  |  | ||||||
| @@ -1,61 +0,0 @@ | |||||||
| {{/* |  | ||||||
|   This is a builder for deployments |  | ||||||
| */}} |  | ||||||
| {{- define "deployment.spec" }} |  | ||||||
| spec:  |  | ||||||
|   replicas: {{ .Values.workload.replicas }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
| {{ include "metadata.selectorLabels" . | indent 6 }} |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
| {{ include "metadata.labels" . | indent 8 }} |  | ||||||
|     spec: |  | ||||||
| {{ include "lib.securityContext" . | indent 6 }} |  | ||||||
|       {{- if or .Values.storage .Values.extraVolumes }} |  | ||||||
|       volumes: |  | ||||||
|       {{- if .Values.storage }} |  | ||||||
|       {{- range $k, $v := .Values.storage }} |  | ||||||
|         - name: {{ $k }} |  | ||||||
|           persistentVolumeClaim: |  | ||||||
|             claimName: {{ include "chart.fullname" $ }}-data |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
|       containers: |  | ||||||
| {{- range $k,$v := .Values.workload.containers }} |  | ||||||
|       - name: {{ $k }} |  | ||||||
| {{ include "lib.containerSecurityContext" . | indent 8 }} |  | ||||||
|         image: {{ index $.Chart.Annotations "helm.badhouseplants.net/registry" }}:{{ $.Chart.AppVersion }} |  | ||||||
| {{- with $v.ports }} |  | ||||||
|         ports: |  | ||||||
| {{- range $p := $v.ports}} |  | ||||||
|           - containerPort: {{ index (index $.Values.service.ports $p) "targetPort" }} |  | ||||||
|  |  | ||||||
| {{- if $v.envFrom }} |  | ||||||
|         envFrom: |  | ||||||
| {{- range $k := $v.envFrom }} |  | ||||||
| {{- if kindIs "string" $k }} |  | ||||||
| {{- if (index $.Values.env $k) }} |  | ||||||
| {{- if (index $.Values.env $k).sensitive }} |  | ||||||
|           - secretRef: |  | ||||||
| {{- else }} |  | ||||||
|           - configMapRef: |  | ||||||
| {{- end }} |  | ||||||
|               name: {{ printf "%s-%s" (include "chart.fullname" $) $k }} |  | ||||||
| {{- end }} |  | ||||||
| {{- else }} |  | ||||||
| {{- range $k, $v := $k }} |  | ||||||
|           - {{ $k }}: |  | ||||||
| {{ toYaml $v | indent 14 }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
|  |  | ||||||
|  |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| {{- define "lib.notes" -}} |  | ||||||
| {{ include "helpers.allowed_workloads" . }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,18 +0,0 @@ | |||||||
| {{- define "lib.pvc" -}} |  | ||||||
| {{- range $k, $v := .Values.storage }} |  | ||||||
| {{- $customName := printf "%s-%s" (include "chart.fullname" $) $k }} |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: PersistentVolumeClaim |  | ||||||
| {{- include "lib.metadata" (dict "Context" $ "customName" $customName)}} |  | ||||||
| spec: |  | ||||||
| {{- with $v.accessModes }} |  | ||||||
|   accessModes: |  | ||||||
| {{ toYaml . | indent 4}} |  | ||||||
| {{- end }} |  | ||||||
|   resources: |  | ||||||
|     requests: |  | ||||||
|       storage: {{ $v.size }} |  | ||||||
|   storageClassName: {{ $v.storageClassName }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
| @@ -1,29 +0,0 @@ | |||||||
| {{- define "lib.securityContext" -}} |  | ||||||
| {{- if not .Values.workload.securityContext -}} |  | ||||||
| # --------------------------------------------------------------------- |  | ||||||
| # Using the default security context, if it doesn't work for you, |  | ||||||
| # please update `.Values.workload.securityContext` |  | ||||||
| # --------------------------------------------------------------------- |  | ||||||
| securityContext: |  | ||||||
|   runAsUser: 1000 |  | ||||||
|   runAsGroup: 3000 |  | ||||||
|   fsGroup: 2000 |  | ||||||
| {{- else -}} |  | ||||||
| {{- with .Values.workload.securityContext -}} |  | ||||||
| securityContext: |  | ||||||
| {{ toYaml . | indent 2 }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
| {{- end -}} |  | ||||||
|  |  | ||||||
| {{- define "lib.containerSecurityContext" -}} |  | ||||||
| securityContext: |  | ||||||
| {{- if  not .securityContext }} |  | ||||||
|   runAsUser: 2000 |  | ||||||
|   allowPrivilegeEscalation: false |  | ||||||
| {{- else }} |  | ||||||
| {{- with .securityContext }} |  | ||||||
| {{ toYaml . | indent 2 }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
| {{- end -}} |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| {{- define "helpers.allowed_workloads" -}} |  | ||||||
| {{ index .Chart.Annotations "helm.badhouseplants.net/allowed_workload_kinds" }} |  | ||||||
| {{- end -}} |  | ||||||
|  |  | ||||||
| {{- define "lib.workload" -}} |  | ||||||
| --- |  | ||||||
| {{ if eq .Values.workload.kind "Deployment" -}} |  | ||||||
| {{- if contains .Values.workload.kind (include "helpers.allowed_workloads" .) }} |  | ||||||
| {{- include "lib.deployment" . }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,97 +0,0 @@ | |||||||
| {{/* |  | ||||||
|   This is a builder for deployments |  | ||||||
| */}} |  | ||||||
| {{- define "deployment.spec" }} |  | ||||||
| spec:  |  | ||||||
|   replicas: {{ .Values.workload.replicas }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
| {{ include "metadata.selectorLabels" . | indent 6 }} |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
| {{ include "metadata.labels" . | indent 8 }} |  | ||||||
|     spec: |  | ||||||
| {{/* Prepare the securityContext for the pod */}} |  | ||||||
| {{- include "lib.securityContext" . | indent 6 -}} |  | ||||||
| {{/* Add all the volues to pod */}} |  | ||||||
|       {{- if or ( or .Values.storage .Values.extraVolumes) .Values.files }} |  | ||||||
|       volumes: |  | ||||||
|       {{- if .Values.storage }} |  | ||||||
|       {{- range $k, $v := .Values.storage }} |  | ||||||
|         - name: {{ $k }}-storage |  | ||||||
|           persistentVolumeClaim: |  | ||||||
|             claimName: " {{- printf "%s-%s" (include "chart.fullname" $) $k }}" |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end  }} |  | ||||||
|       {{- if .Values.files }}-file |  | ||||||
|       {{- range $k, $v := .Values.files }} |  | ||||||
|         - name: {{ $k }} |  | ||||||
|           {{- if $v.sensitive }} |  | ||||||
|           secret: |  | ||||||
|             defaultMode: 420 |  | ||||||
|             secretName: " {{- printf "%s-%s" (include "chart.fullname" $) $k }}" |  | ||||||
|           {{- else }} |  | ||||||
|           configMap: |  | ||||||
|             name: "{{- printf "%s-%s" (include "chart.fullname" $) $k }}" |  | ||||||
|           {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end -}} |  | ||||||
| {{/* Define containers */}} |  | ||||||
|       containers: |  | ||||||
| {{- range $k,$v := .Values.workload.containers }} |  | ||||||
|       - name: {{ $k }} |  | ||||||
| {{/* Prepare the securityContext for the container */}} |  | ||||||
| {{- include "lib.containerSecurityContext" . | indent 8 -}} |  | ||||||
| {{/* Image fron chart's annotations */}} |  | ||||||
|         image: {{ index $.Chart.Annotations "helm.badhouseplants.net/registry" }}:{{ $.Chart.AppVersion }} |  | ||||||
|         {{- with $v.command }} |  | ||||||
|         command:  |  | ||||||
| {{. | toYaml | indent 10 }} |  | ||||||
|         {{- end -}} |  | ||||||
|         {{- with $v.args }} |  | ||||||
|         args:  |  | ||||||
| {{. | toYaml | indent 10 }} |  | ||||||
|         {{- end -}} |  | ||||||
| {{- if $v.mounts }} |  | ||||||
|         mounts: |  | ||||||
| {{- range $k ,$v := range $v.mounts }} |  | ||||||
| {{- if $k == "storage" }} |  | ||||||
|           name: {{ $k }}-storage |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
|     volumeMounts: |  | ||||||
| {{/* Ports */}} |  | ||||||
| {{- with $v.ports }} |  | ||||||
|         ports: |  | ||||||
| {{- range $p := $v.ports}} |  | ||||||
|           - containerPort: {{ index (index $.Values.service.ports $p) "targetPort" }} |  | ||||||
| {{/* If env should be set from a Configmap/Secret */}} |  | ||||||
| {{- if $v.envFrom }} |  | ||||||
|         envFrom: |  | ||||||
| {{- range $k := $v.envFrom }} |  | ||||||
| {{/* If envFrom entry is a string, then refer to the env created by the library */}} |  | ||||||
| {{- if kindIs "string" $k }} |  | ||||||
| {{- if (index $.Values.env $k) }} |  | ||||||
| {{- if (index $.Values.env $k).sensitive }} |  | ||||||
|           - secretRef: |  | ||||||
| {{- else }} |  | ||||||
|           - configMapRef: |  | ||||||
| {{- end }} |  | ||||||
|               name: {{ printf "%s-%s" (include "chart.fullname" $) $k }} |  | ||||||
| {{- end }} |  | ||||||
| {{/* Otherwise try to add references directly (if Secrets/ConfigMaps are not managed by the chart) */}} |  | ||||||
| {{- else }} |  | ||||||
| {{- range $k, $v := $k }} |  | ||||||
|           - {{ $k }}: |  | ||||||
| {{ toYaml $v | indent 14 }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
|  |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| {{- define "lib.securityContext" -}} |  | ||||||
| {{- if not .Values.workload.securityContext -}} |  | ||||||
| # --------------------------------------------------------------------- |  | ||||||
| # Using the default security context, if it doesn't work for you, |  | ||||||
| # please update `.Values.workload.securityContext` |  | ||||||
| # --------------------------------------------------------------------- |  | ||||||
| securityContext: |  | ||||||
|   runAsUser: 1000 |  | ||||||
|   runAsGroup: 3000 |  | ||||||
|   fsGroup: 2000 |  | ||||||
|   seccompProfile: |  | ||||||
|     type: RuntimeDefault |  | ||||||
| {{- else -}} |  | ||||||
| {{- with .Values.workload.securityContext -}} |  | ||||||
| securityContext: |  | ||||||
| {{ toYaml . | indent 2 }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
| {{- end -}} |  | ||||||
|  |  | ||||||
| {{- define "lib.containerSecurityContext" -}} |  | ||||||
| securityContext: |  | ||||||
| {{- if  not .securityContext }} |  | ||||||
|   runAsUser: 2000 |  | ||||||
|   allowPrivilegeEscalation: false |  | ||||||
|   capabilities: |  | ||||||
|     drop: |  | ||||||
|       - ALL |  | ||||||
| {{- else }} |  | ||||||
| {{- with .securityContext }} |  | ||||||
| {{ toYaml . | indent 2 }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end -}} |  | ||||||
| {{- end -}} |  | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| apiVersion: v2 | apiVersion: v2 | ||||||
| name: softplayer-lib-workload-testing | name: softplayer-lib-workload | ||||||
| description: A library to be reused accross softplayer charts | description: A library to be reused accross softplayer charts | ||||||
| type: library | type: library | ||||||
| version: 0.1.0 | version: 0.1.0 | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| {{- define "helpers.allowed_workloads" -}} | {{- define "helpers.allowed_workloads" -}} | ||||||
| {{ index .Chart.Annotations "helm.badhouseplants.net/allowed_workload_kinds" }} | {{ index .Chart.Annotations "allowed_workload_kinds" }} | ||||||
| {{- end -}} | {{- end -}} | ||||||
| 
 | 
 | ||||||
| {{- define "lib.workload" -}} | {{- define "lib.workload" -}} | ||||||
| @@ -10,3 +10,4 @@ | |||||||
| {{- end }} | {{- end }} | ||||||
| {{- end }} | {{- end }} | ||||||
| {{- end }} | {{- end }} | ||||||
|  | 
 | ||||||
| @@ -0,0 +1,13 @@ | |||||||
|  | {{- define "lib.traefik.ingress_route_tcp" -}} | ||||||
|  | {{- range $k, $v := .Values.traefik.tcpRoutes }} | ||||||
|  | {{- $customName := printf "%s-%s" (include "chart.fullname" $) $k }} | ||||||
|  | --- | ||||||
|  | {{- if .Capabilities.APIVersions.Has "traefik.io/v1alpha1/IngressRouteTCP" }} | ||||||
|  | apiVersion: traefik.io/v1alpha1 | ||||||
|  | kind: IngressRouteTCP | ||||||
|  | {{- include "lib.metadata" (dict "Context" $ "customName" $customName)}} | ||||||
|  | spec: | ||||||
|  | {{ tpl ($v | toYaml | indent 2 | toString) $  }} | ||||||
|  | {{- end }} | ||||||
|  | {{- end }} | ||||||
|  | {{- end -}} | ||||||
| @@ -0,0 +1,13 @@ | |||||||
|  | {{- define "lib.traefik.ingress_route_udp" -}} | ||||||
|  | {{- range $k, $v := .Values.traefik.udpRoutes }} | ||||||
|  | {{- $customName := printf "%s-%s" (include "chart.fullname" $) $k }} | ||||||
|  | --- | ||||||
|  | {{- if .Capabilities.APIVersions.Has "traefik.io/v1alpha1/IngressRouteUDP" }} | ||||||
|  | apiVersion: traefik.io/v1alpha1 | ||||||
|  | kind: IngressRouteUDP | ||||||
|  | {{- include "lib.metadata" (dict "Context" $ "customName" $customName)}} | ||||||
|  | spec: | ||||||
|  | {{ tpl ($v | toYaml | indent 2 | toString) $  }} | ||||||
|  | {{- end }} | ||||||
|  | {{- end }} | ||||||
|  | {{- end -}} | ||||||
							
								
								
									
										117
									
								
								charts/workload/templates/deployment/_containers.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								charts/workload/templates/deployment/_containers.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | |||||||
|  | {{- define "helper.deployment.containers" -}} {{- /* (define) */ -}} | ||||||
|  | {{- if not .Values.workload.containers -}} {{- /* (1) */ -}} | ||||||
|  | {{ fail ".Values.workload.containers can not be empty (heler.deployment.containers)" }} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | containers: | ||||||
|  | {{- range $k,$v := .Values.workload.containers }} {{- /* (1) */}} | ||||||
|  |   - name: {{ $k }} | ||||||
|  |     {{- include "helper.workload.containerSecurityContext" . | nindent 4 -}} | ||||||
|  |     {{- include "helper.workload.image" (dict "Chart" $.Chart "Image" .image) | indent 4 -}} | ||||||
|  |     {{- include "helper.container.command" $v | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.args" $v | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.ports" (dict "Context" $ "Container" $v) | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.volumeMounts" $v | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.envFrom" (dict "Context" $ "Container" $v) | nindent 4 -}} | ||||||
|  | {{- end }} {{- /* /(1) */}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.deployment.initContainers" -}} {{- /* (define) */ -}} | ||||||
|  | {{- if .Values.workload.initContainers -}} {{- /* (1) */ -}} | ||||||
|  | initContainers: | ||||||
|  | {{- range $k,$v := .Values.workload.initContainers }} {{- /* (2) */}} | ||||||
|  |   - name: {{ $k }} | ||||||
|  |     {{- include "helper.workload.containerSecurityContext" . | nindent 4 -}} | ||||||
|  |     {{- include "helper.workload.image" (dict "Chart" $.Chart "Image" .image) | indent 4 -}} | ||||||
|  |     {{- include "helper.container.command" $v | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.args" $v | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.ports" (dict "Context" $ "Container" $v) | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.volumeMounts" $v | nindent 4 -}} | ||||||
|  |     {{- include "helper.container.envFrom" (dict "Context" $ "Container" $v) | nindent 4 -}} | ||||||
|  | {{- end }} {{- /* /(1) */}} | ||||||
|  | {{- end -}} {{- /* /(2) */ -}} | ||||||
|  |  | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.deployment.container" -}} {{- /* (define) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.container.command" -}} {{- /* (define) */ -}} | ||||||
|  | {{- with .command }} {{- /* (1) */ -}} | ||||||
|  | command:  | ||||||
|  | {{ . | toYaml | indent 2 }} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.container.args" -}} {{- /* (define) */ -}} | ||||||
|  | {{- with .args }} {{- /* (1) */ -}} | ||||||
|  | args:  | ||||||
|  | {{ . | toYaml | indent 2 }} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.container.ports" -}} {{- /* (define) */ -}} | ||||||
|  | {{- if .Container.ports -}} {{- /* (1) */ -}} | ||||||
|  | ports: | ||||||
|  | {{- range $p := .Container.ports -}} {{- /* (2) */ -}} | ||||||
|  | {{- if kindIs "string" $p }} {{- /* (3) */}} | ||||||
|  |   - containerPort: {{ index (index $.Context.Values.service.ports $p) "targetPort" }} | ||||||
|  |     protocol: {{ index (index $.Context.Values.service.ports $p) "protocol" }} | ||||||
|  | {{- else }} | ||||||
|  | {{ print "-" | indent 2 | -}} | ||||||
|  | {{ $p | toYaml | nindent 4 -}} | ||||||
|  | {{- end -}} {{- /* /(3) */ -}} | ||||||
|  | {{- end -}} {{- /* /(2) */ -}} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.container.volumeMounts" -}} {{- /* (define) */ -}} | ||||||
|  | {{- if .mounts -}} {{- /* (1) */ -}} | ||||||
|  | volumeMounts: | ||||||
|  | {{- range $mountKind, $mountData := .mounts }} {{- /* (2) */}} | ||||||
|  | {{- if eq $mountKind "storage" }} {{- /* (3) */}} | ||||||
|  | {{- range $mountName, $mountEntry := $mountData }} {{- /* (4) */}} | ||||||
|  |   - name: {{ printf "%s-storage" $mountName }} | ||||||
|  |     mountPath: {{ $mountEntry.path }}  | ||||||
|  | {{- end }} {{- /* /(4) */}} | ||||||
|  | {{- end }} {{- /* /(3) */}} | ||||||
|  | {{- if eq $mountKind "files" }} {{- /* (3) */}} | ||||||
|  | {{- range $mountName, $mountEntry := $mountData }} {{- /* (4) */}} | ||||||
|  |   - name: {{ printf "%s-file" $mountName }} | ||||||
|  |     mountPath: {{ $mountEntry.path }}  | ||||||
|  | {{- end }} {{- /* /(4) */}} | ||||||
|  | {{- end }} {{- /* /(3) */}} | ||||||
|  | {{- if eq $mountKind "extraVolumes" }} {{- /* (3) */}} | ||||||
|  | {{- range $mountName, $mountEntry := $mountData }} {{- /* (4) */}} | ||||||
|  |   - name: {{ printf "%s-extra" $mountName }} | ||||||
|  |     mountPath: {{ $mountEntry.path }}  | ||||||
|  | {{- end }} {{- /* /(4) */}} | ||||||
|  | {{- end }} {{- /* /(3) */}} | ||||||
|  | {{- end }} {{- /* /(2) */}} | ||||||
|  | {{- end }} {{- /* /(1) */}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{- define "helper.container.envFrom" -}} {{- /* (define) */ -}} | ||||||
|  | {{/* If env should be set from a Configmap/Secret */}} | ||||||
|  | {{- if .Container.envFrom }} {{- /* (1) */}} | ||||||
|  | envFrom: | ||||||
|  | {{- range $k := .Container.envFrom -}} {{- /* (2) */ -}} | ||||||
|  | {{/* If envFrom entry is a string, then refer to the env created by the library */}} | ||||||
|  | {{- if kindIs "string" $k -}} {{- /* (3) */ -}} | ||||||
|  | {{- if (index $.Context.Values.env $k) -}} {{- /* (4) */ -}} | ||||||
|  | {{- if (index $.Context.Values.env $k).sensitive }} {{- /* (5) */}} | ||||||
|  |   - secretRef: | ||||||
|  | {{- else }} | ||||||
|  |   - configMapRef: | ||||||
|  | {{- end }} {{- /* /(5) */}} | ||||||
|  |     name: {{- printf " %s-%s" (include "chart.fullname" $.Context) $k -}} | ||||||
|  | {{- end -}} {{- /* /(4) */}} | ||||||
|  | {{- /* Otherwise try to add references directly (if Secrets/ConfigMaps are not managed by the chart) */ -}} | ||||||
|  | {{- else -}} | ||||||
|  | {{- range $k, $v := $k }} {{- /* (5) */}} | ||||||
|  |   - {{ $k }}: | ||||||
|  | {{ toYaml $v | indent 14 }} | ||||||
|  | {{- end -}} {{- /* /(4) */ -}} | ||||||
|  | {{- end -}} {{- /* /(3) */ -}} | ||||||
|  | {{- end -}} {{- /* /(2) */ -}} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
							
								
								
									
										29
									
								
								charts/workload/templates/deployment/_spec.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								charts/workload/templates/deployment/_spec.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | {{/* | ||||||
|  |   This is a builder for deployments | ||||||
|  | */}} | ||||||
|  |  | ||||||
|  | {{- define "deployment.spec" }} {{- /* (define) */}} | ||||||
|  | # --------------------------------------------------------------------- | ||||||
|  | # The spec is build within the helm library | ||||||
|  | # please check the lib/templates/deployment/spec | ||||||
|  | # --------------------------------------------------------------------- | ||||||
|  | spec:  | ||||||
|  |   replicas: {{ .Values.workload.replicas | default 1}} | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  | {{ include "metadata.selectorLabels" . | indent 6 }} | ||||||
|  | {{ include "lib.deployment.template" . | indent 2 }} | ||||||
|  |  | ||||||
|  | {{- end -}} | ||||||
|  |  | ||||||
|  | {{- define "lib.deployment.template" -}} {{- /* (define) */ -}} | ||||||
|  | template: | ||||||
|  |   metadata: | ||||||
|  |     labels: | ||||||
|  |       {{- include "metadata.labels" . | nindent 6 }} | ||||||
|  |   spec: | ||||||
|  |     {{- include "helper.workload.securityContext" . | nindent 4 -}} | ||||||
|  |     {{- include "helper.deployment.volumes" . | nindent 4 }} | ||||||
|  |     {{- include "helper.deployment.containers" . | nindent 4 }} | ||||||
|  |     {{- include "helper.deployment.initContainers" . | nindent 4 }} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
							
								
								
									
										32
									
								
								charts/workload/templates/deployment/_volumes.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								charts/workload/templates/deployment/_volumes.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | {{- define "helper.deployment.volumes" -}} {{- /* (define) */ -}} | ||||||
|  | {{- if or ( or .Values.storage .Values.extraVolumes) .Values.files }} {{- /* (1)*/}} | ||||||
|  | volumes: | ||||||
|  | {{- /* If storage is defined, mount the pvc */ -}} | ||||||
|  |   {{- if .Values.storage }} {{- /* (2) */}} | ||||||
|  |     {{- range $k, $v := .Values.storage }} {{- /* (3) */}} | ||||||
|  |   - name: {{ $k }}-storage | ||||||
|  |     persistentVolumeClaim: | ||||||
|  |       claimName: " {{- printf "%s-%s" (include "chart.fullname" $) $k }}" | ||||||
|  |     {{- end }} {{- /* /(3) */}} | ||||||
|  |   {{- end  }} {{- /* /(2) */}} | ||||||
|  |   {{- if .Values.extraVolumes}} {{- /* (2) */}} | ||||||
|  |     {{- range $k, $v := .Values.extraVolumes}} {{- /* (3) */}} | ||||||
|  |   - name: {{ $k }}-extra | ||||||
|  |     {{- $v | toYaml | nindent 4 }} | ||||||
|  |     {{- end }} {{- /* /(3) */}} | ||||||
|  |   {{- end }} {{- /* /(2) */}} | ||||||
|  |   {{- if .Values.files }} {{- /* (2) */}} | ||||||
|  |     {{- range $k, $v := .Values.files }} {{- /* (3) */}} | ||||||
|  |   - name: {{ $k }}-file | ||||||
|  |       {{- if $v.sensitive }} {{- /* (4) */}} | ||||||
|  |     secret: | ||||||
|  |       defaultMode: 420 | ||||||
|  |       secretName: "{{ printf "%s-%s" (include "chart.fullname" $) $k }}" | ||||||
|  |       {{- else }} | ||||||
|  |     configMap: | ||||||
|  |       name: "{{- printf "%s-%s" (include "chart.fullname" $) $k }}" | ||||||
|  |       {{- end }} {{- /* /(4) */}} | ||||||
|  |     {{- end }} {{- /* /(3) */}} | ||||||
|  |   {{- end }} {{- /* /(2) */}} | ||||||
|  | {{- end -}} {{- /* /(1)*/ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| {{- define "lib.metadata" }} | {{- define "lib.metadata" }} | ||||||
| metadata: | metadata: | ||||||
|   {{- if  .customName }} |   {{- if .customName }} | ||||||
|   name: {{ .customName }} |   name: {{ .customName }} | ||||||
|   {{- else }} |   {{- else }} | ||||||
|   name: {{ include "chart.fullname" .Context }} |   name: {{ include "chart.fullname" .Context }} | ||||||
							
								
								
									
										8
									
								
								charts/workload/templates/notes/_notes.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								charts/workload/templates/notes/_notes.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | {{- define "lib.notes" -}} | ||||||
|  | *** Release metadata *** | ||||||
|  | Chart: {{ .Chart.Name }} | ||||||
|  | Chart version: {{ .Chart.Version }} | ||||||
|  | App version: {{ .Chart.Version }} | ||||||
|  | Image: {{ index $.Chart.Annotations "helm.badhouseplants.net/registry" }} | ||||||
|  | Release name: {{ .Release.Name }} | ||||||
|  | {{- end }} | ||||||
| @@ -18,6 +18,8 @@ spec: | |||||||
|   resources: |   resources: | ||||||
|     requests: |     requests: | ||||||
|       storage: {{ $v.size }} |       storage: {{ $v.size }} | ||||||
|  | {{- if ne $v.storageClassName "default" }} | ||||||
|   storageClassName: {{ $v.storageClassName }} |   storageClassName: {{ $v.storageClassName }} | ||||||
| {{- end }} | {{- end }} | ||||||
|  | {{- end }} | ||||||
| {{- end -}} | {{- end -}} | ||||||
| @@ -1,25 +1,31 @@ | |||||||
| {{- define "lib.service" }} | {{- define "lib.services" }} | ||||||
|  | {{- range $k, $v := .Values.services }} | ||||||
|  | {{- $customName := printf "%s-%s" (include "chart.fullname" $) $k }} | ||||||
|  | 
 | ||||||
| --- | --- | ||||||
| # --------------------------------------------------------------------- | # --------------------------------------------------------------------- | ||||||
| # This service is created as a part of badhouseplants helm library | # This service is created as a part of softplayer helm library | ||||||
| # please see /lib/tempaltes/service/_service.tpl | # please see /lib/tempaltes/service/_service.tpl | ||||||
| # --------------------------------------------------------------------- | # --------------------------------------------------------------------- | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: Service | kind: Service | ||||||
| {{- include "lib.metadata" (dict "Context" . "customName" "")}} | {{- include "lib.metadata" (dict "Context" $ "customName" $customName)}} | ||||||
| spec: | spec: | ||||||
|   {{- if (.Values.service).type }} |   {{- if ($v).type }} | ||||||
|   type: {{ .Values.service.type }} |   type: {{ $v.type }} | ||||||
|   {{- else }} |   {{- else }} | ||||||
|   type: ClusterIP |   type: ClusterIP | ||||||
|   {{- end }} |   {{- end }} | ||||||
|   selector: |   selector: | ||||||
| {{ include "metadata.selectorLabels" .  | indent 4}} | {{ include "metadata.selectorLabels" $  | indent 4}} | ||||||
|   ports: |   ports: | ||||||
| {{- range $k,$v := .Values.service.ports }} | {{- range $k,$v := $v.ports }} | ||||||
|     - name: {{ $k }} |     - name: {{ $k }} | ||||||
|       port: {{ $v.port }} |       port: {{ $v.port }} | ||||||
|       targetPort: {{ $v.targetPort}} |       targetPort: {{ $v.targetPort}} | ||||||
|       protocol: {{ $v.protocol}} |       protocol: {{ $v.protocol}} | ||||||
| {{- end }} | {{- end }} | ||||||
| {{- end }} | {{- end }} | ||||||
|  | 
 | ||||||
|  | {{- end -}} | ||||||
|  | 
 | ||||||
							
								
								
									
										33
									
								
								charts/workload/templates/workload/_image.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								charts/workload/templates/workload/_image.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | # --------------------------------------------------------------------- | ||||||
|  | # Main workload helpers | ||||||
|  | # --------------------------------------------------------------------- | ||||||
|  | {{/* | ||||||
|  |   Prepare a tag for the container image  | ||||||
|  |   Example:  | ||||||
|  |   {{ include "helper.workload.tag" (dict "AppVersion" $.Chart.AppVersion "Tag" .Image.tag) }} | ||||||
|  | */}} | ||||||
|  | {{- define "helper.workload.tag" -}} {{/* (define) */}} | ||||||
|  | {{- if or .Tag .AppVersion -}} {{/* (1) */}} | ||||||
|  |   {{- if .Tag -}} {{/* (2) */}} | ||||||
|  |     {{- .Tag -}}  | ||||||
|  |   {{- else -}} | ||||||
|  |     {{- .AppVersion  -}} | ||||||
|  |   {{- end -}} {{/* /(2) */}} | ||||||
|  | {{- else -}} | ||||||
|  |   {{ fail ".Tag or .AppVersion must be passed to this helper (helper.workload.tag)"}} | ||||||
|  | {{- end -}} {{/* /(1) */}} | ||||||
|  | {{- end -}} {{/* /(define) */}} | ||||||
|  |  | ||||||
|  | {{/* | ||||||
|  |   Prepare the image name for the container | ||||||
|  |   Example:  | ||||||
|  |   {{ include "helper.workload.image" (dict "Chart" $.Chart "Image" .image) }} | ||||||
|  | */}} | ||||||
|  | {{- define "helper.workload.image" -}} {{/* (define) */}} | ||||||
|  | {{- if and .Chart .Image -}} {{/* (1) */}} | ||||||
|  | image: {{ printf "%s/%s:%s" .Image.registry .Image.repository (include "helper.workload.tag" (dict "AppVersion" $.Chart.AppVersion "Tag" .Image.tag)) }} | ||||||
|  | imagePullPolicy: {{ .Image.pullPolicy | default "Always" }} | ||||||
|  | {{- else -}} | ||||||
|  |   {{ fail ".Chart and .Image must be passed to this helper (helper.workload.image)"}} | ||||||
|  | {{- end -}} {{/* /(1) */}} | ||||||
|  | {{- end -}} {{/* /(define) */}} | ||||||
							
								
								
									
										36
									
								
								charts/workload/templates/workload/_security.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								charts/workload/templates/workload/_security.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | {{/* Build a pod security context */}} | ||||||
|  | {{- define "helper.workload.securityContext" -}} {{- /* (define) */ -}} | ||||||
|  | {{- if not .Values.workload.securityContext -}} {{- /* (1) */ -}} | ||||||
|  | # --------------------------------------------------------------------- | ||||||
|  | # Using the default security context, if it doesn't work for you, | ||||||
|  | # please update `.Values.workload.securityContext` | ||||||
|  | # --------------------------------------------------------------------- | ||||||
|  | securityContext: | ||||||
|  |   runAsUser: 1000 | ||||||
|  |   runAsGroup: 3000 | ||||||
|  |   fsGroup: 2000 | ||||||
|  |   seccompProfile: | ||||||
|  |     type: RuntimeDefault | ||||||
|  | {{- else -}} | ||||||
|  |   {{- with .Values.workload.securityContext -}} {{- /* (2) */ -}} | ||||||
|  | securityContext: | ||||||
|  | {{ toYaml . | indent 2 }} | ||||||
|  |   {{- end }} {{- /* /(2) */}} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
|  |  | ||||||
|  | {{/* Build a container security context */}} | ||||||
|  | {{- define "helper.workload.containerSecurityContext" -}} {{- /* (define) */ -}} | ||||||
|  | securityContext: | ||||||
|  | {{- if  not .securityContext }} {{- /* (1) */}} | ||||||
|  |   runAsUser: 2000 | ||||||
|  |   allowPrivilegeEscalation: false | ||||||
|  |   capabilities: | ||||||
|  |     drop: | ||||||
|  |       - ALL | ||||||
|  | {{- else }} | ||||||
|  | {{- with .securityContext }} {{- /* (2) */}} | ||||||
|  | {{ toYaml . | indent 2 }} | ||||||
|  | {{- end }} {{- /* /(2) */}} | ||||||
|  | {{- end -}} {{- /* /(1) */ -}} | ||||||
|  | {{- end -}} {{- /* /(define) */ -}} | ||||||
		Reference in New Issue
	
	Block a user