helmgen Tag Reference

helmgen compiles tagged YAML manifests into complete Helm charts. Each YAML tag maps to a Helm template construct.

!var <path>

Reference a .Values path. Optionally provide a default with = and pipes with |.

name: !var name
replicas: !var replicaCount=3
image: !var image.repository|quote

Compiles to:

name: {{ .Values.name }}
replicas: {{ .Values.replicaCount | default 3 }}
image: {{ .Values.image.repository | quote }}

!helm <expr>

Raw Helm/Go template expression passthrough. Use as an escape hatch for anything helmgen doesn't natively support.

namespace: !helm .Release.Namespace
version: !helm .Chart.AppVersion

!block / !block-forced

!block path wraps in with .Values.path + toYaml. !block-forced uses default dict to always emit.

resources: !block resources
tolerations: !block-forced tolerations

!if / !else

Conditional on a .Values path being truthy.

hostNetwork: !if controller.hostNetwork
dnsPolicy: !else ClusterFirst

!when

Conditional using an hx expression. Scalar form for single values, tagged-key form for wrapping multiple children.

# Scalar form
enableServiceLinks: !when 'controller.enabled and controller.exposeServices'
dnsPolicy: !else ClusterFirst

# Tagged-key form (wraps children)
!when 'int(replicaCount) > 1':
  minReadySeconds: 30
  strategy:
    type: RollingUpdate

!expr

Computed scalar value from an hx expression.

containerPort: !expr 'int(controller.containerPort)'
enabled: !expr 'controller.enabled ? "true" : "false"'

!let

Bind a template variable from an hx expression. Must be used as a tagged key.

!let 'replicas=controller.replicaCount':
replicas: !expr '$replicas'

Compiles to:

{{- $replicas := .Values.controller.replicaCount }}
replicas: {{ $replicas }}

!each / !each-map

Range over a list or map from .Values.

# List
containers:
  - !each:containers:item
    name: !var item.name
    image: !var item.image

# Map
annotations:
  key: !each-map:annotations:k:v

!include

Include a named Helm template partial.

labels: !include mychart.labels
name: !include mychart.fullname | trunc 63

!tpl

Evaluate a values path as a Go template.

annotations: !tpl annotations

!required

Require a value, failing with a message if missing.

image: !required '"image.repository is required" image.repository'

helmgen build

helmgen build -i manifests/ -o my-chart/ --name my-chart --version 1.0.0

Compiles tagged YAML manifests into a complete Helm chart with Chart.yaml, values.yaml, and templates.

helmgen validate

helmgen validate -i manifests/
helmgen validate -i manifests/ -v custom-values.yaml

Full round-trip validation: compile → helm template → parse rendered YAML. Requires helm on PATH.

helmgen import

helmgen import -i my-chart/ -o helmgen-manifests/

Convert an existing Helm chart's Go templates into helmgen tagged YAML.