diff --git a/resource_customizations/druid.apache.org/Druid/health.lua b/resource_customizations/druid.apache.org/Druid/health.lua new file mode 100644 index 0000000000000..c61e41e786524 --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/health.lua @@ -0,0 +1,35 @@ +local hs = {} + +if obj.status == nil then + hs.status = "Progressing" + hs.message = "Waiting for Druid status" + return hs +end + +if obj.status.druidNodeStatus ~= nil then + local nodeStatus = obj.status.druidNodeStatus + + if nodeStatus.druidNodeConditionStatus == "False" then + hs.status = "Degraded" + hs.message = nodeStatus.reason or "Druid cluster is not ready" + return hs + end + + if nodeStatus.druidNodeConditionType == "DruidClusterReady" and nodeStatus.druidNodeConditionStatus == "True" then + hs.status = "Healthy" + hs.message = nodeStatus.reason or "Druid cluster is ready" + return hs + end + + if nodeStatus.druidNodeConditionType == "DruidNodeErrorState" then + hs.status = "Degraded" + local podName = nodeStatus.druidNode or "unknown" + local reason = nodeStatus.reason or "Pod is not ready" + hs.message = "Pod " .. podName .. ": " .. reason + return hs + end +end + +hs.status = "Progressing" +hs.message = "Druid cluster is being provisioned" +return hs diff --git a/resource_customizations/druid.apache.org/Druid/health_test.yaml b/resource_customizations/druid.apache.org/Druid/health_test.yaml new file mode 100644 index 0000000000000..017db03de242a --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/health_test.yaml @@ -0,0 +1,25 @@ +tests: +- healthStatus: + status: Healthy + message: All Druid Nodes are in Ready Condition + inputPath: testdata/healthy.yaml + +- healthStatus: + status: Degraded + message: "Pod druid-test-historicals-0: ContainersNotReady" + inputPath: testdata/degraded.yaml + +- healthStatus: + status: Degraded + message: Some pods are not ready + inputPath: testdata/degraded_condition_false.yaml + +- healthStatus: + status: Progressing + message: Waiting for Druid status + inputPath: testdata/progressing.yaml + +- healthStatus: + status: Progressing + message: Druid cluster is being provisioned + inputPath: testdata/progressing_with_partial_status.yaml diff --git a/resource_customizations/druid.apache.org/Druid/testdata/current-error.yaml b/resource_customizations/druid.apache.org/Druid/testdata/current-error.yaml new file mode 100644 index 0000000000000..d22f57a65bc92 --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/current-error.yaml @@ -0,0 +1,11 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-sandbox + namespace: druid-sandbox +status: + druidNodeStatus: + druidNode: druid-druid-sandbox-routers-676fccd99d-sgs97 + druidNodeConditionStatus: "True" + druidNodeConditionType: DruidNodeErrorState + reason: ContainersNotReady diff --git a/resource_customizations/druid.apache.org/Druid/testdata/degraded.yaml b/resource_customizations/druid.apache.org/Druid/testdata/degraded.yaml new file mode 100644 index 0000000000000..cdfb5bc92aefa --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/degraded.yaml @@ -0,0 +1,27 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-test + namespace: druid-test +spec: + image: apache/druid:latest + nodes: + coordinators: + kind: Deployment + nodeType: coordinator + replicas: 1 + druid.port: 8081 + historicals: + kind: StatefulSet + nodeType: historical + replicas: 1 + druid.port: 8083 +status: + druidNodeStatus: + druidNode: druid-test-historicals-0 + druidNodeConditionStatus: "True" + druidNodeConditionType: DruidNodeErrorState + reason: ContainersNotReady + pods: + - druid-test-coordinators-0 + - druid-test-historicals-0 diff --git a/resource_customizations/druid.apache.org/Druid/testdata/degraded_condition_false.yaml b/resource_customizations/druid.apache.org/Druid/testdata/degraded_condition_false.yaml new file mode 100644 index 0000000000000..880e9aef719c9 --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/degraded_condition_false.yaml @@ -0,0 +1,21 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-test + namespace: druid-test +spec: + image: apache/druid:latest + nodes: + coordinators: + kind: Deployment + nodeType: coordinator + replicas: 1 + druid.port: 8081 +status: + druidNodeStatus: + druidNode: All + druidNodeConditionStatus: "False" + druidNodeConditionType: DruidClusterReady + reason: Some pods are not ready + pods: + - druid-test-coordinators-0 diff --git a/resource_customizations/druid.apache.org/Druid/testdata/healthy.yaml b/resource_customizations/druid.apache.org/Druid/testdata/healthy.yaml new file mode 100644 index 0000000000000..90acdef021378 --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/healthy.yaml @@ -0,0 +1,33 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-test + namespace: druid-test +spec: + image: apache/druid:latest + nodes: + coordinators: + kind: Deployment + nodeType: coordinator + replicas: 1 + druid.port: 8081 + brokers: + kind: Deployment + nodeType: broker + replicas: 1 + druid.port: 8082 + historicals: + kind: StatefulSet + nodeType: historical + replicas: 1 + druid.port: 8083 +status: + druidNodeStatus: + druidNode: All + druidNodeConditionStatus: "True" + druidNodeConditionType: DruidClusterReady + reason: All Druid Nodes are in Ready Condition + pods: + - druid-test-coordinators-0 + - druid-test-brokers-0 + - druid-test-historicals-0 diff --git a/resource_customizations/druid.apache.org/Druid/testdata/progressing.yaml b/resource_customizations/druid.apache.org/Druid/testdata/progressing.yaml new file mode 100644 index 0000000000000..9174040c0aadb --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/progressing.yaml @@ -0,0 +1,13 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-test + namespace: druid-test +spec: + image: apache/druid:latest + nodes: + coordinators: + kind: Deployment + nodeType: coordinator + replicas: 1 + druid.port: 8081 diff --git a/resource_customizations/druid.apache.org/Druid/testdata/progressing_with_partial_status.yaml b/resource_customizations/druid.apache.org/Druid/testdata/progressing_with_partial_status.yaml new file mode 100644 index 0000000000000..0dbb25ff15fbb --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/progressing_with_partial_status.yaml @@ -0,0 +1,16 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-test + namespace: druid-test +spec: + image: apache/druid:latest + nodes: + coordinators: + kind: Deployment + nodeType: coordinator + replicas: 1 + druid.port: 8081 +status: + pods: + - druid-test-coordinators-0 diff --git a/resource_customizations/druid.apache.org/Druid/testdata/replica_mismatch.yaml b/resource_customizations/druid.apache.org/Druid/testdata/replica_mismatch.yaml new file mode 100644 index 0000000000000..b8141e409d265 --- /dev/null +++ b/resource_customizations/druid.apache.org/Druid/testdata/replica_mismatch.yaml @@ -0,0 +1,21 @@ +apiVersion: druid.apache.org/v1alpha1 +kind: Druid +metadata: + name: druid-test + namespace: druid-test +spec: + image: apache/druid:latest + nodes: + historicals: + kind: StatefulSet + nodeType: historical + replicas: 3 + druid.port: 8083 +status: + druidNodeStatus: + druidNode: All + druidNodeConditionStatus: "True" + druidNodeConditionType: DruidClusterReady + reason: All Druid Nodes are in Ready Condition + pods: + - druid-test-historicals-0