Рубрики
Uncategorized

Безболезненный ямл Шаблон

❤️ Ямл? Ямл повсеместно. Любишь ли вы это или ненавидите его, у вас нет выбора, кроме использования … Теги с ямлем, шаблоном, дежоптом, кубератусами.

❤️ Ямл?

Ямл повсеместно. Любишь ли вы это или ненавидите его, у вас нет выбора, кроме этого. Это было установлено как Формат конфигурации для всех вещей Cloud/DevOps/Serverless (выберите свой Buzzword).

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

{«Hello»: {«Foo»: «Bar»}} Здравствуйте: Фу: Бар

Люди, как YAML, потому что он сосредотачивается на содержании

Увеличение сложности

Автоматизация в самом сердце всего в повышении инфраструктуры — как-кода, облака, дежопта, гитапп и т. Д. Контейнеризация также способствует экспоненциально растущему количеству комбинаций конфигурации.

Неизбежно, потребность в структуре и факторизации возникала.

Текстовая шаблона для спасения

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

Подход первого поколения опирается на существующие библиотеки текстовых шаблонов ( Jinja , Перейти шаблоны , Хелм …). Это умный, но ленивый ход, потому что он не работает хорошо, когда вступает в игру.

Кто бы ни боролся с Toyaml В хелме диаграммы является жертвой текстового шаблона YAML.

От точки зрения пользователей, открытие и закрытие символов, которые избегали YAML, возвращаются в язык шаблонов.

  {{ if eq .Values.favorite.drink "coffee" }}
  mug: true
  {{ end }}

Альтернатива: выделенный язык

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

  Martini: {
    ingredients: [
      {
        kind: $['Tom Collins'].ingredients[0].kind,
        qty: 2,
      },
      { kind: 'Dry White Vermouth', qty: 1 },
    ]
  }

Он может выводить во многих форматах, включая YAML.

Итак, каждый должен принять это нет? Почему это не так?

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

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

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

И обратите внимание, что эти нежелательные открывающиеся и закрывающие скобки снова вернулись …

Входит в структурный ямл Шаблон

Итак, правда в среднем.

Можем ли мы написать простые ямл и добавить программные функции к нему в некотором неребовом пути?

YTT Это с языком, написанным в комментариях Ямла.

  #@ for/end echo in data.values.echos:
  - name: #@ name(echo)
    image: hashicorp/http-echo
    args:
    - #@ "-listen=:" + str(echo.port)
    - #@ "-text=" + echo.text

Структура ямла сохраняется и понимается инструментом. Является ли это окончательным окончательным способом решить проблему?

Как разработчик, не чувствуйте небольшой дискомфорт, когда вы пишете код внутри комментариев?

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

Используя ямл теги

Думаю об этом, я напомнил некоторая работа, которую я сделал с YAML около десяти лет назад Отказ Это система впрыска зависимостей для Python à la Весенние рамки. Он использует систему Tag YAML для создания конфигурации, соответствующей контексту приложения Spring. Этот ямл, благодаря системе тегов и анкеров напрямую десериализируется как проводные сингты, образующие структуру приложений.

Сила Ямла в тегах

С тегами YAML в и разуме вдохновения от YTT и JSONNET пришли дизайн YGLU ᕄ!? .

Вход

greeting: !- Hello
greeter: !()
  length: !? len($)
  message: !? $_.greeting + ', ' + $  
names: !-
  - world
  - foo
  - bar
messages:
  - !for $_.names: !()
     - !? ($_.greeter)($)          

Вывод

messages:
- length: 5
  message: Hello, world        
- length: 3
  message: Hello, foo
- length: 3
  message: Hello, bar

Найти больше примеров в Интернет-игровая площадка и то Тестовые образцы .

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

Заворачивать

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

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

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

YGLU ᕄ!?

Оригинал: «https://dev.to/lbovet/painless-yaml-templating-2n2m»