Skip to content

Commit de84871

Browse files
authored
Support CNPG clusters (#666)
1 parent 17d3778 commit de84871

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

onyxia-api/src/main/java/fr/insee/onyxia/api/services/impl/HelmReleaseHealthResolver.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,36 @@
11
package fr.insee.onyxia.api.services.impl;
22

33
import fr.insee.onyxia.model.service.HealthCheckResult;
4+
import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
45
import io.fabric8.kubernetes.api.model.HasMetadata;
56
import io.fabric8.kubernetes.api.model.apps.DaemonSet;
67
import io.fabric8.kubernetes.api.model.apps.Deployment;
78
import io.fabric8.kubernetes.api.model.apps.StatefulSet;
89
import io.fabric8.kubernetes.client.KubernetesClient;
10+
import io.fabric8.kubernetes.client.dsl.base.ResourceDefinitionContext;
911
import java.io.ByteArrayInputStream;
1012
import java.io.IOException;
1113
import java.io.InputStream;
1214
import java.nio.charset.StandardCharsets;
1315
import java.util.ArrayList;
16+
import java.util.Collections;
1417
import java.util.List;
18+
import java.util.Map;
1519
import org.slf4j.Logger;
1620
import org.slf4j.LoggerFactory;
1721

1822
public final class HelmReleaseHealthResolver {
1923

2024
private static final Logger LOGGER = LoggerFactory.getLogger(HelmReleaseHealthResolver.class);
2125

26+
private static final ResourceDefinitionContext CNPG_CLUSTER =
27+
new ResourceDefinitionContext.Builder()
28+
.withGroup("postgresql.cnpg.io")
29+
.withVersion("v1")
30+
.withPlural("clusters")
31+
.withNamespaced(true)
32+
.build();
33+
2234
static List<HealthCheckResult> checkHelmReleaseHealth(
2335
String namespace, String manifest, KubernetesClient kubernetesClient) {
2436
// Identify the Helm release secret
@@ -39,6 +51,7 @@ private static List<HealthCheckResult> checkHealth(
3951
for (HasMetadata resource : resources) {
4052
String name = resource.getMetadata().getName();
4153
String kind = resource.getKind();
54+
String apiVersion = resource.getApiVersion();
4255
HealthCheckResult result = new HealthCheckResult();
4356
result.setName(name);
4457
result.setKind(kind);
@@ -96,6 +109,25 @@ private static List<HealthCheckResult> checkHealth(
96109
details.setReady(daemonSet.getStatus().getNumberReady());
97110
}
98111
break;
112+
case "Cluster":
113+
if (!"postgresql.cnpg.io/v1".equals(apiVersion)) continue;
114+
GenericKubernetesResource raw =
115+
kubernetesClient
116+
.genericKubernetesResources(CNPG_CLUSTER)
117+
.inNamespace(namespace)
118+
.withName(name)
119+
.get();
120+
if (raw.getAdditionalProperties().get("status") instanceof Map) {
121+
Map<String, Object> status =
122+
Collections.unmodifiableMap(
123+
(Map<String, Object>)
124+
raw.getAdditionalProperties().get("status"));
125+
details.setDesired(
126+
Integer.parseInt(status.get("instances").toString()));
127+
details.setReady(
128+
Integer.parseInt(status.get("readyInstances").toString()));
129+
}
130+
break;
99131
default:
100132
continue;
101133
}

0 commit comments

Comments
 (0)