Search in sources :

Example 51 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project zalenium by zalando.

the class KubernetesContainerClient method createContainer.

@Override
public ContainerCreationStatus createContainer(String zaleniumContainerName, String image, Map<String, String> envVars, String nodePort) {
    String containerIdPrefix = String.format("%s-%s-", zaleniumAppName, nodePort);
    // Convert the environment variables into the Kubernetes format.
    List<EnvVar> flattenedEnvVars = envVars.entrySet().stream().map(e -> new EnvVar(e.getKey(), e.getValue(), null)).collect(Collectors.toList());
    Map<String, String> podSelector = new HashMap<>();
    PodConfiguration config = new PodConfiguration();
    config.setNodePort(nodePort);
    config.setClient(client);
    config.setContainerIdPrefix(containerIdPrefix);
    config.setImage(image);
    config.setEnvVars(flattenedEnvVars);
    Map<String, String> labels = new HashMap<>();
    labels.putAll(createdByZaleniumMap);
    labels.putAll(appLabelMap);
    labels.putAll(podSelector);
    config.setLabels(labels);
    config.setMountedSharedFoldersMap(mountedSharedFoldersMap);
    config.setHostAliases(hostAliases);
    config.setNodeSelector(nodeSelector);
    config.setPodLimits(seleniumPodLimits);
    config.setPodRequests(seleniumPodRequests);
    DoneablePod doneablePod = createDoneablePod.apply(config);
    // Create the container
    Pod createdPod = doneablePod.done();
    String containerName = createdPod.getMetadata() == null ? containerIdPrefix : createdPod.getMetadata().getName();
    return new ContainerCreationStatus(true, containerName, nodePort);
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) Arrays(java.util.Arrays) StringUtils(org.apache.commons.lang.StringUtils) DoneablePod(io.fabric8.kubernetes.api.model.DoneablePod) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Environment(de.zalando.ep.zalenium.util.Environment) URL(java.net.URL) ContainerClientRegistration(de.zalando.ep.zalenium.container.ContainerClientRegistration) LoggerFactory(org.slf4j.LoggerFactory) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) InetAddress(java.net.InetAddress) HostAlias(io.fabric8.kubernetes.api.model.HostAlias) Map(java.util.Map) Response(okhttp3.Response) ExecListener(io.fabric8.kubernetes.client.dsl.ExecListener) ContainerClient(de.zalando.ep.zalenium.container.ContainerClient) Volume(io.fabric8.kubernetes.api.model.Volume) Logger(org.slf4j.Logger) Pod(io.fabric8.kubernetes.api.model.Pod) ExecWatch(io.fabric8.kubernetes.client.dsl.ExecWatch) UnknownHostException(java.net.UnknownHostException) Collectors(java.util.stream.Collectors) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) PodList(io.fabric8.kubernetes.api.model.PodList) KubernetesClient(io.fabric8.kubernetes.client.KubernetesClient) Optional(java.util.Optional) ContainerCreationStatus(de.zalando.ep.zalenium.container.ContainerCreationStatus) InputStream(java.io.InputStream) DoneablePod(io.fabric8.kubernetes.api.model.DoneablePod) Pod(io.fabric8.kubernetes.api.model.Pod) HashMap(java.util.HashMap) ContainerCreationStatus(de.zalando.ep.zalenium.container.ContainerCreationStatus) DoneablePod(io.fabric8.kubernetes.api.model.DoneablePod) EnvVar(io.fabric8.kubernetes.api.model.EnvVar)

Example 52 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project keycloak by keycloak.

the class PodTemplateTest method testEnvVarsAreMerged.

@Test
public void testEnvVarsAreMerged() {
    // Arrange
    var env = "KC_SOMETHING";
    var value = "some-value";
    var additionalPodTemplate = new PodTemplateSpecBuilder().withNewSpec().addNewContainer().addNewEnv().withName(env).withValue(value).endEnv().endContainer().endSpec().build();
    // Act
    var podTemplate = getDeployment(additionalPodTemplate).getSpec().getTemplate();
    // Assert
    var envVar = podTemplate.getSpec().getContainers().get(0).getEnv().stream().filter(e -> e.getName().equals(env)).findFirst().get();
    assertEquals(env, envVar.getName());
    assertEquals(value, envVar.getValue());
}
Also used : PodTemplateSpecBuilder(io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder) QuarkusTest(io.quarkus.test.junit.QuarkusTest) Test(org.junit.jupiter.api.Test)

Example 53 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project kubernetes by ballerinax.

the class EnvVarTest method combinedTest.

/**
 * Build bal file with deployment having a combination of environment variables.
 * @throws IOException Error when loading the generated yaml.
 * @throws InterruptedException Error when compiling the ballerina file.
 * @throws KubernetesPluginException Error when deleting the generated artifacts folder.
 */
@Test
public void combinedTest() throws IOException, InterruptedException, KubernetesPluginException, DockerTestException {
    Assert.assertEquals(KubernetesTestUtils.compileBallerinaFile(BAL_DIRECTORY, "combination.bal"), 0);
    // Check if docker image exists and correct
    validateDockerfile();
    validateDockerImage();
    // Validate deployment yaml
    File deploymentYAML = KUBERNETES_TARGET_PATH.resolve("combination_deployment.yaml").toFile();
    Assert.assertTrue(deploymentYAML.exists());
    Deployment deployment = KubernetesTestUtils.loadYaml(deploymentYAML);
    List<EnvVar> envVars = deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getEnv();
    Assert.assertEquals(envVars.size(), 5, "Invalid number of environment variables found.");
    Assert.assertEquals(envVars.get(0).getName(), "SPECIAL_LEVEL_KEY", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(0).getValueFrom().getConfigMapKeyRef().getName(), "special-config", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(0).getValueFrom().getConfigMapKeyRef().getKey(), "special.how", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(1).getName(), "MY_NODE_NAME", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(1).getValueFrom().getFieldRef().getFieldPath(), "spec.nodeName", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(2).getName(), "location", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(2).getValue(), "SL", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(3).getName(), "MY_CPU_REQUEST", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(3).getValueFrom().getResourceFieldRef().getContainerName(), "client", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(3).getValueFrom().getResourceFieldRef().getResource(), "requests.cpu", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(4).getName(), "SECRET_PASSWORD", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(4).getValueFrom().getSecretKeyRef().getName(), "test-secret", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(4).getValueFrom().getSecretKeyRef().getKey(), "password", "Invalid environment variable value found.");
    KubernetesUtils.deleteDirectory(KUBERNETES_TARGET_PATH);
    KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
    KubernetesTestUtils.deleteDockerImage(DOCKER_IMAGE);
}
Also used : Deployment(io.fabric8.kubernetes.api.model.apps.Deployment) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) File(java.io.File) Test(org.testng.annotations.Test)

Example 54 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project kubernetes by ballerinax.

the class EnvVarTest method resourceFieldRefTest.

/**
 * Build bal file with deployment having name and configMapKeyRef environment variables.
 * @throws IOException Error when loading the generated yaml.
 * @throws InterruptedException Error when compiling the ballerina file.
 * @throws KubernetesPluginException Error when deleting the generated artifacts folder.
 */
@Test
public void resourceFieldRefTest() throws IOException, InterruptedException, KubernetesPluginException, DockerTestException {
    Assert.assertEquals(KubernetesTestUtils.compileBallerinaFile(BAL_DIRECTORY, "resource_field_ref_value.bal"), 0);
    // Check if docker image exists and correct
    validateDockerfile();
    validateDockerImage();
    // Validate deployment yaml
    File deploymentYAML = KUBERNETES_TARGET_PATH.resolve("resource_field_ref_value_deployment.yaml").toFile();
    Assert.assertTrue(deploymentYAML.exists());
    Deployment deployment = KubernetesTestUtils.loadYaml(deploymentYAML);
    List<EnvVar> envVars = deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getEnv();
    Assert.assertEquals(envVars.size(), 2, "Invalid number of environment variables found.");
    Assert.assertEquals(envVars.get(0).getName(), "MY_CPU_REQUEST", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(0).getValueFrom().getResourceFieldRef().getContainerName(), "client", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(0).getValueFrom().getResourceFieldRef().getResource(), "requests.cpu", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(1).getName(), "MY_CPU_LIMIT", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(1).getValueFrom().getResourceFieldRef().getResource(), "limits.cpu", "Invalid environment variable value found.");
    KubernetesUtils.deleteDirectory(KUBERNETES_TARGET_PATH);
    KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
    KubernetesTestUtils.deleteDockerImage(DOCKER_IMAGE);
}
Also used : Deployment(io.fabric8.kubernetes.api.model.apps.Deployment) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) File(java.io.File) Test(org.testng.annotations.Test)

Example 55 with EnvVar

use of io.fabric8.kubernetes.api.model.EnvVar in project kubernetes by ballerinax.

the class EnvVarTest method nameValueTest.

/**
 * Build bal file with deployment having name value environment variables.
 * @throws IOException Error when loading the generated yaml.
 * @throws InterruptedException Error when compiling the ballerina file.
 * @throws KubernetesPluginException Error when deleting the generated artifacts folder.
 */
@Test
public void nameValueTest() throws IOException, InterruptedException, KubernetesPluginException, DockerTestException {
    Assert.assertEquals(KubernetesTestUtils.compileBallerinaFile(BAL_DIRECTORY, "name_value.bal"), 0);
    // Check if docker image exists and correct
    validateDockerfile();
    validateDockerImage();
    // Validate deployment yaml
    File deploymentYAML = KUBERNETES_TARGET_PATH.resolve("name_value_deployment.yaml").toFile();
    Assert.assertTrue(deploymentYAML.exists());
    Deployment deployment = KubernetesTestUtils.loadYaml(deploymentYAML);
    List<EnvVar> envVars = deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getEnv();
    Assert.assertEquals(envVars.size(), 2, "Invalid number of environment variables found.");
    Assert.assertEquals(envVars.get(0).getName(), "location", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(0).getValue(), "SL", "Invalid environment variable value found.");
    Assert.assertEquals(envVars.get(1).getName(), "city", "Invalid environment variable name found.");
    Assert.assertEquals(envVars.get(1).getValue(), "COLOMBO", "Invalid environment variable value found.");
    KubernetesUtils.deleteDirectory(KUBERNETES_TARGET_PATH);
    KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
    KubernetesTestUtils.deleteDockerImage(DOCKER_IMAGE);
}
Also used : Deployment(io.fabric8.kubernetes.api.model.apps.Deployment) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) File(java.io.File) Test(org.testng.annotations.Test)

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