Отображение результата шаблонизации

Команда werf config render отображает результат шаблонизации werf.yaml или конкретного образа/ов.

$ werf config render
project: demo-app
configVersion: 1
---
image: backend
dockerfile: backend.Dockerfile
$ werf config render backend
image: backend
dockerfile: backend.Dockerfile

Получить имена всех собираемых образов

Команда werf config list выводит список всех образов, определённых в итоговом werf.yaml.

$ werf config list
backend
frontend

Флаг --final-images-only выведет список только конечных образов. Подробнее ознакомится с конечными и промежуточными образами можно здесь

Анализ зависимостей между образами

Команда werf config graph строит граф зависимостей между образами для всех или только определённых.

$ werf config graph
- image: images/argocd
  dependsOn:
    dependencies:
    - images/argocd-source
- image: images/argocd-operator
  dependsOn:
    from: common/distroless
    import:
    - images/argocd-operator-artifact
- image: images/argocd-operator-artifact
- image: images/argocd-artifact
- image: images/argocd-source
  dependsOn:
    import:
    - images/argocd-artifact
- image: common/distroless-artifact
- image: common/distroless
  dependsOn:
    import:
    - common/distroless-artifact
- image: images-digests
  dependsOn:
    dependencies:
    - images/argocd-operator
    - images/argocd
    - common/distroless
- image: python-dependencies
- image: bundle
  dependsOn:
    import:
    - images-digests
    - python-dependencies
- image: release-channel-version-artifact
- image: release-channel-version
  dependsOn:
    import:
    - release-channel-version-artifact
$ werf config graph images-digests
- image: images-digests
  dependsOn:
    dependencies:
    - images/argocd-operator
    - images/argocd
    - common/distroless

Специальные отладочные функции

Флаг --debug-templates включает расширенный режим отладки Go-шаблонов в werf.

В этом режиме:

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

Подробный формат ошибок включается при использовании --debug-templates, но отключён в обычном режиме, чтобы пользователь случайно не раскрыл потенциально чувствительные данные (например, секреты или внутренние значения).

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

Отобразить произвольную строку в логе

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

  • С --debug-templates: сообщение выводится в лог, не влияет на результат шаблонизации;
  • Без --debug-templates: функция ничего не делает.

Пример:

{{ printf_debug (printf "Current value: %v" .Values.someVar) }}

Отобразить дамп любой структуры в логе

Если нужно увидеть значение переменной, особенно сложной (например, .Values или $), используйте dump_debug.

  • С --debug-templates: структура значения логируется в человекочитаемом виде, не влияет на результат шаблонизации;
  • Без --debug-templates: функция ничего не делает.

Пример:

{{ dump_debug $.Values.werf }}

Отладка функции include

Для отладки функций include, замените их на include_debug и включите режим отладки шаблонов с --debug-templates. Теперь, во время шаблонизации, в логах будет отображаться отладочная информация о каждом вызове include.

  • С --debug-templates: работает как include, но также логирует имя шаблона, его содержимое и результат его шаблонизации;
  • Без --debug-templates: работает как обычный include.

Пример:

{{ include_debug "my-template" . }}

Отладка функции tpl

Для отладки функций tpl, замените их на tpl_debug и включите режим отладки шаблонов с --debug-templates. Теперь, во время шаблонизации, в логах будет отображаться отладочная информация о каждом вызове tpl.

  • С --debug-templates: работает как tpl, но также логирует переданную строку-шаблон и результат шаблонизации;
  • Без --debug-templates: работает как обычный tpl.

Пример:

{{ tpl_debug "{{ .Values.env }}" . }}