Refine ArgoCD health checks and add AutoScalingRunnerSet

This commit is contained in:
Kuangyu Jing 2025-07-17 07:08:53 +09:00
parent 72f146f048
commit f6b8ccfbc6
4 changed files with 96 additions and 39 deletions

View File

@ -4,22 +4,23 @@ metadata:
name: argocd-cm name: argocd-cm
namespace: argocd namespace: argocd
data: data:
# Add health check for legacy Runner # Health check for legacy Runner
resource.customizations.health.actions.summerwind.dev_Runner: | resource.customizations.health.actions.summerwind.dev_Runner: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
if obj.status.ready == true and obj.status.phase == "Running" then local phase = obj.status.phase
if obj.status.ready and phase == "Running" then
hs.status = "Healthy" hs.status = "Healthy"
hs.message = "Runner is ready and running" hs.message = "Runner is ready and running"
elseif obj.status.phase == "Pending" or obj.status.phase == "Created" then elseif phase == "Pending" or phase == "Created" then
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner is starting up" hs.message = "Runner is starting up"
elseif obj.status.phase == "Failed" then elseif phase == "Failed" then
hs.status = "Degraded" hs.status = "Degraded"
hs.message = obj.status.message or "Runner has failed" hs.message = obj.status.message or "Runner has failed"
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner status: " .. (obj.status.phase or "Unknown") hs.message = "Runner status: " .. (phase or "Unknown")
end end
else else
hs.status = "Progressing" hs.status = "Progressing"
@ -27,7 +28,7 @@ data:
end end
return hs return hs
# Add health check for EphemeralRunner # Health check for EphemeralRunner
resource.customizations.health.actions.github.com_EphemeralRunner: | resource.customizations.health.actions.github.com_EphemeralRunner: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
@ -52,3 +53,27 @@ data:
hs.message = "Waiting for EphemeralRunner status" hs.message = "Waiting for EphemeralRunner status"
end end
return hs return hs
# Health check for actions.github.com/v1alpha1 AutoScalingRunnerSet
resource.customizations.health.actions.github.com_AutoScalingRunnerSet: |
hs = {}
if obj.status ~= nil then
local desired = obj.status.desiredReplicas or 0
local ready = obj.status.readyReplicas or 0
local current = obj.status.currentReplicas or 0
if desired > 0 and ready == desired then
hs.status = "Healthy"
hs.message = string.format("Ready runners: %d/%d", ready, desired)
elseif desired > 0 then
hs.status = "Progressing"
hs.message = string.format("Runners: %d/%d ready, %d current", ready, desired, current)
else
hs.status = "Progressing"
hs.message = "No desired replicas set"
end
else
hs.status = "Progressing"
hs.message = "Waiting for AutoScalingRunnerSet status"
end
return hs

View File

@ -8,25 +8,26 @@ data:
resource.customizations.health.actions.summerwind.dev_Runner: | resource.customizations.health.actions.summerwind.dev_Runner: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
if obj.status.ready == true and obj.status.phase == "Running" then local phase = obj.status.phase
if obj.status.ready and phase == "Running" then
hs.status = "Healthy" hs.status = "Healthy"
hs.message = "Runner is ready and running" hs.message = "Runner is ready and running"
elseif obj.status.phase == "Pending" or obj.status.phase == "Created" then elseif phase == "Pending" or phase == "Created" then
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner is starting up" hs.message = "Runner is starting up"
elseif obj.status.phase == "Failed" then elseif phase == "Failed" then
hs.status = "Degraded" hs.status = "Degraded"
hs.message = obj.status.message or "Runner has failed" hs.message = obj.status.message or "Runner has failed"
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner status: " .. (obj.status.phase or "Unknown") hs.message = "Runner status: " .. (phase or "Unknown")
end end
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Waiting for runner status" hs.message = "Waiting for runner status"
end end
return hs return hs
# Health check for actions.github.com/v1alpha1 EphemeralRunner # Health check for actions.github.com/v1alpha1 EphemeralRunner
resource.customizations.health.actions.github.com_EphemeralRunner: | resource.customizations.health.actions.github.com_EphemeralRunner: |
hs = {} hs = {}
@ -52,25 +53,27 @@ data:
hs.message = "Waiting for EphemeralRunner status" hs.message = "Waiting for EphemeralRunner status"
end end
return hs return hs
# Health check for actions.github.com/v1alpha1 AutoScalingRunnerSet # Health check for actions.github.com/v1alpha1 AutoScalingRunnerSet
resource.customizations.health.actions.github.com_AutoScalingRunnerSet: | resource.customizations.health.actions.github.com_AutoScalingRunnerSet: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
if obj.status.currentReplicas ~= nil and obj.status.desiredReplicas ~= nil then local desired = obj.status.desiredReplicas or 0
if obj.status.currentReplicas == obj.status.desiredReplicas then local ready = obj.status.readyReplicas or 0
hs.status = "Healthy" local current = obj.status.currentReplicas or 0
hs.message = string.format("Runners: %d/%d", obj.status.currentReplicas, obj.status.desiredReplicas)
else if desired > 0 and ready == desired then
hs.status = "Progressing" hs.status = "Healthy"
hs.message = string.format("Scaling runners: %d/%d", obj.status.currentReplicas, obj.status.desiredReplicas) hs.message = string.format("Ready runners: %d/%d", ready, desired)
end elseif desired > 0 then
hs.status = "Progressing"
hs.message = string.format("Runners: %d/%d ready, %d current", ready, desired, current)
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Initializing runner set" hs.message = "No desired replicas set"
end end
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Waiting for status" hs.message = "Waiting for AutoScalingRunnerSet status"
end end
return hs return hs

View File

@ -4,24 +4,26 @@ metadata:
name: argocd-cm name: argocd-cm
namespace: argocd namespace: argocd
data: data:
# Health check for actions.summerwind.dev/v1alpha1 Runner
resource.customizations.health.actions.summerwind.dev_Runner: | resource.customizations.health.actions.summerwind.dev_Runner: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
if obj.status.ready == true and obj.status.phase == "Running" then local phase = obj.status.phase
if obj.status.ready and phase == "Running" then
hs.status = "Healthy" hs.status = "Healthy"
hs.message = "Runner is ready and running" hs.message = "Runner is ready and running"
elseif obj.status.phase == "Pending" or obj.status.phase == "Created" then elseif phase == "Pending" or phase == "Created" then
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner is starting up" hs.message = "Runner is starting up"
elseif obj.status.phase == "Failed" then elseif phase == "Failed" then
hs.status = "Degraded" hs.status = "Degraded"
hs.message = obj.status.message or "Runner has failed" hs.message = obj.status.message or "Runner has failed"
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner status: " .. (obj.status.phase or "Unknown") hs.message = "Runner status: " .. (phase or "Unknown")
end end
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Waiting for runner status" hs.message = "Waiting for runner status"
end end
return hs return hs

View File

@ -126,22 +126,23 @@ metadata:
name: argocd-cm name: argocd-cm
namespace: argocd namespace: argocd
data: data:
# Add health check for legacy Runner # Health check for legacy Runner
resource.customizations.health.actions.summerwind.dev_Runner: | resource.customizations.health.actions.summerwind.dev_Runner: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
if obj.status.ready == true and obj.status.phase == "Running" then local phase = obj.status.phase
if obj.status.ready and phase == "Running" then
hs.status = "Healthy" hs.status = "Healthy"
hs.message = "Runner is ready and running" hs.message = "Runner is ready and running"
elseif obj.status.phase == "Pending" or obj.status.phase == "Created" then elseif phase == "Pending" or phase == "Created" then
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner is starting up" hs.message = "Runner is starting up"
elseif obj.status.phase == "Failed" then elseif phase == "Failed" then
hs.status = "Degraded" hs.status = "Degraded"
hs.message = obj.status.message or "Runner has failed" hs.message = obj.status.message or "Runner has failed"
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Runner status: " .. (obj.status.phase or "Unknown") hs.message = "Runner status: " .. (phase or "Unknown")
end end
else else
hs.status = "Progressing" hs.status = "Progressing"
@ -149,31 +150,57 @@ data:
end end
return hs return hs
# Add health check for EphemeralRunner # Health check for EphemeralRunner
resource.customizations.health.actions.github.com_EphemeralRunner: | resource.customizations.health.actions.github.com_EphemeralRunner: |
hs = {} hs = {}
if obj.status ~= nil then if obj.status ~= nil then
if obj.status.phase == "Running" then local phase = obj.status.phase
if phase == "Running" then
hs.status = "Healthy" hs.status = "Healthy"
hs.message = "EphemeralRunner is running" hs.message = "EphemeralRunner is running"
elseif obj.status.phase == "Pending" then elseif phase == "Pending" then
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "EphemeralRunner is pending" hs.message = "EphemeralRunner is pending"
elseif obj.status.phase == "Failed" then elseif phase == "Failed" then
hs.status = "Degraded" hs.status = "Degraded"
hs.message = obj.status.message or "EphemeralRunner has failed" hs.message = obj.status.message or "EphemeralRunner has failed"
elseif obj.status.phase == "Finished" then elseif phase == "Finished" then
hs.status = "Healthy" hs.status = "Healthy"
hs.message = "EphemeralRunner has finished" hs.message = "EphemeralRunner has finished"
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "EphemeralRunner status: " .. (obj.status.phase or "Unknown") hs.message = "EphemeralRunner status: " .. (phase or "Unknown")
end end
else else
hs.status = "Progressing" hs.status = "Progressing"
hs.message = "Waiting for EphemeralRunner status" hs.message = "Waiting for EphemeralRunner status"
end end
return hs return hs
# Health check for actions.github.com/v1alpha1 AutoScalingRunnerSet
resource.customizations.health.actions.github.com_AutoScalingRunnerSet: |
hs = {}
if obj.status ~= nil then
local desired = obj.status.desiredReplicas or 0
local ready = obj.status.readyReplicas or 0
local current = obj.status.currentReplicas or 0
if desired > 0 and ready == desired then
hs.status = "Healthy"
hs.message = string.format("Ready runners: %d/%d", ready, desired)
elseif desired > 0 then
hs.status = "Progressing"
hs.message = string.format("Runners: %d/%d ready, %d current", ready, desired, current)
else
hs.status = "Progressing"
hs.message = "No desired replicas set"
end
else
hs.status = "Progressing"
hs.message = "Waiting for AutoScalingRunnerSet status"
end
return hs
``` ```
### Method 5: Helm Values ### Method 5: Helm Values