Основы YAML, которые должен знать каждый инженер DevOps

YAML приобрел большую популярность за последние несколько лет, поскольку стал частью важнейших инструментов, технологий и процессов DevOps, таких как Ansible, Kubernetes, конвейеры CI/CD и т. д.

В этой статье мы охватим основы YAML, чтобы вы знали, как более плавно работать с конфигурацией инструментов DevOps.

 

Что такое YAML?

YAML означает «YAML Ain’t Markup Language», первоначально было аббревиатурой «Еще один язык разметки». YAML — это язык «сериализации данных» и, по сути, удобочитаемый формат структурированных данных.

Он разработан для удобного чтения и записи. Функция сериализации объектов YAML представляет собой реальную альтернативу JSON. YAML — это надмножество JSON с использованием области видимости на основе отступов для обозначения структуры, такой как Python.

Вот пример YAML:

--- 

 Student-ID: 314159

 First-Name: Linus

 Last-Name: Torvalds



Phone-numbers:

    - 123.456.7890

    - 098.765.4321

    - 123.455.4321



Addresses:

    - Street: Krasnay

    - City: Krasnodar

    - State: Kr

---

 

Основные правила YAML, которые вы всегда должны помнить

Если вы не хотите, чтобы при синтаксическом разборе файла YAML повторялись ошибки, вы всегда должны помнить следующее при работе с YAML:

  • Вкладки НЕ допускаются в YAML. Вы должны использовать пространство для отступа.
  • Хотя количество места не имеет значения, если отступ дочернего узла больше, чем отступ родительского узла, рекомендуется оставлять такое же количество пробелов.
  • Между различными элементами YAML должен быть пробел (объяснено позже).
  • YAML чувствителен к регистру.
  • YAML-файл должен заканчиваться расширениями вроде .yamlили .yml.
  • YAML поддерживает кодировку UTF-8, UTF-16 и UTF-32.

Давайте теперь разберемся с синтаксисом YAML.

 

Элементы файла YAML: базовый синтаксис

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

Разберемся на примере. Это файл манифеста службы Kubernetes.

kind: Service

metadata:  

  name: web-app-svc

spec:  

  type: NodePort  

  ports:  

  - port: 8080         #Сервисный порт

    targetPort: 8080   #Порт Pod

    nodePort: 30012  #Порт узла из диапазона - 30000-32767  

  selector:    

    app: web-app

 

Это набор ключевых элементов паров значений: Name: Value.

Как видно из файла выше, файл YAML состоит из ряда различных элементов. Вместе они могут использоваться для описания самых разных структур.

 

1. Пробелы или отступы

В YAML вы делаете отступ с помощью пробелов, а не табуляции. И между элементами ДОЛЖЕН быть пробел.

Правильная спецификация:

Kind: Service

 

Неправильная спецификация:

Kind:Service

 

Потому что в приведенном выше утверждении нет пробела после двоеточия!

 

2. Комментарии в YAML

Комментарии можно определить, поместив хеш перед элементом ‘#’. Комментарии могут быть сделаны в начале строки в любом месте строки.

Если вы просматриваете наш файл конфигурации YAML, у нас есть три встроенных комментария, таких как «#service port» и т. д.

 

3. Скаляр (пара «ключ-значение»)

Скаляры — это строки и числа, из которых состоят данные на странице. Проще говоря, это пары ключ-значение.

kind: Service

metadata:  

  name: web-app-svc

 

4. Коллекции и списки

Элементы или элементы списка и коллекции — это строки, которые начинаются на одном уровне отступа, начиная с тире, за которым следует пробел.

- web-app-prod 

- prod-deployments 

- prom-monitored

 

Это базовый список, в котором каждый элемент находится в отдельной строке с открывающим тире.

 

5. Вложенные коллекции

Если вы хотите создать вложенную последовательность с элементами и подпунктами, вы можете сделать это, поместив один пробел перед каждым тире в подпунктах.

- 

 - web-app-prod 

 - prod-deployments 

 - prom-monitored

-  

 - web-app-test 

 - staging-deployments 

 - not-monitored

 

6. Словари

Словари представляют собой формат key: value с отступом содержимого.

ports:    

- port: 8080         #Сервисный порт

  targetPort: 8080   #Порт Pod

  nodePort: 30012  #Порт узла из диапазона - 30000-32767

 

Вы можете объединять и смешивать коллекции списков и словарей следующим образом:

ports:    

- port: 8080         #порт service

  targetPort: 8080   #порт Pod

  nodePort:       

  - 30012       

  - 30013       

  - 30014

 

Это очень простые концепции YAML, но они необходимы инженеру DevOps.

Для YAML не нужен специальный редактор. Ваш любимый текстовый редактор уже должен поддерживать YAML или при необходимости использовать плагин.

 

Есть много вещей, которые вы можете изучить глубже. Для этого вы всегда можете обратиться к официальной документации YAML.



2020-11-05T19:32:34
Программирование