Search in sources :

Example 31 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project fabric8-maven-plugin by fabric8io.

the class DebugMojo method enableDebugging.

private boolean enableDebugging(HasMetadata entity, PodTemplateSpec template) {
    if (template != null) {
        PodSpec podSpec = template.getSpec();
        if (podSpec != null) {
            List<Container> containers = podSpec.getContainers();
            boolean enabled = false;
            for (int i = 0; i < containers.size(); i++) {
                Container container = containers.get(i);
                List<EnvVar> env = container.getEnv();
                if (env == null) {
                    env = new ArrayList<>();
                }
                remoteDebugPort = KubernetesResourceUtil.getEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_PORT, DebugConstants.ENV_VAR_JAVA_DEBUG_PORT_DEFAULT);
                if (KubernetesResourceUtil.setEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG, "true")) {
                    container.setEnv(env);
                    enabled = true;
                }
                if (KubernetesResourceUtil.setEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_SUSPEND, String.valueOf(debugSuspend))) {
                    container.setEnv(env);
                    enabled = true;
                }
                List<ContainerPort> ports = container.getPorts();
                if (ports == null) {
                    ports = new ArrayList<>();
                }
                if (KubernetesResourceUtil.addPort(ports, remoteDebugPort, "debug", log)) {
                    container.setPorts(ports);
                    enabled = true;
                }
                if (debugSuspend) {
                    // Setting a random session value to force pod restart
                    this.debugSuspendValue = String.valueOf(new Random().nextLong());
                    KubernetesResourceUtil.setEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_SESSION, this.debugSuspendValue);
                    container.setEnv(env);
                    if (container.getReadinessProbe() != null) {
                        log.info("Readiness probe will be disabled on " + getKind(entity) + " " + getName(entity) + " to allow attaching a remote debugger during suspension");
                        container.setReadinessProbe(null);
                    }
                    enabled = true;
                } else {
                    if (KubernetesResourceUtil.removeEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_SESSION)) {
                        container.setEnv(env);
                        enabled = true;
                    }
                }
            }
            if (enabled) {
                log.info("Enabling debug on " + getKind(entity) + " " + getName(entity));
                return true;
            }
        }
    }
    return false;
}
Also used : Container(io.fabric8.kubernetes.api.model.Container) Random(java.util.Random) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) ContainerPort(io.fabric8.kubernetes.api.model.ContainerPort) EnvVar(io.fabric8.kubernetes.api.model.EnvVar)

Example 32 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project fabric8-maven-plugin by fabric8io.

the class DebugMojo method podHasEnvVarValue.

private boolean podHasEnvVarValue(Pod pod, String envVarName, String envVarValue) {
    PodSpec spec = pod.getSpec();
    if (spec != null) {
        List<Container> containers = spec.getContainers();
        if (containers != null && !containers.isEmpty()) {
            Container container = containers.get(0);
            List<EnvVar> env = container.getEnv();
            if (env != null) {
                for (EnvVar envVar : env) {
                    if (Objects.equal(envVar.getName(), envVarName) && Objects.equal(envVar.getValue(), envVarValue)) {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}
Also used : Container(io.fabric8.kubernetes.api.model.Container) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) EnvVar(io.fabric8.kubernetes.api.model.EnvVar)

Example 33 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project fabric8-maven-plugin by fabric8io.

the class KubernetesResourceUtil method mergePodSpec.

public static void mergePodSpec(PodSpecBuilder builder, PodSpec defaultPodSpec, String defaultName) {
    List<Container> containers = builder.buildContainers();
    List<Container> defaultContainers = defaultPodSpec.getContainers();
    int size = defaultContainers.size();
    if (size > 0) {
        if (containers == null || containers.isEmpty()) {
            builder.addToContainers(defaultContainers.toArray(new Container[size]));
        } else {
            int idx = 0;
            for (Container defaultContainer : defaultContainers) {
                Container container;
                if (idx < containers.size()) {
                    container = containers.get(idx);
                } else {
                    container = new Container();
                    containers.add(container);
                }
                mergeSimpleFields(container, defaultContainer);
                List<EnvVar> defaultEnv = defaultContainer.getEnv();
                if (defaultEnv != null) {
                    for (EnvVar envVar : defaultEnv) {
                        ensureHasEnv(container, envVar);
                    }
                }
                List<ContainerPort> defaultPorts = defaultContainer.getPorts();
                if (defaultPorts != null) {
                    for (ContainerPort port : defaultPorts) {
                        ensureHasPort(container, port);
                    }
                }
                if (container.getReadinessProbe() == null) {
                    container.setReadinessProbe(defaultContainer.getReadinessProbe());
                }
                if (container.getLivenessProbe() == null) {
                    container.setLivenessProbe(defaultContainer.getLivenessProbe());
                }
                if (container.getSecurityContext() == null) {
                    container.setSecurityContext(defaultContainer.getSecurityContext());
                }
                idx++;
            }
            builder.withContainers(containers);
        }
    } else if (!containers.isEmpty()) {
        // lets default the container name if there's none specified in the custom yaml file
        Container container = containers.get(0);
        if (isNullOrBlank(container.getName())) {
            container.setName(defaultName);
        }
        builder.withContainers(containers);
    }
}
Also used : Container(io.fabric8.kubernetes.api.model.Container) ContainerPort(io.fabric8.kubernetes.api.model.ContainerPort) EnvVar(io.fabric8.kubernetes.api.model.EnvVar)

Example 34 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project fabric8-maven-plugin by fabric8io.

the class KubernetesResourceUtil method ensureHasEnv.

private static void ensureHasEnv(Container container, EnvVar envVar) {
    List<EnvVar> envVars = container.getEnv();
    if (envVars == null) {
        envVars = new ArrayList<>();
        container.setEnv(envVars);
    }
    for (EnvVar var : envVars) {
        if (Objects.equals(var.getName(), envVar.getName())) {
            // lets replace the object so that we can update the value or valueFrom
            envVars.remove(var);
            envVars.add(envVar);
            return;
        }
    }
    envVars.add(envVar);
}
Also used : EnvVar(io.fabric8.kubernetes.api.model.EnvVar)

Example 35 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project fabric8-maven-plugin by fabric8io.

the class KubernetesResourceUtil method setEnvVarNoOverride.

/**
 * Try to set an environment variable in the list or return the old value
 * if present and different from the current one.
 *
 * Environment variables will not be overridden.
 *
 * @param envVarList the list of environment variables
 * @param name the environment variable
 * @param value the value to set
 * @return the old value, if present, or null
 */
public static EnvVar setEnvVarNoOverride(List<EnvVar> envVarList, String name, String value) {
    for (EnvVar envVar : envVarList) {
        String envVarName = envVar.getName();
        if (io.fabric8.utils.Objects.equal(name, envVarName)) {
            String oldValue = envVar.getValue();
            if (io.fabric8.utils.Objects.equal(value, oldValue)) {
                // identical values
                return null;
            }
            return envVar;
        }
    }
    EnvVar env = new EnvVarBuilder().withName(name).withValue(value).build();
    envVarList.add(env);
    return null;
}
Also used : EnvVar(io.fabric8.kubernetes.api.model.EnvVar) EnvVarBuilder(io.fabric8.kubernetes.api.model.EnvVarBuilder)

Aggregations

EnvVar (io.fabric8.kubernetes.api.model.EnvVar)51 ArrayList (java.util.ArrayList)15 Test (org.junit.Test)15 ContainerPortBuilder (io.fabric8.kubernetes.api.model.ContainerPortBuilder)11 EnvVarBuilder (io.fabric8.kubernetes.api.model.EnvVarBuilder)10 Deployment (io.fabric8.kubernetes.api.model.apps.Deployment)10 HashMap (java.util.HashMap)10 Container (io.fabric8.kubernetes.api.model.Container)9 ContainerPort (io.fabric8.kubernetes.api.model.ContainerPort)9 ServicePortBuilder (io.fabric8.kubernetes.api.model.ServicePortBuilder)9 File (java.io.File)8 List (java.util.List)8 IntOrString (io.fabric8.kubernetes.api.model.IntOrString)7 Pod (io.fabric8.kubernetes.api.model.Pod)7 ServiceSpecBuilder (io.fabric8.kubernetes.api.model.ServiceSpecBuilder)7 Map (java.util.Map)7 Test (org.testng.annotations.Test)7 LinkedList (java.util.LinkedList)6 ContainerBuilder (io.fabric8.kubernetes.api.model.ContainerBuilder)5 VolumeMount (io.fabric8.kubernetes.api.model.VolumeMount)5