Рубрики
Uncategorized

DevOps с шаблонами GO

Шаблон в программировании является обычным явлением. За прошедшие годы появились некоторые известные языки и были … с меткой Go, DevOps, Cloud, Lucitorial.

Шаблон в программировании является обычным явлением. За прошедшие годы некоторые известные языки появились и были адаптированы миллионами.

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

Почему ты должен научиться идти Шаблон Синтаксис

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

Некоторые проекты, которые используют шаблоны GO:

  • Докер
  • Kubernetes
  • Шлем
  • Лейка
  • Кочевник
  • Консул-образец
  • Свод
  • Левант
  • Упаковщик

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

Начиная

Я бы порекомендовал читать Go Шаблон Синтаксис от кочевых документов.

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

Если хотите, вы можете установить его с Получите или используйте Docker Image от Docker Hub Анкет

Bluebrown/Jpipe

render json с шаблонами GO из командной строки

Render json с шаблонами GO из командной строки

Докер

curl --silent https://jsonplaceholder.typicode.com/users/1 \
  | docker run --interactive bluebrown/jpipe \
    --newline '{{.name}}'

Местный

go get github.com/bluebrown/jpipe

использование

Шаблоны выполняются с Текст/шаблон упаковка. Это означает, что они не безопасны для инъекций, обеспечивая большую гибкость для пользователя. Не выполняйте ненадежные шаблоны!

$ echo '{"place": "bar"}' | jpipe 'lets go to the {{.place}}!'
lets go to the bar!

Шаблон либо читается из первого позиционного аргумента, либо из пути, указанного через --template или -t флаг.

echo '{"place": "bar"}' | jpipe --template path/to/template

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

jpipe < path/to/input.json
curl localhost | jpipe

Флаги

-n
-newline
      print new line at the end
-t string
-template string
      alternative way to specify template

Веточка

Функции веточки были добавлены, чтобы предоставить больше …

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

По умолчанию данные отображаются в своей необработанной форме. Это может быть объект или массив, который станет либо картой, либо ломтиком.

Базовый:

# object
$ echo '{ "data": "foo" }' | jpipe
map[data:foo]
# array
$ echo '[1,2]' | jpipe
[1 2]

Пропустить шаблон как позиционный аргумент:

# object
$ echo '{ "data": "foo" }' | jpipe '{{ .data }}'
foo
# array
$ echo '[1,2]' | jpipe '{{ index . 1 }}'
2

Усовершенствованный синтаксис

Помимо Основной синтаксис Ниже приведена дополнительная информация о шаблонах.

Контекст

Важно помнить, что Анкет всегда относится к текущему контексту. Шаблон по умолчанию на самом деле выглядит так:

{{ . }}

Функциональный вызов

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

Итак, нормальный println (item) становится {{println. }} Анкет Если у вас более 1 аргумента, то вы просто добавляете их без запятой.

{{ printf "the size is %f\n"  . }}

Итерация

Часто мы хотим варьироваться от массива или даже ключей и значений карты.

Когда итерация над данными, Анкет станет предметом текущей итерации.

{{ range . }} ... {{ end }}'

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

{{ $index, $element := range . }} ... {{ end }}

Для итерации над ключами и значениями объекта используется следующий синтаксис.

{{ range $key, $val := . }} ... {{ end }}

Индексная функция

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

{{ index .mySlice 2 }}

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

{{ $item := index .mySlice 2 }}{{ $item.title }}

Индексная функция также может поиск клавиш на карте.

{{ index .myMap "some-key" }}

Пример

Вы можете просмотреть Этот пример на GitHub Анкет

Ниже приведен еще один пример, в котором появляются некоторые статьи с помощью жидких тегов dev.to.

$ curl -s "https://dev.to/api/articles?username=codingsafari&per_page=3" > posts.json
$ jpipe '### {{ println "Posts\n" }}{{range .}}{{ printf "{%% link %s %%}\n"  .url }}{{end}}' < posts.json

Необработанный выход Введите полноэкранный режим Выйдите из полноэкранного режима

Stared отметка Посты Строительные контейнерные изображения контейнера Нико Браун ・ 28 июня ・ 7 минут Читать #docker #container #devops #tutorial Усовершенствованные методы входа для контейнера Docker Nico Braun ・ 27 июня ・ 4 мин. Читать #Docker #Tutorial #Devops #WebDev Kubernetes — контроллер Ingress Нико Браун ・ 27 июня ・ 3 мин.

Оригинал: «https://dev.to/codingsafari/excel-at-devops-with-go-templates-2iog»