Comprendre Yaml

Comprendre Yaml
Yaml n'est pas un langage de balisage ou yaml pour le langage de sérialisation des données est couramment utilisé dans des fichiers de configuration tels que Kubernetes, Docker, Anible et bien d'autres. Sa popularité a augmenté au fil des ans, ce qui en fait une sorte de concurrent pour JSON.

Ok, si Yaml n'est pas un langage de balisage, qu'est-ce que c'est?

Comme mentionné, YAML est un langage sérialisé de données développé pour améliorer la lisibilité humaine en utilisant l'indentation et les structures de données natives. Considérez-le comme un superset strict de JSON ou un croisement entre JSON et XML. Cet hybride lui permet de faire ce que JSON peut et plus de fonctionnalités supplémentaires.

Le but de ce tutoriel est de vous présenter Yaml, de vous donner un guide sur la syntaxe de la langue, de vous fournir des outils rapides pour travailler avec YAML et vous apprendre à l'utiliser pour les fichiers de configuration et plus.

Comment écrire Yaml

L'écriture de Yaml est incroyablement intuitive (je suppose que c'est le point) car il utilise la syntaxe de paire de valeurs clés. Ainsi, c'est comme un dictionnaire à Python. Cependant, contrairement à Python, YAML n'autorise pas l'espacement des onglets; il utilise des espaces.

La syntaxe générale est:

valeur clé

Pour commencer un nouveau document YAML, nous commençons par trois tirets indiquant le début d'un nouveau fichier.

Cette fonction vous permet d'avoir plusieurs documents séparés par les tirets dans un seul fichier.

Créer un fichier avec un .Extension YAML et ajouter le contenu suivant.

---

Langue: Python

Auteur: Guido Van Rossum

Pays: Pays-Bas
---

Langue: JavaScript

Auteur: Brendan Eich

pays: États-Unis
---

Langue: Ruby

Auteur: Yukihiro Matsumoto

Pays: Japon

Comme vous pouvez le voir dans le fichier ci-dessus, chaque document de Yaml commence par trois points, suivi des données stockées dans des paires de valeurs clés.

Installer un Linter YAML

Avant de poursuivre, confirmons que ce que nous avons est un fichier YAML valide. Pour ce faire, nous devons installer un Linter Yaml.

Un linter est un outil qui vérifie et informe le développeur des erreurs de programmation telles que les erreurs de syntaxe et les constructions non valides. Par exemple, il vous permet de vérifier la syntaxe valide d'un fichier.

Dans notre exemple, nous utiliserons Yamllint.

Pour installer, utilisez APT comme:

Mise à jour Sudo apt-get
sudo apt-get install yamllint -y

Une fois installé, nous pouvons exécuter le linter contre le fichier à l'aide de la commande

Echo -e 'Ceci est un VALID: Syntaxe YAML' | échantillon de Yamllint.yaml

Si le fichier contient une syntaxe YAML valide, il ne nous donne aucune sortie.

Maintenant, essayez d'ajouter des espaces à l'intérieur du fichier YAML ou ajoutez un seul tableau de bord en bas comme:

---

Langue: Python

Auteur: Guido Van Rossum

Pays: Pays-Bas
---

Langue: JavaScript

Auteur: Brendan Eich

pays: États-Unis
---

Langue: Ruby

Auteur: Yukihiro Matsumoto

Pays: Japon
-

Si nous exécutons le linter contre ce fichier, les erreurs apparaissent, comme indiqué ci-dessous:

goûter.yaml
15: 1 Erreur Erreur de syntaxe: attendue, mais trouvée '-' (syntaxe)

NOTE: Comme les dictionnaires de Python et des structures de données similaires dans divers langages de programmation, les paires de valeurs clés dans un document YAML doivent être uniques.

Types de données YAML

YAML prend en charge diverses façons de représenter les données. Ils comprennent:

#: Types scalaires

Ce sont le type de données le plus courant dans YAML. Ils sont sous la forme de paires de valeurs clés, comme le montre l'exemple ci-dessus.

Les valeurs dans une paire peuvent être n'importe quel type tel que la chaîne, les nombres, y compris l'hexadécimal, les entiers, et tels.

#: Cordes

YAML prend également en charge les chaînes enfermées dans des quottes simples ou doubles. Ce n'est pas une exigence car l'analyseur YAML le comprendra mais peut être utile, en particulier dans les chaînes avec des personnages d'évasion.

Voici des exemples de chaînes valides dans YAML.

---

String: Ceci est une chaîne

String2: "Ceci est aussi une chaîne"

String: 'Ainsi est celui-ci'

NOTE: Assurez-vous de fermer les citations doubles ou simples lorsqu'ils sont utilisés. Ce qui suit entraînera une erreur.

---
invalide: «Ceci est incorrect

Pour ajouter un paragraphe dans un fichier yaml, utilisez le signe (supérieur à). N'oubliez pas d'ajouter un espace avant la ligne. Par exemple:

---
Para:>

Créer un paragraphe
qui s'étend pour plus d'un
doubler.

#: Types numériques

L'autre type de données pris en charge dans YAML est des types numériques. Les types numériques incluent des entiers, des décimales, des types hexadécimaux, octaux et autres types numériques.

La syntaxe YAML suivante représente les types numériques.

---

Int: 100

Hex: 0x7f000001

Octal: 0177

Float: 127.0

Expo: 6.022E + 23

#: Listes

Les listes de YAML sont spécifiées à l'aide d'un seul tableau de bord comme:

---
- liste
- un autre
- et un autre

#: Séquences

Les séquences sont des types de données utilisés pour maintenir plusieurs valeurs en une seule la même clé. Par exemple:

---

serveur:

- apache
- 2.07
- Gamin

#: Mappages

La cartographie est assez similaire à une séquence mais composée de paires de valeurs clés toutes contenues dans un seul sous-groupe.

Voici un exemple:

---

Les serveurs:

- Apache:

Nom: Server1

OS: Debian 10

version 2.4.46

- IIS:

Nom: iis-v01

OS: Windows Datacenter 2019

Version: 10.0.17763

#: Nul

Nous définissons un NULL dans YAML en utilisant un tilde (~) ou la chaîne NULL comme indiqué dans l'exemple ci-dessous:

---
Tilde: ~
var: nul

#: Tableaux

Les tableaux en yaml sont spécifiés à l'aide des crochets en une seule ligne. L'exemple suivant montre la définition des tableaux dans YAML.

---
Nombres: [1,2,3,4,5,6,7,8,9,10]
Strings: ["Hello", "World", "From", "Linuxhint"]

Commentaires Yaml

YAML prend également en charge les commentaires qui vous permet d'ajouter des informations supplémentaires aux données YAML. L'analyseur ignore les commentaires.

Les commentaires de Yaml commencent par un octothorpe (#).
---
# C'est un commentaire dans Yaml

Traiter YAML à JSON

Dans certains cas, nous devrons peut-être convertir Yaml en JSON. Étant donné que les deux sont étroitement liés, il est logique d'en avoir besoin.

Pour de tels scénarios, nous pouvons utiliser un outil tel que YQ, qui est un analyseur YAML / XML pour JQ.

Pour l'installer, utilisez PIP avec la commande comme indiqué:

PIP3 Installer YQ

NOTE: Assurez-vous que JQ a installé car il s'agit d'une dépendance requise pour YQ.

Supposons que nous ayons un exemple de fichier de création de pod kubernetes (Kubernetes.yaml) avec le contenu comme indiqué:

---
Apversion: V1
genre: god
métadonnées:
Nom: Site de magasin
Étiquettes:
App: web
SPEC:
conteneurs:
- Nom: nginx
Image: nginx
PORTS:
- Containerport: 8080
VolumeMounts:
- nom: maître
montpath: / var / www / html / nginx
dnspolicy: par défaut
Volumes:
- Nom: home_directory
videdir:

NOTE: Le fichier ci-dessus est à des fins d'illustration et peut contenir des erreurs si elle est utilisée dans une véritable instance de Kubernetes.

Pour convertir le fichier YAML en JSON, utilisez la commande:

sudo yq eval -j kubernetes.yaml

Lors de l'exécution de la commande ci-dessus, le contenu du fichier est automatiquement converti en JSON, comme indiqué ci-dessous:


"Apiversion": "V1",
"Kind": "Pod",
"métadonnées":
"Nom": "Site de magasin",
"Étiquettes":
"App": "Web"

,
"spec":
"conteneurs": [

"nom": "nginx",
"image": "nginx",
"Ports": [

"Containerport": 8080

]],
"volumemounts": [

"nom": "maître",
"montpath": "/ var / www / html / nginx"

]]

]],
"dnspolicy": "par défaut",
"Volumes": [

"nom": "home_directory",
"videdir":

]]

Cela facilite les travaux lors du passage de JSON à Yaml et vice versa.

Conclusion

YAML est un outil incroyablement puissant qui vous permet de créer des fichiers de configuration très lisibles et compatibles pour les services de support. En utilisant les concepts de ce tutoriel, vous êtes en mesure de créer des documents YAML complexes pour vos applications ou applications prenant en charge YAML.

Merci et codage heureux!