167 lines
6.0 KiB
Smarty
167 lines
6.0 KiB
Smarty
{{- define "runner-mode-dind.runner-container" -}}
|
|
name: runner
|
|
image: {{ include "runner.image" . | quote }}
|
|
command: {{ include "runner.command" . }}
|
|
env:
|
|
- {{ include "runner-mode-dind.env-docker-host" . | nindent 4 }}
|
|
- {{ include "runner-mode-dind.env-wait-for-docker-timeout" . | nindent 4 }}
|
|
{{/* TODO:: Should we skip DOCKER_HOST and RUNNER_WAIT_FOR_DOCKER_IN_SECONDS? */}}
|
|
{{- with .Values.runner.env }}
|
|
{{- toYaml . | nindent 2 }}
|
|
{{- end }}
|
|
{{ include "githubServerTLS.envItems" (dict "root" $ "existingEnv" (.Values.runner.env | default list)) | nindent 2 }}
|
|
volumeMounts:
|
|
- name: work
|
|
mountPath: /home/runner/_work
|
|
- name: dind-sock
|
|
mountPath: {{ include "runner-mode-dind.sock-mount-dir" . | quote }}
|
|
{{ include "githubServerTLS.volumeMountItem" (dict "root" $ "existingVolumeMounts" (list)) | nindent 2 }}
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.dind-container" -}}
|
|
{{- $dind := .Values.runner.dind | default dict -}}
|
|
{{- $dindContainer := ($dind.container | default dict) -}}
|
|
{{- if and (hasKey $dind "container") (not (kindIs "map" $dindContainer)) -}}
|
|
{{- fail "runner.dind.container must be a map/object" -}}
|
|
{{- end -}}
|
|
{{- if and (hasKey $dindContainer "env") (not (kindIs "slice" $dindContainer.env)) -}}
|
|
{{- fail "runner.dind.container.env must be a list" -}}
|
|
{{- end -}}
|
|
{{- if and (hasKey $dindContainer "volumeMounts") (not (kindIs "slice" $dindContainer.volumeMounts)) -}}
|
|
{{- fail "runner.dind.container.volumeMounts must be a list" -}}
|
|
{{- end -}}
|
|
{{- if hasKey $dindContainer "volumes" -}}
|
|
{{- fail "runner.dind.container.volumes is not supported; use runner.pod.spec.volumes" -}}
|
|
{{- end -}}
|
|
{{- if and (hasKey $dindContainer "args") (not (kindIs "slice" $dindContainer.args)) -}}
|
|
{{- fail "runner.dind.container.args must be a list" -}}
|
|
{{- end -}}
|
|
{{- if and (hasKey $dindContainer "securityContext") (not (kindIs "map" $dindContainer.securityContext)) -}}
|
|
{{- fail "runner.dind.container.securityContext must be a map/object" -}}
|
|
{{- end -}}
|
|
{{- if and (hasKey $dindContainer "startupProbe") (not (kindIs "map" $dindContainer.startupProbe)) -}}
|
|
{{- fail "runner.dind.container.startupProbe must be a map/object" -}}
|
|
{{- end -}}
|
|
|
|
name: {{ $dindContainer.name | default "dind" }}
|
|
image: {{ $dindContainer.image | default "docker:dind" | quote }}
|
|
args:
|
|
{{- if $dindContainer.args }}
|
|
{{- toYaml $dindContainer.args | nindent 2 }}
|
|
{{- else }}
|
|
{{- include "runner-mode-dind.args" . | nindent 2 }}
|
|
{{- end }}
|
|
env:
|
|
- name: DOCKER_GROUP_GID
|
|
value: {{ ($dind.dockerGroupId | default "123") | quote }}
|
|
{{- with $dindContainer.env }}
|
|
{{- toYaml . | nindent 2 }}
|
|
{{- end }}
|
|
securityContext:
|
|
{{- if $dindContainer.securityContext }}
|
|
{{- toYaml $dindContainer.securityContext | nindent 2 }}
|
|
{{ else }}
|
|
{{- toYaml (dict "privileged" true) | nindent 2 }}
|
|
{{- end }}
|
|
restartPolicy: Always
|
|
startupProbe:
|
|
{{- if $dindContainer.startupProbe }}
|
|
{{- toYaml $dindContainer.startupProbe | nindent 2 }}
|
|
{{- else }}
|
|
{{- include "runner-mode-dind.startup-probe" . | nindent 2 }}
|
|
{{- end }}
|
|
volumeMounts:
|
|
- name: work
|
|
mountPath: /home/runner/_work
|
|
- name: dind-sock
|
|
mountPath: {{ include "runner-mode-dind.sock-mount-dir" . | quote }}
|
|
{{- with $dindContainer.volumeMounts }}
|
|
{{- toYaml . | nindent 2 }}
|
|
{{- end }}
|
|
{{- if $dind.copyRunnerExternals }}
|
|
- name: dind-externals
|
|
mountPath: /home/runner/externals
|
|
{{ end }}
|
|
|
|
{{- $extra := omit $dindContainer "name" "image" "args" "env" "securityContext" "startupProbe" "volumeMounts" -}}
|
|
{{- if not (empty $extra) -}}
|
|
{{ toYaml $extra }}
|
|
{{- end -}}
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.pod-volumes" -}}
|
|
- name: work
|
|
emptyDir: {}
|
|
- name: dind-sock
|
|
emptyDir: {}
|
|
{{ include "githubServerTLS.podVolumeItem" . }}
|
|
{{- if .Values.runner.dind.copyRunnerExternals }}
|
|
- name: dind-externals
|
|
emptyDir: {}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.copy-externals" -}}
|
|
name: init-dind-externals
|
|
image: ghcr.io/actions/actions-runner:latest
|
|
command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
|
|
volumeMounts:
|
|
- name: dind-externals
|
|
mountPath: /home/runner/tmpDir
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.startup-probe" -}}
|
|
exec:
|
|
command:
|
|
- docker
|
|
- info
|
|
initialDelaySeconds: 0
|
|
failureThreshold: 24
|
|
periodSeconds: 5
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.args" -}}
|
|
{{- $dind := .Values.runner.dind | default dict -}}
|
|
{{- $dockerSock := $dind.dockerSock | default "unix:///var/run/docker.sock" -}}
|
|
{{- if not (kindIs "string" $dockerSock) -}}
|
|
{{- fail "runner.dind.dockerSock must be a string" -}}
|
|
{{- end -}}
|
|
- dockerd
|
|
- {{ printf "--host=%s" $dockerSock }}
|
|
- --group=$(DOCKER_GROUP_GID)
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.env-docker-host" -}}
|
|
{{- $dind := .Values.runner.dind | default dict -}}
|
|
{{- $dockerSock := $dind.dockerSock | default "unix:///var/run/docker.sock" -}}
|
|
{{- if not (kindIs "string" $dockerSock) -}}
|
|
{{- fail "runner.dind.dockerSock must be a string" -}}
|
|
{{- end -}}
|
|
name: DOCKER_HOST
|
|
value: {{ $dockerSock | quote }}
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.env-wait-for-docker-timeout" -}}
|
|
{{- $dind := .Values.runner.dind | default dict -}}
|
|
{{- $waitForDockerInSeconds := $dind.waitForDockerInSeconds | default 120 -}}
|
|
{{- if not (or (kindIs "int" $waitForDockerInSeconds) (kindIs "int64" $waitForDockerInSeconds) (kindIs "float64" $waitForDockerInSeconds)) -}}
|
|
{{- fail "runner.dind.waitForDockerInSeconds must be a number" -}}
|
|
{{- end -}}
|
|
{{- $waitForDockerInSecondsInt := ($waitForDockerInSeconds | int) -}}
|
|
{{- if lt $waitForDockerInSecondsInt 0 -}}
|
|
{{- fail "runner.dind.waitForDockerInSeconds must be non-negative" -}}
|
|
{{- end -}}
|
|
name: RUNNER_WAIT_FOR_DOCKER_IN_SECONDS
|
|
value: {{ $waitForDockerInSecondsInt | toString | quote }}
|
|
{{- end }}
|
|
|
|
{{- define "runner-mode-dind.sock-mount-dir" -}}
|
|
{{- $dind := .Values.runner.dind | default dict -}}
|
|
{{- $dockerSock := $dind.dockerSock | default "unix:///var/run/docker.sock" -}}
|
|
{{- if not (kindIs "string" $dockerSock) -}}
|
|
{{- fail "runner.dind.dockerSock must be a string" -}}
|
|
{{- end -}}
|
|
{{- $dockerSockPath := trimPrefix "unix://" $dockerSock -}}
|
|
{{- dir $dockerSockPath -}}
|
|
{{- end }}
|