package dev.dinauer; import dev.dinauer.service.PodService; import dev.dinauer.utils.ClientProvider; import io.fabric8.kubernetes.api.model.Pod; import io.quarkus.runtime.Startup; import io.quarkus.security.Authenticated; import io.smallrye.common.annotation.Blocking; 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.ArrayList; import java.util.List; @Path("/pods") @Startup @ApplicationScoped public class PodResource { @Inject PodService podService; @Inject ProcessRunner processRunner; @Inject ClientProvider clientProvider; @GET @Produces(MediaType.APPLICATION_JSON) @Consumes @Blocking @Path("/{namespace}/{name}/env") public List getEnv(@PathParam("namespace") String namespace, @PathParam("name") String name) { return getVars(podService.findByNameAndNamespace(name, namespace)); } private List getVars(Pod pod) { List result = new ArrayList<>(); List lines = processRunner.runToLines(String.format("kubectl exec -it %s -n %s -- env", pod.getMetadata().getName(), pod.getMetadata().getNamespace())); for (String line : lines) { int indexOfFirstEquals = line.indexOf("="); if (indexOfFirstEquals != -1) { result.add(new EnvVar(line.substring(0, indexOfFirstEquals), line.substring(indexOfFirstEquals + 1))); } } return result; } @DELETE @Path("/{namespace}/{name}") public void delete(@PathParam("namespace") String namespace, @PathParam("name") String name) { podService.delete(name, namespace); } }