Skip to main content

Variables and How They Inject

Variables let you parameterize templates, compose stacks, and scripts so the same definition can run across many environments and devices.

Scopes

  • Template variables: Declared on the Template’s Variables tab with optional defaults.
  • Device variables: Overrides defined per device on the Device > Variables tab.
  • Deploy‑time inputs: Values you provide in the Deploy dialog.

Precedence (last wins)

  1. Template defaults → 2) Project/device overrides → 3) Deploy‑time inputs.

Injection into Compose

  • Use ${VAR} syntax anywhere in compose YAML (image tags, env, ports, volumes, healthchecks).
  • During deploy, Daployi resolves variables using the precedence rules and validates the resulting YAML.
  • Missing values are surfaced in the deploy preview for you to fill before continuing.

Example (compose excerpt)

services:
api:
image: ghcr.io/org/api:${API_TAG}
environment:
- DB_URL=${DB_URL}
ports:
- "${API_PORT}:8080"

Example (Template Variables tab defaults)

API_TAG: "1.24.0"
DB_URL: "postgres://user:${DB_PASSWORD}@db/prod"
API_PORT: "8080"
DB_PASSWORD: "${SECRET_DB_PASSWORD}" # mark as secret

Injection into Scripts

  • Scripts receive variables as environment variables by name.
  • In the Run dialog, you can also define additional env vars or secret parameters.
  • Mark sensitive values as secret to redact them in logs and Events.

Bash example using variables

#!/usr/bin/env bash
set -euo pipefail

echo "Deploying API ${API_TAG} to ${SITE_NAME:-unknown}"
curl -fsSL "${API_URL}/health" || echo "API not reachable yet"

PowerShell example using variables

Write-Host "Rotating logs for $env:SITE_NAME"
Get-ChildItem -Path C:\\Logs -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-$env:RETENTION_DAYS)} | Remove-Item -Force

Tips

  • Prefer variables for ports, image tags, URLs, and credentials.
  • Keep defaults non‑secret when possible; reference secrets via indirection (e.g., ${SECRET_DB_PASSWORD}).
  • For device‑specific values (site number, hardware differences), set Device variables to avoid branching templates.