use of io.kubernetes.client.openapi.models.V1PodSpec in project java by kubernetes-client.
the class DefaultControllerBuilderTest method testBuildWatchEventNotificationShouldWork.
@Test
public void testBuildWatchEventNotificationShouldWork() throws InterruptedException {
V1PodList podList = new V1PodList().metadata(new V1ListMeta().resourceVersion("0")).items(Arrays.asList(new V1Pod().metadata(new V1ObjectMeta().name("test-pod1")).spec(new V1PodSpec().hostname("hostname1"))));
stubFor(get(urlPathEqualTo("/api/v1/pods")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(podList))));
CoreV1Api api = new CoreV1Api(client);
SharedIndexInformer<V1Pod> podInformer = informerFactory.sharedIndexInformerFor((CallGeneratorParams params) -> {
return api.listPodForAllNamespacesCall(null, null, null, null, null, null, params.resourceVersion, null, params.timeoutSeconds, params.watch, null);
}, V1Pod.class, V1PodList.class);
List<Request> keyFuncReceivingRequests = new ArrayList<>();
Function<V1Pod, Request> podKeyFunc = (V1Pod pod) -> {
// twisting pod name key
Request request = new Request(pod.getSpec().getHostname() + "/" + pod.getMetadata().getName());
keyFuncReceivingRequests.add(request);
return request;
};
List<Request> controllerReceivingRequests = new ArrayList<>();
final Semaphore latch = new Semaphore(1);
latch.acquire();
final Controller testController = ControllerBuilder.defaultBuilder(informerFactory).withReconciler(new Reconciler() {
@Override
public Result reconcile(Request request) {
controllerReceivingRequests.add(request);
latch.release();
return new Result(false);
}
}).watch((workQueue) -> ControllerBuilder.controllerWatchBuilder(V1Pod.class, workQueue).withWorkQueueKeyFunc(podKeyFunc).build()).build();
controllerThead.submit(testController::run);
informerFactory.startAllRegisteredInformers();
// Wait for the request to be processed.
latch.acquire(1);
Request expectedRequest = new Request("hostname1/test-pod1");
assertEquals(1, keyFuncReceivingRequests.size());
assertEquals(expectedRequest, keyFuncReceivingRequests.get(0));
assertEquals(1, controllerReceivingRequests.size());
assertEquals(expectedRequest, controllerReceivingRequests.get(0));
}
use of io.kubernetes.client.openapi.models.V1PodSpec in project java by kubernetes-client.
the class CacheTest method testMultiIndexFuncCacheStore.
@Test
public void testMultiIndexFuncCacheStore() {
String testIndexFuncName = "test-idx-func";
Cache<V1Pod> podCache = new Cache<>();
podCache.addIndexFunc(testIndexFuncName, (V1Pod pod) -> {
return Arrays.asList(pod.getSpec().getNodeName());
});
V1Pod testPod = new V1Pod().metadata(new V1ObjectMeta().namespace("ns").name("n")).spec(new V1PodSpec().nodeName("node1"));
podCache.add(testPod);
List<V1Pod> namespaceIndexedPods = podCache.byIndex(Caches.NAMESPACE_INDEX, "ns");
assertEquals(1, namespaceIndexedPods.size());
List<V1Pod> nodeNameIndexedPods = podCache.byIndex(testIndexFuncName, "node1");
assertEquals(1, nodeNameIndexedPods.size());
}
use of io.kubernetes.client.openapi.models.V1PodSpec in project java by kubernetes-client.
the class FluentExample method main.
public static void main(String[] args) throws IOException, ApiException {
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();
V1Pod pod = new V1PodBuilder().withNewMetadata().withName("apod").endMetadata().withNewSpec().addNewContainer().withName("www").withImage("nginx").endContainer().endSpec().build();
api.createNamespacedPod("default", pod, null, null, null, null);
V1Pod pod2 = new V1Pod().metadata(new V1ObjectMeta().name("anotherpod")).spec(new V1PodSpec().containers(Arrays.asList(new V1Container().name("www").image("nginx"))));
api.createNamespacedPod("default", pod2, null, null, null, null);
V1PodList list = api.listNamespacedPod("default", null, null, null, null, null, null, null, null, null, null);
for (V1Pod item : list.getItems()) {
System.out.println(item.getMetadata().getName());
}
}
use of io.kubernetes.client.openapi.models.V1PodSpec in project twister2 by DSC-SPIDAL.
the class RequestObjectBuilder method constructPodTemplate.
/**
* construct pod template
*/
public static V1PodTemplateSpec constructPodTemplate(ComputeResource computeResource) {
V1PodTemplateSpec template = new V1PodTemplateSpec();
V1ObjectMeta templateMetaData = new V1ObjectMeta();
HashMap<String, String> labels = KubernetesUtils.createJobLabels(jobID);
// worker pod
labels.put("t2-wp", jobID);
templateMetaData.setLabels(labels);
template.setMetadata(templateMetaData);
V1PodSpec podSpec = new V1PodSpec();
podSpec.setTerminationGracePeriodSeconds(0L);
ArrayList<V1Volume> volumes = new ArrayList<>();
V1Volume memoryVolume = new V1Volume();
memoryVolume.setName(KubernetesConstants.POD_MEMORY_VOLUME_NAME);
V1EmptyDirVolumeSource volumeSource1 = new V1EmptyDirVolumeSource();
volumeSource1.setMedium("Memory");
memoryVolume.setEmptyDir(volumeSource1);
volumes.add(memoryVolume);
// create it if the requested disk space is positive
if (computeResource.getDiskGigaBytes() > 0) {
double volumeSize = computeResource.getDiskGigaBytes() * computeResource.getWorkersPerPod();
V1Volume volatileVolume = createVolatileVolume(volumeSize);
volumes.add(volatileVolume);
}
if (SchedulerContext.persistentVolumeRequested(config)) {
String claimName = jobID;
V1Volume persistentVolume = createPersistentVolume(claimName);
volumes.add(persistentVolume);
}
// if openmpi is used, we initialize a Secret volume on each pod
if (SchedulerContext.usingOpenMPI(config)) {
String secretName = KubernetesContext.secretName(config);
V1Volume secretVolume = createSecretVolume(secretName);
volumes.add(secretVolume);
}
podSpec.setVolumes(volumes);
int containersPerPod = computeResource.getWorkersPerPod();
// if openmpi is used, we initialize only one container for each pod
if (SchedulerContext.usingOpenMPI(config)) {
containersPerPod = 1;
}
ArrayList<V1Container> containers = new ArrayList<V1Container>();
for (int i = 0; i < containersPerPod; i++) {
containers.add(constructContainer(computeResource, i));
}
podSpec.setContainers(containers);
if (computeResource.getIndex() == 0) {
constructAffinity(podSpec);
}
template.setSpec(podSpec);
return template;
}
Aggregations