Aller au contenu

yq

À quoi il sert

YAML est le format de configuration de Kubernetes, d'Ansible, des workflows de CI ou de cloud-init ; comme le JSON, sa structure imbriquée ne se traite pas de façon fiable avec grep ou sed. Deux projets différents portent le nom yq, et ce n'est pas un détail :

  • yq en Python (Andrey Kislyuk), celui des paquets Debian (3.4.3 dans Debian 13) et Ubuntu (3.1.0 dans Ubuntu 24.04, dépôt universe). C'est une enveloppe autour de jq : il convertit le YAML en JSON, appelle jq avec le filtre donné, et reconvertit la sortie en YAML avec -y (ou -Y pour mieux préserver le document). Toute la syntaxe de jq s'applique, et xq et tomlq font de même pour XML et TOML.
  • yq en Go (Mike Farah), un programme autonome, distribué par ses publications GitHub et par Snap ou Homebrew, mais empaqueté ni par Debian ni par Ubuntu. Sa syntaxe ressemble à celle de jq sans lui être identique, et il sait modifier un fichier sur place (-i) en conservant mieux les commentaires.

Quand le choisir

Pour lire ou modifier une valeur dans un fichier YAML depuis un script : récupérer une image dans un manifeste Kubernetes, incrémenter une version dans un fichier de valeurs Helm, vérifier une clé dans un workflow. Pour des modifications répétées de configuration sur des serveurs, un outil de gestion de configuration reste préférable ; pour un traitement complexe, Python et une bibliothèque YAML.

Points d'attention

  • Vérifiez lequel est installé (yq --version) : une commande écrite pour l'un échoue ou fait autre chose avec l'autre, et les exemples trouvés en ligne visent le plus souvent la version Go.
  • La conversion YAML vers JSON perd les commentaires, les ancres et le style ; une réécriture complète d'un fichier commenté par la version Python les fait disparaître.
  • YAML a ses propres pièges de typage (valeurs comme no, on ou 010 interprétées selon la version de la spécification) : une valeur peut changer de type à la conversion.
  • Ne collez pas de variable du shell dans le filtre : passez-la par --arg, comme avec jq.

Par où commencer

La leçon jq : transformer, produire du JSON et choisir son outil du cours Traiter du texte, puis la leçon jq : interroger du JSON pour la syntaxe des filtres. La documentation du yq Python et celle du yq Go.