YAML
Qu'est-ce que YAML ?
YAML est un langage de sérialisation des données qui est
souvent utilisé pour écrire des fichiers de configuration.
Selon la personne à qui vous vous adressez, YAML
signifie "yet another markup language" (encore un autre
langage de balisage) ou "YAML ain't markup language"
(un acronyme récursif), ce qui souligne que YAML est
destiné aux données et non aux documents.
YAML est un langage de programmation populaire car il
est lisible par l'homme et facile à comprendre. Il peut
également être utilisé en conjonction avec d'autres
langages de programmation.
Syntaxe YAML
YAML possède des caractéristiques qui proviennent de Perl, C, XML, HTML et
d'autres langages de programmation. YAML est également un sur-ensemble de
JSON, de sorte que les fichiers JSON sont valides dans YAML.
YAML utilise une indentation de style Python pour indiquer l'imbrication. Les
caractères de tabulation ne sont pas autorisés, les espaces sont donc utilisés à
la place. Il n'y a pas de symboles de formatage habituels, tels que les accolades,
les crochets, les balises de fermeture ou les guillemets. Les fichiers YAML
utilisent une extension .yml ou .yaml.
La structure d'un fichier YAML est une carte ou une liste.
Les maps vous permettent d'associer des paires clé-valeur. Chaque clé doit
être unique, et l'ordre n'a pas d'importance. Pensez à un dictionnaire Python
ou à une affectation de variable dans un script Bash.
A map in YAML needs to be resolved before it can be closed, and a new map is
created. A new map can be created by either increasing the indentation level or
by resolving the previous map and starting an adjacent map.
A list includes values listed in a specific order and may contain any number of
items needed. A list sequence starts with a dash (-) and a space, while
indentation separates it from the parent. You can think of a sequence as a
Python list or an array in Bash or Perl. A list can be embedded into a map.
YAML also contains scalars, which are arbitrary data (encoded in Unicode) that
can be used as values such as strings, integers, dates, numbers, or booleans.
When creating a YAML file, you’ll need to ensure that you follow these
syntax rules and that your file is valid. A linter is an application that verifies
the syntax of a file. The yamllint command can help to ensure you’ve created
a valid YAML file before you hand it over to an application.
Exemple de syntaxe YAML
Voici un exemple de fichier YAML simple pour un enregistrement d'employé qui démontre les règles de
syntaxe.
À quoi sert YAML ?
L'une des utilisations les plus courantes de YAML est la création de
fichiers de configuration. Il est recommandé d'écrire les fichiers de
configuration en YAML plutôt qu'en JSON, même s'ils peuvent être
utilisés de manière interchangeable dans la plupart des cas, car
YAML a une meilleure lisibilité et est plus convivial.
YAML est également utilisé par l'outil d'automatisation Ansible
pour créer des processus d'automatisation, ainsi que pour les
ressources et les déploiements Kubernetes.
L'un des avantages de l'utilisation de YAML est que les fichiers
YAML peuvent être ajoutés au contrôle de source, tel que Github,
afin que les modifications puissent être suivies et vérifiées.
YAML in Ansible
Les playbooks Ansible sont utilisés pour orchestrer les processus informatiques. Un playbook
est un fichier YAML contenant 1 ou plusieurs play, et est utilisé pour définir l'état souhaité d'un
système.
Chaque jeu peut exécuter une ou plusieurs tâches, et chaque tâche invoque un module
Ansible. Les modules sont utilisés pour accomplir des tâches d'automatisation dans Ansible.
Les modules Ansible peuvent être écrits dans n'importe quel langage capable de renvoyer du
JSON, comme Ruby, Python ou bash.
Un playbook Ansible se compose de maps et de listes. Pour créer un playbook, commencez
une liste YAML qui nomme le play, puis liste les tâches dans une séquence. N'oubliez pas que
l'indentation n'est pas une indication de l'héritage logique. Considérez chaque ligne comme un
type de données YAML (une liste ou une carte).
En utilisant des modèles YAML, les utilisateurs d'Ansible peuvent programmer l'exécution
automatique de tâches répétitives sans avoir à apprendre un langage de programmation
avancé.
YAML pour Kubernetes
Kubernetes fonctionne sur la base d'un état défini et d'un état réel. Les objets
Kubernetes représentent l'état d'un cluster et indiquent à Kubernetes à quoi vous voulez
que la charge de travail ressemble. Les ressources Kubernetes, telles que les pods, les
objets et les déploiements, peuvent être créées à l'aide de fichiers YAML.
Lorsque vous créez un objet Kubernetes, vous devez inclure des spécifications pour
définir l'état souhaité de l'objet. L'API Kubernetes peut être utilisée pour créer l'objet. La
requête à l'API comprendra les spécifications de l'objet en JSON, mais le plus souvent,
vous fournirez les informations requises à kubectl sous forme de fichier YAML. Kubectl
convertira le fichier en YAML pour vous lorsqu'il fera la demande d'API.
Une fois qu'un objet a été créé et défini, Kubernetes s'assure que l'objet existe toujours.
Les développeurs ou les administrateurs système spécifient l'état défini à l'aide des
fichiers YAML ou JSON qu'ils soumettent à l'API Kubernetes. Kubernetes utilise un
contrôleur pour analyser la différence entre le nouvel état défini et l'état réel du cluster.
Conclusion
In programmation moderne frameworks et applications où les données sont
stockées ou distribuées, YAML est de plus en plus courant dans les fichiers
de configuration. YAML cible un grand nombre des mêmes applications de
communication que le langage XML (Extensible Markup Language), mais a
une syntaxe minimale qui est délibérément différente de XML.
Les fichiers YAML peuvent être créés pour des structures de données fixes
à l'aide de commandes d'impression qui écrivent à la fois les données et la
décoration particulière du YAML. Cependant, un émetteur YAML dédié est
préférable pour le vidage de données hiérarchiques diverses ou complexes.
De même, avec les expressions régulières, les fichiers YAML de base (par
exemple, les paires clé-valeur) sont facilement analysés.
FIN