From 3413948bfec40b2fcf3eefd25dc6a85bfe9c460e Mon Sep 17 00:00:00 2001 From: Antonio Nesic Date: Tue, 17 Mar 2026 16:00:50 +0100 Subject: [PATCH 1/2] Healthcheck hotfix --- internal/health/node_operator_monitor.go | 22 +++++++++--- internal/health/node_operator_monitor_test.go | 36 +++++++++++++++++-- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/internal/health/node_operator_monitor.go b/internal/health/node_operator_monitor.go index 450a65f8..1ea4448a 100644 --- a/internal/health/node_operator_monitor.go +++ b/internal/health/node_operator_monitor.go @@ -15,12 +15,21 @@ import ( const ( karpenterLabelName = "app.kubernetes.io/name=karpenter" - devzeroImagePrefix = "public.ecr.aws/devzeroinc/" defaultHealthPort = "8081" defaultProbeTimeout = 5 * time.Second karpenterServiceName = "karpenter" ) +// dzKarpImageIdentifiers are substrings that identify a DevZero-managed +// Karpenter image regardless of the container registry used (public ECR, +// private ECR, ACR, GCR, etc.). Matches the default helm chart repositories +// across karpenter-provider-aws, karpenter-provider-azure, and +// karpenter-provider-gcp. +var dzKarpImageIdentifiers = []string{ + "devzeroinc", // AWS and Azure providers + "cloudpilotai", // GCP provider +} + type podProbeResult struct { healthzOK bool readyzOK bool @@ -105,11 +114,16 @@ func (m *NodeOperatorMonitor) discoverDeployment(ctx context.Context) (*appsv1.D return nil, nil } -// isDevZeroImage checks whether the deployment uses a DevZero container image. +// isDevZeroImage checks whether the deployment uses a DevZero-managed +// Karpenter image by looking for known image identifiers in the container +// image string. Uses Contains to match any registry (public ECR, private ECR, +// ACR, GCR, etc.). func isDevZeroImage(dep *appsv1.Deployment) bool { for _, c := range dep.Spec.Template.Spec.Containers { - if strings.HasPrefix(c.Image, devzeroImagePrefix) { - return true + for _, id := range dzKarpImageIdentifiers { + if strings.Contains(c.Image, id) { + return true + } } } return false diff --git a/internal/health/node_operator_monitor_test.go b/internal/health/node_operator_monitor_test.go index 66250578..c021be28 100644 --- a/internal/health/node_operator_monitor_test.go +++ b/internal/health/node_operator_monitor_test.go @@ -178,7 +178,7 @@ func TestNodeOperatorMonitor_DiscoverDeployment(t *testing.T) { } func TestNodeOperatorMonitor_IsDevZeroImage(t *testing.T) { - t.Run("devzero AWS image", func(t *testing.T) { + t.Run("devzero public ECR image", func(t *testing.T) { dep := &appsv1.Deployment{ Spec: appsv1.DeploymentSpec{ Template: corev1.PodTemplateSpec{ @@ -193,13 +193,43 @@ func TestNodeOperatorMonitor_IsDevZeroImage(t *testing.T) { assert.True(t, isDevZeroImage(dep)) }) - t.Run("devzero GCP image", func(t *testing.T) { + t.Run("devzero private ECR image", func(t *testing.T) { dep := &appsv1.Deployment{ Spec: appsv1.DeploymentSpec{ Template: corev1.PodTemplateSpec{ Spec: corev1.PodSpec{ Containers: []corev1.Container{ - {Image: "public.ecr.aws/devzeroinc/dzkarp-gcp/controller:abc123"}, + {Image: "123456789.dkr.ecr.us-east-1.amazonaws.com/devzeroinc/dzkarp-aws/controller:abc123"}, + }, + }, + }, + }, + } + assert.True(t, isDevZeroImage(dep)) + }) + + t.Run("devzero Azure ACR image", func(t *testing.T) { + dep := &appsv1.Deployment{ + Spec: appsv1.DeploymentSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + {Image: "devzeroinc.azurecr.io/dzkarp-azure/controller:abc123"}, + }, + }, + }, + }, + } + assert.True(t, isDevZeroImage(dep)) + }) + + t.Run("devzero GCP image (cloudpilotai)", func(t *testing.T) { + dep := &appsv1.Deployment{ + Spec: appsv1.DeploymentSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + {Image: "public.ecr.aws/cloudpilotai/gcp/karpenter:abc123"}, }, }, }, From 37de6b5a02448d4f561fcbe6f55c10d8c4f4fc62 Mon Sep 17 00:00:00 2001 From: Antonio Nesic Date: Tue, 17 Mar 2026 16:06:33 +0100 Subject: [PATCH 2/2] Format --- internal/health/node_operator_monitor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/health/node_operator_monitor.go b/internal/health/node_operator_monitor.go index 1ea4448a..0aebfd77 100644 --- a/internal/health/node_operator_monitor.go +++ b/internal/health/node_operator_monitor.go @@ -26,7 +26,7 @@ const ( // across karpenter-provider-aws, karpenter-provider-azure, and // karpenter-provider-gcp. var dzKarpImageIdentifiers = []string{ - "devzeroinc", // AWS and Azure providers + "devzeroinc", // AWS and Azure providers "cloudpilotai", // GCP provider }