use of org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder in project kubernetes-plugin by jenkinsci.
the class PodTemplateBuilderTest method whenRuntimeClassNameIsSetDoNotSetDefaultNodeSelector.
@Test
public void whenRuntimeClassNameIsSetDoNotSetDefaultNodeSelector() {
setupStubs();
PodTemplate template = new PodTemplate();
template.setYaml("spec:\n" + " runtimeClassName: windows");
Pod pod = new PodTemplateBuilder(template, slave).build();
assertEquals("windows", pod.getSpec().getRuntimeClassName());
assertThat(pod.getSpec().getNodeSelector(), anEmptyMap());
}
use of org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder in project kubernetes-plugin by jenkinsci.
the class PodTemplateBuilderTest method yamlMergeVolumes.
@Test
public void yamlMergeVolumes() throws Exception {
PodTemplate parent = new PodTemplate();
parent.setYaml("apiVersion: v1\n" + "kind: Pod\n" + "metadata:\n" + " labels:\n" + " some-label: some-label-value\n" + "spec:\n" + " volumes:\n" + " - name: host-volume\n" + " hostPath:\n" + " path: /host/data\n");
PodTemplate child = new PodTemplate();
child.setYaml("spec:\n" + " volumes:\n" + " - name: host-volume2\n" + " hostPath:\n" + " path: /host/data2\n");
child.setInheritFrom("parent");
child.setYamlMergeStrategy(merge());
setupStubs();
PodTemplate result = combine(parent, child);
Pod pod = new PodTemplateBuilder(result, slave).build();
// inherit from parent
assertEquals("some-label-value", pod.getMetadata().getLabels().get("some-label"));
assertThat(pod.getSpec().getVolumes(), hasSize(3));
Optional<Volume> hostVolume = pod.getSpec().getVolumes().stream().filter(v -> "host-volume".equals(v.getName())).findFirst();
assertTrue(hostVolume.isPresent());
// parent value
assertThat(hostVolume.get().getHostPath().getPath(), equalTo("/host/data"));
Optional<Volume> hostVolume2 = pod.getSpec().getVolumes().stream().filter(v -> "host-volume2".equals(v.getName())).findFirst();
assertTrue(hostVolume2.isPresent());
// child value
assertThat(hostVolume2.get().getHostPath().getPath(), equalTo("/host/data2"));
}
use of org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder in project kubernetes-plugin by jenkinsci.
the class PodTemplateBuilderTest method testBuildFromTemplate.
@Test
@TestCaseName("{method}(directConnection={0})")
@Parameters({ "true", "false" })
public void testBuildFromTemplate(boolean directConnection) throws Exception {
cloud.setDirectConnection(directConnection);
PodTemplate template = new PodTemplate();
template.setRunAsUser("1000");
template.setRunAsGroup("1000");
template.setSupplementalGroups("5001,5002");
template.setHostNetwork(false);
List<PodVolume> volumes = new ArrayList<PodVolume>();
volumes.add(new HostPathVolume("/host/data", "/container/data"));
volumes.add(new EmptyDirVolume("/empty/dir", false));
template.setVolumes(volumes);
List<ContainerTemplate> containers = new ArrayList<ContainerTemplate>();
ContainerTemplate busyboxContainer = new ContainerTemplate("busybox", "busybox");
busyboxContainer.setCommand("cat");
busyboxContainer.setTtyEnabled(true);
List<TemplateEnvVar> envVars = new ArrayList<TemplateEnvVar>();
envVars.add(new KeyValueEnvVar("CONTAINER_ENV_VAR", "container-env-var-value"));
busyboxContainer.setEnvVars(envVars);
busyboxContainer.setRunAsUser("2000");
busyboxContainer.setRunAsGroup("2000");
containers.add(busyboxContainer);
template.setContainers(containers);
setupStubs();
Pod pod = new PodTemplateBuilder(template, slave).build();
pod.getMetadata().setLabels(Collections.singletonMap("some-label", "some-label-value"));
validatePod(pod, false, directConnection);
ArrayList<Long> supplementalGroups = new ArrayList<Long>();
supplementalGroups.add(5001L);
supplementalGroups.add(5002L);
Map<String, Container> containersMap = toContainerMap(pod);
PodSecurityContext securityContext = pod.getSpec().getSecurityContext();
assertEquals(Long.valueOf(1000L), securityContext.getRunAsUser());
assertEquals(Long.valueOf(1000L), securityContext.getRunAsGroup());
assertEquals(supplementalGroups, securityContext.getSupplementalGroups());
assertEquals(Long.valueOf(2000L), containersMap.get("busybox").getSecurityContext().getRunAsUser());
assertEquals(Long.valueOf(2000L), containersMap.get("busybox").getSecurityContext().getRunAsGroup());
}
use of org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder in project kubernetes-plugin by jenkinsci.
the class PodTemplateBuilderTest method testOverridesFromYaml.
@Test
@TestCaseName("{method}(directConnection={0})")
@Parameters({ "true", "false" })
public void testOverridesFromYaml(boolean directConnection) throws Exception {
cloud.setDirectConnection(directConnection);
PodTemplate template = new PodTemplate();
template.setYaml(loadYamlFile("pod-overrides.yaml"));
setupStubs();
Pod pod = new PodTemplateBuilder(template, slave).build();
Map<String, Container> containers = toContainerMap(pod);
assertEquals(1, containers.size());
Container jnlp = containers.get("jnlp");
assertThat("Wrong number of volume mounts: " + jnlp.getVolumeMounts(), jnlp.getVolumeMounts(), hasSize(1));
PodTemplateUtilsTest.assertQuantity("2", jnlp.getResources().getLimits().get("cpu"));
PodTemplateUtilsTest.assertQuantity("2Gi", jnlp.getResources().getLimits().get("memory"));
PodTemplateUtilsTest.assertQuantity("200m", jnlp.getResources().getRequests().get("cpu"));
PodTemplateUtilsTest.assertQuantity("256Mi", jnlp.getResources().getRequests().get("memory"));
validateContainers(pod, slave, directConnection);
}
use of org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder in project kubernetes-plugin by jenkinsci.
the class PodTemplateBuilderTest method yamlOverrideVolume.
@Test
public void yamlOverrideVolume() throws Exception {
PodTemplate parent = new PodTemplate();
parent.setYaml("apiVersion: v1\n" + "kind: Pod\n" + "metadata:\n" + " labels:\n" + " some-label: some-label-value\n" + "spec:\n" + " containers:\n" + " - name: jnlp\n" + " volumeMounts:\n" + " - name: host-volume\n" + " mountPath: /etc/config\n" + " subPath: mypath\n" + " volumes:\n" + " - name: host-volume\n" + " hostPath:\n" + " path: /host/data\n");
PodTemplate child = new PodTemplate();
child.setYaml("spec:\n" + " volumes:\n" + " - name: host-volume\n" + " hostPath:\n" + " path: /host/data2\n");
child.setContainers(Collections.singletonList(new ContainerTemplate("jnlp", "image")));
ConfigMapVolume cmVolume = new ConfigMapVolume("/etc/configmap", "my-configmap", false);
cmVolume.setSubPath("subpath");
child.setVolumes(Collections.singletonList(cmVolume));
child.setInheritFrom("parent");
child.setYamlMergeStrategy(merge());
setupStubs();
PodTemplate result = combine(parent, child);
Pod pod = new PodTemplateBuilder(result, slave).build();
// inherit from parent
assertEquals("some-label-value", pod.getMetadata().getLabels().get("some-label"));
Optional<Volume> maybeVolume = pod.getSpec().getVolumes().stream().filter(v -> "host-volume".equals(v.getName())).findFirst();
assertTrue(maybeVolume.isPresent());
// child value overrides parent value
assertThat(maybeVolume.get().getHostPath().getPath(), equalTo("/host/data2"));
assertThat(pod.getSpec().getContainers(), hasSize(1));
Container container = pod.getSpec().getContainers().get(0);
Optional<VolumeMount> maybeVolumeMount = container.getVolumeMounts().stream().filter(vm -> "host-volume".equals(vm.getName())).findFirst();
assertTrue(maybeVolumeMount.isPresent());
VolumeMount volumeMount = maybeVolumeMount.get();
assertEquals("/etc/config", volumeMount.getMountPath());
assertEquals("mypath", volumeMount.getSubPath());
Optional<VolumeMount> maybeVolumeMountCm = container.getVolumeMounts().stream().filter(vm -> "/etc/configmap".equals(vm.getMountPath())).findFirst();
assertTrue(maybeVolumeMountCm.isPresent());
VolumeMount cmVolumeMount = maybeVolumeMountCm.get();
assertEquals("subpath", cmVolumeMount.getSubPath());
}
Aggregations