| July 6, 2022
Акроним YAML изначально расшифровывался создателями как “Yet Another Markup Language”, и задумывался как, действительно, ещё один язык разметки. В последствии, акроним стал расшифровываться создателями как “YAML Ain’t Markup Language” или “YAML не язык разметки”. Так что же такое YAML на самом деле?
YAML - это формат данных, который прекрасно подходит для задач сериализации данных, ориентированный на удобство ввода-вывода структур данных.
За счёт имеющихся в спецификации YAML типов данных, является прекрасным способом описания конфигурации приложений. Например, YAML используется в Spring Boot, для описания настроек приложения. Или же на YAML описывают манифесты ресурсов Kubernetes. Или же статический генератор сайтов Hugo позволяет задавать метаинформацию для страниц сайта в YAML.
Основы YAML
Как не сложно догадаться, YAML разметка обычно хранится в файлах, имеющих расширение *.yaml
или *.yml
. Однако, для проверки валидности YAML-содержания удобно использовать онлайн валидаторы. Это так же отличное подспорье в деле изучения YAML. Рекоммендую к ознакомлению следующий сервис. В нём удобно набирать YAML разметку и видеть результат, если конструкция валидна, или же видеть сообщение с объяснением произошедшей ошибки.
Скаляр
Простейшей единицей YAML разметки является скаляр. Примером скаляра является простая строка:
Привет!
Списки
Далее, YAML поддерживает списки. Причём, делает это в двух видах - многострочном и однострочном.
Пример, однострочного списка скаляров в YAML:
["first", "second", "third"]
или тот же самый пример в виде многострочного списка скаляров:
- first
- second
- third
Словари
Словари - это набор кортежей, где каждому скаляру - ключу, соответствует скаляр - значение:
first: 1
second: 2
third: 3
Комбинации
Все типы можно комбинировать между собой.
Например, таким образом можно создать список, состоящий из двух словарей:
-
age: 21
name: Jimbo
nickname: Big. J
-
year: 2001
title: Domain-Driven Design
pages: 1021
А вот так, кортеж, ключам которого соответствует список:
books:
- Object-Oriented Programming
- Domain-Driven Design
- Functional Programming
movies:
- Кавказская пленница
- Операция Ы или другие приключения Шурика
- Самогонщики
Ну и наконец, список списков:
- ["a", "b"]
- ["1", "2"]
и словарь словарей:
John:
"age": "31"
Jade:
"age": "23"
Пример из жизни
Уже зная самые базовые вещи, описанные в предыдущей секции, можно разобрать реальный пример из жизни. Посмотрим на определение pod’а Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
Что мы видим? Начнём с корневых элементов:
apiVersion: v1
kind: Pod
metadata: ...
spec: ...
У нас есть описание ресурса Kubernetes, в котором определены версия и вид ресурса (поля apiVersion
& kind
), а так же метаданные и спецификация (поля metadata
& spec
). Последние два поля особенные - это не просто соответствия скаляров ключей и скаляров значений, а полноценный маппинг ключа на целый объект.
Разберём поле spec
:
spec:
containers: ...
spec
содержит в себе ещё один словарь, в котором есть ровно один элемент, ключём которого является строка containers
.
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
Обратите внимание, первая же строка после containers
начинается с символа -
, что говорит нам о том, что начинается список. То есть, поле containers
содержит в себе список определений контейнеров, входящих в состав kubernetes pod’а.
То же самое, можно увидеть и с полем ports
. Имеет место перечисление портов, которые должны быть открыты.
Заключительная часть
Спецификация YAML содержит описания элементов, приведённых в этой статье, а так же, описания многих других, таких как многострочные литералы, теги и другие. На неё точно стоит обратить внимание.
Ключевой момент в работе с YAML - соблюдение отступов. Отступы означают область видимости элемента, говоря техническим языком, его скоуп. Правильное расположение элементов - залог правильного YAML. Большинство ошибок с невалидным YAML содержимым сводится к некорректно расположенным отступам.