backend/src/main/java/dev/dinauer/PodResource.java

63 lines
1.7 KiB
Java

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;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import io.quarkus.runtime.Startup;
import io.quarkus.security.Authenticated;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.security.RolesAllowed;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import java.util.List;
import java.util.Optional;
@Path("/pods")
@Startup
@ApplicationScoped
@Authenticated
public class PodResource
{
@Inject
ClientProvider clientProvider;
@Inject
PodService podService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Pod> getPods(@QueryParam("namespace") String namespace)
{
if(namespace != null && !namespace.isBlank())
{
return podService.findByNamespace(namespace);
}
return podService.findAll();
}
@DELETE
@Produces
@Consumes
@Path("/{pod-id}")
@RolesAllowed({"admin", "maintainer"})
public void deletePod(@PathParam("pod-id") String id)
{
Optional<Pod> podOptional = podService.findPodById(id);
if(podOptional.isPresent())
{
Pod pod = podOptional.get();
clientProvider.getClient()
.pods()
.inNamespace(pod.getMetadata().getNamespace())
.withName(pod.getMetadata().getName())
.delete();
}
}
}