From fed60f4d2759e995702ec66d20696706e4382270 Mon Sep 17 00:00:00 2001 From: David Kwon Date: Thu, 19 May 2022 21:56:44 +0000 Subject: [PATCH] Read user namespace from file Signed-off-by: David Kwon --- .../finder/DevWorkspaceFinderImpl.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/backend-base/src/main/java/org/eclipse/che/incubator/workspace/telemetry/finder/DevWorkspaceFinderImpl.java b/backend-base/src/main/java/org/eclipse/che/incubator/workspace/telemetry/finder/DevWorkspaceFinderImpl.java index 69f4122..a8f0865 100644 --- a/backend-base/src/main/java/org/eclipse/che/incubator/workspace/telemetry/finder/DevWorkspaceFinderImpl.java +++ b/backend-base/src/main/java/org/eclipse/che/incubator/workspace/telemetry/finder/DevWorkspaceFinderImpl.java @@ -12,12 +12,17 @@ package org.eclipse.che.incubator.workspace.telemetry.finder; import io.fabric8.kubernetes.api.model.GenericKubernetesResource; +import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.DefaultKubernetesClient; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.base.CustomResourceDefinitionContext; import org.slf4j.Logger; import javax.enterprise.context.ApplicationScoped; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; import java.util.concurrent.atomic.AtomicReference; import static org.slf4j.LoggerFactory.getLogger; @@ -29,6 +34,8 @@ public class DevWorkspaceFinderImpl implements DevWorkspaceFinder { private static final String GROUP = "workspace.devfile.io"; private static final String VERSION = "v1alpha2"; private static final String SCOPE = "Namespaced"; + private static final String DEVWORKSPACE_NAMESPACE = "DEVWORKSPACE_NAMESPACE"; + private static final String KUBERNETES_NAMESPACE_PATH = Config.KUBERNETES_NAMESPACE_PATH; public GenericKubernetesResource findDevWorkspace(String devworkspaceId) { CustomResourceDefinitionContext devworkspaceContext = new CustomResourceDefinitionContext.Builder() @@ -39,10 +46,18 @@ public GenericKubernetesResource findDevWorkspace(String devworkspaceId) { .build(); final AtomicReference devworkspace = new AtomicReference<>(); - String clientNamespace = null; + String namespace = null; try (KubernetesClient client = new DefaultKubernetesClient()) { - clientNamespace = client.getNamespace(); - client.genericKubernetesResources(devworkspaceContext).inNamespace(clientNamespace).list().getItems().forEach( + + namespace = client.getNamespace(); + if (namespace == null) { + namespace = System.getenv(DEVWORKSPACE_NAMESPACE); + } + if (namespace == null) { + namespace = getNamespaceFromServiceAccount(); + } + + client.genericKubernetesResources(devworkspaceContext).inNamespace(namespace).list().getItems().forEach( dw -> { String dwId = dw.get("status", "devworkspaceId"); if (devworkspaceId.equals(dwId)) { @@ -50,11 +65,27 @@ public GenericKubernetesResource findDevWorkspace(String devworkspaceId) { } } ); + } catch (IOException e) { + LOG.warn("Failed to read namespace in {}", KUBERNETES_NAMESPACE_PATH, e); } catch (Exception e) { - LOG.warn("Failed to find devworkspace with id: {} in namespace: {}", devworkspaceId, clientNamespace, e); + LOG.warn("Failed to find devworkspace with id: {} in namespace: {}", devworkspaceId, namespace, e); } return devworkspace.get(); } + private String getNamespaceFromServiceAccount() throws IOException { + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(KUBERNETES_NAMESPACE_PATH)); + String namespace = br.readLine(); + return namespace.strip(); + } catch (IOException e) { + throw e; + } finally { + if (br != null) { + br.close(); + } + } + } }