💥 Switch to building client by config path

This commit is contained in:
Andreas Dinauer 2025-06-06 20:14:11 +02:00
parent 32e7e4905d
commit d55e367424
9 changed files with 47 additions and 65 deletions

View File

@ -1,10 +1,12 @@
package dev.dinauer;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import io.quarkus.security.Authenticated;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
@ -17,13 +19,8 @@ import java.util.List;
@Authenticated
public class IngressResource
{
private KubernetesClient client;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@Inject
ClientProvider clientProvider;
@GET
@Produces(MediaType.APPLICATION_JSON)
@ -31,8 +28,8 @@ public class IngressResource
{
if(namespace != null)
{
return client.network().v1().ingresses().inNamespace(namespace).list().getItems();
return clientProvider.getClient().network().v1().ingresses().inNamespace(namespace).list().getItems();
}
return client.network().v1().ingresses().list().getItems();
return clientProvider.getClient().network().v1().ingresses().list().getItems();
}
}

View File

@ -1,6 +1,7 @@
package dev.dinauer;
import dev.dinauer.service.PodService;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
@ -19,17 +20,12 @@ import java.util.Optional;
@Authenticated
public class LogResource
{
private KubernetesClient client;
@Inject
ClientProvider clientProvider;
@Inject
PodService podService;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getLogs(@PathParam("pod-id") String podId)
@ -38,7 +34,7 @@ public class LogResource
if(podOptional.isPresent())
{
Pod pod = podOptional.get();
return List.of(client.pods().inNamespace(pod.getMetadata().getNamespace()).withName(pod.getMetadata().getName()).getLog().split("\\r?\\n"));
return List.of(clientProvider.getClient().pods().inNamespace(pod.getMetadata().getNamespace()).withName(pod.getMetadata().getName()).getLog().split("\\r?\\n"));
}
throw new NotFoundException();
}

View File

@ -1,11 +1,13 @@
package dev.dinauer;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.Namespace;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import io.quarkus.security.Authenticated;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
@ -18,18 +20,13 @@ import java.util.List;
@Authenticated
public class NamespaceResource
{
private KubernetesClient client;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@Inject
ClientProvider clientProvider;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Namespace> getNamespaces()
{
return client.namespaces().list().getItems();
return clientProvider.getClient().namespaces().list().getItems();
}
}

View File

@ -1,11 +1,13 @@
package dev.dinauer;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.Node;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import io.quarkus.security.Authenticated;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
@ -22,13 +24,8 @@ import java.util.List;
@Authenticated
public class NodeResource
{
private KubernetesClient client;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@Inject
ClientProvider clientProvider;
@GET
@Produces(MediaType.APPLICATION_JSON)
@ -43,7 +40,7 @@ public class NodeResource
if(parts.length == 5)
{
String name = parts[0];
Node node = client.nodes().withName(name).get();
Node node = clientProvider.getClient().nodes().withName(name).get();
Integer absoluteCpu = extractInteger(parts[1]);
Integer relativeCpu = extractInteger(parts[2]);
Integer absoluteMemory = extractMemory(parts[3]);

View File

@ -1,6 +1,7 @@
package dev.dinauer;
import dev.dinauer.service.PodService;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.KubernetesClient;
@ -23,17 +24,12 @@ import java.util.Optional;
@Authenticated
public class PodResource
{
private KubernetesClient client;
@Inject
ClientProvider clientProvider;
@Inject
PodService podService;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Pod> getPods(@QueryParam("namespace") String namespace)
@ -56,7 +52,8 @@ public class PodResource
if(podOptional.isPresent())
{
Pod pod = podOptional.get();
client.pods()
clientProvider.getClient()
.pods()
.inNamespace(pod.getMetadata().getNamespace())
.withName(pod.getMetadata().getName())
.delete();

View File

@ -1,5 +1,6 @@
package dev.dinauer;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.client.KubernetesClient;
@ -8,6 +9,7 @@ import io.quarkus.runtime.Startup;
import io.quarkus.security.Authenticated;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
@ -23,13 +25,8 @@ import java.util.Optional;
@Authenticated
public class ServiceResource
{
private KubernetesClient client;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@Inject
ClientProvider clientProvider;
@GET
@Produces(MediaType.APPLICATION_JSON)
@ -37,8 +34,8 @@ public class ServiceResource
{
if(namespace.isPresent())
{
return client.services().inNamespace(namespace.get()).list().getItems();
return clientProvider.getClient().services().inNamespace(namespace.get()).list().getItems();
}
return client.services().list().getItems();
return clientProvider.getClient().services().list().getItems();
}
}

View File

@ -1,10 +1,12 @@
package dev.dinauer.service;
import dev.dinauer.utils.ClientProvider;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.List;
import java.util.Optional;
@ -12,27 +14,22 @@ import java.util.Optional;
@ApplicationScoped
public class PodService
{
private KubernetesClient client;
@PostConstruct
void init()
{
client = new KubernetesClientBuilder().build();
}
@Inject
ClientProvider clientProvider;
public List<Pod> findByNamespace(String namespace)
{
return client.pods().inNamespace(namespace).list().getItems();
return clientProvider.getClient().pods().inNamespace(namespace).list().getItems();
}
public List<Pod> findAll()
{
return client.pods().list().getItems();
return clientProvider.getClient().pods().list().getItems();
}
public Optional<Pod> findPodById(String id)
{
for(Pod pod : client.pods().list().getItems())
for(Pod pod : clientProvider.getClient().pods().list().getItems())
{
if(pod.getMetadata().getUid().equals(id))
{

View File

@ -1,18 +1,21 @@
package dev.dinauer.utils;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import java.util.List;
import java.io.File;
@ApplicationScoped
public class ClientProvider
{
@ConfigProperty(name = "dev.dinauer.kobooboo.kubeconfigs.dir")
String configDir;
String configFilePath;
public void getClient()
public KubernetesClient getClient()
{
return new KubernetesClientBuilder().withConfig(Config.fromKubeconfig(new File(configFilePath))).build();
}
}

View File

@ -3,8 +3,9 @@ quarkus.http.root-path=/api
%dev.quarkus.http.cors.origins=/.*/
%dev.quarkus.http.port=9090
dev.dinauer.kobooboo.kubeconfigs.dir=/var/lib/kubooboo/configs
dev.dinauer.kobooboo.kubeconfigs.dir=/var/lib/kubooboo/config
dev.dinauer.kubooboo.work.dir=/var/lib/kubooboo/work
%dev.dev.dinauer.kobooboo.kubeconfigs.dir=C:\\Users\\andre\\.kube\\config
%dev.dev.dinauer.kubooboo.work.dir=C:\\Users\\andre\\Documents\\dev\\kubeman\\backend\\src\\main\\resources\\dev
# Keys