helm-templates

Working with Helm templates and template functions.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "helm-templates" with this command: npx skills add thebushidocollective/han/thebushidocollective-han-helm-templates

Helm Templates

Working with Helm templates and template functions.

Basic Templating

Values Access

apiVersion: v1 kind: Pod metadata: name: {{ .Values.name }} namespace: {{ .Release.Namespace }} spec: containers:

  • name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"

Built-in Objects

  • .Values : Values from values.yaml and overrides

  • .Release : Release information (Name, Namespace, IsUpgrade, IsInstall)

  • .Chart : Chart metadata from Chart.yaml

  • .Files : Access non-template files in chart

  • .Capabilities : Kubernetes cluster capabilities

  • .Template : Current template information

Template Functions

String Functions

upper, lower, title

name: {{ .Values.name | upper }} user-invocable: false

quote

value: {{ .Values.password | quote }}

trimSuffix, trimPrefix

image: {{ .Values.image | trimSuffix ":latest" }}

replace

url: {{ .Values.url | replace "http" "https" }}

Default Values

default function

port: {{ .Values.port | default 8080 }} tag: {{ .Values.image.tag | default .Chart.AppVersion }}

required function

database: {{ required "database.host is required" .Values.database.host }}

Type Conversion

toString, toJson, toYaml

replicas: {{ .Values.replicas | toString }}

annotations: {{ toYaml .Values.annotations | indent 2 }}

config: | {{ toJson .Values.config | indent 2 }}

Conditionals

{{- if .Values.ingress.enabled }} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: {{ .Release.Name }} spec:

...

{{- end }}

{{- if and .Values.persistence.enabled .Values.persistence.existingClaim }}

Use existing claim

{{- else if .Values.persistence.enabled }}

Create new claim

{{- end }}

Loops

{{- range .Values.environments }}

  • name: {{ .name }} value: {{ .value | quote }} {{- end }}

{{- range $key, $value := .Values.config }} {{ $key }}: {{ $value | quote }} {{- end }}

Named Templates (_helpers.tpl)

Define Templates

{{/* Common labels */}} {{- define "mychart.labels" -}} app.kubernetes.io/name: {{ .Chart.Name }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }}

{{/* Selector labels */}} {{- define "mychart.selectorLabels" -}} app.kubernetes.io/name: {{ .Chart.Name }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }}

Use Templates

metadata: labels: {{- include "mychart.labels" . | nindent 4 }} spec: selector: matchLabels: {{- include "mychart.selectorLabels" . | nindent 6 }}

Flow Control

With

{{- with .Values.service }} apiVersion: v1 kind: Service metadata: name: {{ .name }} spec: type: {{ .type }} ports:

  • port: {{ .port }} {{- end }}

Range with Index

{{- range $index, $value := .Values.items }} item-{{ $index }}: {{ $value }} {{- end }}

Whitespace Control

Remove leading whitespace

{{- .Values.name }}

Remove trailing whitespace

{{ .Values.name -}}

Remove both

{{- .Values.name -}}

Files Access

Read Files

config: | {{ .Files.Get "config/app.conf" | indent 2 }}

Glob Files

{{- range $path, $content := .Files.Glob "config/*.yaml" }} {{ $path }}: | {{ $content | indent 2 }} {{- end }}

Advanced Functions

Ternary

environment: {{ ternary "production" "development" .Values.production }}

Coalesce

Returns first non-empty value

port: {{ coalesce .Values.service.port .Values.port 8080 }}

List Functions

list, append, prepend, concat

args: {{- range list "arg1" "arg2" "arg3" }}

  • {{ . }} {{- end }}

Dict Functions

dict, set, unset, hasKey

{{- $config := dict "key1" "value1" "key2" "value2" }} {{- if hasKey $config "key1" }} found: true {{- end }}

Debugging

Print debug info

{{ printf "%#v" .Values | indent 2 }}

Fail on purpose to see values

{{ fail (printf "Debug: %#v" .Values) }}

Best Practices

Use Helpers for Repeated Logic

{{- define "mychart.fullname" -}} {{- if .Values.fullnameOverride }} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} {{- else }} {{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" }} {{- end }} {{- end }}

Validate Input

{{- if not (has .Values.service.type (list "ClusterIP" "NodePort" "LoadBalancer")) }} {{- fail "service.type must be ClusterIP, NodePort, or LoadBalancer" }} {{- end }}

Quote String Values

Always quote strings

value: {{ .Values.string | quote }}

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

android-jetpack-compose

No summary provided by upstream source.

Repository SourceNeeds Review
General

fastapi-async-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

storybook-story-writing

No summary provided by upstream source.

Repository SourceNeeds Review
General

atomic-design-fundamentals

No summary provided by upstream source.

Repository SourceNeeds Review