thebushidocollective/han/helm-templates

Claude Code and agent skill by thebushidocollective/han

Trust tier 2
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when working with Helm templates and template functions for generating Kubernetes manifests dynamically.

Install

npx vskill@latest install thebushidocollective/han/helm-templates

SKILL.md

Helm Templates

Working with Helm templates and template functions.

Basic Templating

Values Access
yaml
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
yaml
# 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
yaml
# 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
yaml
# toString, toJson, toYaml
replicas: {{ .Values.replicas | toString }}
annotations:
{{ toYaml .Values.annotations | indent 2 }}
config: |
{{ toJson .Values.config | indent 2 }}
Conditionals
yaml
{{- 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
yaml
{{- range .Values.environments }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end }}
{{- range $key, $value := .Values.config }}
{{ $key }}: {{ $value | quote }}
{{- end }}

Named Templates (_helpers.tpl)

Define Templates
yaml
{{/*
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
yaml
metadata:
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
selector:
matchLabels:
{{- include "mychart.selectorLabels" . | nindent 6 }}

Flow Control

With
yaml
{{- with .Values.service }}
apiVersion: v1
kind: Service
metadata:
name: {{ .name }}
spec:
type: {{ .type }}
ports:
- port: {{ .port }}
{{- end }}
Range with Index
yaml
{{- range $index, $value := .Values.items }}
item-{{ $index }}: {{ $value }}
{{- end }}

Whitespace Control

yaml
# Remove leading whitespace
{{- .Values.name }}
# Remove trailing whitespace
{{ .Values.name -}}
# Remove both
{{- .Values.name -}}

Files Access

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

Advanced Functions

Ternary
yaml
environment: {{ ternary "production" "development" .Values.production }}
Coalesce
yaml
# Returns first non-empty value
port: {{ coalesce .Values.service.port .Values.port 8080 }}
List Functions
yaml
# list, append, prepend, concat
args:
{{- range list "arg1" "arg2" "arg3" }}
- {{ . }}
{{- end }}
Dict Functions
yaml
# dict, set, unset, hasKey
{{- $config := dict "key1" "value1" "key2" "value2" }}
{{- if hasKey $config "key1" }}
found: true
{{- end }}

Debugging

yaml
# 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
yaml
{{- 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
yaml
{{- if not (has .Values.service.type (list "ClusterIP" "NodePort" "LoadBalancer")) }}
{{- fail "service.type must be ClusterIP, NodePort, or LoadBalancer" }}
{{- end }}
Quote String Values
yaml
# Always quote strings
value: {{ .Values.string | quote }}

Security

  • Security scanPassed, 93 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
129
Repository forks
14
7-day trend score
24

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 29 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/thebushidocollective/han/helm-templates/badge)](https://verified-skill.com/skills/thebushidocollective/han/helm-templates)

Something wrong with this skill or its page? Tell us.