GNU/Linux >> Tutoriels Linux >  >> Linux

YAML pour les débutants

YAML n'est pas un langage de balisage (YAML), et au fur et à mesure des formats de configuration, c'est agréable à regarder. Sa structure visuelle est intuitive et sa logique est assez simple :les puces en retrait héritent des propriétés des puces parentes.

Mais cette apparente simplicité peut être trompeuse.

Il est facile (et trompeur) de considérer YAML comme une simple liste de valeurs associées, pas plus complexe qu'une liste de courses. Il y a un titre et quelques éléments en dessous. Les éléments sous le titre s'y rapportent directement, n'est-ce pas ? Eh bien, vous pouvez tester cette théorie en écrivant un peu de YAML valide.

Ouvrez un éditeur de texte et saisissez ce texte en conservant les tirets en haut du fichier et les espaces de tête pour les deux derniers éléments :

---
Store: Bakery
  Sourdough loaf
  Bagels

Enregistrez le fichier sous example.yaml (ou similaire).

Si vous n'avez pas encore yamllint installé, installez-le :

$ sudo dnf install -y yamllint

Un linter est une application qui vérifie la syntaxe d'un fichier. Le yamllint est un excellent moyen de s'assurer que votre YAML est valide avant de le transmettre à l'application pour laquelle vous écrivez YAML (Ansible, par exemple).

Utilisez yamllint pour valider votre fichier YAML :

$ yamllint --strict shop.yaml || echo “Fail”
$

Mais lorsqu'il est converti en JSON avec un simple script de conversion, la structure de données de ce simple YAML devient plus claire :

$ ~/bin/json2yaml.py shop.yaml
{“Store”: “Bakery Sourdough loaf Bagels”}

Analysée sans le contexte visuel des sauts de ligne et de l'indentation, la portée réelle de vos données est très différente. Les données sont pour la plupart plates, presque dépourvues de hiérarchie. Rien n'indique que le pain au levain et les bagels soient des enfants du nom du magasin.

[ Les lecteurs ont également aimé : Ansible :l'automatisation informatique pour tous ]

Comment les données sont stockées dans YAML

YAML peut contenir différents types de blocs de données :

  • Séquence :valeurs répertoriées dans un ordre spécifique. Une séquence commence par un tiret et un espace (- ). Vous pouvez considérer une séquence comme une liste Python ou un tableau dans Bash ou Perl.
  • Mappage :paires de clé et de 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.

Il existe un troisième type appelé scalar , qui sont des données arbitraires (encodées en Unicode) telles que des chaînes, des entiers, des dates, etc. En pratique, ce sont les mots et les chiffres que vous tapez lors de la création de blocs de mappage et de séquence, vous n'y penserez donc pas plus que vous ne réfléchirez aux mots de votre langue maternelle.

Lors de la construction de YAML, il peut être utile de considérer YAML soit comme une séquence de séquences, soit comme une carte de cartes, mais pas les deux.

Blocs de mappage YAML

Lorsque vous démarrez un fichier YAML avec une instruction de mappage, YAML attend une série de mappages. Un bloc de mappage dans YAML ne se ferme pas tant qu'il n'est pas résolu, et un nouveau bloc de mappage est explicitement créé. Un nouveau bloc ne peut être créé soit en augmentant le niveau d'indentation (auquel cas, le nouveau bloc existe à l'intérieur du bloc précédent) ou en résolvant le mappage précédent et en commençant un bloc de mappage adjacent.

La raison pour laquelle l'exemple YAML original de cet article ne parvient pas à produire des données avec une hiérarchie est qu'il ne s'agit en fait que d'un seul bloc de données :la clé Store a une valeur unique de Bakery Sourdough loaf Bagels . YAML ignore l'espace car aucun nouveau bloc de mappage n'a été démarré.

Est-il possible de corriger l'exemple YAML en faisant précéder chaque élément de séquence d'un tiret et d'un espace ?

---
Store: Bakery
  - Sourdough loaf
  - Bagels

    Encore une fois, c'est du YAML valide, mais c'est quand même assez plat :

    $ ~/bin/json2yaml.py shop.yaml
    {“Store”: “Bakery - Sourdough loaf - Bagels”}

    Le problème est que ce fichier YAML ouvre un bloc de mappage et ne le ferme jamais. Pour fermer le Store bloquer et en ouvrir un nouveau, vous devez commencer un nouveau mappage. La valeur du mappage peut être une séquence, mais vous avez besoin d'une clé d'abord.

    Voici la résolution correcte (et étendue) :

    ---
    Store:
      Bakery:
        - ‘Sourdough loaf’
        - ‘Bagels’
      Cheesemonger:
        - ‘Blue cheese’
        - ‘Feta’

    Dans JSON, cela se résout en :

    {“Store”: {“Bakery”: [“Sourdough loaf”, “Bagels”],
    “Cheesemonger”: [“Blue cheese”, “Feta”]}}

    Comme vous pouvez le voir, cette directive YAML contient un mappage (Store ) à deux valeurs enfants (Bakery et Cheesemonger ), chacune étant mappée à une séquence enfant.

    Blocs de séquence YAML

    Les mêmes principes s'appliquent si vous démarrez une directive YAML en tant que séquence. Par exemple, cette directive YAML est valide :

    Flour
    Water
    Salt

      Chaque élément est distinct lorsqu'il est affiché au format JSON :

      [“Flour”, “Water”, “Salt”]

      Mais ce fichier YAML n'est pas valide car il tente de démarrer un bloc de mappage à un niveau adjacent à un bloc de séquence :

      ---
      - Flour
      - Water
      - Salt
      Sugar: caster

      Il peut être réparé en déplaçant le bloc de mappage dans la séquence :

      ---
      - Flour
      - Water
      - Salt
      - Sugar: caster

      Vous pouvez, comme toujours, intégrer une séquence dans votre élément de mappage :

      ---
      - Flour
      - Water
      - Salt
      - Sugar:
          - caster
          - granulated
          - icing

      Vu sous l'angle de la portée JSON explicite, cet extrait YAML se lit comme suit :

      [“Flour”, “Salt”, “Water”, {“Sugar”: [“caster”, “granulated”, “icing”]}]

      [ Un guide gratuit de Red Hat :5 étapes pour automatiser votre entreprise. ] 

      Syntaxe YAML

      Si vous souhaitez écrire confortablement en YAML, il est essentiel de connaître sa structure de données. Comme vous pouvez le constater, il n'y a pas grand-chose à retenir. Vous connaissez la cartographie et séquence blocs, afin que vous sachiez tout ce dont vous avez besoin pour travailler. Il ne reste plus qu'à se rappeler comment ils interagissent et comment ils interagissent les uns avec les autres. Bon codage !


      Linux
      1. MX Linux 17 :une distribution mise à jour conçue pour les débutants

      2. Commande Linux dir pour les débutants (10 exemples)

      3. Commande Linux killall pour les débutants (8 exemples)

      4. Exemples de commandes DNF pour les débutants

      5. Comprendre YAML pour Ansible

      16 exemples pratiques de commande Linux LS pour les débutants

      Explication de la commande Linux mv pour les débutants (8 exemples)

      Tutoriel de script Bash pour les débutants

      Plus de 20 commandes FFmpeg pour les débutants

      Tutoriel Bash Heredoc pour les débutants

      Structure de répertoire Linux expliquée pour les débutants