mirror of
https://github.com/hanzoai/deploy.git
synced 2026-10-07 08:44:50 +00:00
90 lines
2.2 KiB
Lua
90 lines
2.2 KiB
Lua
-- return true if degraded, along with the reason
|
|
function isDegraded(obj)
|
|
if obj.status == nil then
|
|
return false, ""
|
|
end
|
|
-- check phase=Failed, healthy condition failed
|
|
if obj.status.phase == "Failed" then
|
|
return true, obj.status.message
|
|
end
|
|
|
|
if obj.status.conditions ~= nil then
|
|
for i, condition in ipairs(obj.status.conditions) do
|
|
if condition.type == "ChildResourcesHealthy" and condition.status == "False" and condition.reason ~= "Progressing" then
|
|
return true, condition.message
|
|
end
|
|
end
|
|
end
|
|
|
|
return false, ""
|
|
end
|
|
|
|
function isProgressing(obj)
|
|
-- if there's no Status at all, we haven't been reconciled
|
|
if obj.status == nil then
|
|
return true, "Not yet reconciled"
|
|
end
|
|
|
|
if obj.metadata.generation ~= obj.status.observedGeneration then
|
|
return true, "Not yet reconciled"
|
|
end
|
|
|
|
-- if we are in the middle of an upgrade
|
|
if obj.status.upgradeInProgress ~= nil and obj.status.upgradeInProgress ~= "" or obj.status.phase == "Pending" then
|
|
return true, "Update in progress"
|
|
end
|
|
|
|
-- if the child is Progressing
|
|
if obj.status.conditions ~= nil then
|
|
for i, condition in ipairs(obj.status.conditions) do
|
|
if condition.type == "ChildResourcesHealthy" and condition.status == "False" and condition.reason == "Progressing" then
|
|
return true, "Child Progressing"
|
|
end
|
|
end
|
|
end
|
|
|
|
return false, ""
|
|
end
|
|
|
|
-- return true if healthy, along with the reason
|
|
function isHealthy(obj)
|
|
if obj.status == nil then
|
|
return false, ""
|
|
end
|
|
|
|
if obj.status.conditions ~= nil then
|
|
for i, condition in ipairs(obj.status.conditions) do
|
|
if condition.type == "ChildResourcesHealthy" and condition.status == "True" then
|
|
return true, "Healthy"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local hs = {}
|
|
|
|
|
|
progressing, reason = isProgressing(obj)
|
|
if progressing then
|
|
hs.status = "Progressing"
|
|
hs.message = reason
|
|
return hs
|
|
end
|
|
|
|
degraded, reason = isDegraded(obj)
|
|
if degraded then
|
|
hs.status = "Degraded"
|
|
hs.message = reason
|
|
return hs
|
|
end
|
|
|
|
healthy, reason = isHealthy(obj)
|
|
if healthy then
|
|
hs.status = "Healthy"
|
|
hs.message = reason
|
|
return hs
|
|
end
|
|
|
|
hs.status = "Unknown"
|
|
hs.message = "Unknown status"
|
|
return hs |