Les templates ytt
Ytt fait aussi partie de la suite carvel. Ytt est un outil de templating et d’applications de patch pour fichiers Yaml. Il n’est pas essentiellement utilisé pour écrire des manifests kubernetes mais peut être aussi utilisé avec d’autres outils dont les fichiers de configurations sont écrit en Yaml.
Installation de ytt
Comme pour les autres outils je vous montre comment installer toute la suite Carvel:
Fonctionnement de ytt
Ytt charge tous les documents, les analyse pour identifier leurs types et
calculer la sortie. Il existe différentes types de documents: les fichiers
plein, les templates et ses sous-types et les overlays. Pour différencier les
types de documents, il recherche tout simplement la présence de lignes contenant
des instructions ytt qui débute par #@
.
En noir le pipeline.
Les différents types de documents manipulés par ytt
Comme dis dans le descriptif du document ytt utilise différents types de documents :
-
Les
Data Values Schema Document
qui décrivent les variables ytt avec leur type et valeur par défaut : -
Les
Data Values Document
qui fixent les valeurs des variables : -
Les
Templated Documents
: -
Les
Overlay Documents
qui sont appliqués tout à la fin du processus d’évaluation.
Le langage ytt
Le langage ytt est dérivé de celui de starlark ↗, qui est un dialecte de Python destiné à être utilisé comme langage de configuration.
Les commentaires
Les commentaires débute par #!
:
Les types manipulés par ytt
NoneType
: None (equivalent to null in other languages)Bool
: True or FalseInteger
: 1Float
: 1.1String
: “string”List
: [1, 2, {“a”:3}]Tuple
: (1, 2, “a”)Dictionary
: {“a”: 1, “b”: “b”}Struct
: struct.make(field1=123, field2=“val2”)Annotation
: @name arg1,arg2,keyword_arg3=123
Instructions de contrôles
Les conditions
On retrouve bien une syntaxe proche de python avec if else elif
en ajoutant le
@ end
:
Les tests peuvent être écrits sur une seule ligne :
ou encore :
Les boucles
On retrouve la boucle for
avec les instructions continue/break
. Sa
définition se termine avec @ end
:
Une boucle peut s’écrire sur une ligne :
Les fonctions
On retrouve les instructions def
et return
. Ici une fonction créant un
deployement et utilisant des variables #@ <variable-name>
. Sa définition se
termine par @ end
:
Vous avez remarqué nous retrouvons les paramètres optionnels de python qui doivent être nommé leur définition :
Load
La fonction load
permet de faire appel aux fonctions provenant :
- de modules démarrant par
@yt:
: - de documents écrits sous la forme yaml, text ou starlark :
Les fichiers .star sont des fichiers écrits en starlark :
Écrire ses premiers templates Ytt
Maintenant que nous avons vu les bases de ce langage, passons à l’écriture d’un premier template (tiré de la documentation).
Nous allons déclarer nos variables dans le ficher de schema schema.yml
contenant deux définitions echos et service :
Créons un fichier de data default.yml
qui vient écraser les valeurs par
défaut :
Créons le template lui-meme demo.yml
. Le code est expliqué par ses
commentaires.
Pour lancer l’évaluation de ce template il suffit de lancer ytt avec tous ces fichiers de définition (peu importe l’ordre) :
Ce qui nous donne :
Pour gérer plusieurs environnements, on pourrait créer plusieurs jeux de valeurs default-dev.yml default-prod.yml.
Regardez cet exemple : vmware-tanzu/carvel-ytt-starter-for-kubernetes ↗
Patcher des manifests kubernetes avec Ytt
L’utilisation la plus simple d’ytt est de l’utiliser pour patcher des fichiers
yaml. Nous allons voir comment l’utiliser pour patcher un manifest Kubernetes
récupérer avec vendir
.
Commençons par écrire la configuration vendir
qui se charge de récupérer le
manifest du deployment de pod nginx :
Le paramètre newRootPath
permet de changer le chemin root par défaut. Le
résultat, c’est le que le fichier qui se trouvait dans le répertoire
content/en/examples/application/
sera déposé dans le path
défini
deploy/definitions
.
Lançons la synchronisation :
Rappel : vendir
créé un lockfile pointant sur le commit qui a été utilisé. Si
vous voulez ré la même version il suffit de lancer la commande vendir sync --locked
Maintenant créons le fichier de patch que nous allons déposer dans le répertoire
deploy/patchs
C’est donc un fichier formaté ytt
:
Ici on charge le module ytt
overlay ↗ et on lui indique ce
qui doit être patcher le deployement avec le match sur la définition {"kind": "Deployment", "metadata": {"name": "nginx-deployment"}}
Créons le manifest kubernetes patché :
En sortie nous obtenons bien replicas : 3
:
Conclusion
Ytt est une belle alternative à Helm. Mais je n’ai pas trouvé trace de repository où on y retrouverait comme pour helm tous les templates des applications les plus courantes. Il va falloir donc tout écrire.