vendredi, 19 avril 2024

7 pièges YAML laids à éviter et comment les éviter

Le langage de configuration YAML (« YAML n’est pas un langage de balisage ») est au cœur de nombreuses applications modernes telles que Kubernetes, Ansible, CircleCI et Salt. YAML offre de nombreux avantages, tels que la lisibilité, la polyvalence et la possibilité de travailler avec des fichiers JSON. Cependant, YAML est également une source de pièges et de pièges pour les non-initiés ou les imprudents.

De nombreux éléments des habitudes de YAML permettent une commodité de courte durée, mais au prix de zigs ou de zags inattendus plus tard. Même les personnes ayant beaucoup d’expérience dans l’assemblage ou le déploiement de YAML peuvent être mordues par ces problèmes, qui apparaissent souvent sous l’apparence d’un comportement relativement inoffensif.

Voici sept étapes que vous pouvez suivre pour vous prémunir contre les pièges les plus problématiques. en YAML.

En cas de doute, mettez les chaînes entre guillemets

La pratique de protection la plus puissante que vous puissiez adopter lors de la rédaction de YAML : Citez tout ce qui est indiqué comme étant une chaîne.

L’une des particularités les plus connues de YAML est que vous pouvez composer des chaînes sans estimation de prix :

– film : titre : Blade Runner année : 1982

Dans cet exemple, le secrets film, titre et année seront interprétés comme des chaînes, tout comme la valeur Blade Runner. La valeur 1982 sera analysée comme un nombre.

Que se passe-t-il ici ?

– film : titre : 1979 année : 2016

C’est vrai – le titre du film sera traduit par un nombre. Ce qui n’est même pas la pire chose qui puisse arriver :

– film : titre : Non année : 2012

Quelles sont les chances que ce titre soit interprété comme un booléen ?

Si vous voulez pour être absolument sûr que les clés et les valeurs seront analysées en tant que chaînes et se défendre contre toute incertitude potentielle (et beaucoup d’incertitudes peuvent se glisser dans YAML), puis mettez vos chaînes entre guillemets :

–  » movie  » : « title  » : « Blade Runner  » « year  » : 1982

Si vous n’êtes pas en mesure d’estimer le prix des chaînes pour un certain facteur, vous pouvez utiliser un préfixe abrégé pour afficher le type. Celles-ci rendent YAML un peu plus bruyant à vérifier que les chaînes estimées, mais elles sont tout aussi claires que l’estimation :

film : !! str Blade Runner

Méfiez-vous des chaînes multilignes

YAML a de nombreuses façons de représenter les chaînes multilignes, selon la façon dont ces chaînes sont formatées. Les chaînes sans guillemets peuvent simplement être réparties sur plusieurs lignes lorsqu’elles sont précédées d’un > :

chaîne longue :> Il s’agit d’une longue chaîne qui s’étend sur plusieurs lignes.

Gardez à l’esprit que l’utilisation de > ajoute automatiquement un n à la fin de la chaîne. Si vous ne voulez pas la toute nouvelle ligne de suivi, utilisez >- plutôt que >.

Si vous utilisez des chaînes entre guillemets, vous devez faites précéder chaque saut de ligne d’une barre oblique inverse :

chaîne longue : « Ceci est une longue chaîne qui couvre plusieurs lignes.  »

Notez que toutes les zones après un saut de ligne sont traduites au format YAML, et non comme faisant partie de la chaîne . C’est pourquoi la zone est insérée avant la barre oblique inverse dans l’exemple ci-dessus. Il s’assure que les mots string et that ne fonctionnent pas ensemble.

Méfiez-vous des booléens

Comme indiqué ci-dessus, parmi Les autres gros pièges de YAML sont les valeurs booléennes. Il existe tellement de façons de spécifier des booléens dans YAML qu’il est trop simple de traduire une chaîne souhaitée en booléen.

Un exemple bien connu de ceci est le problème du code national à deux chiffres. Si votre pays est États-Unis ou Royaume-Uni, très bien. Si votre nation est la Norvège, dont le code de pays est NON, ce n’est plus une chaîne – c’est un booléen qui renvoie faux !

.?. !! Dans la mesure du possible, soyez intentionnellement spécifique avec des valeurs booléennes et des chaînes plus courtes qui peuvent être interprétées à tort comme des booléens. Le préfixe abrégé de YAML pour les booléens est !! bool.

Faites attention aux multiples formes d’octal

C’est un piège à distance, mais cela peut être gênant. YAML 1.1 utilise une notation différente pour les nombres octaux que YAML 1.2. Dans YAML 1.1, les nombres octaux apparaissent comme 0777. Dans YAML 1.2, ce même octal devient 0o777. C’est beaucoup moins incertain.

Kubernetes, l’un des plus grands utilisateurs de YAML, utilise YAML 1.1. Si vous utilisez YAML avec d’autres applications qui utilisent la variante 1.2 de la spécification, faites très attention à ne pas utiliser la notation octale incorrecte. Étant donné que l’octal n’est généralement utilisé que pour les autorisations de fichiers ces jours-ci, il s’agit d’un cas particulier par rapport aux autres pièges YAML. Pourtant, YAML octal peut vous mordre si vous n’êtes pas prudent.

Faites attention au YAML exécutable

Exécutable YAML ? Oui. De nombreuses bibliothèques YAML, telles que PyYAML pour Python, ont permis l’exécution de commandes approximatives lors de la désérialisation de YAML. Étonnamment, ce n’est pas un bogue, mais une fonctionnalité YAML a été créée pour l’activer.

Dans le cas de PyYAML, le comportement par défaut pour la désérialisation a finalement été modifié pour ne prendre en charge qu’un sous-ensemble sûr de YAML qui ne permet pas ce genre de chose. Le comportement initial peut être rétabli manuellement (voir le lien ci-dessus pour savoir comment procéder), mais vous devez empêcher l’utilisation de cette fonction si vous le pouvez et la désactiver par défaut si elle n’est pas déjà handicapée.

Faites attention aux disparités lors de la sérialisation et de la désérialisation

Une autre préoccupation possible avec YAML est que différentes bibliothèques de gestion YAML dans différents langages de programme génèrent souvent des résultats différents.

Pensez à : Si vous avez un fichier YAML composé de valeurs booléennes représentées par réel et incorrect, et que vous le re-sérialisez en YAML en utilisant une bibliothèque différente qui représente les booléens par y et n ou on et off, vous pourriez obtenir des résultats imprévus. Même si le code reste fonctionnellement le même, il peut sembler absolument différent.

N’utilisez pas YAML

Le moyen le plus simple d’éviter les problèmes avec YAML ? Ne l’utilisez pas. Ou au moins, ne l’utilisez pas directement.

Si vous avez besoin de composer YAML dans le cadre d’un processus de configuration, il pourrait être plus sûr de composer le code en JSON ou en code natif (par exemple, Python dictionnaires), puis sérialisez-le en YAML. Vous aurez plus de contrôle sur les types d’éléments et vous serez plus à l’aise avec une langue que vous maîtrisez déjà.

En arrêtant de travailler cela, vous pouvez utiliser un linter tel que yamllint pour rechercher des Problèmes YAML. Par exemple, vous pouvez interdire les valeurs véridiques comme OUI ou off, en faveur de seulement réel et incorrect, ou pour imposer une estimation de chaîne.

.

Toute l’actualité en temps réel, est sur L’Entrepreneur

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici