Что такое файл Yaml

Обновлено: 21.11.2024

Главная / DevOps / Что такое YAML? Как это работает на примерах

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

YAML – это альтернатива JSON, форматирующая данные в естественном, удобном для чтения и кратком виде.

Эта статья познакомит вас с языком разметки YAML. Мы рассмотрим основные концепции этого языка разметки, объясним его ключевые функции и покажем, что YAML предлагает командам DevOps.

Что такое YAML?

YAML – это язык сериализации данных. Когда он появился в 2001 году, YAML расшифровывался как «Еще один язык разметки». Позже аббревиатура была изменена на «YAML — это не язык разметки», чтобы подчеркнуть, что этот язык предназначен для данных, а не для документов.

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

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

Помимо удобочитаемого кода, YAML также включает:

  • Переносимость данных на разных языках
  • Последовательная модель данных
  • Однопроходная обработка
  • Простота реализации и использования

Пользователи могут писать код для чтения и создания YAML на любом языке программирования. Расширения в YAML: .yaml и .yml. Оба расширения обозначают один и тот же тип файла.

Возможности Yaml

YAML имеет несколько функций, которые делают его отличным вариантом для форматирования данных.

Поддержка нескольких документов

Пользователи могут добавлять несколько документов в один файл YAML. Разделяйте разные документы тремя дефисами ( --- ), например:

Три точки ("") обозначают конец документа без начала нового.

Встроенные комментарии

Чистый синтаксис

Как и Python, YAML использует отступы для отображения уровней и структуры данных. Нет обычных символов формата, таких как фигурные скобки, квадратные скобки, закрывающие теги или кавычки. Синтаксис чистый и удобный для просмотра.

Чистый синтаксис — вот почему несколько популярных инструментов используют YAML, например Ansible, Kubernetes и OpenStack.

Нет вкладок

YAML не поддерживает вкладки. Пробелы — единственный способ добиться отступа.

Рекомендуется отображать пробельные символы в текстовом редакторе, чтобы предотвратить случайное использование вкладок.

Точная обратная связь

Отзыв YAML относится к определенным строкам в файле. Вы можете быстро найти и исправить ошибки, если знаете, где искать.

Поддержка сложных структур

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

Явные типы данных с тегами

YAML автоматически определяет тип данных, но пользователи могут указать нужный тип. Чтобы указать тип данных, вы включаете «!!». символ:

Нет исполняемых команд

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

Если пользователь хочет добавить исполняемую команду, YAML должен быть интегрирован с другими языками. Добавьте синтаксические анализаторы Perl, например, чтобы включить выполнение кода Perl.

Как работает YAML

YAML соответствует собственным структурам данных гибкой методологии и ее языкам, таким как Perl, Python, PHP, Ruby и JavaScript. Он также унаследовал функции от других языков:

  • Скаляры, списки и массивы взяты из Perl.
  • Три дефиса используются в MIME.
  • Обтекание пробелами происходит из HTML.
  • Escape-последовательности взяты из C.

YAML поддерживает все основные типы данных, включая значения NULL, числа, строки, массивы и карты. Он распознает некоторые типы данных, зависящие от языка, такие как даты, метки времени и специальные числовые значения.

Двоеточие и один пробел определяют скаляр (или переменную):

А | символ обозначает строку, которая сохраняет новые строки, а символ > обозначает строку, которая сворачивает новые строки:

Помимо основ, есть два важных типа структур, о которых вам нужно знать в YAML:

Используйте эти две структуры для форматирования в YAML.

Карты YAML (с примерами)

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

Вот JSON-эквивалент открытия того же файла:

Оба кода имеют два значения, v3 и Pod , сопоставленные с двумя ключами, apiVersion и kind .В YAML кавычки необязательны, а скобки отсутствуют.

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

У нас есть ключ (метаданные) с двумя другими ключами в качестве имени значения и меток. Ключ labels имеет другую карту в качестве значения. YAML позволяет вам вкладывать карты так, как вам нужно.

Количество пробелов не имеет значения, но оно должно быть одинаковым во всем файле. В нашем примере мы использовали два пробела для удобства чтения. Имя и метки имеют одинаковый уровень отступа, поэтому процессор знает, что они являются частью одной и той же карты.

То же самое сопоставление будет выглядеть в формате JSON следующим образом:

Списки YAML (с примерами)

Список YAML представляет собой последовательность элементов. Например:

Список может содержать любое количество элементов. Элемент начинается с тире, а отступ отделяет его от родителя. Вы также можете хранить карты в списке:

У нас есть список контейнеров (объектов). Каждый состоит из имени, изображения и списка портов. Каждый элемент под портами представляет собой карту, в которой перечислены контейнерный порт и его значение.

Наш пример будет выглядеть в формате JSON следующим образом:

В чем разница между YAML и JSON?

JSON и YAML взаимозаменяемы и служат одной цели. Однако между ними есть существенные различия:

YAML JSON
Легко читать человеку Трудно читать
Разрешить комментарии Без комментариев
Пробелы определяют иерархию Квадратные и фигурные скобки обозначают массивы и объекты
Строковые кавычки поддерживают одинарные и двойные кавычки Строки должны быть в двойные кавычки
Корневой узел может быть любым из допустимых типов данных Корневой узел может быть либо объектом, либо массивом

Основное различие между YAML и JSON заключается в удобочитаемости кода. Лучшим примером этого является официальная домашняя страница YAML. Этот веб-сайт сам по себе является действительным YAML, но его легко читать человеку.

YAML — это надмножество JSON. Если вы вставляете JSON непосредственно в файл YAML, он разрешает то же самое с помощью парсеров YAML. Пользователи также могут конвертировать большинство документов между двумя форматами. Файлы JSON можно конвертировать в YAML онлайн или с помощью таких инструментов, как Syck или XS.

YAML в IaC

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

Ansible от Red Hat, один из самых популярных инструментов IaC, использует YAML для управления файлами. Пользователи Ansible создают так называемые плейбуки, написанные на коде YAML, которые автоматизируют ручные задачи подготовки и развертывания облачной среды.

В приведенном ниже примере мы определяем плейбук Ansible verify-apache.yml:

В этом учебнике YAML есть три задачи:

  • Мы обновляем Apache до последней версии с помощью команды yum.
  • Мы используем шаблон для копирования файла конфигурации Apache. Затем плейбук перезапускает службу Apache.
  • Мы запускаем службу Apache.

После установки плейбук запускается из командной строки. Хотя путь зависит от настройки, следующая команда запускает playbook:

Использование YAML в DevOps

Многие команды DevOps определяют конвейеры разработки с помощью YAML. YAML позволяет пользователям подходить к функциям конвейера как к файлу разметки и управлять ими как любым исходным файлом. Конвейеры версионируются вместе с кодом, поэтому команды могут выявлять проблемы и быстро откатывать изменения.

Чтобы добавить определение сборки YAML, разработчик добавляет исходный файл в корень репозитория.

Благодаря YAML DevOps отделяет логику от конфигурации. Таким образом, код конфигурации следует рекомендациям, таким как:

  • Нет жестко заданных строк.
  • Методы, выполняющие одну и только одну функцию.
  • Тестируемый код.

Несколько инструментов, играющих важную роль в DevOps, используют YAML:

  • Azure DevOps предоставляет конструктор YAML, упрощающий определение задач сборки и выпуска.
  • Kubernetes использует YAML для создания хранилищ и облегченных виртуальных машин Linux.
  • В Docker есть файлы YAML, которые называются Dockerfiles. Файлы Docker представляют собой чертежи всего, что вам нужно для запуска программного обеспечения, включая коды, среду выполнения, инструменты, настройки и библиотеки.

Эффективный и удобный язык форматирования данных

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

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

YAML — популярный язык программирования, потому что он удобочитаем и прост для понимания. Его также можно использовать в сочетании с другими языками программирования. Благодаря своей гибкости и доступности YAML используется инструментом автоматизации Ansible для создания процессов автоматизации в форме Ansible Playbooks.

Синтаксис YAML

В YAML есть функции Perl, C, XML, HTML и других языков программирования. YAML также является расширенным набором JSON, поэтому файлы JSON допустимы в YAML.

YAML использует отступы в стиле Python для обозначения вложенности. Символы табуляции не допускаются, поэтому вместо них используются пробелы. Нет обычных символов формата, таких как фигурные скобки, квадратные скобки, закрывающие теги или кавычки. Файлы YAML имеют расширение .yml или .yaml.

Структура файла YAML представляет собой карту или список.

Карты позволяют связывать пары "ключ-значение". Каждый ключ должен быть уникальным, и порядок не имеет значения. Подумайте о словаре Python или о присвоении переменной в скрипте Bash.

Карта в YAML должна быть разрешена, прежде чем ее можно будет закрыть, и будет создана новая карта. Новую карту можно создать, либо увеличив уровень отступа, либо разрешив предыдущую карту и начав соседнюю карту.

Список включает значения, перечисленные в определенном порядке, и может содержать любое необходимое количество элементов. Последовательность списка начинается с дефиса (-) и пробела, а отступ отделяет ее от родителя. Вы можете думать о последовательности как о списке Python или массиве в Bash или Perl. Список можно встроить в карту.

YAML также содержит скаляры, которые представляют собой произвольные данные (закодированные в Unicode), которые можно использовать в качестве значений, таких как строки, целые числа, даты, числа или логические значения.

При создании файла YAML вам необходимо убедиться, что вы следуете этим правилам синтаксиса и что ваш файл действителен. Линтер — это приложение, которое проверяет синтаксис файла. Команда yamllint может помочь убедиться, что вы создали действительный файл YAML, прежде чем передать его приложению.

Пример синтаксиса YAML

Вот пример простого файла YAML для записи о сотруднике, демонстрирующий правила синтаксиса.

Для чего используется YAML?

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

Помимо использования в Ansible, YAML используется для ресурсов и развертываний Kubernetes.

Преимущество использования YAML заключается в том, что файлы YAML можно добавлять в систему управления версиями, например Github, чтобы можно было отслеживать и проверять изменения.

YAML в Ansible

Ansible Playbooks используются для организации ИТ-процессов. Playbook – это файл YAML, содержащий 1 или несколько воспроизведений, который используется для определения желаемого состояния системы.

Каждое воспроизведение может запускать одну или несколько задач, и каждая задача вызывает модуль Ansible. Модули используются для выполнения задач автоматизации в Ansible. Модули Ansible можно писать на любом языке, который может возвращать JSON, например на Ruby, Python или bash.

Плейбук Ansible состоит из карт и списков. Чтобы создать книгу воспроизведения, запустите список YAML, который называет игру, а затем перечисляет задачи в последовательности. Помните, что отступы не являются признаком логического наследования. Думайте о каждой строке как о типе данных YAML (список или карта).

Используя шаблоны YAML, пользователи Ansible могут программировать повторяющиеся задачи так, чтобы они выполнялись автоматически, без необходимости изучения продвинутого языка программирования.

YAML для Kubernetes

Kubernetes работает на основе определенного состояния и фактического состояния. Объекты Kubernetes представляют состояние кластера и сообщают Kubernetes, как должна выглядеть рабочая нагрузка. Ресурсы Kubernetes, такие как модули, объекты и развертывания, можно создавать с помощью файлов YAML.

При создании объекта Kubernetes вам необходимо включить спецификации, чтобы определить желаемое состояние объекта. API Kubernetes можно использовать для создания объекта. Запрос к API будет включать спецификации объекта в формате JSON, но чаще всего вы предоставляете kubectl необходимую информацию в виде файла YAML. Kubectl преобразует файл в YAML, когда сделает запрос к API.

После создания и определения объекта Kubernetes работает над тем, чтобы этот объект всегда существовал.

Разработчики или системные администраторы указывают заданное состояние с помощью файлов YAML или JSON, которые они отправляют в API Kubernetes. Kubernetes использует контроллер для анализа разницы между новым определенным состоянием и фактическим состоянием в кластере.

Почему Red Hat?

Удобочитаемый язык автоматизации YAML Red Hat Ansible Automation Platform позволяет пользователям в организации делиться, проверять и управлять контентом автоматизации.

Платформа Ansible Automation включает в себя все инструменты, необходимые для автоматизации в масштабах предприятия, в том числе сборники сценариев и аналитику. Это позволяет пользователям централизовать и контролировать свою ИТ-инфраструктуру с помощью визуальной панели управления, управления доступом на основе ролей и многого другого, чтобы упростить работу.

Red Hat OpenShift — это Kubernetes для предприятий. Он включает в себя все дополнительные технологии, которые делают Kubernetes мощным и жизнеспособным для предприятия, включая реестр, сеть, телеметрию, безопасность, автоматизацию и службы.

С помощью Red Hat OpenShift разработчики могут создавать новые контейнерные приложения, размещать их и развертывать в облаке с масштабируемостью, контролем и оркестровкой, которые могут быстро и легко превратить хорошую идею в новый бизнес.

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

Обзор

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

  • Скаляры, списки и ассоциативные массивы основаны на Perl.
  • Разделитель документов "---" основан на MIME.
  • Escape-последовательности основаны на C.
  • Обтекание пробелами основано на HTML.

Возможности YAML

Устойчивость к столкновению разделителей

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

Безопасность

Сам по себе YAML не имеет исполняемых команд. Это просто язык представления данных. Однако его интеграция с другими языками позволяет, например, использовать парсеры Perl, которые могут выполнять код Perl. PyYAML, синтаксический анализатор и эмиттер для Python, включает документацию, специально предупреждающую об этой уязвимости системы безопасности, и имеет встроенную функцию для защиты от опасных объектов Python, известную как yaml.safe_load.

Как работает YAML

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

    1. Скаляры или переменные определяются с помощью двоеточия и пробела.
    2. Ассоциативные массивы и списки можно определять с использованием обычного блочного формата или встроенного формата, аналогичного JSON.
    3. Строки можно обозначать символом | символ, который сохраняет новые строки, или символ >, который сворачивает новые строки.

    YAML и JSON

    YAML 1.2 — это расширенный набор нотации объектов JavaScript (JSON), но он имеет ряд встроенных преимуществ. Например, YAML может ссылаться на себя, поддерживать сложные типы данных, встраивать блочные литералы, поддерживать комментарии и многое другое. В целом, YAML также более удобочитаем, чем JSON. Ниже вы можете увидеть тот же процесс, показанный в JSON и YAML.

    Версия JSON
    YAML-версия

    В большинстве случаев JSON можно преобразовать в YAML и наоборот. Более ранние версии YAML не полностью совместимы с JSON, но большинство документов JSON по-прежнему можно анализировать с помощью Syck или XS.

    Примеры YAML

    Благодаря интеграции своего программного обеспечения с YAML компания Red Hat разработала Ansible — инструмент с открытым исходным кодом для предоставления программного обеспечения, управления конфигурацией и развертывания приложений. Ansible временно подключается к серверам через Secure Shell (SSH) для выполнения задач управления с помощью плейбуков, которые представляют собой блоки кода YAML, автоматизирующие ручные задачи.

    В приведенном ниже примере определен плейбук verify-apache.yml.

    Это задание указывает, что оно должно выполняться только на хостах в группе веб-серверов и что задание должно выполняться от имени удаленного пользователя root. В этой пьесе есть три задания:

    1. Первая задача обновляет Apache до последней версии с помощью команды Red Hat yum.
    2. Вторая задача использует шаблон для копирования файла конфигурации Apache. После записи файла конфигурации служба Apache перезапускается.
    3. Третья задача запускает службу Apache на случай, если она не вернется.

    Теперь, когда плейбук написан, его нужно запустить из командной строки. Хотя пути будут различаться в зависимости от среды, playbook можно запустить с помощью этой команды:

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

    YAML – это не язык разметки (YAML) – это язык сериализации, популярность которого в последние несколько лет неуклонно растет. Он часто используется в качестве формата для файлов конфигурации, но его возможности сериализации объектов делают его жизнеспособной заменой для таких языков, как JSON. Это руководство по YAML продемонстрирует синтаксис языка с помощью руководства и нескольких простых примеров кодирования на Python. YAML имеет широкую языковую поддержку и легко сопоставляется с собственными структурами данных. Его также легко читать людям, поэтому это хороший выбор для настройки. Аббревиатура YAML была сокращением от «Еще один язык разметки». Но сопровождающие переименовали его в YAML — это не язык разметки, чтобы уделить больше внимания его функциям, ориентированным на данные.

    Краткое руководство по YAML: простой файл

    Давайте кратко рассмотрим файл YAML.

    Файл начинается с трех дефисов. Эти тире обозначают начало нового документа YAML. YAML поддерживает несколько документов, и совместимые синтаксические анализаторы распознают каждый набор дефисов как начало нового. Далее мы видим конструкцию, которая составляет большую часть типичного документа YAML: пару ключ-значение. Doe — это ключ, указывающий на строковое значение: олень, олень. YAML поддерживает не только строковые значения. Файл начинается с шести пар ключ-значение. Они имеют четыре разных типа данных. Доу и Рэй — струны. Пи — число с плавающей запятой. Рождество — это логическое значение. Французские куры — целое число. Вы можете заключать строки в одинарные или двойные кавычки или вообще без кавычек. YAML распознает числа без кавычек как целые числа или числа с плавающей запятой. Седьмой элемент — это массив. Calling-birds состоит из четырех элементов, каждый из которых обозначается открывающим тире. Я выделил элементы в call-birds двумя пробелами. Отступ — это то, как YAML обозначает вложенность. Количество пробелов может варьироваться от файла к файлу, но вкладки не допускаются. Ниже мы рассмотрим, как работает отступ. Наконец, мы видим xmas-fifth-day, внутри которого есть еще пять элементов, каждый из которых имеет отступ. Мы можем рассматривать xmas-fifth-day как словарь, содержащий две строки, два целых числа и еще один словарь. YAML поддерживает вложение ключей и значений и смешивание типов. Прежде чем углубляться, давайте посмотрим, как этот документ выглядит в формате JSON. Я добавлю его в этот удобный конвертер JSON в YAML.

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

    Контур отступов и пробелов

    Пробел – это часть форматирования YAML. Если не указано иное, символы новой строки указывают на конец поля. Вы структурируете документ YAML с отступом. Уровень отступа может быть одним или несколькими пробелами. Спецификация запрещает вкладки, потому что инструменты обрабатывают их по-разному. Рассмотрим этот документ. Элементы внутри материала имеют отступ в два пробела.

    Давайте посмотрим, как этот документ отображается в простом скрипте Python. Мы сохраним его как файл с именем foo.yaml. Пакет PyYAML сопоставит файловый поток YAML со словарем. Мы пройдемся по самому внешнему набору ключей и значений и напечатаем ключ и строковое представление каждого значения. Вы можете найти процессор для своей любимой платформы здесь.

    Когда мы сообщаем python, что нужно напечатать словарь в виде строки, он использует встроенный синтаксис, который мы увидим ниже. Из вывода видно, что наш документ представляет собой словарь Python с двумя строками и еще одним словарем, вложенным в него. Простая вложенность YAML дает нам возможность создавать сложные объекты. Но это только начало.

    Комментарии

    Комментарии начинаются со знака решетки. Они могут стоять после значения документа или занимать всю строку.

    Комментарии предназначены для людей. Процессоры YAML отбрасывают их.

    Типы данных YAML

    Значения в парах "ключ-значение" YAML являются скалярными. Они действуют как скалярные типы в таких языках, как Perl, Javascript и Python. Обычно достаточно заключать строки в кавычки, оставлять числа без кавычек и позволить синтаксическому анализатору разобраться с этим. Но это только верхушка айсберга. YAML способен на гораздо большее.

    Пары "ключ-значение" и словари

    Пара "ключ-значение" — это основной строительный блок YAML. Каждый элемент в документе YAML является членом хотя бы одного словаря. Ключ всегда является строкой. Значение является скаляром, поэтому может быть любым типом данных. Итак, как мы уже видели, значение может быть строкой, числом или другим словарем.

    Числовые типы

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

    Давайте запустим наш скрипт Python для этого документа.

    Как и следовало ожидать, Ox указывает, что значение является шестнадцатеричным, а начальный ноль обозначает восьмеричное значение. YAML поддерживает как фиксированные, так и экспоненциальные числа с плавающей запятой.

    Когда мы оцениваем эти записи, мы видим:

    Наконец, мы можем представить не-число (NAN) или бесконечность.

    Фу — это бесконечность. Bar — это отрицательная бесконечность, а plop — NAN.

    Строки

    Строки YAML имеют кодировку Unicode. В большинстве случаев вам не нужно указывать их в кавычках.

    Наша тестовая программа обрабатывает это как:

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

    YAML обрабатывает первое значение как заканчивающееся символами возврата каретки и перевода строки. Поскольку второе значение не заключено в кавычки, YAML рассматривает \n как два символа.

    YAML не экранирует строки в одинарных кавычках, но одинарные кавычки позволяют избежать интерпретации содержимого строки как форматирования документа. Строковые значения могут занимать более одной строки. С помощью символа сгиба (больше чем) вы можете указать строку в блоке.

    Но это интерпретируется без новых строк.

    Символ блока (вертикальной черты) имеет аналогичную функцию, но YAML интерпретирует поле точно так, как оно есть.

    Итак, мы видим символы новой строки там, где они находятся в документе.

    Нулевые значения

    Вы вводите пустые значения с помощью тильды или строкового литерала null без кавычек.

    Наша программа печатает:

    Представление Python для null равно None.

    Булевы значения

    YAML указывает логические значения с ключевыми словами True, On и Yes для true. False обозначается False, Off или No.

    Массивы

    Можно указывать массивы или списки в одной строке.

    Или вы можете поместить их в несколько строк.

    Многострочный формат удобен для списков, содержащих сложные объекты вместо скаляров.

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

    Словари

    Выше мы рассмотрели словари, но это еще не все. Как и массивы, вы можете поместить словари в строку. Мы видели этот формат выше. Так Python печатает словари.

    Мы уже видели, как они соединяют строки раньше.

    И, конечно же, они могут быть вложенными и содержать любое значение.

    Дополнительные параметры

    Модификаторы Chomp

    Многострочные значения могут заканчиваться пробелом, и в зависимости от того, как вы хотите обработать документ, вы можете не захотеть его сохранять. В YAML есть операторы strip chomp и save chomp. Чтобы сохранить последний символ, добавьте плюс к операторам сгиба или блока.

    Таким образом, если значение заканчивается пробелом, например новой строкой, YAML сохранит его. Чтобы убрать символ, используйте оператор полосы.

    Несколько документов

    Документ начинается с трех дефисов и заканчивается тремя точками. Некоторым процессорам YAML требуется оператор запуска документа. Конечный оператор обычно необязателен. Например, Jackson в Java не будет обрабатывать документ YAML без начала, а PyYAML в Python — сможет. Обычно вы будете использовать оператор конца документа, когда файл содержит несколько документов. Давайте изменим наш код Python.

    Функция load_all PyYAML будет обрабатывать все документы в потоке. Теперь давайте обработаем с его помощью составной документ.

    Сценарий находит два документа YAML.

    Заключение

    YAML — это мощный язык, который можно использовать для файлов конфигурации, сообщений между приложениями и сохранения состояния приложения. Мы рассмотрели его наиболее часто используемые функции, в том числе то, как использовать встроенные типы данных и структурировать сложные документы. Некоторые платформы поддерживают расширенные функции YAML, включая пользовательские типы данных.

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

    Разработанный для взаимодействия с человеком, YAML – это строгая надстройка JSON – еще одного языка сериализации данных. Но поскольку это строгий надмножество, он может делать все, что может JSON, и даже больше. Одно из основных отличий заключается в том, что символы новой строки и отступы на самом деле что-то означают в YAML, в отличие от JSON, в котором используются квадратные и фигурные скобки.

    Формат подходит для указания конфигурации, как мы используем его в CircleCI.

    Как написать YAML

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

    В общем случае это ключи и значения до самого низа:

    Пример YAML: скалярные типы

    В качестве значений можно использовать все виды скалярных типов: числа, логические значения и строки (в кавычках или без). Например, первая строка файла config.yml обычно выглядит так:

    Слова в ключах могут быть разделены символами подчеркивания, тире или пробелами. В CircleCI мы используем символы подчеркивания.

    Если значением ключа является многострочная строка, вы можете использовать стиль «литерального блока» с символом «|».Это особенно полезно при определении команд оболочки:

    Обратите внимание, что начальный отступ для многострочной строки будет удален.

    Пример YAML: типы коллекций

    Все, что вам нужно сделать для создания коллекций, это использовать отступ:

    Если у вас есть список вещей (например, изображений), вы можете обозначить эту последовательность с помощью тире:

    Обратите внимание, что у второго элемента последовательности есть два ключа: изображение и команда . Ключ команды использует последовательность в стиле JSON, потому что (помните!) YAML является надмножеством JSON.

    Наконец, YAML не поддерживает символы табуляции, поэтому, если вы используете их для создания отступов, попросите текстовый редактор преобразовать их в пробелы. Синтаксические ошибки в вашем YAML иногда могут приводить к зависанию сборки CircleCI, но их также легко предотвратить, запустив файл circle.yml/config.yml через онлайн-валидатор.

    Дополнительная литература

    Содержимое этого руководства должно быть всем, что вам нужно для удобного написания файла конфигурации для CircleCI. YAML поддерживает дополнительные функции, о которых вы можете прочитать на официальном сайте или в менее пугающей (но менее исчерпывающей) статье «Узнай X за Y минут».

    Читайте также: