basecamp / kamal-site

kamal-deploy.org
https://kamal-deploy.org
52 stars 58 forks source link

Bad substitution on label shell expansion #34

Closed frenkel closed 2 months ago

frenkel commented 11 months ago

Based on the documentation I've added this at the root level of my deploy.yml:

labels:
  host-machine: "${cat /etc/hostname}"

This results in the following error:

INFO [eee4d989] Running docker run --detach --restart unless-stopped --name redacted-web-89918e485c8af2b64fdcba752a72017dcab2f154_uncommitted_fb0b1b8cf19e2c12 --hostname 192.168.67.3-1e0870e8cf94 -e KAMAL_CONTAINER_NAME="redacted-web-89918e485c8af2b64fdcba752a72017dcab2f154_uncommitted_fb0b1b8cf19e2c12" --env-file .kamal/env/roles/redacted-web.env --health-cmd "(curl -f http://localhost:3000/up || exit 1) && (stat /tmp/kamal-cord/cord > /dev/null || exit 1)" --health-interval "1s" --volume $(pwd)/.kamal/cords/redacted-web-0bcc2edb36600a250ed3e2501b98c71f:/tmp/kamal-cord --log-opt max-size="10m" --volume $(pwd)/.kamal/assets/volumes/redacted-web-89918e485c8af2b64fdcba752a72017dcab2f154_uncommitted_fb0b1b8cf19e2c12:/rails/public/assets --label service="redacted" --label role="web" --label traefik.http.services.redacted-web.loadbalancer.server.scheme="http" --label traefik.http.routers.redacted-web.rule="PathPrefix(\`/\`)" --label traefik.http.middlewares.redacted-web-retry.retry.attempts="5" --label traefik.http.middlewares.redacted-web-retry.retry.initialinterval="500ms" --label traefik.http.routers.redacted-web.middlewares="redacted-web-retry@docker" --label host-machine="${cat /etc/hostname}" ghcr.io/redacted/redacted:89918e485c8af2b64fdcba752a72017dcab2f154_uncommitted_fb0b1b8cf19e2c12 on 192.168.67.3

docker stdout: Nothing written
docker stderr: bash: line 1: ${cat /etc/hostname}: bad substitution

Is the documentation outdated? Or did I do something wrong here?

My server is running Debian with bash as it's shell.

jpdombrowski commented 9 months ago

Shell substitution uses regular parentheses rather than curly braces:

labels:
  host-machine: "$(cat /etc/hostname)"