Fotolia

XML ou YAML : une comparaison des formats de fichiers de configuration

Les outils de gestion de configuration exploitent des langages de sérialisation de données. Voici les principales différences entre deux d’entre eux : XML et YAML.

Les langages de sérialisation des données, comme Extensible Markup Language et YAML Ain't Markup Language, sont généralement utilisés dans les outils de gestion de configuration des infrastructures et des applications.

XML et YAML offrent aux administrateurs de nombreuses options pour automatiser et structurer les données. Cependant, la connaissance de leurs différences doit leur permettre de sélectionner l’outil adéquat pour leur travail de configuration.

La syntaxe XML

XML est un langage qui organise structurellement les données et permet à deux systèmes ou applications différents d’échanger et de comprendre le contenu. Il fournit un format standard qui est à la fois lisible par l’homme et par la machine. Le XML y parvient grâce à l’utilisation de balises descriptives permettant d’identifier des informations spécifiques, à l’instar du HTML. Ce langage de balisage permet également aux administrateurs de définir leurs propres balises pour répondre à leurs besoins. Les langages de programmation qui reconnaissent la norme XML peuvent interpréter ses données.

XML définit le format des données dans les documents au moyen de l’extension de fichier .xml. Les applications Microsoft 365, telles que Word et Excel, en sont un exemple. Ces applications utilisent XML pour définir la structure du contenu d’un fichier. Les fichiers de documents Microsoft 365 ont un caractère x à la fin de l’extension, comme .docx, ce qui reflète l’utilisation du format XML.

Les documents XML consistent en une structure arborescente qui commence par un élément racine et se ramifie en un ou plusieurs éléments enfants. Le fichier repose sur une déclaration de type de document (DTD) qui définit la structure, les éléments et les attributs du fichier. La balise DTD commence par <!DOCTYPE> et contient les règles de structure du document. Les balises ou une référence de document externe définissent la structure. Les commentaires dans les documents XML se trouvent dans la balise <-- ! comment-text -->.

Les développeurs Linux utilisent XML pour transmettre des informations structurées entre les applications. S’il peut servir à gérer la configuration de serveurs, il est moins essentiel pour les administrateurs IT, bien qu’ils puissent l’utiliser pour se connecter à des sources de données. Les outils de gestion de configuration, comme Ansible, peuvent également lire des fichiers XML à l’aide du module XML d’Ansible.

La syntaxe YAML

YAML est un langage de sérialisation des données utilisé communément dans les fichiers de configuration pour déclarer des paramètres. YAML utilise une structure et une syntaxe différentes de celles de XML. La fonction première de YAML est la transmission de données plutôt que leur formatage.

Le YAML représente les données à travers trois structures de données : les scalaires (chaînes, nombre, booléens), les mappages (dictionnaires, objets) et des séquences (arrays, listes).

Sa syntaxe est stricte, mais simple. Elle utilise des espaces blancs – et non des tabulations – pour définir une structure hiérarchique. Les sections s’emboîtent en utilisant ces espaces. YAML ne s’appuie pas sur des symboles de formatage comme XML, ce qui facilite sa lecture et sa compréhension. D’un point de vue technique, il reprend le style d’indentation que l’on retrouve dans Python.

Pour un administrateur, YAML est un outil plus utile. Les outils IaC, comme Ansible, Docker Compose, Terraform (en parallèle du langage spécifique au domaine HCL) et AWS CloudFormation, utilisent YAML pour définir et gérer les configurations de divers systèmes virtuels et bare-metal.

YAML est le format de fichier de configuration le plus courant pour obtenir les avantages de l’automatisation, tels que la cohérence, la répétabilité et la facilité de modification, en particulier avec des outils comme Ansible. Par exemple, Docker Compose utilise des fichiers YAML pour définir plusieurs services ou applications. La gestion des conteneurs Kubernetes repose également sur le format YAML. Les administrateurs utilisent souvent des outils IaC basés sur YAML pour gérer les technologies basées sur Linux. La simplicité de YAML facilite par ailleurs l’examen des fichiers et la visualisation de l’agencement d’une infrastructure IT.

L’exemple de playbook de la figure 1 provient de la documentation originale d’Ansible et décrit la structure YAML qui définit la fonctionnalité du fichier. Cette fonctionnalité permet l’automatisation et l’évolutivité sur site et dans le cloud.

Un playbook Ansible s'appuie sur YAML
Figure 1. Un playbook Ansible configuré à l'aide de YAML

Le code YAML commence par trois tirets (---) et se termine par trois points (...). Les sections des documents YAML sont appelées "maps". Ces "cartes" sont des listes hiérarchiques de valeurs.

Les listes commencent par une clé qui renvoie à une ou plusieurs valeurs. Par exemple, je pourrais avoir une clé nommée birds avec trois valeurs (eagle, chicken, hawk) :

# YAML bird list
---
birds:
- eagle
- chicken
- hawk
...

Travailler avec des fichiers XML et YAML

Les éditeurs de texte puissants, tels que Vim et Emacs, se prêtent à la prise en charge des documents XML et YAML. En outre, de puissants environnements de développement intégré (IDE) facilitent la gestion de ces fichiers. Les auteurs de fichiers peuvent utiliser n’importe quel éditeur, mais ils doivent vérifier les utilitaires pour les extensions XML et YAML qui fournissent des fonctionnalités supplémentaires. Des outils tels que Visual Studio Code, Eclipse, Notepad++ et PyCharm offrent des fonctions de développement standard, tels que la vérification des erreurs, l’autocomplétion et la mise en évidence de la syntaxe.

Les validateurs XML permettent aux auteurs de vérifier la syntaxe et la structure de leurs documents avant de les utiliser en production. Par exemple, les validateurs identifient l’une des erreurs XML les plus courantes : l’absence de balises de fermeture. La validation peut être intégrée dans un éditeur ou un IDE, ou peut être un service externe. Les erreurs dans les documents XML entraînent une défaillance immédiate, il est donc crucial de les détecter rapidement.

Comme pour tout fichier de configuration aujourd’hui, les mesures de contrôle de version sont essentielles. Utilisez un système de dépôt, comme Git, pour gérer les fichiers.

Sécurité des fichiers XML et YAML

La sécurité n’est pas un élément inhérent aux fichiers texte. Cependant, les fichiers XML ou YAML sont des documents sensibles. Ils peuvent faire l’objet d’injection de code malveillant dans le but d’extraire les données qu’ils manipulent ou d’accéder à l’infrastructure qu’ils orchestrent. Voici quelques recommandations de base.

  • Utiliser un système de contrôle des versions pour garantir l’utilisation des fichiers actuels.
  • Contrôler l’accès aux fichiers à l’aide d’un outil de gestion d’accès et des rôles.
  • Exécuter les fichiers XML ou YAML à partir de sources fiables.
  • Tester les fichiers de configuration sur des machines virtuelles ou en local, dans un bac à sable (sandbox).
  • Implanter des mécanismes de validation côté serveur après avoir défini des structures et schémas spécifiques aux fichiers.
  • Mettre en place des mécanismes de surveillance des changements inattendus et des politiques de revues régulières.
  • Envisager le chiffrement des fichiers pour protéger le contenu, notamment quand le fichier de configuration contient des informations sensibles sur les points d’accès de l’infrastructure ou sur des instances dont les namespace pourraient révéler la criticité.

Pour approfondir sur Administration de systèmes