Présentation
YAML est un langage de sérialisation des données lisible par l'utilisateur qui est souvent utilisé pour coder des fichiers de configuration. Pour certains, YAML est l'acronyme de Yet Another Markup Language, pour d'autres, c'est l'acronyme récursif de YAML Ain't Markup Language (YAML n'est pas un langage de balisage), ce qui souligne que le langage YAML s'utilise pour représenter des données plutôt que des documents.
YAML est un langage de programmation fréquemment utilisé, car il est conçu pour être parfaitement lisible et compréhensible. Il peut également être associé à d'autres langages de programmation. En raison de sa flexibilité et de son accessibilité, YAML est utilisé par Ansible® pour créer des processus d'automatisation, sous la forme de playbooks Ansible.
Syntaxe YAML
Les fichiers YAML utilisent une extension .yml ou .yaml et suivent des règles de syntaxe spécifiques.
YAML comporte des fonctions issues de Perl, C, XML, HTML et d'autres langages de programmation. Comme il s'agit également d'un surensemble du langage JSON, les fichiers JSON sont des fichiers YAML valides.
Les symboles de formatage habituels, tels que les accolades, les crochets, les balises d'ouverture et de fermeture ou les guillemets, n'existent pas. Les fichiers YAML sont plus faciles à lire, car ils utilisent une indentation de style Python pour définir leur structure et marquer l'imbrication. Les caractères de tabulation ne sont pas autorisés par défaut pour assurer la portabilité sur différents systèmes, alors il faut utiliser des espaces blancs à la place.
Les commentaires sont introduits par le symbole de la livre (£) ou le dièse (#). Il est recommandé d'utiliser les commentaires, car ils décrivent l'intention du code. YAML ne prend pas en charge les commentaires sur plusieurs lignes. Chaque ligne doit être suivie du symbole £.
Les débutants se demandent souvent ce que signifient les trois tirets (---). En YAML, ils marquent le début d'un document, tandis que trois points (...) signalent la fin du document.
Voici un exemple de fichier YAML simple :
#Comment: This is a supermarket list using YAML #Note that - character represents the list --- food: - vegetables: tomatoes #first list item - fruits: #second list item citrics: oranges tropical: bananas nuts: peanuts sweets: raisins
Notez qu'un fichier YAML est structuré sous la forme d'un mappage ou d'une liste qui respecte une hiérarchie basée sur l'indentation et la définition de vos valeurs clés. Les mappages permettent d'associer des paires clé-valeur. Chaque clé doit être unique, et l'ordre importe peu. Cela ressemble à un dictionnaire Python ou à une affectation de variable dans un script bash.
En YAML, un mappage doit être résolu avant de pouvoir être fermé et d'en créer un nouveau. Il est possible d'établir un nouveau mappage en augmentant le niveau d'indentation, ou en résolvant le précédent et en ouvrant un mappage adjacent.
Une liste répertorie des valeurs dans un ordre donné et peut contenir un grand nombre d'éléments nécessaires. Une séquence de liste commence par un tiret (-) et une espace, et est séparée du parent par une indentation. C'est un peu comme une liste en Python ou un tableau en bash ou en Perl. Une liste peut être intégrée dans un mappage.
Dans l'exemple ci-dessus, « vegetables » et « fruits » représentent les éléments de la liste « food ».
YAML comporte également des scalaires, qui sont des données arbitraires (codées en Unicode) pouvant être utilisées comme valeurs, telles que des chaînes, des entiers, des dates, des nombres ou des booléens.
Lors de la création d'un fichier YAML, il faut respecter ces règles de syntaxe et vérifier que le fichier est valide. Pour vous aider, utilisez des outils qui vérifient la syntaxe d'un fichier, les linters. La commande yamllint permet de s'assurer que le fichier YAML créé est valide avant de pouvoir le transférer vers une application.
Ressources Red Hat
Exemple de syntaxe YAML
Voici un exemple de fichier YAML simple du dossier d'un étudiant illustrant les règles syntaxiques :
#Comment: Student record #Describes some characteristics and preferences --- name: Martin D'vloper #key-value age: 26 hobbies: - painting #first list item - playing_music #second list item - cooking #third list item programming_languages: java: Intermediate python: Advanced javascript: Beginner favorite_food: - vegetables: tomatoes - fruits: citrics: oranges tropical: bananas nuts: peanuts sweets: raisins
Si nous traduisons ce fichier en Python en utilisant la bibliothèque PyYAML, nous obtenons la structure de données suivante :
[ { "name": "Martin D'vloper", "age": 26, "hobbies": ["painting", "playing_music", "cooking"], "programming_languages": { "java": "Intermediate", "python": "Advanced", "javascript": "Beginner", }, "favorite_food": [ {"vegetables": "tomatoes"}, { "fruits": { "citrics": "oranges", "tropical": "bananas", "nuts": "peanuts", "sweets": "raisins", } }, ], } ]
Utilisations de YAML
Le langage YAML est principalement utilisé pour créer des fichiers de configuration. Il est recommandé de coder les fichiers de configuration en YAML plutôt qu'en JSON, car même si ces langages peuvent être utilisés de manière interchangeable dans la plupart des cas, YAML reste plus facile à lire et à utiliser.
En plus de son utilisation dans Ansible, YAML sert pour les ressources et les déploiements Kubernetes.
L'un des avantages du langage YAML est que les fichiers YAML peuvent être ajoutés au système de contrôle du code source, tel que GitHub, afin que les modifications puissent être suivies et vérifiées.
YAML dans Ansible
Les playbooks Ansible servent à orchestrer des processus informatiques. Un playbook est un fichier YAML qui contient un ou plusieurs plays (jeux de tâches) et qui permet de définir l'état souhaité d'un système.
Chaque play peut exécuter une ou plusieurs tâches, et chaque tâche invoque un module Ansible. Ces modules accomplissent les tâches d'automatisation dans Ansible, dans n'importe quel langage capable de renvoyer une réponse au format JSON, notamment Ruby, Python ou bash.
Un playbook Ansible se compose de mappages et de listes. Pour créer un playbook, il faut commencer par une liste YAML qui désigne le play puis répertorie les tâches dans un ordre précis. N'oubliez pas que l'indentation n'est pas une indication de l'héritage logique. Considérez que chaque ligne correspond à un type de données YAML (une liste ou un mappage).
En s'appuyant sur des modèles YAML, les utilisateurs d'Ansible peuvent automatiser des tâches répétitives sans avoir à apprendre un langage de programmation avancé.Les équipes de développement peuvent également utiliser la commande ansible-lint, un linter YAML pour les playbooks Ansible, afin d'identifier les erreurs et éviter qu'elles ne surviennent au cours d'une phase essentielle de l'opération.
Le service d'IA génératif Ansible Lightspeed with IBM Watson Code Assistant permet à ces équipes de créer du contenu d'automatisation Ansible de manière plus efficace. L'outil permet aux utilisateurs de saisir une requête de tâche en anglais vernaculaire. L'outil émet ensuite des recommandations de codes syntaxiquement corrects et reconnus par YAML pour des tâches d'automatisation qui seront ensuite utilisées pour créer des playbooks Ansible.
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. Ils indiquent à Kubernetes ce à quoi vous voulez que la charge de travail ressemble. Il est possible de créer des ressources Kubernetes, telles que des pods, des objets et des déploiements, à l'aide de fichiers YAML.
Lors de la création d'un objet Kubernetes, il faut ajouter 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 adressée à l'API comprendra les spécifications de l'objet en JSON, mais le plus souvent, il faudra fournir les informations requises à l'outil kubectl sous la forme d'un fichier YAML. kubectl se chargera de convertir le fichier en YAML lorsqu'il interrogera l'API.
Une fois qu'un objet a été créé et défini, Kubernetes veille à ce qu'il soit toujours présent.
Les développeurs ou 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 comparer le nouvel état défini et l'état réel du cluster.
Pourquoi choisir Red Hat ?
Parce qu'elle utilise le langage d'automatisation YAML facilement lisible par l'homme, la solution Red Hat Ansible Automation Platform permet aux utilisateurs d'une entreprise de partager, corriger et gérer facilement les contenus d'automatisation. Elle comprend tous les outils nécessaires à la mise en œuvre de l'automatisation à l'échelle de l'entreprise, notamment des playbooks et des outils d'analyse. Elle permet aussi aux utilisateurs de centraliser et contrôler leur infrastructure informatique au moyen d'un tableau de bord visuel, du contrôle d'accès basé sur les rôles et de nombreuses autres fonctions, avec à la clé une réduction de la complexité de l'exploitation.
Avec une souscription Red Hat, vous bénéficiez de contenus certifiés, d'un écosystème de partenaires robuste, d'un accès à des services de gestion hébergés et d'une assistance technique tout au long du cycle de vie qui permet à vos équipes de créer, gérer et faire évoluer les processus automatisés dans l'ensemble de votre entreprise. En outre, vous profiterez de l'expertise que nous avons acquise grâce à nos réussites auprès de milliers de clients.
Red Hat OpenShift est une plateforme Kubernetes conçue pour les entreprises. Elle inclut de nombreuses technologies supplémentaires qui font de Kubernetes un outil puissant et viable pour les entreprises, notamment : les registres, la mise en réseau, la télémétrie, la sécurité, l'automatisation et les services.
Avec Red Hat OpenShift, les équipes de développement peuvent créer des applications conteneurisées, les héberger et les déployer dans le cloud tout en bénéficiant du niveau d'évolutivité, de contrôle et d'orchestration nécessaire pour concrétiser rapidement vos idées.
Le blog officiel de Red Hat
Découvrez les dernières informations concernant notre écosystème de clients, partenaires et communautés.