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