Search in sources :

Example 16 with V1PodList

use of io.kubernetes.client.openapi.models.V1PodList in project java by kubernetes-client.

the class CoreV1Api method listPodForAllNamespacesAsync.

/**
 * (asynchronously) list or watch objects of kind Pod
 *
 * @param allowWatchBookmarks allowWatchBookmarks requests watch events with type
 *     \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and
 *     bookmarks are sent at the server's discretion. Clients should not assume bookmarks are
 *     returned at any specific interval, nor may they assume the server will send any BOOKMARK
 *     event during a session. If this is not a watch, this field is ignored. (optional)
 * @param _continue The continue option should be set when retrieving more results from the
 *     server. Since this value is server defined, clients may only use the continue value from a
 *     previous query result with identical query parameters (except for the value of continue)
 *     and the server may reject a continue value it does not recognize. If the specified continue
 *     value is no longer valid whether due to expiration (generally five to fifteen minutes) or a
 *     configuration change on the server, the server will respond with a 410 ResourceExpired
 *     error together with a continue token. If the client needs a consistent list, it must
 *     restart their list without the continue field. Otherwise, the client may send another list
 *     request with the token received with the 410 error, the server will respond with a list
 *     starting from the next key, but from the latest snapshot, which is inconsistent from the
 *     previous list results - objects that are created, modified, or deleted after the first list
 *     request will be included in the response, as long as their keys are after the \"next
 *     key\". This field is not supported when watch is true. Clients may start a watch from
 *     the last resourceVersion value returned by the server and not miss any modifications.
 *     (optional)
 * @param fieldSelector A selector to restrict the list of returned objects by their fields.
 *     Defaults to everything. (optional)
 * @param labelSelector A selector to restrict the list of returned objects by their labels.
 *     Defaults to everything. (optional)
 * @param limit limit is a maximum number of responses to return for a list call. If more items
 *     exist, the server will set the `continue` field on the list metadata to a value
 *     that can be used with the same initial query to retrieve the next set of results. Setting a
 *     limit may return fewer than the requested amount of items (up to zero items) in the event
 *     all requested objects are filtered out and clients should only use the presence of the
 *     continue field to determine whether more results are available. Servers may choose not to
 *     support the limit argument and will return all of the available results. If limit is
 *     specified and the continue field is empty, clients may assume that no more results are
 *     available. This field is not supported if watch is true. The server guarantees that the
 *     objects returned when using continue will be identical to issuing a single list call
 *     without a limit - that is, no objects created, modified, or deleted after the first request
 *     is issued will be included in any subsequent continued requests. This is sometimes referred
 *     to as a consistent snapshot, and ensures that a client that is using limit to receive
 *     smaller chunks of a very large result can ensure they see all possible objects. If objects
 *     are updated during a chunked list the version of the object that was present at the time
 *     the first list result was calculated is returned. (optional)
 * @param pretty If 'true', then the output is pretty printed. (optional)
 * @param resourceVersion resourceVersion sets a constraint on what resource versions a request
 *     may be served from. See
 *     https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.
 *     Defaults to unset (optional)
 * @param resourceVersionMatch resourceVersionMatch determines how resourceVersion is applied to
 *     list calls. It is highly recommended that resourceVersionMatch be set for list calls where
 *     resourceVersion is set See
 *     https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.
 *     Defaults to unset (optional)
 * @param timeoutSeconds Timeout for the list/watch call. This limits the duration of the call,
 *     regardless of any activity or inactivity. (optional)
 * @param watch Watch for changes to the described resources and return them as a stream of add,
 *     update, and remove notifications. Specify resourceVersion. (optional)
 * @param _callback The callback to be executed when the API call finishes
 * @return The request call
 * @throws ApiException If fail to process the API call, e.g. serializing the request body object
 * @http.response.details
 *     <table summary="Response Details" border="1">
 * <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
 * <tr><td> 200 </td><td> OK </td><td>  -  </td></tr>
 * <tr><td> 401 </td><td> Unauthorized </td><td>  -  </td></tr>
 * </table>
 */
public okhttp3.Call listPodForAllNamespacesAsync(Boolean allowWatchBookmarks, String _continue, String fieldSelector, String labelSelector, Integer limit, String pretty, String resourceVersion, String resourceVersionMatch, Integer timeoutSeconds, Boolean watch, final ApiCallback<V1PodList> _callback) throws ApiException {
    okhttp3.Call localVarCall = listPodForAllNamespacesValidateBeforeCall(allowWatchBookmarks, _continue, fieldSelector, labelSelector, limit, pretty, resourceVersion, resourceVersionMatch, timeoutSeconds, watch, _callback);
    Type localVarReturnType = new TypeToken<V1PodList>() {
    }.getType();
    localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
    return localVarCall;
}
Also used : V1PodList(io.kubernetes.client.openapi.models.V1PodList) Type(java.lang.reflect.Type)

Example 17 with V1PodList

use of io.kubernetes.client.openapi.models.V1PodList in project java by kubernetes-client.

the class DefaultSharedIndexInformerWireMockTest method testAllNamespacedPodInformerNormalBehavior.

@Test
public void testAllNamespacedPodInformerNormalBehavior() throws InterruptedException {
    CoreV1Api coreV1Api = new CoreV1Api(client);
    String startRV = "1000";
    String endRV = "1001";
    V1PodList podList = new V1PodList().metadata(new V1ListMeta().resourceVersion(startRV)).items(Arrays.asList());
    stubFor(get(urlPathEqualTo("/api/v1/pods")).withQueryParam("watch", equalTo("false")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(podList))));
    Watch.Response<V1Pod> watchResponse = new Watch.Response<>(EventType.ADDED.name(), new V1Pod().metadata(new V1ObjectMeta().namespace(namespace).name(podName).resourceVersion(endRV).labels(Collections.singletonMap("foo", "bar")).annotations(Collections.singletonMap("foo", "bar"))));
    stubFor(get(urlPathEqualTo("/api/v1/pods")).withQueryParam("watch", equalTo("true")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(watchResponse))));
    SharedInformerFactory factory = new SharedInformerFactory();
    SharedIndexInformer<V1Pod> podInformer = factory.sharedIndexInformerFor((CallGeneratorParams params) -> {
        try {
            return coreV1Api.listPodForAllNamespacesCall(null, null, null, null, null, null, params.resourceVersion, null, params.timeoutSeconds, params.watch, null);
        } catch (ApiException e) {
            throw new RuntimeException(e);
        }
    }, V1Pod.class, V1PodList.class);
    podInformer.setTransform((obj) -> {
        // deepcopy
        String json = new JSON().serialize(obj);
        V1Pod pod = new JSON().deserialize(json, V1Pod.class);
        // remove pod annotations
        pod.getMetadata().setAnnotations(null);
        return pod;
    });
    AtomicBoolean foundExistingPod = new AtomicBoolean(false);
    AtomicBoolean transformed = new AtomicBoolean(false);
    AtomicBoolean setTransformAfterStarted = new AtomicBoolean(false);
    podInformer.addEventHandler(new ResourceEventHandler<V1Pod>() {

        @Override
        public void onAdd(V1Pod obj) {
            if (podName.equals(obj.getMetadata().getName()) && namespace.equals(obj.getMetadata().getNamespace())) {
                foundExistingPod.set(true);
            }
            V1ObjectMeta metadata = obj.getMetadata();
            // check if the object was transformed
            if (metadata.getLabels().get("foo").equals("bar") && metadata.getAnnotations() == null) {
                transformed.set(true);
            }
        }

        @Override
        public void onUpdate(V1Pod oldObj, V1Pod newObj) {
        }

        @Override
        public void onDelete(V1Pod obj, boolean deletedFinalStateUnknown) {
        }
    });
    factory.startAllRegisteredInformers();
    Thread.sleep(1000);
    // can not set transform func if the informer has started
    try {
        podInformer.setTransform((obj) -> new V1Pod());
        setTransformAfterStarted.set(true);
    } catch (IllegalStateException e) {
    }
    assertTrue(foundExistingPod.get());
    assertTrue(transformed.get());
    assertFalse(setTransformAfterStarted.get());
    assertEquals(endRV, podInformer.lastSyncResourceVersion());
    verify(1, getRequestedFor(urlPathEqualTo("/api/v1/pods")).withQueryParam("watch", equalTo("false")));
    verify(moreThan(1), getRequestedFor(urlPathEqualTo("/api/v1/pods")).withQueryParam("watch", equalTo("true")));
    factory.stopAllRegisteredInformers();
}
Also used : V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) JSON(io.kubernetes.client.openapi.JSON) CallGeneratorParams(io.kubernetes.client.util.CallGeneratorParams) V1ListMeta(io.kubernetes.client.openapi.models.V1ListMeta) V1PodList(io.kubernetes.client.openapi.models.V1PodList) WireMock.aResponse(com.github.tomakehurst.wiremock.client.WireMock.aResponse) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) SharedInformerFactory(io.kubernetes.client.informer.SharedInformerFactory) Watch(io.kubernetes.client.util.Watch) V1Pod(io.kubernetes.client.openapi.models.V1Pod) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) ApiException(io.kubernetes.client.openapi.ApiException) Test(org.junit.Test)

Example 18 with V1PodList

use of io.kubernetes.client.openapi.models.V1PodList in project java by kubernetes-client.

the class DefaultSharedIndexInformerWireMockTest method testInformerReListWatchOnWatchConflict.

@Test
public void testInformerReListWatchOnWatchConflict() throws InterruptedException {
    CoreV1Api coreV1Api = new CoreV1Api(client);
    String startRV = "1000";
    V1PodList podList = new V1PodList().metadata(new V1ListMeta().resourceVersion(startRV)).items(Arrays.asList());
    stubFor(get(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("false")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(podList))));
    Watch.Response<V1Pod> watchResponse = new Watch.Response<>(EventType.ERROR.name(), new V1Status().apiVersion("v1").kind("Status").code(409));
    stubFor(get(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("true")).withQueryParam("resourceVersion", equalTo(startRV)).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody(new JSON().serialize(watchResponse))));
    SharedInformerFactory factory = new SharedInformerFactory();
    SharedIndexInformer<V1Pod> podInformer = factory.sharedIndexInformerFor((CallGeneratorParams params) -> {
        try {
            return coreV1Api.listNamespacedPodCall(namespace, null, null, null, null, null, null, params.resourceVersion, null, params.timeoutSeconds, params.watch, null);
        } catch (ApiException e) {
            throw new RuntimeException(e);
        }
    }, V1Pod.class, V1PodList.class);
    factory.startAllRegisteredInformers();
    // Sleep mroe than 1s so that informer can perform multiple rounds of list-watch
    Thread.sleep(3000);
    verify(moreThan(1), getRequestedFor(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("false")));
    verify(moreThan(1), getRequestedFor(urlPathEqualTo("/api/v1/namespaces/" + namespace + "/pods")).withQueryParam("watch", equalTo("true")));
    factory.stopAllRegisteredInformers();
}
Also used : V1Status(io.kubernetes.client.openapi.models.V1Status) JSON(io.kubernetes.client.openapi.JSON) CallGeneratorParams(io.kubernetes.client.util.CallGeneratorParams) V1ListMeta(io.kubernetes.client.openapi.models.V1ListMeta) V1PodList(io.kubernetes.client.openapi.models.V1PodList) WireMock.aResponse(com.github.tomakehurst.wiremock.client.WireMock.aResponse) SharedInformerFactory(io.kubernetes.client.informer.SharedInformerFactory) Watch(io.kubernetes.client.util.Watch) V1Pod(io.kubernetes.client.openapi.models.V1Pod) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) ApiException(io.kubernetes.client.openapi.ApiException) Test(org.junit.Test)

Example 19 with V1PodList

use of io.kubernetes.client.openapi.models.V1PodList in project java by kubernetes-client.

the class ControllerTest method testControllerProcessDeltas.

@Test
public void testControllerProcessDeltas() {
    AtomicInteger receivingDeltasCount = new AtomicInteger(0);
    V1Pod foo1 = new V1Pod().metadata(new V1ObjectMeta().name("foo1").namespace("default"));
    V1Pod foo2 = new V1Pod().metadata(new V1ObjectMeta().name("foo2").namespace("default"));
    V1Pod foo3 = new V1Pod().metadata(new V1ObjectMeta().name("foo3").namespace("default").resourceVersion("rva"));
    V1Pod foo3Updated = new V1Pod().metadata(new V1ObjectMeta().name("foo3").namespace("default").resourceVersion("rvb"));
    V1PodList podList = new V1PodList().metadata(new V1ListMeta()).items(Arrays.asList(foo1, foo2, foo3));
    DeltaFIFO deltaFIFO = new DeltaFIFO(Caches::deletionHandlingMetaNamespaceKeyFunc, new Cache());
    ListerWatcher<V1Pod, V1PodList> listerWatcher = new MockRunOnceListerWatcher<V1Pod, V1PodList>(podList, new Watch.Response<V1Pod>(EventType.MODIFIED.name(), foo3Updated));
    Controller<V1Pod, V1PodList> controller = new Controller<>(V1Pod.class, deltaFIFO, listerWatcher, (deltas) -> {
        receivingDeltasCount.addAndGet(deltas.size());
    });
    Thread controllerThread = new Thread(controller::run);
    controllerThread.setDaemon(true);
    controllerThread.start();
    try {
        Awaitility.await().pollInterval(Duration.ofSeconds(1)).timeout(Duration.ofSeconds(5)).untilAtomic(receivingDeltasCount, IsEqual.equalTo(4));
        assertEquals(4, receivingDeltasCount.get());
    } catch (Throwable t) {
        throw new RuntimeException(t);
    } finally {
        controller.stop();
    }
}
Also used : V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) V1ListMeta(io.kubernetes.client.openapi.models.V1ListMeta) V1PodList(io.kubernetes.client.openapi.models.V1PodList) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Watch(io.kubernetes.client.util.Watch) V1Pod(io.kubernetes.client.openapi.models.V1Pod) Test(org.junit.Test)

Example 20 with V1PodList

use of io.kubernetes.client.openapi.models.V1PodList in project java by kubernetes-client.

the class SharedInformerFactoryTest method testClusterScopedNewInformerUsingGenericApi.

@Test
public void testClusterScopedNewInformerUsingGenericApi() {
    SharedInformerFactory factory = new SharedInformerFactory();
    SharedInformer<V1Pod> podInformer = factory.sharedIndexInformerFor(genericKubernetesApi, V1Pod.class, 0);
    assertThat(podInformer).isNotNull();
    when(genericKubernetesApi.list(any(ListOptions.class))).thenReturn(new KubernetesApiResponse<V1PodList>(new V1PodList().metadata(new V1ListMeta().resourceVersion("0"))));
    factory.startAllRegisteredInformers();
    await().timeout(Duration.ofSeconds(2)).until(podInformer::hasSynced);
    verify(genericKubernetesApi, atLeastOnce()).list(any(ListOptions.class));
}
Also used : V1PodList(io.kubernetes.client.openapi.models.V1PodList) V1Pod(io.kubernetes.client.openapi.models.V1Pod) ListOptions(io.kubernetes.client.util.generic.options.ListOptions) V1ListMeta(io.kubernetes.client.openapi.models.V1ListMeta) Test(org.junit.Test)

Aggregations

V1PodList (io.kubernetes.client.openapi.models.V1PodList)42 V1Pod (io.kubernetes.client.openapi.models.V1Pod)33 Test (org.junit.Test)22 ApiException (io.kubernetes.client.openapi.ApiException)18 V1ListMeta (io.kubernetes.client.openapi.models.V1ListMeta)17 CoreV1Api (io.kubernetes.client.openapi.apis.CoreV1Api)16 V1ObjectMeta (io.kubernetes.client.openapi.models.V1ObjectMeta)13 ApiClient (io.kubernetes.client.openapi.ApiClient)12 Watch (io.kubernetes.client.util.Watch)9 CallGeneratorParams (io.kubernetes.client.util.CallGeneratorParams)7 JSON (io.kubernetes.client.openapi.JSON)6 V1Status (io.kubernetes.client.openapi.models.V1Status)6 List (java.util.List)6 V1Patch (io.kubernetes.client.custom.V1Patch)5 SharedInformerFactory (io.kubernetes.client.informer.SharedInformerFactory)5 Configuration (io.kubernetes.client.openapi.Configuration)5 AppsV1Api (io.kubernetes.client.openapi.apis.AppsV1Api)5 IOException (java.io.IOException)5 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)5 Collectors (java.util.stream.Collectors)5