From 7ae487631d145756ce1b74d21a6de37c3ceca9a0 Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Tue, 10 Feb 2026 19:59:30 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20fix:=20avoid=20duplicate=20coder?= =?UTF-8?q?=20server=20subcommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Coder container image already uses an entrypoint of '/opt/coder server'. Passing "server" in the reconciled Deployment args produced an effective command of 'coder server server ...', causing control plane pods to crash with an unrecognized subcommand error. Update the default args to pass only flags, and keep extraArgs appended. Extend the controller reconcile test to assert the generated args. Signed-off-by: Thomas Kosiewski --- _Generated with [`mux`](https://github.com/coder/mux) • Model: `openai:gpt-5.3-codex` • Thinking: `xhigh`_ --- _Generated with `mux` • Model: `openai:gpt-5.3-codex` • Thinking: `xhigh` • Cost: `bash.00`_ Change-Id: I6fbf3726ecce93ef0c389cde239d99d372d11b6d --- .../controller/codercontrolplane_controller.go | 2 +- .../codercontrolplane_controller_test.go | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/internal/controller/codercontrolplane_controller.go b/internal/controller/codercontrolplane_controller.go index e870c419..1b0a0705 100644 --- a/internal/controller/codercontrolplane_controller.go +++ b/internal/controller/codercontrolplane_controller.go @@ -98,7 +98,7 @@ func (r *CoderControlPlaneReconciler) reconcileDeployment(ctx context.Context, c image = defaultCoderImage } - args := []string{"server", "--http-address=0.0.0.0:3000"} + args := []string{"--http-address=0.0.0.0:3000"} args = append(args, coderControlPlane.Spec.ExtraArgs...) deployment.Spec.Replicas = &replicas diff --git a/internal/controller/codercontrolplane_controller_test.go b/internal/controller/codercontrolplane_controller_test.go index 9525de1f..aa5e0885 100644 --- a/internal/controller/codercontrolplane_controller_test.go +++ b/internal/controller/codercontrolplane_controller_test.go @@ -2,6 +2,7 @@ package controller_test import ( "context" + "reflect" "strings" "testing" @@ -45,8 +46,9 @@ func TestReconcile_ExistingResource(t *testing.T) { Namespace: "default", }, Spec: coderv1alpha1.CoderControlPlaneSpec{ - Image: "test-image:latest", - Replicas: &replicas, + Image: "test-image:latest", + Replicas: &replicas, + ExtraArgs: []string{"--prometheus-enable=false"}, Service: coderv1alpha1.ServiceSpec{ Port: 8080, }, @@ -86,6 +88,15 @@ func TestReconcile_ExistingResource(t *testing.T) { t.Fatalf("expected deployment replicas %d, got %#v", replicas, deployment.Spec.Replicas) } + if len(deployment.Spec.Template.Spec.Containers) != 1 { + t.Fatalf("expected one container in deployment pod spec, got %d", len(deployment.Spec.Template.Spec.Containers)) + } + container := deployment.Spec.Template.Spec.Containers[0] + expectedArgs := []string{"--http-address=0.0.0.0:3000", "--prometheus-enable=false"} + if !reflect.DeepEqual(container.Args, expectedArgs) { + t.Fatalf("expected container args %v, got %v", expectedArgs, container.Args) + } + service := &corev1.Service{} if err := k8sClient.Get(ctx, types.NamespacedName{Name: cp.Name, Namespace: cp.Namespace}, service); err != nil { t.Fatalf("expected service to be reconciled: %v", err)