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 io.smallrye.common.annotation.Blocking; 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 org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import java.util.Optional; @Path("/pods") @Startup @ApplicationScoped @Blocking @Authenticated public class PodResource { private static final Logger LOG = LoggerFactory.getLogger(PodResource.class); @Inject ClientProvider clientProvider; @Inject PodService podService; @GET @Produces(MediaType.APPLICATION_JSON) public List 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 podOptional = podService.findPodById(id); if(podOptional.isPresent()) { Pod pod = podOptional.get(); clientProvider.getClient() .pods() .inNamespace(pod.getMetadata().getNamespace()) .withName(pod.getMetadata().getName()) .delete(); } } }