Консультация по продукту 1cloud

Краткий мануал по YAML


YAML — один из самых распространенных языков записи конфигураций и сценариев для сетевых приложений. Он используется в Docker-compose и Ansible playbooks. YAML получил такое широкое распространение благодаря человекочитаемому синтаксису и простым правилам оформления файлов.

Данный краткий мануал поможет лучше понять YAML-синтаксис. Приведем правила оформления YAML-файлов:

  • начало файла обозначается 3 дефисами(«---»), а конец — 3 точками («…»);
  • первый блок (словарь или список) — задает рабочие количество отступов, которое будет использовано во всём документе;
  • после знака «-», обозначающего элемент списка, ставится пробел;
  • все именованные наборы данных и строки должны иметь уникальные названия.

Синтаксис YAML-файлов

Строка

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

  • Однострочной записью
    string: This is a string.
  • Блочной записью
    ---
    string:
    Это очень длинная строка,
    которую сложно читать в однострочной записи,
    так как она вылезает за пределы окна.
    ...

Блочная запись имеет три режима интерпретации: стандартный (показан выше), с добавлением знака конца строки в завершении текста (string: > ), с добавлением всех знаков конца строки при каждой новой строке (string: I ).

Несколько строчных записей образуют словарь:

---
string_1: This is string 1.
string_2: This is string 2.
string_3: This is string 3.
...

Такая запись будет интерпретирована так:

{'string_1': 'This is a string 1.', 'string_2': 'This is a string 2.', 'string_3': 'This is a string 3.'}

Список

Список — это набор разнородных данных. Списки могут быть простыми (одномерными), вложенными (вложенными) и именованными. Пример простого, одномерного списка:

---
- element1
- element2
- element3
...

Именованный список по записи похож на строку. Название отделяется двоеточием, а элементы списка перечисляются через дефис:

---
list:
- 2
- element2
- true
...

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

---
list_level_1:
- 2
- element2
- true
- list_level_2:
- element1
- element2
- element3
...

Образовать простой список с вложенными неименованными списками просто, достаточно указать дефис, сделать отступ и перечислить вложенные элемент:

---
-
- element_1
- element_2
- element_3
-
- element_1
- element_2
- element_3
...

Словарь

Словарь — это набор данных по типу «ключ : значение». Словарь в YAML ничем не отличается от строк, то есть если мы сделаем такую запись:

---
author: Ivan Katkov
job: Tech Writer
skill: Normal
...

Мы получим словарь с 3 ключами, но если запись немного изменить на такую:

---
author:
name: Ivan Katkov
job: Tech Writer
skill: Normal
...

Получится словарь с ключом author, а в качестве значения будет другой словарь, содержащий: name, job и skill.

Мультивложенность элементов

Многоуровневая вложенность формируется отступами и спец. символами: двоеточием — знаком образования строки или ключа словаря и дефисов — символом образования списки или элемента списка.

Структура данных YAML-синтаксис Вывод Python
Вложенные неименованные списки — дефис обозначает начало списка, а дефис с пробелом и название — является элементом списка. -1111111111111111111111111
  - Яблоки
  - Груша
  - Банан
-
  - Картофель
  - Редька
  - Капуста
-
  - Лук
  - Петрушка
  - Укроп
[['Яблоки', 'Груша', 'Банан'], ['Картофель', 'Редька', 'Капуста'], ['Лук', 'Петрушка', 'Укроп']]
Вложенные именованные списки образуются путём замены пустых дефисов, обозначающих список на именованную строку с двоеточием. Фрукты:
  - Яблоки
  - Груша
  - Банан
Овощи:
  - Картофель
  - Редька
  - Капуста
Зелень:
  - Лук
  - Петрушка
  - Укроп
{'Фрукты': ['Яблоки', 'Груша', 'Банан'], 'Овощи': ['Картофель', 'Редька', 'Капуста'], 'Зелень': ['Лук', 'Петрушка', 'Укроп']}
Вложенные словари формируются с помощью именованных строк, двоеточий и отступов. Фрукты:
 Яблоки:
  Красные:
   1кг.
  Зеленые:
   0,5кг.
 Груши:
  Гвидон:
   0,3кг.
  Велеса:
   0,1кг.
{'Фрукты': {'Яблоки': {'Красные': '1кг.', 'Зеленые': '0,5кг.'}, 'Груши': {'Гвидон': '0,3кг.', 'Велеса': '0,1кг.'}}}

Уровень вложенности может быть любым. Чаще всего вам будут попадаться вложенные словари, так как они являются базовой структурой данных в Python и некоторых других языках программирования.


Средняя оценка: 5,0, всего оценок: 6