Шаблонизация в файлах команд
DWE использует два слоя интерполяции в определениях команд: лёгкий синтаксис ${...} и полные блоки Go text/template. Оба вычисляются одним движком и могут свободно смешиваться.
Полный шаблонный движок — namespace-ы ${...}, контекст рендера, управление потоком Go-шаблонов, встроенные функции, реестры sprout и соглашения — задокументирован в Шаблонах. Эта страница покрывает только специфичные для файлов команд части; всё остальное — кросс-режущее.
Содержание
Заголовок раздела «Содержание»- Контекст рендера команды
- Резолверы уровня команды
- Примеры, специфичные для команд
- Где вычисляются шаблоны
- Template-пространство команды (полный справочник)
Контекст рендера команды
Заголовок раздела «Контекст рендера команды»Шаблоны внутри 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 pipefiles: 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 functionenv: SCRIPT_NAME: '{{ .Params.script_path | pathBase }}'
# mixing the two syntaxespath: "${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-ы.