From 8d53725005973ef0c87df40f4587bb6cae9613b1 Mon Sep 17 00:00:00 2001 From: Alfred <68240493+Alfredooe@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:34:24 +0000 Subject: [PATCH] Fix(registry/Excellencedev/templates/hetzner-linux): Correctly select coder agent arch on Hetzner CAX ARM Instances (#672) ## Description hetzner-linux template allows CAX (ARM) instances but hardcodes coder agent to amd64 causing the wrong coder-agent to be pulled on CAX instance causing provisioning failure. Adding `architecture` to server_types response and mapping this to correct agent arch, with defaults back to amd64 for if this fails. No Fix, CAX Instance ``` Jan 25 16:03:48 coder-test-nofix-dev systemd[1]: Starting coder-agent.service - Coder Agent... Jan 25 16:03:53 coder-test-nofix-dev systemd[1]: Started coder-agent.service - Coder Agent. Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + trap waitonexit EXIT Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2101]: + mktemp -d -t coder.XXXXXX Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + BINARY_DIR=/tmp/coder.6oHHHW Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + BINARY_NAME=coder Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + BINARY_URL=https://coder.domain/bin/coder-linux-amd64 Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + cd /tmp/coder.6oHHHW Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + : Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + status= Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + command -v curl Jan 25 16:03:53 coder-test-nofix-dev coder-agent[2100]: + curl -fsSL --compressed https://coder.domain/bin/coder-linux-amd64 -o coder Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + break Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + chmod +x coder Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + [ -n ] Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + export CODER_AGENT_AUTH=token Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + export CODER_AGENT_URL=https://coder.domain/ Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2133]: + ./coder --version Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2134]: + head -n1 Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2133]: /opt/coder/init: 90: ./coder: Exec format error Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + output= Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2136]: + echo Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2137]: + grep -q Coder Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + echo ERROR: Downloaded agent binary returned unexpected version output Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: ERROR: Downloaded agent binary returned unexpected version output Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + echo coder --version output: "" Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: coder --version output: "" Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + exit 2 Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + waitonexit Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + echo === Agent script exited with non-zero code (2). Sleeping 24h to preserve logs... Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: === Agent script exited with non-zero code (2). Sleeping 24h to preserve logs... Jan 25 16:04:02 coder-test-nofix-dev coder-agent[2100]: + sleep 86400 ``` Fix, CAX Instance ``` Jan 25 16:08:55 coder-ARM64TEST-dev systemd[1]: Starting coder-agent.service - Coder Agent... Jan 25 16:09:00 coder-ARM64TEST-dev systemd[1]: Started coder-agent.service - Coder Agent. Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + trap waitonexit EXIT Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2046]: + mktemp -d -t coder.XXXXXX Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + BINARY_DIR=/tmp/coder.4j7W57 Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + BINARY_NAME=coder Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + BINARY_URL=https://coder.domain/bin/coder-linux-arm64 Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + cd /tmp/coder.4j7W57 Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + : Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + status= Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + command -v curl Jan 25 16:09:00 coder-ARM64TEST-dev coder-agent[2044]: + curl -fsSL --compressed https://coder.domain/bin/coder-linux-arm64 -o coder Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + break Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + chmod +x coder Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + [ -n ] Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + export CODER_AGENT_AUTH=token Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + export CODER_AGENT_URL=https://coder.domain/ Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2069]: + ./coder --version Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2070]: + head -n1 Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + output=Coder v2.29.2+b5360a9 Wed Jan 21 15:45:58 UTC 2026 Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2076]: + echo Coder v2.29.2+b5360a9 Wed Jan 21 15:45:58 UTC 2026 Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2077]: + grep -q Coder Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: + exec ./coder agent Jan 25 16:09:13 coder-ARM64TEST-dev coder-agent[2044]: 2026-01-25 16:09:13.467 [info] agent is starting now ``` ## Type of Change - [ ] New module - [ ] New template - [x] Bug fix - [ ] Feature/enhancement - [ ] Documentation - [ ] Other ## Template Information **Path:** `registry/Excellencedev/templates/hetzner-linux` ## Testing & Validation - [] Tests pass (`bun test`) - [] Code formatted (`bun fmt`) - [x] Changes tested locally ## Related Issues --- .../templates/hetzner-linux/main.tf | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/registry/Excellencedev/templates/hetzner-linux/main.tf b/registry/Excellencedev/templates/hetzner-linux/main.tf index 03e01a10..134bf634 100644 --- a/registry/Excellencedev/templates/hetzner-linux/main.tf +++ b/registry/Excellencedev/templates/hetzner-linux/main.tf @@ -137,11 +137,12 @@ locals { hcloud_server_types = { for st in jsondecode(data.http.hcloud_server_types.response_body).server_types : st.name => { - cores = st.cores - memory_gb = st.memory - disk_gb = st.disk - locations = [for l in st.locations : l.name] - deprecated = st.deprecated + cores = st.cores + memory_gb = st.memory + disk_gb = st.disk + architecture = st.architecture + locations = [for l in st.locations : l.name] + deprecated = st.deprecated } if st.deprecated == false } @@ -162,6 +163,19 @@ locals { data.coder_parameter.hcloud_location.value ) ] + + # Map Hetzner architecture (x86 or arm) to Coder agent architecture (amd64 or arm64) + agent_arch = try( + lookup( + { + "x86" = "amd64" + "arm" = "arm64" + }, + local.hcloud_server_types[data.coder_parameter.hcloud_server_type.value].architecture, + "amd64" # Fallback if not returned + ), + "amd64" # Fallback for template setup + ) } data "coder_provisioner" "me" {} @@ -187,7 +201,7 @@ data "coder_parameter" "home_volume_size" { resource "coder_agent" "main" { os = "linux" - arch = "amd64" + arch = local.agent_arch metadata { key = "cpu"