argo-cd/resource_customizations/postgresql.cnpg.io/Cluster/health.lua
Rouke Broersma ede9229353
fix(actions): Use correct annotation for CNPG suspend/resume (#26711)
Signed-off-by: Rouke Broersma <rouke.broersma@infosupport.com>
2026-03-08 15:47:43 +02:00

69 lines
2.5 KiB
Lua

local hs = {}
local cnpgStatus = {
["Cluster in healthy state"] = "Healthy",
["Setting up primary"] = "Progressing",
["Creating a new replica"] = "Progressing",
["Upgrading cluster"] = "Progressing",
["Waiting for the instances to become active"] = "Progressing",
["Promoting to primary cluster"] = "Progressing",
["Switchover in progress"] = "Degraded",
["Failing over"] = "Degraded",
["Upgrading Postgres major version"] = "Degraded",
["Cluster upgrade delayed"] = "Degraded",
["Waiting for user action"] = "Degraded",
["Primary instance is being restarted in-place"] = "Degraded",
["Primary instance is being restarted without a switchover"] = "Degraded",
["Cluster cannot execute instance online upgrade due to missing architecture binary"] = "Degraded",
["Online upgrade in progress"] = "Degraded",
["Applying configuration"] = "Degraded",
["Unable to create required cluster objects"] = "Suspended",
["Cluster cannot proceed to reconciliation due to an unknown plugin being required"] = "Suspended",
["Cluster has incomplete or invalid image catalog"] = "Suspended",
["Cluster is unrecoverable and needs manual intervention"] = "Suspended",
}
function hibernating(obj)
for i, condition in pairs(obj.status.conditions) do
if condition.type == "cnpg.io/hibernation" then
return condition
end
end
return nil
end
-- Check if reconciliation is suspended, since this is an explicit user action we return the "suspended" status immediately
if obj.metadata and obj.metadata.annotations and obj.metadata.annotations["cnpg.io/reconciliationLoop"] == "disabled" then
hs.status = "Suspended"
hs.message = "Cluster reconciliation is suspended"
return hs
end
if obj.status ~= nil and obj.status.conditions ~= nil then
local hibernation = hibernating(obj)
if hibernation ~= nil then
if hibernation.status == "True" then
hs.status = "Suspended"
hs.message = hibernation.message
return hs
else
hs.status = "Degraded"
hs.message = hibernation.message
return hs
end
end
statusState = cnpgStatus[obj.status.phase]
if statusState ~= nil then
hs.status = statusState
hs.message = obj.status.phaseReason
return hs
else
hs.status = "Unknown"
hs.message = obj.status.phaseReason
return hs
end
end
hs.status = "Progressing"
hs.message = obj.status.phaseReason
return hs