From 6f9190164d046fbc0441965834e7cffba6b6483b Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 28 Jul 2020 13:56:01 -0500 Subject: [PATCH 01/11] disable and enable k8s configuration feature with a relevant property fixes gh-585 --- .gitignore | 1 + .../reload/ConfigReloadAutoConfiguration.java | 6 +- .../KubernetesConfigConfigurationTest.java | 81 +++++++--------- .../config/KubernetesConfigTestBase.java | 69 +++++++++++++ .../ConfigReloadAutoConfigurationTest.java | 97 +++++++++++++++++++ 5 files changed, 206 insertions(+), 48 deletions(-) create mode 100644 spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java create mode 100644 spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java diff --git a/.gitignore b/.gitignore index 6ac078fa..d621e19f 100644 --- a/.gitignore +++ b/.gitignore @@ -63,6 +63,7 @@ hs_err_pid* # IntelliJ /out/ +.DS_Store # mpeltonen/sbt-idea plugin .idea_modules/ diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java index 8b0d33e6..3141c161 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java @@ -48,7 +48,8 @@ import org.springframework.util.Assert; * @author Nicolla Ferraro */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty(value = "spring.cloud.kubernetes.enabled", matchIfMissing = true) +@ConditionalOnProperty(name = "spring.cloud.kubernetes.config.enabled", + havingValue = "true") @ConditionalOnClass(EndpointAutoConfiguration.class) @AutoConfigureAfter({ InfoEndpointAutoConfiguration.class, RefreshEndpointAutoConfiguration.class, RefreshAutoConfiguration.class }) @@ -59,7 +60,8 @@ public class ConfigReloadAutoConfiguration { /** * Configuration reload must be enabled explicitly. */ - @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") + @ConditionalOnProperty(name = "spring.cloud.kubernetes.reload.enabled", + havingValue = "true") @ConditionalOnClass({ RestartEndpoint.class, ContextRefresher.class }) @EnableScheduling @EnableAsync diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java index c3c36f36..867c2575 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java @@ -16,71 +16,60 @@ package org.springframework.cloud.kubernetes.config; -import io.fabric8.kubernetes.client.KubernetesClient; -import org.junit.After; import org.junit.Test; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; /** * @author Ryan Dawson */ -public class KubernetesConfigConfigurationTest { +public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase { - private ConfigurableApplicationContext context; - - @After - public void close() { - if (this.context != null) { - this.context.close(); - } + @Test + public void kubernetesDefaultEnabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); } @Test public void kubernetesWhenKubernetesDisabled() throws Exception { setup("spring.cloud.kubernetes.enabled=false"); - assertThat(this.context.containsBean("configMapPropertySourceLocator")).isFalse(); - assertThat(this.context.containsBean("secretsPropertySourceLocator")).isFalse(); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + } + + @Test + public void kubernetesConfigDefaultEnabled() throws Exception { + setup("spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + } + + @Test + public void kubernetesConfigwhenKubenretesEnabledAndKubernetsConfigDisabled() + throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=false"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); } @Test public void kubernetesWhenKubernetesConfigDisabled() throws Exception { setup("spring.cloud.kubernetes.config.enabled=false", "spring.cloud.kubernetes.secrets.enabled=false"); - assertThat(this.context.containsBean("configMapPropertySourceLocator")).isFalse(); - assertThat(this.context.containsBean("secretsPropertySourceLocator")).isFalse(); - } - - @Test - public void kubernetesDefaultEnabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true"); - assertThat(this.context.containsBean("configMapPropertySourceLocator")).isTrue(); - assertThat(this.context.containsBean("secretsPropertySourceLocator")).isTrue(); - } - - private void setup(String... env) { - this.context = new SpringApplicationBuilder( - PropertyPlaceholderAutoConfiguration.class, - KubernetesClientTestConfiguration.class, BootstrapConfiguration.class) - .web(org.springframework.boot.WebApplicationType.NONE) - .properties(env).run(); - } - - @Configuration(proxyBeanMethods = false) - static class KubernetesClientTestConfiguration { - - @Bean - KubernetesClient kubernetesClient() { - return mock(KubernetesClient.class); - } - + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); } } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java new file mode 100644 index 00000000..69283191 --- /dev/null +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.kubernetes.config; + +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import org.junit.After; +import org.junit.ClassRule; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Haytham Mohamed + **/ +public class KubernetesConfigTestBase { + + private static ConfigurableApplicationContext context; + + @ClassRule + public static KubernetesServer server = new KubernetesServer(); + + protected static ConfigurableApplicationContext getContext() { + return context; + } + + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + + protected static void setup(String... env) { + context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class, + KubernetesClientTestConfiguration.class, BootstrapConfiguration.class) + .web(org.springframework.boot.WebApplicationType.NONE) + .properties(env).run(); + } + + @Configuration(proxyBeanMethods = false) + private static class KubernetesClientTestConfiguration { + + @ConditionalOnMissingBean(KubernetesClient.class) + @Bean + KubernetesClient kubernetesClient() { + return server.getClient(); + } + + } + +} diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java new file mode 100644 index 00000000..b40a7f10 --- /dev/null +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -0,0 +1,97 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.kubernetes.config.reload; + +import java.util.HashMap; + +import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.KubernetesClient; +import org.junit.BeforeClass; +import org.junit.Test; + +import org.springframework.cloud.kubernetes.config.KubernetesConfigTestBase; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Haytham Mohamed + * + * To test if either kubernetes, kubernetes.configmap, or reload is disabled, then the + * detector and update strategy beans won't be available. + **/ + +public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase { + + private static final String APPLICATION_NAME = "application"; + + @Test + public void kubernetesConfigReloadDisabled() throws Exception { + setup("spring.cloud.kubernetes.reload.enabled=false"); + assertThat(this.getContext().containsBean("configurationChangeDetector")) + .isFalse(); + assertThat(this.getContext().containsBean("configurationUpdateStrategy")) + .isFalse(); + } + + @Test + public void kubernetesConfigReloadWhenKubernetesConfigDisabled() throws Exception { + setup("spring.cloud.kubernetes.config.enabled=false"); + assertThat(this.getContext().containsBean("configurationChangeDetector")) + .isFalse(); + assertThat(this.getContext().containsBean("configurationUpdateStrategy")) + .isFalse(); + } + + @Test + public void kubernetesConfigReloadWhenKubernetesDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=false"); + assertThat(this.getContext().containsBean("configurationChangeDetector")) + .isFalse(); + assertThat(this.getContext().containsBean("configurationUpdateStrategy")) + .isFalse(); + } + + @BeforeClass + public static void setUpBeforeClass() { + + setup(); + KubernetesClient mockClient = getContext().getBean(KubernetesClient.class); + + // Configure the kubernetes master url to point to the mock server + System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, + mockClient.getConfiguration().getMasterUrl()); + System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); + System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, + "false"); + System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); + System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); + + HashMap data = new HashMap<>(); + data.put("bean.greeting", "Hello ConfigMap, %s!"); + server.expect().withPath("/api/v1/namespaces/test/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + server.expect() + .withPath("/api/v1/namespaces/spring/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + } + +} From 4985ab54509b43fb4dde23e50d09ae4cc69af23d Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Wed, 29 Jul 2020 21:14:38 -0500 Subject: [PATCH 02/11] adjust conditionalOnProperty annotation values --- .../reload/ConfigReloadAutoConfiguration.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java index 3141c161..62cb04c8 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java @@ -48,8 +48,10 @@ import org.springframework.util.Assert; * @author Nicolla Ferraro */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty(name = "spring.cloud.kubernetes.config.enabled", - havingValue = "true") +@ConditionalOnProperty( + value = { "spring.cloud.kubernetes.config.enabled", + "spring.cloud.kubernetes.enabled" }, + matchIfMissing = true, havingValue = "true") @ConditionalOnClass(EndpointAutoConfiguration.class) @AutoConfigureAfter({ InfoEndpointAutoConfiguration.class, RefreshEndpointAutoConfiguration.class, RefreshAutoConfiguration.class }) @@ -60,8 +62,11 @@ public class ConfigReloadAutoConfiguration { /** * Configuration reload must be enabled explicitly. */ - @ConditionalOnProperty(name = "spring.cloud.kubernetes.reload.enabled", - havingValue = "true") + @ConditionalOnProperty( + value = { "spring.cloud.kubernetes.config.enabled", + "spring.cloud.kubernetes.reload.enabled" }, + matchIfMissing = true, havingValue = "true") + // @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") @ConditionalOnClass({ RestartEndpoint.class, ContextRefresher.class }) @EnableScheduling @EnableAsync From 68da02e3a099a11fc51e89c416bc79d75fcd7e1c Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Wed, 29 Jul 2020 21:14:53 -0500 Subject: [PATCH 03/11] adjust conditionalOnProperty annotation values --- .../config/reload/ConfigReloadAutoConfiguration.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java index 62cb04c8..a676dae8 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java @@ -48,10 +48,8 @@ import org.springframework.util.Assert; * @author Nicolla Ferraro */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty( - value = { "spring.cloud.kubernetes.config.enabled", - "spring.cloud.kubernetes.enabled" }, - matchIfMissing = true, havingValue = "true") +@ConditionalOnProperty(value = { "spring.cloud.kubernetes.config.enabled", + "spring.cloud.kubernetes.enabled" }, matchIfMissing = true) @ConditionalOnClass(EndpointAutoConfiguration.class) @AutoConfigureAfter({ InfoEndpointAutoConfiguration.class, RefreshEndpointAutoConfiguration.class, RefreshAutoConfiguration.class }) @@ -62,11 +60,7 @@ public class ConfigReloadAutoConfiguration { /** * Configuration reload must be enabled explicitly. */ - @ConditionalOnProperty( - value = { "spring.cloud.kubernetes.config.enabled", - "spring.cloud.kubernetes.reload.enabled" }, - matchIfMissing = true, havingValue = "true") - // @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") + @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") @ConditionalOnClass({ RestartEndpoint.class, ContextRefresher.class }) @EnableScheduling @EnableAsync From 030bbf475dc09ab94d98de333356173416a3d185 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Thu, 30 Jul 2020 08:36:57 -0500 Subject: [PATCH 04/11] fix existing java doc --- .../java/org/springframework/cloud/kubernetes/PodUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java b/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java index a349932b..b3a6aed7 100644 --- a/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java +++ b/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java @@ -29,7 +29,7 @@ public interface PodUtils { /** * @return A supplier of the currentPod {@link Pod}. The supplier will hold the - * currentPod {@Pod} if inside Kubernetes or false, otherwise. + * currentPod {@link Pod} if inside Kubernetes or false, otherwise. */ Supplier currentPod(); From 7e7669c8e04aba4e2e1e5e37be803e731130f42d Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Thu, 30 Jul 2020 09:39:53 -0500 Subject: [PATCH 05/11] fix build check style --- .../cloud/kubernetes/config/KubernetesConfigTestBase.java | 1 + .../config/reload/ConfigReloadAutoConfigurationTest.java | 3 ++- .../cloud/kubernetes/ribbon/RibbonFallbackTest.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java index 69283191..ab3d552d 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.cloud.kubernetes.config; import io.fabric8.kubernetes.client.KubernetesClient; diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java index b40a7f10..3c32445f 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2013-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.cloud.kubernetes.config.reload; import java.util.HashMap; diff --git a/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java b/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java index bb14424b..e71cdaf7 100644 --- a/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java +++ b/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java @@ -100,7 +100,7 @@ public class RibbonFallbackTest { .addNewAddress() .withIp(mockServer.getHostName()) .endAddress() - .addNewPort("http", "http_tcp",mockServer.getPort(), "http") + .addNewPort("http", "http_tcp", mockServer.getPort(), "http") .endSubset() .build(); // @formatter:on From 81e9b90848d4cc69f520fa5454adc2cb1b157573 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 1 Dec 2020 12:14:30 -0600 Subject: [PATCH 06/11] resolve conflict --- .../KubernetesConfigConfigurationTest.java | 84 ++++++++++++++++--- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java index 867c2575..54b8e23a 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase { @Test - public void kubernetesDefaultEnabled() throws Exception { + public void kubernetesWhenKubernetesDefaultEnabled() throws Exception { setup("spring.cloud.kubernetes.enabled=true"); assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) .isTrue(); @@ -44,7 +44,77 @@ public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase } @Test - public void kubernetesConfigDefaultEnabled() throws Exception { + public void kubernetesWhenKubernetesConfigAndSecretDisabled() throws Exception { + setup("spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=false"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + } + + @Test + public void kubernetesWhenKubernetesConfigEnabledButSecretDisabled() + throws Exception { + setup("spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=false"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + } + + @Test + public void kubernetesWhenKubernetesConfigDisabledButSecretEnabled() + throws Exception { + setup("spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + } + + @Test + public void kubernetesReloadEnabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretAndConfigDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); + } + + @Test + public void kubernetesConfigwhenKubenretesEnabledAndKubernetsConfigEnabled() + throws Exception { setup("spring.cloud.kubernetes.config.enabled=true", "spring.cloud.kubernetes.secrets.enabled=true"); assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) @@ -62,14 +132,4 @@ public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase .isFalse(); } - @Test - public void kubernetesWhenKubernetesConfigDisabled() throws Exception { - setup("spring.cloud.kubernetes.config.enabled=false", - "spring.cloud.kubernetes.secrets.enabled=false"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isFalse(); - } - } From 6572142a2176fe81f678af18c9ce9073b4451d29 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 1 Dec 2020 14:03:59 -0600 Subject: [PATCH 07/11] fix merged tests --- .../KubernetesConfigConfigurationTest.java | 37 --------------- .../config/KubernetesConfigTestBase.java | 6 ++- .../ConfigReloadAutoConfigurationTest.java | 46 +++++++++++++++++-- 3 files changed, 46 insertions(+), 43 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java index 54b8e23a..e9aa60e0 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java @@ -75,43 +75,6 @@ public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase .isTrue(); } - @Test - public void kubernetesReloadEnabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true", - "spring.cloud.kubernetes.reload.enabled=true"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isTrue(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isTrue(); - assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); - } - - @Test - public void kubernetesReloadEnabledButSecretDisabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true", - "spring.cloud.kubernetes.config.enabled=true", - "spring.cloud.kubernetes.secrets.enabled=false", - "spring.cloud.kubernetes.reload.enabled=true"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isTrue(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); - } - - @Test - public void kubernetesReloadEnabledButSecretAndConfigDisabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true", - "spring.cloud.kubernetes.config.enabled=false", - "spring.cloud.kubernetes.secrets.enabled=false", - "spring.cloud.kubernetes.reload.enabled=true"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); - } - @Test public void kubernetesConfigwhenKubenretesEnabledAndKubernetsConfigEnabled() throws Exception { diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java index ab3d552d..c2ecce96 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -20,10 +20,11 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; import org.junit.After; import org.junit.ClassRule; - import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; +import org.springframework.cloud.kubernetes.config.reload.ConfigReloadAutoConfiguration; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -51,7 +52,8 @@ public class KubernetesConfigTestBase { protected static void setup(String... env) { context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class, - KubernetesClientTestConfiguration.class, BootstrapConfiguration.class) + KubernetesClientTestConfiguration.class, BootstrapConfiguration.class, + ConfigReloadAutoConfiguration.class, RefreshAutoConfiguration.class) .web(org.springframework.boot.WebApplicationType.NONE) .properties(env).run(); } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java index 3c32445f..d44e63cf 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -16,17 +16,16 @@ package org.springframework.cloud.kubernetes.config.reload; -import java.util.HashMap; - import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import org.junit.BeforeClass; import org.junit.Test; - import org.springframework.cloud.kubernetes.config.KubernetesConfigTestBase; -import static org.assertj.core.api.Assertions.assertThat; +import java.util.HashMap; + +import static org.assertj.core.api.Assertions.*; /** * @author Haytham Mohamed @@ -66,6 +65,45 @@ public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase .isFalse(); } + @Test + public void kubernetesReloadEnabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=true", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretAndConfigDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); + } + @BeforeClass public static void setUpBeforeClass() { From 65d5e96da9f46b42958f424d9c842f2eacf05920 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 1 Dec 2020 15:51:47 -0600 Subject: [PATCH 08/11] style checked for config module --- .../config/KubernetesConfigTestBase.java | 19 +++--- .../ConfigReloadAutoConfigurationTest.java | 65 ++++++++++--------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java index c2ecce96..f37b6d00 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -20,6 +20,7 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; import org.junit.After; import org.junit.ClassRule; + import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -34,22 +35,15 @@ import org.springframework.context.annotation.Configuration; **/ public class KubernetesConfigTestBase { - private static ConfigurableApplicationContext context; - @ClassRule public static KubernetesServer server = new KubernetesServer(); + private static ConfigurableApplicationContext context; + protected static ConfigurableApplicationContext getContext() { return context; } - @After - public void close() { - if (this.context != null) { - this.context.close(); - } - } - protected static void setup(String... env) { context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class, KubernetesClientTestConfiguration.class, BootstrapConfiguration.class, @@ -58,6 +52,13 @@ public class KubernetesConfigTestBase { .properties(env).run(); } + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + @Configuration(proxyBeanMethods = false) private static class KubernetesClientTestConfiguration { diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java index d44e63cf..53d26bd6 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -16,16 +16,17 @@ package org.springframework.cloud.kubernetes.config.reload; +import java.util.HashMap; + import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import org.junit.BeforeClass; import org.junit.Test; + import org.springframework.cloud.kubernetes.config.KubernetesConfigTestBase; -import java.util.HashMap; - -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; /** * @author Haytham Mohamed @@ -38,6 +39,35 @@ public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase private static final String APPLICATION_NAME = "application"; + @BeforeClass + public static void setUpBeforeClass() { + + setup(); + KubernetesClient mockClient = getContext().getBean(KubernetesClient.class); + + // Configure the kubernetes master url to point to the mock server + System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, + mockClient.getConfiguration().getMasterUrl()); + System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); + System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, + "false"); + System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); + System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); + + HashMap data = new HashMap<>(); + data.put("bean.greeting", "Hello ConfigMap, %s!"); + server.expect().withPath("/api/v1/namespaces/test/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + server.expect() + .withPath("/api/v1/namespaces/spring/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + } + @Test public void kubernetesConfigReloadDisabled() throws Exception { setup("spring.cloud.kubernetes.reload.enabled=false"); @@ -104,33 +134,4 @@ public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); } - @BeforeClass - public static void setUpBeforeClass() { - - setup(); - KubernetesClient mockClient = getContext().getBean(KubernetesClient.class); - - // Configure the kubernetes master url to point to the mock server - System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, - mockClient.getConfiguration().getMasterUrl()); - System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); - System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); - System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, - "false"); - System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); - System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); - - HashMap data = new HashMap<>(); - data.put("bean.greeting", "Hello ConfigMap, %s!"); - server.expect().withPath("/api/v1/namespaces/test/configmaps/" + APPLICATION_NAME) - .andReturn(200, new ConfigMapBuilder().withNewMetadata() - .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) - .always(); - server.expect() - .withPath("/api/v1/namespaces/spring/configmaps/" + APPLICATION_NAME) - .andReturn(200, new ConfigMapBuilder().withNewMetadata() - .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) - .always(); - } - } From a70db321a585c417bffd1316a21d434e444f86a7 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 19 Jan 2021 17:38:05 +0100 Subject: [PATCH 09/11] Update minikube guide links. --- .../kubernetes-circuitbreaker-ribbon-example/readme.md | 2 +- .../kubernetes-hello-world-example/README.md | 2 +- .../kubernetes-leader-election-example/README.md | 2 +- .../kubernetes-loadbalancer-example/README.md | 2 +- .../kubernetes-reload-example/README.md | 2 +- .../kubernetes-zipkin-example/README.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-cloud-kubernetes-examples/kubernetes-circuitbreaker-ribbon-example/readme.md b/spring-cloud-kubernetes-examples/kubernetes-circuitbreaker-ribbon-example/readme.md index 4e7e2002..4a36f1d5 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-circuitbreaker-ribbon-example/readme.md +++ b/spring-cloud-kubernetes-examples/kubernetes-circuitbreaker-ribbon-example/readme.md @@ -5,7 +5,7 @@ As the Ribbon Kubernetes client is configured within this example, it will fetch ### Running the example -This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minishift - OpenShift](https://github.com/minishift/minishift) or [Minikube - Kubernetes](https://kubernetes.io/docs/getting-started-guides/minikube/) tool +This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minishift - OpenShift](https://github.com/minishift/minishift) or [Minikube - Kubernetes](https://minikube.sigs.k8s.io/docs/start/) tool to install the platform locally within a virtual machine managed by VirtualBox, Xhyve or KVM, with no fuss. ### Build/Deploy using Minikube diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md index 6c93f4aa..7b929433 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md @@ -1,6 +1,6 @@ # Setting up the Environment -To play with these examples, you can install locally Kubernetes & Docker using `[Minikube](https://kubernetes.io/docs/getting-started-guides/minikube/)` within a Virtual Machine +To play with these examples, you can install locally Kubernetes & Docker using [Minikube](https://minikube.sigs.k8s.io/docs/start/) within a Virtual Machine managed by a hypervisor (Xhyve, Virtualbox or KVM) if your machine is not a native Unix operating system. diff --git a/spring-cloud-kubernetes-examples/kubernetes-leader-election-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-leader-election-example/README.md index ad953e0b..530db828 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-leader-election-example/README.md +++ b/spring-cloud-kubernetes-examples/kubernetes-leader-election-example/README.md @@ -3,7 +3,7 @@ ## Setting up the Environment This example uses a Fabric8 Maven Plugin to deploy an application to a Kubernetes cluster. -To try it locally, download and install `[Minikube](https://kubernetes.io/docs/getting-started-guides/minikube/)`. +To try it locally, download and install [Minikube](https://minikube.sigs.k8s.io/docs/start/). Once Minikube is downloaded, start it with the following command: ``` diff --git a/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md index 27c01a76..93b8bdef 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md +++ b/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md @@ -5,7 +5,7 @@ As the Spring Cloud LoadBalancer for Kubernetes is configured within this exampl ### Running the example -This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minikube - Kubernetes](https://kubernetes.io/docs/getting-started-guides/minikube/) tool +This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minikube - Kubernetes](https://minikube.sigs.k8s.io/docs/start/) tool to install the platform locally within a virtual machine managed by VirtualBox, Xhyve or KVM, with no fuss. IMPORTANT: In order for this setup to work, you need to grant permissions to retrieve "pods", "services" and "enpoints" to the serviceaccont that will be used with the greeting-service. diff --git a/spring-cloud-kubernetes-examples/kubernetes-reload-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-reload-example/README.md index 8877ef44..ccc9ab64 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-reload-example/README.md +++ b/spring-cloud-kubernetes-examples/kubernetes-reload-example/README.md @@ -1,7 +1,7 @@ # Setting up the Environment -To play with these examples, you can install locally Kubernetes & Docker using `[Minikube](https://kubernetes.io/docs/getting-started-guides/minikube/)` within a Virtual Machine +To play with these examples, you can install locally Kubernetes & Docker using [Minikube](https://minikube.sigs.k8s.io/docs/start/) within a Virtual Machine managed by a hypervisor (Xhyve, Virtualbox or KVM) if your machine is not a native Unix operating system. diff --git a/spring-cloud-kubernetes-examples/kubernetes-zipkin-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-zipkin-example/README.md index db1650c6..ac68cb44 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-zipkin-example/README.md +++ b/spring-cloud-kubernetes-examples/kubernetes-zipkin-example/README.md @@ -31,7 +31,7 @@ it will issue a call against the second endpoint `/hi` and you will receive `/hi ### Running the example -This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minishift - OpenShift](https://github.com/minishift/minishift) or [Minikube - Kubernetes](https://kubernetes.io/docs/getting-started-guides/minikube/) tool +This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minishift - OpenShift](https://github.com/minishift/minishift) or [Minikube - Kubernetes](https://minikube.sigs.k8s.io/docs/start/) tool to install the platform locally within a virtual machine managed by VirtualBox, Xhyve or KVM, with no fuss. ### Build/Deploy using Minikube From caa4abf015b011d5306cbadbc00ab96b9ed63a09 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 19 Jan 2021 17:38:45 +0100 Subject: [PATCH 10/11] Fix lb example readme. --- .../kubernetes-loadbalancer-example/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md index 93b8bdef..6b6c5347 100644 --- a/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md +++ b/spring-cloud-kubernetes-examples/kubernetes-loadbalancer-example/README.md @@ -8,12 +8,17 @@ As the Spring Cloud LoadBalancer for Kubernetes is configured within this exampl This project example runs on ALL the Kubernetes or OpenShift environments, but for development purposes you can use [Minikube - Kubernetes](https://minikube.sigs.k8s.io/docs/start/) tool to install the platform locally within a virtual machine managed by VirtualBox, Xhyve or KVM, with no fuss. -IMPORTANT: In order for this setup to work, you need to grant permissions to retrieve "pods", "services" and "enpoints" to the serviceaccont that will be used with the greeting-service. +IMPORTANT: In order for this setup to work, you need to grant permissions to retrieve "pods", "services" and "endpoints" to the serviceaccount that will be used with the greeting-service. ### Build/Deploy using Minikube First, create a new virtual machine provisioned with Kubernetes on your laptop using the command `minikube start`. +You also probably want to configure your Docker client to point the minikube Docker daemon with: +``` +eval $(minikube docker-env) +``` + Next, you can compile your project and generate the Kubernetes resources (yaml files containing the definition of the pod, deployment, build, service and route to be created) like also to deploy the application on Kubernetes in one maven line by running: From 4b49394e0ad8b528128246561546b106e23248bd Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 8 Feb 2021 14:44:57 -0500 Subject: [PATCH 11/11] Updating Fabirc8 Version to 4.13.2 --- spring-cloud-kubernetes-dependencies/pom.xml | 2 +- .../kubernetes/discovery/KubernetesClientServicesFunction.java | 3 +-- .../discovery/KubernetesDiscoveryClientFilterMetadataTest.java | 3 +-- .../loadbalancer/KubernetesServiceListSupplierTests.java | 3 +-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/spring-cloud-kubernetes-dependencies/pom.xml b/spring-cloud-kubernetes-dependencies/pom.xml index c27479dd..b15c34af 100644 --- a/spring-cloud-kubernetes-dependencies/pom.xml +++ b/spring-cloud-kubernetes-dependencies/pom.xml @@ -35,7 +35,7 @@ 1.4.0.Final 1.15.2 0.13.0 - 4.10.3 + 4.13.2 1.0.0 0.1.2 3.14.4 diff --git a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesClientServicesFunction.java b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesClientServicesFunction.java index 00a70782..9e001ee4 100644 --- a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesClientServicesFunction.java +++ b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesClientServicesFunction.java @@ -22,7 +22,6 @@ import io.fabric8.kubernetes.api.model.Service; import io.fabric8.kubernetes.api.model.ServiceList; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; /** @@ -44,6 +43,6 @@ import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; * @author Georgios Andrianakis */ public interface KubernetesClientServicesFunction extends - Function>> { + Function> { } diff --git a/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientFilterMetadataTest.java b/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientFilterMetadataTest.java index c001699b..d95db127 100644 --- a/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientFilterMetadataTest.java +++ b/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientFilterMetadataTest.java @@ -36,7 +36,6 @@ import io.fabric8.kubernetes.api.model.ServicePort; import io.fabric8.kubernetes.api.model.ServicePortBuilder; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; @@ -86,7 +85,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { private Resource endpointsResource; @Mock - FilterWatchListDeletable> filter; + FilterWatchListDeletable filter; @InjectMocks private KubernetesDiscoveryClient underTest; diff --git a/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceListSupplierTests.java b/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceListSupplierTests.java index 9dd9c0ad..311d31fe 100644 --- a/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceListSupplierTests.java +++ b/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceListSupplierTests.java @@ -24,7 +24,6 @@ import io.fabric8.kubernetes.api.model.ServiceBuilder; import io.fabric8.kubernetes.api.model.ServiceList; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; @@ -65,7 +64,7 @@ class KubernetesServiceListSupplierTests { ServiceResource serviceResource; @Mock - FilterWatchListMultiDeletable> multiDeletable; + FilterWatchListMultiDeletable multiDeletable; @Test void testPositiveMatch() {