Найти в Дзене
Эникей на передержке

Как парсить YAML?

Многие администраторы знакомы с инструментом jq, который позволяет легко парсить JSON с помощью различных фильтров. Но не всем известна альтернатива для YAML — yq. Откровенно говоря, yq занимается только преобразованием файлов yaml в формат json, а всю остальную работу выполняет старый добрый jq. Например, у нас есть docker-compose.yml, из которого нужно получить только список сервисов. Можно использовать grep с регулярными выражениями, но если по стечению обстоятельств на разных серверах файлы yml генерируются по разному шаблону (что, разумеется, очень плохо, но не всегда это можно легко исправить), то есть риск, что одно и то же выражение grep будет работать с разной степенью эффективности. И здесь нам на помощь приходит yq: yq -r '.services | keys[]' docker-compose.yml Как правило реальная работа требует построения более сложных выражений, например, мне понадобилось получить не только список сервисов, но и образы, которые они используют. С этим легко справилась команда ниже: yq -r

Многие администраторы знакомы с инструментом jq, который позволяет легко парсить JSON с помощью различных фильтров. Но не всем известна альтернатива для YAML — yq.

Откровенно говоря, yq занимается только преобразованием файлов yaml в формат json, а всю остальную работу выполняет старый добрый jq.

Например, у нас есть docker-compose.yml, из которого нужно получить только список сервисов. Можно использовать grep с регулярными выражениями, но если по стечению обстоятельств на разных серверах файлы yml генерируются по разному шаблону (что, разумеется, очень плохо, но не всегда это можно легко исправить), то есть риск, что одно и то же выражение grep будет работать с разной степенью эффективности.

И здесь нам на помощь приходит yq:

yq -r '.services | keys[]' docker-compose.yml
В выводе присутствуют только имена сервисов, независимо от форматирования файла.
В выводе присутствуют только имена сервисов, независимо от форматирования файла.

Как правило реальная работа требует построения более сложных выражений, например, мне понадобилось получить не только список сервисов, но и образы, которые они используют. С этим легко справилась команда ниже:

yq -r '.services | to_entries[] | .key + ": " + .value.image' docker-compose.yml
-3

Утилита присутствует в репозиториях многих популярных дистрибутивов, установка в Debian и производные выполняется командой

sudo apt install yq
-4

На этом краткий экскурс в возможности yq подошёл к концу. Если остались вопросы - добро пожаловать в комментарии. Всем добра!)