Yaml файлы что это
YAML за 5 минут: синтаксис и основные возможности
Авторизуйтесь
YAML за 5 минут: синтаксис и основные возможности
YAML — это язык для сериализации данных, который отличается простым синтаксисом и позволяет хранить сложноорганизованные данные в компактном и читаемом формате. Рассказываем, как это пригодится для DevOps и виртуализации.
Что такое YAML?
YAML — это язык для хранения информации в формате понятном человеку. Его название расшифровывается как, «Ещё один язык разметки». Однако, позже расшифровку изменили на — «YAML не язык разметки», чтобы отличать его от настоящих языков разметки.
Язык похож на XML и JSON, но использует более минималистичный синтаксис при сохранении аналогичных возможностей. YAML обычно применяют для создания конфигурационных файлов в программах типа Инфраструктура как код (Iac), или для управления контейнерами в работе DevOps.
Чаще всего с помощью YAML создают протоколы автоматизации, которые могут выполнять последовательности команд записанные в YAML-файле. Это позволяет вашей системе быть более независимой и отзывчивой без дополнительного внимания разработчика.
Всё больше и больше компаний используют DevOps и виртуализацию, поэтому YAML — это must have для современного разработчика. Кроме того, YAML легко интегрировать, благодаря поддержке Python (используя PyYAML библиотеку, Docker или Ansible) и других популярных технологий.
YAML vs JSON vs XML
YAML (.yml)
Применение: YAML лучше всего подходит для приложений с большим объемом данных, которые используют DevOps конвейеры или виртуальные машины. Кроме того, улучшение читаемости данных пригодится в командах, где разработчики часто с ними взаимодействуют.
Применение: JSON используется в веб-разработке — это лучший формат для сериализации и передачи данных через HTTP-соединение.
Применение: XML идеален для сложных проектов, которым требуется тонкий контроль над валидацией, схемой и пространством имён. Язык обладает плохой читаемостью, требует большей пропускной способности и ёмкости хранилища, но обеспечивает беспрецедентный контроль.
Характерные особенности YAML
Поддержка мультидокументов
Вы можете объединить несколько YAML-документов в один YAML-файл для облегчения организации файлов и парсинга данных.
Документы разделяются тремя дефисами (—):
Поддержка комментариев
YAML позволяет добавлять комментарии после символа #, как в Python:
Легко читаемый синтаксис
В синтаксисе YAML-файлов используется система отступов, как в Python. Необходимо использовать пробелы, а не табуляцию, чтобы избежать путаницы.
Это избавляет от лишних символов, которые есть в JSON и XML (кавычки, скобки, фигурные скобки).
В итоге читаемость файла значительно повышается.
Явная и неявная типизация
Отсутствие исполняемых файлов
YAML не содержит исполняемых файлов. Поэтому можно безопасно обмениваться YAML-файлами с третьей стороной.
Чтобы использовать исполняемые файлы, YAML нужно интегрировать с другими языками, например Perl или Java.
Синтаксис YAML
В языке есть несколько базовых концепций, которые позволяют обрабатывать большинство данных.
Пары ключ-значение
Большинство данных в YAML-файле хранятся в виде пары ключ-значение, где ключ — это имя пары, а значение — связанные данные.
Скаляры и маппинг
Скаляр представляет собой одно значение, которому соответствует имя.
YAML поддерживает стандартные типы: int и float, boolean, string и null.
Строки
Строка — это коллекция символов, которая может содержать слово или предложение. Можно использовать либо |, для отдельных строк, либо >, для параграфов.
Кавычки в YAML не нужны.
Последовательности
Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].
Однострочные последовательности выглядят лаконичнее, но хуже читаются.
Словари
Словари — это коллекции пар ключ-значение, которые хранятся под одним ключом. Они позволяют разделить данные на логические категории.
Словари могут содержать более сложные структуры, что позволяет хранить сложные реляционные данные.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
YAML (рекурсивный акроним YAML Ain’t Markup Language — «YAML — Не язык разметки») — «дружественный» формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода-вывода типичных структур данных многих языков программирования.
В трактовке названия отражена история развития: на ранних этапах YAML расшифровывался как Yet Another Markup Language («Ещё один язык разметки») и даже позиционировался как конкурент XML, но позже был переименован с целью акцентировать внимание на данных, а не на разметке документов.
Содержание
Цели создания
Согласно целям озвученным Кларком Эвансом, YAML 1.0 призван [1] :
К текущей редакции YAML (1.2) в эти цели были внесены некоторые изменения [2] :
Легкость для чтения и записи
Синтаксис YAML минималистичен, особенно по сравнению с XML синтаксисом. В спецификации указывают, что большое влияние оказал стандарт RFC 822. Использование
YAML в основном используется как формат для файлов конфигурации. Применяется для настройки веб-каркасов Ruby on Rails, Dancer, Symfony, GAE framework, Google App Engine и Dart. Также является основным языком описания классов, ресурсов и манифестов для пакетов приложений OpenStack Murano Project.
Пример
В некотором проекте нужно хранить конфигурацию, описывающую отображение (англ. bindings) IRC-команд на функции, с помощью регулярных выражений.
Вот исходная конфигурация, представленная в виде таблицы:
rcEvent | method | regexp |
---|---|---|
PRIVMSG | newUri | «^http://.*» |
PRIVMSG | deleteUri | «^delete.*» |
PRIVMSG | randomUri | «^random.*» |
В YAML эта конфигурация может быть представлена следующим образом:
Cравнение с XML
Для сравнения, в XML-представлении, данная конфигурация может быть представлена следующим образом:
Альтернативный вариант, использующий атрибуты:
Говоря об отличиях YAML от XML, также следует отметить, что вложенные XML-элементы могут использоваться для отображения произвольных структур, а YAML более близок к отображению типичных моделей данных из Perl, Python, Java, позволяя описывать свободные сочетания последовательностей, сопоставлений и скалярных типов — то есть ближе к реальным структурам данных языков программирования, и не требует различных соглашений про DOM-отображения структур данных на документы и обратно, как требуется в XML.
Синтаксические элементы
Последовательности
Сопоставления имени и значения
Блочные литералы
Переводы строк сохраняются
Переводы строк исчезают
Последовательности из сопоставлений
Сопоставления из последовательностей
Синтаксическая шпаргалка
Небольшой список основных элементов YAML:
Реализации
Поддержка YAML существует в языках программирования:
YAML для веб-разработчиков
Перевод статьи «Yaml for Web Developers».
Все чаще и чаще веб-разработчикам, чтобы стать лучшими профессионалами и меньше зависеть от окружающих в каких-то простых вещах из смежных сфер деятельности, приходится самим изучать эти вещи.
Зачем люди используют файлы такого типа? Каковы преимущества этих файлов? Как эта штука работает?
Цель этой статьи — познакомить вас с со структурой YAML, чтобы вы при необходимости смогли прочитать и понять такой файл и внести нужные изменения.
Ведь все мы чувствуем себя очень неловко и раздражаемся, когда что-то нужно сделать, а мы даже не понимаем, что это такое.
Прежде всего, что такое YAML?
Как написано на официальном сайте,
«YAML (рекурсивный акроним, означающий «YAML — это не язык разметки») это дружественный к человеку стандарт сериализации данных для всех языков программирования».
Этот формат часто используется для конфигурационных файлов, а это МНОГОЕ объясняет, верно?
Кучи конфигов, в которых никто не мог разобраться, очень утомляли людей, пока кто-то однажды не сказал:
«А что, если бы можно было писать файлы конфигурации, как кулинарные рецепты? Я имею в виду, с минимальным количеством очень понятного текста».
И — бум! — в мае 2001 года был создан YAML.
YAML vs JSON
Сюрприз! (или нет): YAML это надмножество для нашего хорошего знакомого — JSON.
«Надмножество это язык программирования, содержащий все функции данного языка, но при этом расширенный или улучшенный и включающий также другие функции», — Font.
Если бы мне нужно было провести какие-то аналогии, я бы сказал, что в мире фронтенда YAML это нечто вроде TypeScript, а JSON — вроде JavaScript.
Чтобы лучше понять, как это возможно, давайте рассмотрим пример:
Если бы нам нужно было переписать tsconfig.json в синтаксисе YAML, чтобы обеспечить такой же результат, файл выглядел бы следующим образом:
Примечание: это только пример! tsconfig нельзя писать на YAML!
Надеюсь, эти примеры помогли вам начать понимать саму идею.
Концепции, типы и синтаксис
А теперь давайте углубимся в концепцию языка.
Отступы
В YAML отступы имеют значение. Уровни вложенности здесь определяются пробельными отступами (т. е., tab использовать нельзя).
Если вы, как и я, используете tab повсеместно, установите какой-нибудь плагин в вашей IDE для замены табов на пробелы (например, editorconfig). Благодаря этому вы будете спокойно нажимать tab, а символ табуляции будет заменяться пробелами.
Поскольку отступы имеют значение, если перед первым объявлением нет отступов, YAML будет считать его корнем вашего файла (нулевым уровнем):
Это как первая фигурная скобка в JSON:
Ключ/значение
Как и JSON/JS, YAML использует синтаксис key/value. Делать это можно по-разному:
Комментарии
Чтобы написать комментарий, перед сообщением нужно просто поставить знак решетки.
Это очень удобно, когда нужно задокументировать какое-то решение или оставить примечание. К сожалению, в JSON это недоступно.
Списки
Есть два способа писать списки:
Как в JSON: массив из строк
Вы же помните, что YAML это надмножество JSON? Мы можем использовать синтаксис последнего:
Синтаксис с дефисами
Более распространенный вариант (и, пожалуй, рекомендуемый).
Строки
В YAML есть несколько способов объявления строки:
А в JSON есть только один способ — при помощи двойных кавычек:
Числа
Как и в языках программирования, здесь есть два вида чисел: Integer (целые числа) и Float (числа с плавающей запятой):
Якоря
Якорь это механизм создания группы данных (объекта), которую можно вставить в другие объекты и расширить за счет других объектов.
Давайте представим, что вам нужно создать конфигурацию для вашей CI. Она будет иметь и продакшен-, и стейджинг-среду. Как вы догадываетесь, настройки там будут практически одинаковые.
В мире JSON нам пришлось бы дублировать эти конфиги:
Но копипаст раздражает, особенно если приходится потом вносить изменения в разных местах.
Якоря решают эту проблему. Мы можем:
1. Создать наш якорь.
2. Вставить созданный якорь на уровне, где мы хотели бы видеть эти значения.
Выглядит проще, правда? И поддерживать легче.
Если вы скопируете этот код и вставите его в онлайн-конвертер «YAML в JSON», вы увидите тот же код, который я показывал в качестве примера на JSON, но внутри дополнения из base config:
JSON-синтаксис (да, JSON)
Как уже объяснялось, надмножество языка это базовый язык ПЛЮС некоторые дополнительные функции. Это означает, что файл YAML можно писать в стиле JSON:
Сомневаетесь? Скопируйте код и вставьте сюда.
Если вы конвертируете этот YAML в JSON, вы получите ту же структуру:
Окружение Shell/Bash
В этих файлах вам нужно описать, как должна работать машина/docker, что должно быть установлено, запущено и т. д.
Зачастую все эти окружения это Linux, а значит, вы также имеете доступ к самому окружению.
В GitLab CI, например, вы можете определить для глобального окружения переменные, к которым хотите иметь доступ в течение всего процесса:
Некоторые другие платформы также вводят другие значения, такие как имя ветки, время сборки, автор, а также секретные ключи, определенные вне конфигурации:
Заключение
Надеюсь, теперь вы немного лучше разбираетесь в том, что такое YAML, и сможете более уверенно читать и писать такие файлы.
Имейте в виду, что используемая вами платформа может накладывать собственные ограничения на то, к чему вы можете иметь доступ. Например, конфигурации Travis отличаются от GitLab CI или CircleCI.
Чтобы понять, что возможно, а что — нет, всегда в первую очередь ориентируйтесь на документацию используемой платформы.
Руководство для начинающих YAML
YAML — это не язык разметки или сокращенно YAML — это язык сериализации данных, обычно используемый в файлах конфигурации, таких как Kubernetes, Docker, Ansible и многих других. Его популярность росла с годами, что сделало его своего рода конкурентом JSON.
Хорошо, если YAML не является языком разметки, что это такое?
Как уже упоминалось, YAML — это язык сериализации данных, разработанный для улучшения удобочитаемости за счет использования отступов и собственных структур данных. Думайте об этом как о строгом надмножестве JSON или как о помесье JSON и XML. Этот гибрид позволяет ему делать то, что может JSON, и другие дополнительные функции.
Цель этого руководства — познакомить вас с YAML, дать вам руководство по синтаксису языка, предоставить вам быстрые инструменты для работы с YAML и научить использовать его для файлов конфигурации и многое другое.
Как написать YAML
Написание YAML невероятно интуитивно понятно (я думаю, в этом суть), поскольку он использует синтаксис пары ключ-значение. Таким образом, это похоже на словарь в Python. Однако, в отличие от Python, YAML не позволяет использовать интервалы табуляции; он использует пробелы.
Чтобы начать новый документ YAML, мы начинаем с трех тире, обозначающих начало нового файла.
Эта функция позволяет вам иметь несколько документов, разделенных тире, в одном файле.
Создайте файл с расширением.YAML и добавьте следующее содержимое.
—
language : Python
author : Guido van Rossum
country : Netherlands
—
language : JavaScript
author : Brendan Eich
country : United States
—
language : Ruby
author : Yukihiro Matsumoto
country : Japan
Как видно из приведенного выше файла, каждый документ в yaml начинается с трех точек, за которыми следуют данные, хранящиеся в парах ключ-значение.
Установите YAML linter
Прежде чем продолжить, давайте подтвердим, что у нас есть действующий файл YAML. Для этого нам необходимо установить линтер YAML.
Линтер — это инструмент, который проверяет и уведомляет разработчика об ошибках программирования, таких как синтаксические ошибки и недопустимые конструкции. Например, он позволяет вам проверить допустимый синтаксис файла.
В нашем примере мы будем использовать yamllint.
Для установки используйте apt как:
После установки мы можем запустить линтер для файла с помощью команды
Если файл содержит допустимый синтаксис YAML, он не дает нам никаких результатов.
Теперь попробуйте добавить пробелы внутри файла YAML или добавить один дефис внизу как:
—
language : Python
author : Guido van Rossum
country : Netherlands
—
language : JavaScript
author : Brendan Eich
country : United States
—
language : Ruby
author : Yukihiro Matsumoto
country : Japan
Если мы запустим линтер для этого файла, появятся ошибки, как показано ниже:
ПРИМЕЧАНИЕ. Подобно словарям в Python и аналогичным структурам данных в различных языках программирования, пары ключ-значение в документе YAML должны быть уникальными.
Типы данных YAML
YAML поддерживает различные способы представления данных. Они включают:
#: Scalar types
Это наиболее распространенный тип данных в YAML. Они представлены в виде пар «ключ-значение», как показано в примере выше.
Значения в паре могут быть любого типа, например строки, числа, включая шестнадцатеричные, целые числа и т. Д.
#: Strings
YAML также поддерживает строки, заключенные в одинарные или двойные кавычки. Это не является требованием, поскольку синтаксический анализатор YAML определит это, но может быть полезным, особенно в строках с escape-символами.
Ниже приведены примеры действительных строк в YAML.
—
string : This is a string
string2 : “This is also a string”
string : ‘so is this one’
ПРИМЕЧАНИЕ. Не забудьте закрыть двойные или одинарные кавычки, если они используются. Следующее приведет к ошибке.
invalid: ‘this is incorrect
Чтобы добавить абзац в файл YAML, используйте знак (больше). Не забудьте добавить пробел перед строкой. Например:
para: >
creating a paragraph
that spans for more than one
#: Numeric Types
Другой тип данных, поддерживаемый в YAML, — это числовые типы. Числовые типы включают целые, десятичные, шестнадцатеричные, восьмеричные и другие числовые типы.
Следующий синтаксис YAML представляет числовые типы.
#: Lists
Списки в YAML указываются одним тире как:
#: Sequences
Последовательности — это типы данных, используемые для хранения нескольких значений в одном и том же ключе. Например:
#: Mappings
Сопоставление очень похоже на последовательность, но состоит из пар ключ-значение, содержащихся в одной подгруппе.
—
Servers :
— apache :
name : server1
os : Debian 10
version : 2.4.46
— IIS :
name : iis-v01
os : Windows Datacenter 2019
version : 10.0.17763
мы устанавливаем null в YAML, используя тильду (
) или строку null, как показано в примере ниже:
#: Arrays
Массивы в YAML указываются в квадратных скобках в одной строке. В следующем примере показано определение массивов в YAML.
Комментарии YAML
YAML также поддерживает комментарии, которые позволяют добавлять дополнительную информацию к данным YAML. Парсер игнорирует комментарии.
YAML comments begin with an Octothorpe ( #).
# This is a comment in YAML
Преобразование YAML в JSON
В некоторых случаях нам может потребоваться преобразовать YAML в JSON. Поскольку они тесно связаны между собой, имеет смысл использовать одно в другом.
Для таких сценариев мы можем использовать такой инструмент, как yq, который представляет собой синтаксический анализатор YAML / XML для jq.
Чтобы установить его, используйте pip с командой, как показано ниже:
ПРИМЕЧАНИЕ. Убедитесь, что у вас установлен jq, поскольку это обязательная зависимость для yq.
Предположим, у нас есть образец файла для создания пода Kubernetes (Kubernetes.yaml) с таким содержимым, как показано:
—
apiVersion : v1
kind : Pod
metadata :
name : store-site
labels :
app : web
spec :
containers :
— name : nginx
image : nginx
ports :
— containerPort : 8080
volumeMounts :
— name : master
mountPath : /var/www/html/nginx
dnsPolicy : Default
volumes :
— name : home_directory
emptyDir :
ПРИМЕЧАНИЕ. Приведенный выше файл предназначен для иллюстрации и может содержать ошибки при использовании в реальном экземпляре Kubernetes.
Чтобы преобразовать файл YAML в JSON, используйте команду:
После выполнения приведенной выше команды содержимое файла автоматически преобразуется в JSON, как показано ниже:
Это упрощает работу при переходе с JSON на YAML и наоборот.
Заключение
YAML — это невероятно мощный инструмент, который позволяет создавать хорошо читаемые и совместимые файлы конфигурации для служб поддержки. Используя концепции этого руководства, вы можете создавать сложные документы YAML для своих приложений или приложений, поддерживающих YAML.
Yaml vs. Json — что круче?
Сегодня поговорим об интересном (и таинственном для фронтов) формате YAML. Он считается одним из наиболее популярных форматов для файлов конфигураций.
Цель этой статьи — познакомить вас со структурой YAML, помочь понимать, читать и изменять YAML-файлы. Для тех, кто уже знаком с форматом — напомнить про некоторые его особенности. И сравнить YAML с JSON.
Цели создания
Сообщество разработчиков устало от «зоопарка» различных форматов для конфигов, им хотелось упростить себе жизнь и прийти к единому понятному формату. И в 2001 году Кларк Эванс создал YAML 1.0.
Рис.1. Определение из официальной документации
Сейчас последняя версия — YAML 1.2, и она в основном используется как формат для файлов конфигурации Ruby on Rails, Dancer, Symfony, GAE framework, Google App Engine и Dart. Также YAML является основным языком описания классов, ресурсов и манифестов для пакетов приложений OpenStack Murano Project и Swagger.io.
YAML vs. JSON
По сути YAML — это расширенная версия известного нам формата JSON.
Чтобы лучше разобраться в формате, давайте сначала рассмотрим пример JSON-конфига:
Этот файл очень легко читается, мы можем быстро определить, что к чему, но … нужно знать, что у JSON-формата есть некоторые ограничения:
Попробуем переписать наш пример в формате YAML. Пока рассмотрим только синтаксис, а остальные особенности чуть позже.
*Хабр не умеет подсвечивать YAML, так что пришлось разместить картинки
Как вам? Мне на первый взгляд показалось, что очень похоже на Python, но с какими-то опечатками.
Рассмотрим синтаксис подробнее.
Концепции, типы, синтаксис
Отступы
В YAML для разделения информации очень важны отступы. Нужно помнить, что используются только пробелы, табы не допускаются.
При отсутствии отступа перед первым объявлением YAML поймет, что это корень (уровень 0) вашего файла.
Если вы привыкли использовать tab-ы вместо пробелов, то можно использовать какой-нибудь плагин в вашей IDE, чтобы заменить все пропуски на пробелы (например, editorconfig).
Ключ/Значение
Как и в JSON/JS, в YAML есть синтаксис ключ/значение, и вы можете использовать его различными способами:
Комментарии
Чтобы написать комментарий, вы можете использовать #, а затем ваше сообщение.
Это круто, когда нужно задокументировать какое-то решение или сделать заметку в конфиге. К сожалению, мы не можем так сделать в JSON.
Списки
В YAML есть 2 способа написания списков:
Помните, что YAML — это расширенный JSON? Поэтому мы можем использовать его синтаксис
Наиболее распространенный и рекомендуемый
Числа
Тут все стандартно: целые числа и числа с плавающей точкой.
Строки
Есть несколько способов объявить строку в YAML:
Если вы хотите использовать какой-нибудь специальный символ, например, _ или @, то нужны будут кавычки.
Напомню, что в JSON у нас есть только один способ написания строк — двойные кавычки.
Якорь (переменная или ссылка)
Якорь — это механизм для создания переменных, на которые затем можно ссылаться.
Давайте представим, что вам нужно создать конфигурацию для вашего CI. Он будет иметь версию для production и development сред. Обе версии будут иметь почти одинаковые базовые настройки.
В JSON нам пришлось бы дублировать эти конфиги:
Копирование и вставка очень раздражают, особенно когда нужно что-то изменить во всех местах.
Якорь решает эту проблему. Для его создания используется символ якоря (&), а для вставки — алиас (*).
Рис.2. Отсылка к фильму «Матрица»
Возможности YAML-а покоряют при его сравнении с JSON. Но если у вас довольно простой конфиг в пару-тройку строк, то нет смысла усложнять и использовать дополнительные возможности YAML, лучше выбрать JSON. А если же у вас довольно большой и витиеватый файл, то тут однозначно стоит рассмотреть YAML.
У YAML есть еще несколько интересных фишек таких как: многострочный ввод, мерж блоков, матрицы, наследование и другие.
Так как YAML — это расширенный JSON, то мы можем писать YAML-файл в JSON-формате, и он будет работать. Это отличная особенность, которая позволит легче начать изучение YAML.