Начало работы
Введение
YAML - это язык сериализации данных, предназначенный для непосредственной записи и чтения человеком.
- YAML не допускает использования табуляций
- Между частями элемента должен быть пробел
- YAML чувствителен к CASE
- Завершайте YAML-файл расширением
.yaml
или.yml
. - YAML является надмножеством JSON
- Плейбуки Ansible представляют собой YAML-файлы {.marker-round}
Скалярные типы
``yaml n1: 1 # целое число n2: 1.234 # float
s1: ‘abc’ # строка s2: “abc” # строка s3: abc # строка
b: false # тип boolean
d: 2015-04-05 # тип даты
#### ↓ Эквивалентный JSON
``json
{
"n1": 1,
"n2": 1.234,
"s1": "abc",
"s2": "abc",
"s3": "abc",
"b": false,
"d": "2015-04-05"
}
Используйте пробелы для отступа. Между частями элемента должен быть пробел.
Переменные
``yaml some_thing: &VAR_NAME foobar other_thing: *VAR_NAME
#### ↓ Эквивалентный JSON
``json
{
"some_thing": "foobar",
"other_thing": "foobar"
}
Комментарии
``yaml
Пример однострочного комментария
пример комментария на уровне блока
комментарий строки 1
комментарий строки 2
комментарий строки 3
### Многострочные строки
```yaml
описание: |
hello
мир
↓ Эквивалентный JSON
``json {“description”: “hello\nworld\n”}
### Наследование {.row-span-2}
``yaml
родитель: &defaults
a: 2
b: 3
дочерний:
<<: *дефолты
b: 4
↓ Эквивалентный JSON
``json { “parent”: { “a”: 2, “b”: 3 }, “child”: { “a”: 2, “b”: 4 } }
### Ссылка {.row-span-2}
``yaml
значения: &ref
- Будет
- повторно использоваться ниже
other_values:
i_am_ref: *ref
↓ Эквивалентный JSON
``json { “values”: [ “Будет”, “повторно использован ниже” ], “other_values”: { “i_am_ref”: [ “Будет”, [ “Повторное использование ниже” ] } }
### Свернутые строки
``yaml
описание: >
привет
мир
↓ Эквивалентный JSON
``json {“description”: “hello world\n”}
### Два документа
```yaml
---
документ: это документ 1
---
документ: это документ 2
В YAML используется ---
для отделения директив от содержимого документа.
Коллекции YAML
Последовательность
``yaml
- Марк Макгвайр
- Сэмми Соса
- Кен Гриффи
#### ↓ Эквивалентный JSON
``json
[
"Марк Макгвайр",
"Сэмми Соса",
"Кен Гриффи"
]
Сопоставление
``yaml hr: 65 # Хоумраны avg: 0.278 # Batting average rbi: 147 # Runs Batted In
#### ↓ Эквивалентный JSON
``json
{
"hr": 65,
"avg": 0.278,
"rbi": 147
}
Отображение на последовательности
``yaml атрибуты:
- a1
- a2 методы: [getter, setter]
#### ↓ Эквивалентный JSON
``json
{
"attributes": ["a1", "a2"],
"methods": ["getter", "setter"]
}
Последовательность отображений
``yaml дети:
- имя: Джимми Смит возраст: 15
- имя: Джимми Смит возраст: 15
- имя: Сэмми Соса возраст: 12
#### ↓ Эквивалентный JSON
``json
{
"children": [
{ "name": "Джимми Смит", "возраст": 15},
{ "name": "Jimmy Smith", "age": 15},
{"name": "Сэмми Соса", "возраст": 12}
]
}
Последовательность последовательностей
my_sequences:
- [1, 2, 3]
- [4, 5, 6]
-
- 7
- 8
- 9
- 0
↓ Эквивалентный JSON
``json { “my_sequences”: [ [1, 2, 3], [4, 5, 6], [7, 8, 9, 0] ] }
### Отображение отображений
``yaml
Марк Макгвайр: {hr: 65, avg: 0.278}
Сэмми Соса: {
hr: 63,
avg: 0.288
}
↓ Эквивалентный JSON
``json { “Mark McGwire”: { “hr”: 65, “avg”: 0.278 }, “Сэмми Соса”: { “hr”: 63, “avg”: 0.288 } }
### Вложенные коллекции
``yaml
Джек:
id: 1
имя: Franc
зарплата: 25000
хобби:
- a
- b
местоположение: {country: "A", город: "A-A"}
↓ Эквивалентный JSON
``json { “Jack”: { “id”: 1, “name”: “Franc”, “salary”: 25000, “hobby”: [“a”, “b”], “location”: { “страна”: “A”, “city”: “A-A” } } }
### Неупорядоченные множества
``yaml
set1: !!! set
? one
? два
set2: !!!set {"один", "два"}
↓ Эквивалентный JSON
``json { “set1”: {“1”: null, “2”: null}, “set2”: { “1”: null, “2”: null} }
Наборы представляются в виде отображения, в котором каждый ключ связан с нулевым значением
### Упорядоченные отображения
``yaml
упорядоченное: !!!omap
- Марк Макгвайр: 65
- Сэмми Соса: 63
- Кен Гриффи: 58
↓ Эквивалентный JSON
``json { “ordered”: [ { “Марк Макгвайр”: 65}, { “Сэмми Соса”: 63}, {“Кен Гриффи”: 58} ] }
Справочник по YAML
--------------
### Термины
- Последовательности, они же массивы или списки
- Скаляры, они же строки или числа
- Отображения, они же хэши или словари
{.marker-round}
Основано на YAML.org [refcard](https://yaml.org/refcard.html).
### Индикаторы документа
| | |
|-------|---------------------|
| `%` | Индикатор директивы |
| `---` | Заголовок документа |
| `...` | Терминатор документа |
### Индикаторы коллекции {.row-span-2}
| | |
|------|---------------------------------|
| `?` | Ключевой индикатор |
| `:` | Индикатор значения |
| | `-` | Индикатор вложенных записей серии |
| | `,` | Разделять входы линейной ветви |
| `[]` | Окружать ветвь серии |
| `{}` | Окружать ветвь с ключом |
### Индикаторы псевдонимов
| | |
|-----|-----------------|
| `&` | Свойство якоря |
| `*` | Псевдонимный индикатор |
### Специальные ключи
| | |
|------|---------------------------------|
| | `=` | Ключ отображения "значение" по умолчанию |
| `<<` | Объединить ключи из другого отображения |
### Скалярные индикаторы
| | |
|-------|----------------------------------------------------------------------------------------------|
| ```` | Обвести скаляр в строке без раскрытия |
| ```` | Обвести в строке экранированный скаляр |
| | `|` | Индикатор блочного скаляра |
| `>` | Индикатор свернутого скаляра |
| | `-` | Убрать модификатор chomp (`|-` или `>-`)|
| `+` | Оставить модификатор chomp (`|+` или `>+`)|
| `1-9` | Модификатор явного отступа (`|1` или `>2`). <br/> Модификаторы могут комбинироваться (`|2-`, `>+1`)|
### Свойство тега (обычно не указывается) {.col-span-2}
| | |
|----------|-------------------------------------------------------------|
| `none` | Неопределенный тег (автоматически разрешается приложением)|
| `!` | Неспецифический тег (по умолчанию `!!map`/`!!seq`/`!!str`) |
| | `!foo` | Первичный (по условию, означает локальный тег `!foo`)| |
| | `!!foo` | Вторичный (по условию, означает `tag:yaml.org,2002:foo`)|
| | `!h!foo` | Требуется `%TAG !h! <prefix>` (и тогда означает `<prefix>foo`)|
| `!<foo>` | Дословный тег (всегда означает `foo`) |
### Misc-индикаторы
| | |
|-----|-----------------------------|
| `#` | Индикатор отбрасываемого комментария |
| <code>\`@</code> | Оба варианта зарезервированы для будущего использования |
### Основные типы (автоматические теги по умолчанию) {.row-span-2}
| | |
|---------|------------------------------------------|
| `!!map` | `{Хеш-таблица, словарь, отображение}` |
| `!!seq` | `{Список, массив, кортеж, вектор, последовательность}` |
| `!!str` | Строка Юникода |
### Escape Codes {.row-span-3}
#### Числовые
- `\x12` (8-бит)
- `\u1234` (16-бит)
- `\U00102030` (32-бит)
{.cols-2 .marker-none}
#### Protective
- `\\` (\\)
- `\"` (")
- `\ ` ( )
- `\<TAB>` (TAB)
{.cols-3 .marker-none}
#### C
- `\0` (NUL)
- `\a` (BEL)
- `\b` (BS)
- `\f` (FF)
- `\n` (LF)
- `\r` (CR)
- `\t` (TAB)
- `\v` (VTAB)
{.cols-3 .marker-none}
#### Дополнительно
- `\e` (ESC)
- `\_` (NBSP)
- `\N` (NEL)
- `\L` (LS)
- `\P` (PS)
{.cols-3 .marker-none}
### Другие типы
| | |
|----------|-----------------------------|
| `!!set` | `{вишни, сливы, яблоки}` |
| `!!omap` | `[one: 1, two: 2]` |
### Языковые независимые скалярные типы {.col-span-2}
| | |
|---------------------------|--------------------------------------------|
| `{~, null}` | Null (нет значения). |
| | `[1234, 0x4D2, 02333]` | [Decimal int, Hexadecimal int, Octal int] |
| | `[1_230.15, 12.3015e+02]` | [Fixed float, Exponential float] |
| `[.inf, -.Inf, .NAN]` | [Бесконечность (float), Отрицательное число, Не число] |
| `{Y, true, Yes, ON}` | Булево true |
| `{n, FALSE, No, Off}` | Булево ложно |
Также см.
--------
- [YAML Reference Card](https://yaml.org/refcard.html) _(yaml.org)_
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/yaml/) _(learnxinyminutes.com)_
- [YAML lint online](http://www.yamllint.com/) _(yamllint.com)_