From 02474bfa200cc506d9182b7b07ead70866607ab8 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Fri, 11 Jun 2021 15:09:16 +0530 Subject: [PATCH] Fix #672: Add missing fields in ProbeConfig for configuring Readiness/Liveness Probes Signed-off-by: Rohan Kumar --- CHANGELOG.md | 1 + .../kit/common/util/KubernetesHelper.java | 11 ++ .../kit/common/util/KubernetesHelperTest.java | 22 ++++ .../kit/config/resource/ProbeConfig.java | 11 ++ .../kit/enricher/handler/ProbeHandler.java | 42 +++--- .../enricher/handler/ProbeHandlerTest.java | 51 +++++++ .../src/main/asciidoc/inc/_introduction.adoc | 2 +- .../inc/goals/build/_jkube-resource.adoc | 20 ++- .../probes-xml-config/expected/kubernetes.yml | 124 ++++++++++++++++++ .../it/probes-xml-config/invoker.properties | 17 +++ .../it/src/it/probes-xml-config/pom.xml | 84 ++++++++++++ .../src/main/java/probe/Application.java | 26 ++++ .../src/main/java/probe/HelloController.java | 27 ++++ .../it/src/it/probes-xml-config/verify.groovy | 32 +++++ 14 files changed, 448 insertions(+), 22 deletions(-) create mode 100644 kubernetes-maven-plugin/it/src/it/probes-xml-config/expected/kubernetes.yml create mode 100644 kubernetes-maven-plugin/it/src/it/probes-xml-config/invoker.properties create mode 100644 kubernetes-maven-plugin/it/src/it/probes-xml-config/pom.xml create mode 100644 kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/Application.java create mode 100644 kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/HelloController.java create mode 100644 kubernetes-maven-plugin/it/src/it/probes-xml-config/verify.groovy diff --git a/CHANGELOG.md b/CHANGELOG.md index b615c2025c..38a0b20ee4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ Usage: * Port fabric8io/docker-maven-plugin#1318: Update ECR autorization token URL * Fix #710: Support DockerImage as output for Openshift builds * Fix #548: Define property for skipping cluster autodetect/offline mode +* Fix #672: Add missing fields in ProbeConfig for configuring Readiness/Liveness Probes ### 1.3.0 * Fix #497: Assembly descriptor removed but still in documentation diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java index 98211c55d3..e814b9379f 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java @@ -40,6 +40,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import io.fabric8.kubernetes.api.model.HTTPHeader; import org.eclipse.jkube.kit.common.GenericCustomResource; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; @@ -957,6 +958,16 @@ public static CustomResourceDefinitionContext getCrdContext(CustomResourceDefini .orElse(null); } + public static List convertMapToHTTPHeaderList(Map headers) { + List httpHeaders = new ArrayList<>(); + if (headers != null) { + for (Map.Entry header : headers.entrySet()) { + httpHeaders.add(new HTTPHeader(header.getKey(), header.getValue())); + } + } + return httpHeaders; + } + private static Optional findCrdForCustomResource(CustomResourceDefinitionList crdList, GenericCustomResource gcr) { return crdList.getItems().stream() .filter(hasGroup(gcr)) diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java index df533799b9..66db8e5235 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java @@ -24,6 +24,8 @@ import java.util.Map; import java.util.Set; +import io.fabric8.kubernetes.api.model.HTTPHeader; +import org.assertj.core.api.AssertionsForClassTypes; import org.eclipse.jkube.kit.common.GenericCustomResource; import org.eclipse.jkube.kit.common.KitLogger; @@ -492,6 +494,26 @@ public void testGetCrdContextReturnsNullCrdContext() { assertThat(crdContext).isNull(); } + @Test + public void testConvertMapToHTTPHeaderList() { + // Given + Map headerAsMap = new HashMap<>(); + headerAsMap.put("Accept", "application/json"); + headerAsMap.put("User-Agent", "MyUserAgent"); + + // When + List httpHeaders = KubernetesHelper.convertMapToHTTPHeaderList(headerAsMap); + + // Then + assertThat(httpHeaders).isNotNull().hasSize(2) + .satisfies(h -> assertThat(h).element(0) + .hasFieldOrPropertyWithValue("name", "Accept") + .hasFieldOrPropertyWithValue("value", "application/json")) + .satisfies(h -> assertThat(h).element(1) + .hasFieldOrPropertyWithValue("name", "User-Agent") + .hasFieldOrPropertyWithValue("value", "MyUserAgent")); + } + private void assertLocalFragments(File[] fragments, int expectedSize) { assertEquals(expectedSize, fragments.length); assertTrue(Arrays.stream(fragments).anyMatch( f -> f.getName().equals("deployment.yml"))); diff --git a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ProbeConfig.java b/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ProbeConfig.java index 7a3759e9a0..4976db09b3 100644 --- a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ProbeConfig.java +++ b/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ProbeConfig.java @@ -19,6 +19,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.Map; + /** * @author roland */ @@ -37,6 +39,10 @@ public class ProbeConfig { * Timeout in seconds how long the probe might take. */ private Integer timeoutSeconds; + /** + * How often in seconds to perform the probe. Defaults to 10 seconds. Minimum value is 1. + */ + private Integer periodSeconds; /** * Command to execute for probing. */ @@ -45,6 +51,11 @@ public class ProbeConfig { * Probe this URL. */ private String getUrl; + + /** + * Custom headers to set in the request. + */ + private Map httpHeaders; /** * TCP port to probe. */ diff --git a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandler.java b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandler.java index df08c4ded9..fa9176306c 100644 --- a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandler.java +++ b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandler.java @@ -15,6 +15,7 @@ import io.fabric8.kubernetes.api.model.ExecAction; import io.fabric8.kubernetes.api.model.HTTPGetAction; +import io.fabric8.kubernetes.api.model.HTTPHeader; import io.fabric8.kubernetes.api.model.IntOrString; import io.fabric8.kubernetes.api.model.Probe; import io.fabric8.kubernetes.api.model.TCPSocketAction; @@ -24,8 +25,12 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Supplier; import static org.apache.commons.lang3.StringUtils.isNotBlank; +import static org.eclipse.jkube.kit.common.util.KubernetesHelper.convertMapToHTTPHeaderList; /** @@ -40,23 +45,12 @@ public Probe getProbe(ProbeConfig probeConfig) { } Probe probe = new Probe(); - Integer initialDelaySeconds = probeConfig.getInitialDelaySeconds(); - if (initialDelaySeconds != null) { - probe.setInitialDelaySeconds(initialDelaySeconds); - } - Integer timeoutSeconds = probeConfig.getTimeoutSeconds(); - if (timeoutSeconds != null) { - probe.setTimeoutSeconds(timeoutSeconds); - } - Integer failureThreshold = probeConfig.getFailureThreshold(); - if(failureThreshold != null) { - probe.setFailureThreshold(failureThreshold); - } - Integer successThreshold = probeConfig.getSuccessThreshold(); - if(successThreshold != null) { - probe.setSuccessThreshold(successThreshold); - } - HTTPGetAction getAction = getHTTPGetAction(probeConfig.getGetUrl()); + setTimeoutInProbeIfNotNull(probe, probeConfig::getInitialDelaySeconds, (i, p) -> p.setInitialDelaySeconds(i)); + setTimeoutInProbeIfNotNull(probe, probeConfig::getTimeoutSeconds, (i, p) -> p.setTimeoutSeconds(i)); + setTimeoutInProbeIfNotNull(probe, probeConfig::getFailureThreshold, (i, p) -> p.setFailureThreshold(i)); + setTimeoutInProbeIfNotNull(probe, probeConfig::getSuccessThreshold, (i, p) -> p.setSuccessThreshold(i)); + setTimeoutInProbeIfNotNull(probe, probeConfig::getPeriodSeconds, (i, p) -> p.setPeriodSeconds(i)); + HTTPGetAction getAction = getHTTPGetAction(probeConfig.getGetUrl(), probeConfig.getHttpHeaders()); if (getAction != null) { probe.setHttpGet(getAction); return probe; @@ -77,14 +71,16 @@ public Probe getProbe(ProbeConfig probeConfig) { // ======================================================================================== - private HTTPGetAction getHTTPGetAction(String getUrl) { + private HTTPGetAction getHTTPGetAction(String getUrl, Map headers) { if (getUrl == null || !getUrl.subSequence(0,4).toString().equalsIgnoreCase("http")) { return null; } try { URL url = new URL(getUrl); + List httpHeaders = convertMapToHTTPHeaderList(headers); + return new HTTPGetAction(url.getHost(), - null /* headers */, + httpHeaders.isEmpty() ? null : httpHeaders, url.getPath(), new IntOrString(url.getPort()), url.getProtocol().toUpperCase()); @@ -93,6 +89,14 @@ private HTTPGetAction getHTTPGetAction(String getUrl) { } } + @SuppressWarnings("java:S4276") // IntSupplier throws NullPointerException when unboxing null Integers + private void setTimeoutInProbeIfNotNull(Probe probe, Supplier integerSupplier, BiConsumer probeConsumer) { + Integer i = integerSupplier.get(); + if (i != null) { + probeConsumer.accept(i, probe); + } + } + private TCPSocketAction getTCPSocketAction(String getUrl, String port) { if (port != null) { IntOrString portObj = new IntOrString(port); diff --git a/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandlerTest.java b/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandlerTest.java index 1a3d4e4f9f..4476be1a35 100644 --- a/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandlerTest.java +++ b/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/handler/ProbeHandlerTest.java @@ -13,10 +13,15 @@ */ package org.eclipse.jkube.kit.enricher.handler; +import io.fabric8.kubernetes.api.model.IntOrString; import io.fabric8.kubernetes.api.model.Probe; import org.eclipse.jkube.kit.config.resource.ProbeConfig; import org.junit.Test; +import java.util.HashMap; +import java.util.Map; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -297,4 +302,50 @@ public void getTCPProbeWithInvalidURLTest() { probe = probeHandler.getProbe(probeConfig); } + + @Test + public void testHttpGetProbeWithLocalhostInUrl() { + // Given + probeConfig = ProbeConfig.builder() + .getUrl("http://:8080/healthz") + .build(); + + // When + probe = probeHandler.getProbe(probeConfig); + + // Then + assertThat(probe) + .isNotNull() + .hasFieldOrPropertyWithValue("httpGet.host", "") + .hasFieldOrPropertyWithValue("httpGet.scheme", "HTTP") + .hasFieldOrPropertyWithValue("httpGet.port", new IntOrString(8080)); + } + + @Test + public void testHttpGetProbeWithCustomHeaders() { + // Given + Map headers = new HashMap<>(); + headers.put("Accept", "application/json"); + headers.put("User-Agent", "MyUserAgent"); + probeConfig = ProbeConfig.builder() + .getUrl("https://www.example.com:8080/healthz") + .httpHeaders(headers) + .build(); + + // When + probe = probeHandler.getProbe(probeConfig); + + // Then + assertThat(probe) + .isNotNull() + .hasFieldOrPropertyWithValue("httpGet.host", "www.example.com") + .hasFieldOrPropertyWithValue("httpGet.port", new IntOrString(8080)) + .hasFieldOrPropertyWithValue("httpGet.scheme", "HTTPS") + .satisfies(p -> assertThat(p).extracting("httpGet.httpHeaders").asList().element(0) + .hasFieldOrPropertyWithValue("name", "Accept") + .hasFieldOrPropertyWithValue("value", "application/json")) + .satisfies(p -> assertThat(p).extracting("httpGet.httpHeaders").asList().element(1) + .hasFieldOrPropertyWithValue("name", "User-Agent") + .hasFieldOrPropertyWithValue("value", "MyUserAgent")); + } } diff --git a/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/_introduction.adoc b/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/_introduction.adoc index 09414a0041..2d3664c4f5 100644 --- a/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/_introduction.adoc +++ b/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/_introduction.adoc @@ -315,7 +315,7 @@ An extract of the plugin configuration is shown below: - http://localhost:8080/q/health + http://:8080/q/health 3 3 diff --git a/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/goals/build/_jkube-resource.adoc b/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/goals/build/_jkube-resource.adoc index 34e61e04e0..30695d9d40 100644 --- a/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/goals/build/_jkube-resource.adoc +++ b/kubernetes-maven-plugin/doc/src/main/asciidoc/inc/goals/build/_jkube-resource.adoc @@ -138,7 +138,7 @@ By default Deployment is generated in Kubernetes mode. You can easily configure Always 3 - http://localhost:8080/q/health + http://:8080/q/health 8080 3 3 @@ -219,7 +219,17 @@ Probe configuration is used for configuring https://kubernetes.io/docs/tasks/con | Command to execute for probing. | `getUrl` -| Probe this URL. +| Probe URL for HTTP Probe. Configures HTTP probe fields like `host`, `scheme`, `path` etc by parsing URL. For example, a `http://:8080/health` would result in probe generated with fields set like this: + + host: "" + + path: /actuator/health + + port: 8080 + + scheme: HTTP + +Host name with empty value defaults to Pod IP. You probably want to set "Host" in httpHeaders instead. | `tcpPort` | TCP port to probe. @@ -229,6 +239,12 @@ Probe configuration is used for configuring https://kubernetes.io/docs/tasks/con | `successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. + +| `httpHeaders` +| Custom headers to set in the request. + +| `periodSeconds` +| How often in seconds to perform the probe. Defaults to 10 seconds. Minimum value is 1. |=== [[volume-xml-configuration]] diff --git a/kubernetes-maven-plugin/it/src/it/probes-xml-config/expected/kubernetes.yml b/kubernetes-maven-plugin/it/src/it/probes-xml-config/expected/kubernetes.yml new file mode 100644 index 0000000000..b191c61c36 --- /dev/null +++ b/kubernetes-maven-plugin/it/src/it/probes-xml-config/expected/kubernetes.yml @@ -0,0 +1,124 @@ +# +# Copyright (c) 2019 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at: +# +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +--- +apiVersion: v1 +kind: List +items: +- apiVersion: v1 + kind: Service + metadata: + annotations: + jkube.io/git-commit: "@ignore@" + prometheus.io/scrape: "true" + jkube.io/git-branch: "@ignore@" + prometheus.io/port: "9779" + labels: + expose: "true" + provider: jkube + app: jkube-maven-sample-xml-probe-config + version: "@ignore@" + group: org.eclipse.jkube + name: jkube-maven-sample-xml-probe-config + spec: + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + selector: + app: jkube-maven-sample-xml-probe-config + provider: jkube + group: org.eclipse.jkube +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + jkube.io/git-commit: "@ignore@" + jkube.io/git-branch: "@ignore@" + labels: + provider: jkube + app: jkube-maven-sample-xml-probe-config + version: "@ignore@" + group: org.eclipse.jkube + name: jkube-maven-sample-xml-probe-config + spec: + replicas: 1 + selector: + matchLabels: + app: jkube-maven-sample-xml-probe-config + provider: jkube + group: org.eclipse.jkube + template: + metadata: + annotations: + jkube.io/git-commit: "@ignore@" + jkube.io/git-branch: "@ignore@" + labels: + provider: jkube + app: jkube-maven-sample-xml-probe-config + version: "@ignore@" + group: org.eclipse.jkube + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: "@matches('jkube/jkube-maven-sample-xml-probe-config:.*$')@" + imagePullPolicy: IfNotPresent + name: spring-boot + ports: + - containerPort: 8080 + name: http + protocol: TCP + - containerPort: 9779 + name: prometheus + protocol: TCP + - containerPort: 8778 + name: jolokia + protocol: TCP + securityContext: + privileged: false + readinessProbe: + failureThreshold: 1 + httpGet: + httpHeaders: + - name: Accept + value: application/json + - name: User-agent + value: MyUserAgent + path: /actuator/health + port: 8080 + scheme: HTTP + initialDelaySeconds: 0 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 10 + livenessProbe: + failureThreshold: 1 + httpGet: + httpHeaders: + - name: Accept + value: application/json + - name: User-agent + value: MyUserAgent + path: /actuator/health + port: 8080 + scheme: HTTP + initialDelaySeconds: 0 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 10 diff --git a/kubernetes-maven-plugin/it/src/it/probes-xml-config/invoker.properties b/kubernetes-maven-plugin/it/src/it/probes-xml-config/invoker.properties new file mode 100644 index 0000000000..23df5cf5f8 --- /dev/null +++ b/kubernetes-maven-plugin/it/src/it/probes-xml-config/invoker.properties @@ -0,0 +1,17 @@ +# +# Copyright (c) 2019 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at: +# +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +invoker.goals.1=clean k8s:resource +invoker.mavenOpts=-Djkube.verbose +invoker.debug=false \ No newline at end of file diff --git a/kubernetes-maven-plugin/it/src/it/probes-xml-config/pom.xml b/kubernetes-maven-plugin/it/src/it/probes-xml-config/pom.xml new file mode 100644 index 0000000000..ae527886f4 --- /dev/null +++ b/kubernetes-maven-plugin/it/src/it/probes-xml-config/pom.xml @@ -0,0 +1,84 @@ + + + + + 4.0.0 + + jkube-maven-sample-xml-probe-config + org.eclipse.jkube + 0.1-SNAPSHOT + jar + + + org.springframework.boot + spring-boot-starter-parent + 1.3.6.RELEASE + + + + + org.springframework.boot + spring-boot-starter-web + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.eclipse.jkube + kubernetes-maven-plugin + @jkube.version@ + + + + 0 + 10 + 30 + 1 + 1 + http://:8080/actuator/health + + application/json + MyUserAgent + + + + 0 + 10 + 30 + 1 + 1 + http://:8080/actuator/health + + application/json + MyUserAgent + + + + + + + + + + diff --git a/kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/Application.java b/kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/Application.java new file mode 100644 index 0000000000..15176271d2 --- /dev/null +++ b/kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/Application.java @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package zero; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} \ No newline at end of file diff --git a/kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/HelloController.java b/kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/HelloController.java new file mode 100644 index 0000000000..f2e3183c5d --- /dev/null +++ b/kubernetes-maven-plugin/it/src/it/probes-xml-config/src/main/java/probe/HelloController.java @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package zero; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HelloController { + + @RequestMapping("/") + public String index() { + return "Greetings from Spring Boot!"; + } + +} \ No newline at end of file diff --git a/kubernetes-maven-plugin/it/src/it/probes-xml-config/verify.groovy b/kubernetes-maven-plugin/it/src/it/probes-xml-config/verify.groovy new file mode 100644 index 0000000000..1680994cd5 --- /dev/null +++ b/kubernetes-maven-plugin/it/src/it/probes-xml-config/verify.groovy @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +import org.eclipse.jkube.maven.it.Verify + +import static org.junit.Assert.assertNotNull +import static org.junit.Assert.assertNull; + +[ "kubernetes" ].each { + Verify.verifyResourceDescriptors( + new File(basedir, sprintf("/target/classes/META-INF/jkube/%s.yml",it)), + new File(basedir, sprintf("/expected/%s.yml",it))) +} + +Map selector = Verify.readWithPath( + new File(basedir,"/target/classes/META-INF/jkube/kubernetes/jkube-maven-sample-xml-probe-config-deployment.yml"), + "spec.selector.matchLabels") + +assertNotNull(selector) +assertNull(selector.get("version")) + +true