Перейти к содержимому

Шаблонизация в файлах команд

DWE использует два слоя интерполяции в определениях команд: лёгкий синтаксис ${...} и полные блоки Go text/template. Оба вычисляются одним движком и могут свободно смешиваться.

Полный шаблонный движок — namespace-ы ${...}, контекст рендера, управление потоком Go-шаблонов, встроенные функции, реестры sprout и соглашения — задокументирован в Шаблонах. Эта страница покрывает только специфичные для файлов команд части; всё остальное — кросс-режущее.

Шаблоны внутри workspace/commands/ рендерятся относительно RenderContext:

ПутьСодержимое
.RawОбъединённые workspace.yml + defaults.yml + local.yml как вложенная карта
.ParamsРазрешённые значения параметров (карта по имени параметра)
.ContextРазрешённые значения контекста (карта по имени контекста)
.FilesРазрешённые файловые артефакты (карта по идентификатору файла; у каждого есть поле .Path)
.Host.UID / .Host.GIDСтроки UID/GID хоста

Namespace-ы ${...} (${vars.db.x}, ${param.x}, ${context.x}, ${files.id.path}, ${host.uid}) маршрутизируются в те же поля. Полную таблицу namespace-ов см. в Шаблонах.

Три шаблонных хелпера доступны только в файлах команд; они не зарегистрированы в шаблонах info или render-паков:

ХелперИспользование
resolve .Raw <dot.path>Lookup точечного пути в объединённом конфиге (то же, что ${dot.path})
resolveMap .Params <key>Lookup ключа в плоской карте (то же, что ${param.key} / ${context.key})
resolveFile .Files <id> <subkey>Lookup подключа в разрешённом файловом артефакте

Они обходят карты и возвращают "" при промахе — полезно, когда у ключа есть точка или числовой сегмент, ломающий прямую форму .Raw.x.y.

# helpers chained via pipe
files:
log:
access: write
path: ".dwe/logs/{{ .Params.task }}_{{ now | date \"2006-01-02_15-04-05\" }}.log"
mkdir: true
# pipeline form: pass a value through a function
env:
SCRIPT_NAME: '{{ .Params.script_path | pathBase }}'
# mixing the two syntaxes
path: "${param.dump_dir}/${param.database}{{ if .Params.dump_date }}_{{ now | date \"2006-01-02\" }}{{ end }}.sql.gz"
РасположениеШаблонизируется
messages.success, messages.errorда
confirmation_textда
cmd, argv, workdir, compose_argsда
Значения карты env:да
files.*.path, files.*.candidates[].path/glob/matchда
params.*.default_from, context.*.fromнет — только обычные точечные пути
steps[].with[<key>], steps[].when в workflowда
description, group.title, group.descriptionнет — печатается дословно commands list / commands -i / completion

Template-пространство команды (полный справочник)

Заголовок раздела «Template-пространство команды (полный справочник)»

Когда документация говорит «template-пространство команды», это набор выражений, доступных внутри любого шаблонизированного поля команды:

ВыражениеЗначение
${<dot.path>}Lookup в объединённом DweConfig.Raw
${param.<name>}Разрешённый параметр
${context.<name>}Разрешённое значение контекста
${files.<id>.path}Абсолютный путь файлового артефакта
${args}Аргументы, переданные вызывающим после -- — см. Сквозные аргументы. Допустим в cmd:/argv: типов shell / dwe / service_exec / service_run
${host.uid} / ${host.gid}Эффективные UID/GID для --user контейнера
{{ .Raw.x.y }}Прямой доступ через точку к объединённому конфигу
{{ .Params.<name> }}Прямой доступ через точку к params
{{ .Context.<name> }}Прямой доступ через точку к context
{{ .Host.UID }}Информация о хосте (Go-шаблонная форма)
{{ now | date "..." }} / {{ pathBase }} / {{ pathDir }} / {{ appURL ... }}Функции-хелперы (sprout + домен)

Используйте более простую форму ${...} для разовых lookup-ов; обращайтесь к {{ ... }}, когда нужны условные выражения, сравнения или pipeline-ы.