RunToolz iconRunToolz
Welcome to RunToolz!
YAMLКонфигурацияDevOps

YAML: конфигурационные файлы без беспорядка

Почему YAML стал стандартом для конфигурационных файлов и как избежать его подводных камней.

RunToolz Team16 января 2026 г.3 min read

Каждый Kubernetes манифест. Каждый GitHub Actions workflow. Каждый Docker Compose файл.

YAML везде для конфигурации. Он читаем, гибок и имеет некоторые неожиданные особенности.

Почему YAML?

JSON строгий: двойные кавычки, без комментариев, без запятых в конце.

YAML прощающий: минимальный синтаксис, комментарии разрешены, человеко-читаемый.

# YAML конфигурация
database:
  host: localhost
  port: 5432
  name: myapp
{
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "myapp"
  }
}

Те же данные, меньше шума в YAML.

Хотите попробовать сами?Конвертировать YAML в JSON

Основы

Пары ключ-значение:

name: John
age: 30

Вложенные структуры (используй пробелы, а не табы):

person:
  name: John
  age: 30

Списки:

colors:
  - red
  - green
  - blue

Встроенные списки и объекты:

colors: [red, green, blue]
person: {name: John, age: 30}

Проблема Норвегии

country: NO

Что такое NO? Булево false. YAML интерпретирует NO, Yes, on, off и другие как булевы значения.

Код страны Норвегии становится false. Твоя конфигурация ломается загадочными способами.

Исправление: Заключи в кавычки строки, которые могут быть интерпретированы как булевы.

country: "NO"

Проблема многострочных строк

description: This is a long
  description that continues

Это две строки или одна с отступом "that continues"? Зависит от YAML-парсера.

Явные многострочные:

# Буквальный (сохраняет переносы строк)
description: |
  Line one
  Line two

# Свёрнутый (объединяет строки)
description: >
  This is one long
  line when parsed

Отступы важны

Два пробела. Не табы. Не один пробел. Не три.

# Правильно
parent:
  child: value

# Неправильно - символ табуляции
parent:
	child: value

Смешивание табов и пробелов ломает YAML молча. Настрой свой редактор использовать пробелы.

Интерпретация чисел

version: 1.10

Это строка "1.10" или число 1.1? Большинство парсеров интерпретируют как 1.1.

Математика с плавающей точкой снова. Заключай номера версий в кавычки.

version: "1.10"

Якоря и псевдонимы

YAML может ссылаться на повторяющийся контент:

defaults: &defaults
  timeout: 30
  retries: 3

production:
  <<: *defaults
  timeout: 60

Мощно для уменьшения дублирования. Запутанно, когда переборщено.

Валидация YAML

Гибкость YAML означает, что многое, что выглядит валидным, таковым не является.

  • Используй линтер в своём редакторе
  • Валидируй против схемы, когда возможно
  • Конвертируй в JSON, чтобы увидеть, что парсер фактически интерпретировал

Если твоя конфигурация не работает, проверь, что видит парсер, а не что ты написал.

YAML vs JSON vs TOML

YAML: Человеко-читаемый, много возможностей, причудливые крайние случаи.

JSON: Строгий, простой, широко поддерживаемый, многословный.

TOML: Явный, меньше сюрпризов, набирает популярность для конфигов.

Для данных машина-машина JSON безопаснее. Для редактируемых людьми конфигов YAML работает, если ты знаешь подводные камни.


YAML приоритизирует читаемость над строгостью. Этот компромисс создаёт крайние случаи. Заключай в кавычки строки, которые выглядят как булевы или числа, используй явный многострочный синтаксис и валидируй перед развёртыванием.