argo-cd/resource_customizations/nmstate.io/NodeNetworkConfigurationPolicy/health.lua

60 lines
2.2 KiB
Lua
Raw Normal View History

-- NodeNetworkConfigurationPolicy (NNCP) is a cluster-scoped resource that defines
-- the desired network configuration for nodes in a Kubernetes cluster.
--
-- Documentation:
-- User guide (configuration & conditions): https://github.com/nmstate/kubernetes-nmstate/blob/main/docs/user-guide/102-configuration.md
-- Troubleshooting (failure states): https://github.com/nmstate/kubernetes-nmstate/blob/main/docs/user-guide/103-troubleshooting.md
--
-- Condition types and reasons are defined in:
-- https://github.com/nmstate/kubernetes-nmstate/blob/main/api/shared/nodenetworkconfigurationpolicy_types.go
--
-- NNCP exposes three active condition types:
-- Available (True) - All matched nodes successfully configured (SuccessfullyConfigured)
-- Degraded (True) - One or more nodes failed to configure (FailedToConfigure)
-- Progressing (True) - Configuration is being applied across nodes (ConfigurationProgressing)
-- Ignored (True) - Policy matches no nodes (NoMatchingNode)
--
-- ArgoCD health mapping:
-- Available=True => Healthy
-- Degraded=True => Degraded
-- Progressing=True => Progressing
-- Ignored=True => Suspended (policy intentionally matches no nodes)
-- No status yet => Progressing
local hs = {}
if obj.status ~= nil then
if obj.status.conditions ~= nil then
for i, condition in ipairs(obj.status.conditions) do
if condition.status == "True" then
local msg = condition.reason
if condition.message ~= nil and condition.message ~= "" then
msg = condition.reason .. ": " .. condition.message
end
if condition.type == "Available" then
hs.status = "Healthy"
hs.message = msg
return hs
end
if condition.type == "Degraded" then
hs.status = "Degraded"
hs.message = msg
return hs
end
if condition.type == "Progressing" then
hs.status = "Progressing"
hs.message = msg
return hs
end
if condition.type == "Ignored" then
hs.status = "Suspended"
hs.message = msg
return hs
end
end
end
end
end
hs.status = "Progressing"
hs.message = "Waiting for policy to be applied"
return hs