Aller au contenu principal

Filters

Les filters transforment les valeurs dans les templates. Utilisez-les avec l'opérateur pipe |.

Sérialisation

toyaml

Convertir un objet en chaîne YAML :

config: |
{{ values.config | toyaml | indent(2) }}

tojson

Convertir un objet en JSON compact :

annotations:
config: {{ values.config | tojson | quote }}

tojson_pretty

Convertir un objet en JSON formaté :

data:
config.json: |
{{ values.config | tojson_pretty | indent(4) }}

Encodage

b64encode

Encoder en Base64 :

apiVersion: v1
kind: Secret
data:
password: {{ values.password | b64encode }}

b64decode

Décoder du Base64 :

decoded: {{ values.encoded | b64decode }}

sha256

Hash SHA256 d'une chaîne :

annotations:
checksum/config: {{ values.config | tojson | sha256 }}

Manipulation de chaînes

quote / squote

Encadrer avec des guillemets :

name: {{ values.name | quote }}      # "myapp"
name: {{ values.name | squote }} # 'myapp'

upper / lower

Changer la casse :

env: {{ values.env | upper }}        # PRODUCTION
name: {{ values.name | lower }} # myapp

title

Casse titre :

title: {{ values.name | title }}     # My App

snakecase / kebabcase / camelcase

Conversion de casse :

snake: {{ "myAppName" | snakecase }}  # my_app_name
kebab: {{ "myAppName" | kebabcase }} # my-app-name
camel: {{ "my_app_name" | camelcase }} # myAppName

trunc

Tronquer à n caractères :

short: {{ values.hash | trunc(8) }}

trimprefix / trimsuffix

Supprimer un préfixe/suffixe :

path: {{ "/api/v1" | trimprefix("/") }}     # api/v1
name: {{ "app.yaml" | trimsuffix(".yaml") }} # app

replace

Remplacer une sous-chaîne :

safe: {{ values.name | replace("_", "-") }}

trim

Supprimer les espaces au début/fin :

clean: {{ values.input | trim }}

Indentation

indent

Ajouter des espaces à chaque ligne :

data: |
{{ values.config | toyaml | indent(2) }}

nindent

Nouvelle ligne + indentation (le plus courant pour du YAML imbriqué) :

spec:
containers:
- name: app
resources:
{{ values.resources | toyaml | nindent(8) }}

Collections

keys

Obtenir les clés d'un objet sous forme de tableau :

{% for key in values.env | keys %}
- {{ key }}
{% endfor %}

haskey

Vérifier si une clé existe :

{% if values.config | haskey("tls") %}
tls:
enabled: true
{% endif %}

merge

Fusionner deux objets (le droit écrase le gauche) :

{% set merged = defaults | merge(overrides) %}

dictsort

Trier un objet pour l'itération :

{% for key, value in values.labels | dictsort %}
{{ key }}: {{ value | quote }}
{% endfor %}

first / last

Obtenir le premier/dernier élément :

primary: {{ values.hosts | first }}
final: {{ values.hosts | last }}

default

Valeur par défaut si indéfinie :

replicas: {{ values.replicas | default(1) }}
tag: {{ values.image.tag | default("latest") }}

join

Joindre un tableau avec un séparateur :

hosts: {{ values.hosts | join(",") }}

length

Obtenir la longueur :

count: {{ values.items | length }}

Validation

required

Échouer si indéfini ou vide :

name: {{ values.name | required }}

Avec un message personnalisé :

name: {{ values.name | required("name is required") }}

empty

Vérifier si vide :

{% if values.items | empty %}
# Aucun élément configuré
{% endif %}

Conversion de types

int

Convertir en entier :

port: {{ values.port | int }}
replicas: {{ "5" | int }}

Fonctionne avec les chaînes, flottants et booléens :

{{ "42" | int }}       # 42
{{ 3.14 | int }} # 3
{{ true | int }} # 1
{{ false | int }} # 0

float

Convertir en flottant :

ratio: {{ values.ratio | float }}
threshold: {{ "0.95" | float }}

string

Convertir en chaîne :

port: {{ values.port | string }}
env:
COUNT: {{ values.count | string | quote }}

Chaînage de filters

Les filters peuvent être chaînés :

# Convertir en YAML, indenter et ajouter un préfixe de nouvelle ligne
resources:
{{ values.resources | toyaml | nindent(2) }}

# Hasher la config pour la détection de changements
checksum: {{ values.config | tojson | sha256 | trunc(16) }}

# Valeur par défaut sûre avec transformation
name: {{ values.name | default("app") | kebabcase | trunc(63) }}