mirror of
https://github.com/truenas/charts.git
synced 2026-04-03 18:58:03 +08:00
* Adapt charts CI and improve/fix common * add check on permissions contaienr * add postgres template * update comments * Update create_app.sh * add check * update script * auto gen item.yaml from Chart,yaml * rename readme on dest * duplicate readme from the same source * correct comment * reoder * remove extra space * keep both README and app-readme * update regex, to also allow 2 letter names, which is also valid * No need to check host network if there aren't any pod values * use same pattern as the pod.name label (not prepending release-name * update deps * add chart dirs to ci * Add a validation to check if there is any yaml errors after merging files * update charts path on ci * common/1.0.0/ -> common/ * update common-test dep path * temp update create_app script * make permissions container name configurable, incase we want to change order of execution * update naming convention * fix typo and a missed name change * do not allow `--` in names
120 lines
4.8 KiB
Smarty
120 lines
4.8 KiB
Smarty
{{/* Returns Container Security Context */}}
|
|
{{/* Call this template:
|
|
{{ include "ix.v1.common.lib.container.securityContext" (dict "rootCtx" $ "objectData" $objectData) }}
|
|
rootCtx: The root context of the chart.
|
|
objectData: The object data to be used to render the container.
|
|
*/}}
|
|
{{- define "ix.v1.common.lib.container.securityContext" -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
{{- $objectData := .objectData -}}
|
|
|
|
{{/* Initialize from the "global" options */}}
|
|
{{- $secContext := fromJson (include "ix.v1.common.lib.container.securityContext.calculate" (dict "rootCtx" $rootCtx "objectData" $objectData)) }}
|
|
runAsNonRoot: {{ $secContext.runAsNonRoot }}
|
|
runAsUser: {{ $secContext.runAsUser }}
|
|
runAsGroup: {{ $secContext.runAsGroup }}
|
|
readOnlyRootFilesystem: {{ $secContext.readOnlyRootFilesystem }}
|
|
allowPrivilegeEscalation: {{ $secContext.allowPrivilegeEscalation }}
|
|
privileged: {{ $secContext.privileged }}
|
|
seccompProfile:
|
|
type: {{ $secContext.seccompProfile.type }}
|
|
{{- if eq $secContext.seccompProfile.type "Localhost" }}
|
|
localhostProfile: {{ $secContext.seccompProfile.profile }}
|
|
{{- end }}
|
|
capabilities:
|
|
{{- if $secContext.capabilities.add }}
|
|
add:
|
|
{{- range $secContext.capabilities.add }}
|
|
- {{ . }}
|
|
{{- end -}}
|
|
{{- else }}
|
|
add: []
|
|
{{- end -}}
|
|
{{- if $secContext.capabilities.drop }}
|
|
drop:
|
|
{{- range $secContext.capabilities.drop }}
|
|
- {{ . }}
|
|
{{- end -}}
|
|
{{- else }}
|
|
drop: []
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Calculates Container Security Context */}}
|
|
{{/* Call this template:
|
|
{{ include "ix.v1.common.lib.container.securityContext.calculate" (dict "rootCtx" $ "objectData" $objectData) }}
|
|
rootCtx: The root context of the chart.
|
|
objectData: The object data to be used to render the container.
|
|
*/}}
|
|
{{- define "ix.v1.common.lib.container.securityContext.calculate" -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
{{- $objectData := .objectData -}}
|
|
|
|
{{- if not $rootCtx.Values.securityContext.container -}}
|
|
{{- fail "Container - Expected non-empty <.Values.securityContext.container>" -}}
|
|
{{- end -}}
|
|
|
|
{{/* Initialize from the "global" options */}}
|
|
{{- $secContext := mustDeepCopy $rootCtx.Values.securityContext.container -}}
|
|
|
|
{{/* Override with container's options */}}
|
|
{{- with $objectData.securityContext -}}
|
|
{{- $secContext = mustMergeOverwrite $secContext . -}}
|
|
{{- end -}}
|
|
|
|
{{/* Validations, as we might endup with null values after merge */}}
|
|
{{- range $key := (list "privileged" "allowPrivilegeEscalation" "runAsNonRoot" "readOnlyRootFilesystem") -}}
|
|
{{- $value := (get $secContext $key) -}}
|
|
{{- if not (kindIs "bool" $value) -}}
|
|
{{- fail (printf "Container - Expected <securityContext.%s> to be [bool], but got [%s] of type [%s]" $key $value (kindOf $value)) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- range $key := (list "runAsUser" "runAsGroup") -}}
|
|
{{- $value := (get $secContext $key) -}}
|
|
{{- if not (mustHas (kindOf $value) (list "float64" "int")) -}}
|
|
{{- fail (printf "Container - Expected <securityContext.%s> to be [int], but got [%s] of type [%s]" $key $value (kindOf $value)) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if not $secContext.seccompProfile -}}
|
|
{{- fail "Container - Expected <securityContext.seccompProfile> to be defined" -}}
|
|
{{- end -}}
|
|
|
|
{{- $profiles := (list "RuntimeDefault" "Localhost" "Unconfined") -}}
|
|
{{- if not (mustHas $secContext.seccompProfile.type $profiles) -}}
|
|
{{- fail (printf "Container - Expected <securityContext.seccompProfile> to be one of [%s], but got [%s]" (join ", " $profiles) $secContext.seccompProfile.type) -}}
|
|
{{- end -}}
|
|
|
|
{{- if eq $secContext.seccompProfile.type "Localhost" -}}
|
|
{{- if not $secContext.seccompProfile.profile -}}
|
|
{{- fail "Container - Expected <securityContext.seccompProfile.profile> to be defined on type [Localhost]" -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if not $secContext.capabilities -}}
|
|
{{- fail "Container - Expected <securityContext.capabilities> to be defined" -}}
|
|
{{- end -}}
|
|
|
|
{{- range $key := (list "add" "drop") -}}
|
|
{{- $item := (get $secContext.capabilities $key) -}}
|
|
{{- if not (kindIs "slice" $item) -}}
|
|
{{- fail (printf "Container - Expected <securityContext.capabilities.%s> to be [list], but got [%s]" $key (kindOf $item)) -}}
|
|
{{- end -}}
|
|
|
|
{{- range $item -}}
|
|
{{- if not (kindIs "string" .) -}}
|
|
{{- fail (printf "Container - Expected items of <securityContext.capabilities.%s> to be [string], but got [%s]" $key (kindOf .)) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if or (eq (int $secContext.runAsUser) 0) (eq (int $secContext.runAsGroup) 0) -}}
|
|
{{- if $secContext.runAsNonRoot -}}
|
|
{{- fail "Container - Expected <securityContext.runAsNonRoot> to be [false] with either [runAsUser, runAsGroup] set to [0]" -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- $secContext | toJson -}}
|
|
{{- end -}}
|