Файл yaml что это

YAML за 5 минут: синтаксис и основные возможности

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

Что такое YAML?

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

Язык похож на XML и JSON, но использует более минималистичный синтаксис при сохранении аналогичных возможностей. YAML обычно применяют для создания конфигурационных файлов в программах типа Инфраструктура как код (Iac), или для управления контейнерами в работе DevOps.

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

27–29 декабря, Онлайн, Беcплатно

Всё больше и больше компаний используют 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 не нужны.

Последовательности

Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].

Однострочные последовательности выглядят лаконичнее, но хуже читаются.

Словари

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

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

Источник

10 шагов к YAML-дзену

Мы все любим Ansible, но Ansible – это YAML. Для конфигурационных файлов существует масса форматов: списки значений, пары «параметр-значение», INI-файлы, YAML, JSON, XML и множество других. Однако по нескольким причинам из всех них YAML часто считается особенно трудным. В частности, несмотря на его освежающий минимализм и впечатляющие возможности для работы с иерархическими значениями, синтаксис YAML может раздражать своим Python-образными подходом к отступам.

Файл yaml что это

Если вас бесит YAML, вы можете – и должны! – предпринять 10 следующих шагов, чтобы снизить свое раздражение до приемлемого уровня и полюбить YAML. Как и положено настоящему списку, наша десятка советов будет нумероваться с нуля, медитацию и духовные практики добавляем по желанию 😉

0. Заставьте ваш редактор работать

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

Например, редактор Atom поддерживает YAML по умолчанию, а вот для GNU Emacs придется установить дополнительные пакеты, например, yaml-mode.

Файл yaml что это

Emacs в режиме YAML и отображения пробелов.

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

Файл yaml что это

Настройка отступов в Gedit.

А плагин drawspaces для Gedit отображает пробелы в виде точек, устраняя неясности с уровнями отступа.

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

1. Используйте линтер (linter)

В идеале языки программирования и языки разметки используют предсказуемый синтаксис. Компьютеры хорошо справляются с предсказуемостью, поэтому еще в 1978 году возникла концепция линтера. Если за 40 лет своего существования она прошла мимо вас и вы до сих пор не пользуетесь YAML-линтером, то самое время попробовать yamllint.

Установить yamllint можно с помощью штатного менеджера пакетов Linux. Например, в Red Hat Enterprise Linux 8 или Fedora это делается так:

Затем вы просто запускаете yamllint, передавая ему YAML-файл для проверки. Вот как это выглядит, если передать линтеру файл с ошибкой:

Цифры слева – это не время, а координаты ошибки: номер строки и столбца. Описание ошибки может вам ни о чем не говорить, зато вы точно знаете, где она находится. Просто посмотрите на это место в коде, и, скорее всего, все станет ясно.

Когда yamllint не находит ошибок в файле, на экран ничего не выводится. Если вас пугает такая тишина и хочется немного больше обратной связи, то можно запускать линтер с условной командой echo через двойной амперсанд (&&), вот так:

В POSIX двойной амперсанд срабатывает тогда и только тогда, когда предшествующая команда возвращает 0. А yamllint как раз возвращает количество найденных ошибок, поэтому вся эта условная конструкция и работает.

2. Пишите на Python, а не на YAML

Если вас реально бесит YAML, просто не пишите на нем, в буквальном смысле. Бывает, что YAML – это единственный формат, который воспринимается приложением. Но и в этом случае необязательно создавать YAML-файл. Пишите на том, что вам нравится, а потом конвертируйте. Например, для Python есть отличная библиотека pyyaml и целых два способа конвертирования: самоконвертирование и конвертирование через скрипты.

Самоконвертирование

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

Теперь запускаем это файл на Python-е и на выходе получаем файл output.yaml:

Конвертирование через скрипты

В этом случае сначала пишем на JSON-е, а затем запускаем конвертор в виде отдельного Python-скрипта, который на выходе дает YAML. По сравнению с предыдущим этот способ лучше масштабируется, поскольку конвертирование отделено данных.

Для начала создадим JSON-файл example.json, например, его можно взять на json.org:

Затем создадим простой скрипт-конвертор и сохраним его под именем json2yaml.py. Этот скрипт импортирует оба модуля — YAML и JSON Python, а также загружает указанный пользователем файл JSON, выполняет конвертирование и пишет данные в файл output.yaml.

Сохраните этот скрипт в system path и запускайте по мере необходимости:

3. Парсите много и часто

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

Например, если вам удобно работать со словарными списками или с JSON, то YAML можно преобразовать в JSON всего двумя командами в интерактивной оболочке Python. Допустим, у вас есть YAML-файл mydata.yaml, тогда вот как это будет выглядеть:

На эту тему можно найти массу других примеров. Кроме того, в наличии множество онлайн-конвертеров и локальных парсеров. Так что не стесняйтесь переформатировать данные, когда видите в них только непонятную мешанину.

4. Читайте спеки

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

5. Псевдоконфиги

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

Псевдоконфиг похож на псевдокод, где не надо заботиться о структуре или отступах, отношениях «родитель-потомок», наследовании и вложенности. Так и здесь: вы рисуете итерации данных по мере того, как они возникают у вас в голове.

Файл yaml что это

Псевдоконфиг с перечислением программистов (Martin и Tabitha) и их навыков (языков программирования: Python, Perl, Pascal и Lisp, Fortran, Erlang, соответственно).

Нарисовав псевдоконфиг на листе бумаги, внимательно проанализируйте его и, если все в порядке, оформите в виде валидного YAML-файла.

6. Дилемма «табуляция или пробелы»

Вам придется решить дилемму «табуляция или пробелы?». Не в глобальном смысле, а лишь на уровне вашей организации, или хотя бы проекта. Неважно, будет ли при этом использоваться пост-обработка скриптом sed, настройка текстовых редакторов на машинах программистов или же поголовное взятие расписок о строгом соблюдении указаний линтера под угрозой увольнения, но все члены вашей команды, которые так или иначе касаются YAML, в обязательном порядке должны использовать только пробелы (как того требует спецификация YAML).

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

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

7. Лучше меньше да лучше (или больше – это меньше)

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

Вот пример такой структурированности из документации Ansible:

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

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

8. Используйте заготовки

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

9. Используйте что-то другое

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

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

Если же без YAML никак не обойтись, то возьмите на вооружение эти 10 советов и победите свою неприязнь к YAML раз и навсегда!

Источник

Руководство для начинающих 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 | Начало работы с YAML

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

Эта статья подготовлена таким образом, чтобы вы могли ознакомиться с основами yaml.

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

Что такое сериализация данных?

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

Три наиболее распространенных формата сериализации данных – это XML, JSON и YAML.

Существуют и другие форматы, такие как BSON, MessagePack, Protobuf и т.д.

Это руководство посвящено только тому, что такое YAML и как работать с YAML, с практическими примерами.

Что такое YAML?

YAML, что расшифровывается как YAML ain’t markup language, – это язык сериализации данных, который является надмножеством JSON.

YAML так популярен благодаря своей простоте.

Создавать и читать файлы yaml проще, чем XML или json.

Современные инструменты, такие как ansible, docker, Kubernetes, Chef и т.д., и облачные среды, такие как Aws, Azure, GCP, используют yaml.

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

Например, в Ansible плейбук написан на yaml.

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

Расширение YAML

Все популярные текстовые редакторы, такие как Vscode, Atom, Vim, Sublime Text и т.д., имеют поддержку языка yaml.

Вы также можете установить такие расширения, как yaml linter, yaml to json/XML converter, yaml beautify и т.д. в ваши текстовые редакторы, которые предоставят больше возможностей при работе с yaml.

Базовая структура Yaml

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

Тип последовательности похож на список python, а тип словаря похож на словари python.

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

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

Каждый документ в потоке yaml должен быть разделен с помощью трех тире (—) и трех точек (…).

Три тире (—) указывают на начало документа, а три точки (…) – на конец документа в потоке.

В случае отсутствия нескольких документов нет необходимости использовать тире и точки.

Yaml использует отступы для определения структуры объекта.

Табуляции не поддерживаются, и вы должны оставлять два пробела для отступов.

Когда вы нажимаете в текстовом редакторе при работе с yaml, он оставляет только два пробела, по крайней мере, так происходит в Vscode.

Подробнее об отступах вы узнаете в следующем разделе.

Я собираюсь запустить следующий фрагмент кода python, который разберет файл yaml и преобразует тип данных в тип данных python.

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

Комментарии YAML

Комментарии дают лучшее понимание тому, кто читает yaml-файл.

Чтобы добавить комментарии в yaml-файл, используйте символ #.

Yaml не поддерживает многострочные комментарии.

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

В приведенном выше примере добавлено два комментария.

Блочный комментарий добавлен в первой строке, а второй – это встроенный комментарий, добавленный в четвертой строке.

Тип строк YAML

Строки в yaml могут быть созданы как с кавычками, так и без кавычек.

Yaml достаточно умен, чтобы интерпретировать тип данных внутри.

Здесь ключ имеет строковый тип, и значение также задано строковым типом.

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

Как я уже говорил ранее, yaml по умолчанию знает тип данных.

Существует также явный способ указать этот тип.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *