diff --git a/kubernetes/k8s-intro/src/k8s/create-http-server.yml b/kubernetes/k8s-intro/src/k8s/create-http-server.yml new file mode 100644 index 0000000000..59ef344de3 --- /dev/null +++ b/kubernetes/k8s-intro/src/k8s/create-http-server.yml @@ -0,0 +1,58 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: ns1 +--- +apiVersion: v1 +kind: Namespace +metadata: + name: ns2 +--- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: httpd + namespace: ns1 + labels: + app: httpd + version: "1" + spec: + replicas: 3 + selector: + matchLabels: + app: httpd + template: + metadata: + labels: + app: httpd + spec: + containers: + - name: main + image: httpd:alpine + ports: + - containerPort: 80 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: httpd + namespace: ns2 + labels: + app: httpd + version: "2" + foo: bar +spec: + replicas: 3 + selector: + matchLabels: + app: httpd + template: + metadata: + labels: + app: httpd + spec: + containers: + - name: main + image: httpd:alpine + ports: + - containerPort: 80 \ No newline at end of file diff --git a/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithFieldSelectors.java b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithFieldSelectors.java new file mode 100644 index 0000000000..459f61099c --- /dev/null +++ b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithFieldSelectors.java @@ -0,0 +1,68 @@ +/** + * + */ +package com.baeldung.kubernetes.intro; + + +import java.util.concurrent.TimeUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.openapi.apis.CoreV1Api; +import io.kubernetes.client.openapi.models.V1NodeList; +import io.kubernetes.client.openapi.models.V1PodList; +import io.kubernetes.client.util.Config; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; + +/** + * @author Philippe + * + */ +public class ListPodsWithFieldSelectors { + + private static final Logger log = LoggerFactory.getLogger(ListPodsWithFieldSelectors.class); + + /** + * @param args + */ + public static void main(String[] args) throws Exception { + + ApiClient client = Config.defaultClient(); + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + OkHttpClient newClient = client.getHttpClient() + .newBuilder() + .addInterceptor(interceptor) + .readTimeout(0, TimeUnit.SECONDS) + .build(); + + client.setHttpClient(newClient); + CoreV1Api api = new CoreV1Api(client); + + String fs = createSelector(args); + V1PodList items = api.listPodForAllNamespaces(null, null, fs, null, null, null, null, null, 10, false); + items.getItems() + .stream() + .map((pod) -> pod.getMetadata().getName() ) + .forEach((name) -> System.out.println("name=" + name)); + + } + + private static String createSelector(String[] args) { + + StringBuilder b = new StringBuilder(); + for( int i = 0 ; i < args.length; i++ ) { + if( b.length() > 0 ) { + b.append(','); + } + + b.append(args[i]); + } + + return b.toString(); + } + +} diff --git a/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithLabelSelectors.java b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithLabelSelectors.java new file mode 100644 index 0000000000..2e7c8b6a1f --- /dev/null +++ b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithLabelSelectors.java @@ -0,0 +1,68 @@ +/** + * + */ +package com.baeldung.kubernetes.intro; + + +import java.util.concurrent.TimeUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.openapi.apis.CoreV1Api; +import io.kubernetes.client.openapi.models.V1NodeList; +import io.kubernetes.client.openapi.models.V1PodList; +import io.kubernetes.client.util.Config; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; + +/** + * @author Philippe + * + */ +public class ListPodsWithLabelSelectors { + + private static final Logger log = LoggerFactory.getLogger(ListPodsWithLabelSelectors.class); + + /** + * @param args + */ + public static void main(String[] args) throws Exception { + + ApiClient client = Config.defaultClient(); + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + OkHttpClient newClient = client.getHttpClient() + .newBuilder() + .addInterceptor(interceptor) + .readTimeout(0, TimeUnit.SECONDS) + .build(); + + client.setHttpClient(newClient); + CoreV1Api api = new CoreV1Api(client); + + String selector = createSelector(args); + V1PodList items = api.listPodForAllNamespaces(null, null, null, selector, null, null, null, null, 10, false); + items.getItems() + .stream() + .map((pod) -> pod.getMetadata().getName() ) + .forEach((name) -> System.out.println("name=" + name)); + + } + + private static String createSelector(String[] args) { + + StringBuilder b = new StringBuilder(); + for( int i = 0 ; i < args.length; i++ ) { + if( b.length() > 0 ) { + b.append(','); + } + + b.append(args[i]); + } + + return b.toString(); + } + +} diff --git a/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithNamespaces.java b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithNamespaces.java new file mode 100644 index 0000000000..68a951f394 --- /dev/null +++ b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/ListPodsWithNamespaces.java @@ -0,0 +1,52 @@ +/** + * + */ +package com.baeldung.kubernetes.intro; + + +import java.util.concurrent.TimeUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.openapi.apis.CoreV1Api; +import io.kubernetes.client.openapi.models.V1NodeList; +import io.kubernetes.client.openapi.models.V1PodList; +import io.kubernetes.client.util.Config; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; + +/** + * @author Philippe + * + */ +public class ListPodsWithNamespaces { + + private static final Logger log = LoggerFactory.getLogger(ListPodsWithNamespaces.class); + + /** + * @param args + */ + public static void main(String[] args) throws Exception { + + ApiClient client = Config.defaultClient(); + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + OkHttpClient newClient = client.getHttpClient() + .newBuilder() + .addInterceptor(interceptor) + .readTimeout(0, TimeUnit.SECONDS) + .build(); + + client.setHttpClient(newClient); + CoreV1Api api = new CoreV1Api(client); + String namespace = "ns1"; + V1PodList items = api.listNamespacedPod(namespace,null, null, null, null, null, null, null, null, 10, false); + items.getItems() + .stream() + .map((pod) -> pod.getMetadata().getName() ) + .forEach((name) -> System.out.println("name=" + name)); + + } +} diff --git a/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/ListPodsWithFieldSelectorsLiveTest.java b/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/ListPodsWithFieldSelectorsLiveTest.java new file mode 100644 index 0000000000..9413fe1460 --- /dev/null +++ b/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/ListPodsWithFieldSelectorsLiveTest.java @@ -0,0 +1,27 @@ +package com.baeldung.kubernetes.intro; + +import org.junit.jupiter.api.Test; + +class ListPodsWithFieldSelectorsLiveTest { + @Test + void givenEqualitySelector_whenListPodsWithFieldSelectors_thenSuccess() throws Exception { + ListPodsWithFieldSelectors.main(new String[] { + "metadata.namespace=ns1" + }); + } + + @Test + void givenInequalitySelector_whenListPodsWithFieldSelectors_thenSuccess() throws Exception { + ListPodsWithFieldSelectors.main(new String[] { + "metadata.namespace!=ns1" + }); + } + + @Test + void givenChainedSelector_whenListPodsWithFieldSelectors_thenSuccess() throws Exception { + ListPodsWithFieldSelectors.main(new String[] { + "metadata.namespace=ns1", + "status.phase=Running" + }); + } +} diff --git a/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/ListPodsWithLabelSelectorsLiveTest.java b/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/ListPodsWithLabelSelectorsLiveTest.java new file mode 100644 index 0000000000..eb64853225 --- /dev/null +++ b/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/ListPodsWithLabelSelectorsLiveTest.java @@ -0,0 +1,55 @@ +package com.baeldung.kubernetes.intro; + +import org.junit.jupiter.api.Test; + +class ListPodsWithLabelSelectorsLiveTest { + @Test + void givenEqualitySelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "app=httpd" + }); + } + + @Test + void givenInqualitySelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "app!=httpd" + }); + } + + @Test + void givenInSetSelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "app in (httpd,test)" + }); + } + + @Test + void givenNotInSetSelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "app notin (httpd)" + }); + } + + @Test + void givenLabelPresentSelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "app" + }); + } + + @Test + void givenLabelNotPresentSelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "!app" + }); + } + + @Test + void givenChainedSelector_whenListPodsWithLabelSelectors_thenSuccess() throws Exception { + ListPodsWithLabelSelectors.main(new String[] { + "app=httpd", + "!foo" + }); + } +}