From 9ae00851a0fa0c7c132fe9a97c8aeb29d76c6d47 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 10 Feb 2025 07:56:42 +0530 Subject: [PATCH 01/19] initial commit, crearting factory Signed-off-by: Arjav --- ...bernetesConfigServerAutoConfiguration.java | 27 +++++++++++++---- .../KubernetesConfigServerProperties.java | 11 ++++++- ...ubernetesEnvironmentRepositoryFactory.java | 30 +++++++++++++++++++ .../src/main/resources/application.yaml | 7 +++++ 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 1028151d1d..f0d52d6a8f 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -21,6 +21,8 @@ import io.kubernetes.client.openapi.apis.CoreV1Api; +import io.micrometer.observation.ObservationRegistry; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; @@ -28,7 +30,10 @@ import org.springframework.boot.cloud.CloudPlatform; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration; +import org.springframework.cloud.config.server.config.ConfigServerProperties; import org.springframework.cloud.config.server.environment.EnvironmentRepository; +import org.springframework.cloud.config.server.environment.NativeEnvironmentProperties; +import org.springframework.cloud.config.server.environment.NativeEnvironmentRepositoryFactory; import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration; import org.springframework.cloud.kubernetes.client.config.KubernetesClientConfigContext; import org.springframework.cloud.kubernetes.client.config.KubernetesClientConfigMapPropertySource; @@ -43,6 +48,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import static org.springframework.cloud.kubernetes.configserver.KubernetesPropertySourceSupplier.namespaceSplitter; @@ -53,17 +59,26 @@ @Configuration @AutoConfigureAfter({ KubernetesClientAutoConfiguration.class }) @AutoConfigureBefore({ ConfigServerAutoConfiguration.class }) -@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) +//@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) @EnableConfigurationProperties(KubernetesConfigServerProperties.class) public class KubernetesConfigServerAutoConfiguration { + @Configuration(proxyBeanMethods = false) + static class KubernetesFactoryConfig { + + @Bean + public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( + List kubernetesPropertySourceSupplierList) { + return new KubernetesEnvironmentRepositoryFactory(kubernetesPropertySourceSupplierList); + } + + } + @Bean @Profile("kubernetes") - public EnvironmentRepository kubernetesEnvironmentRepository(CoreV1Api coreV1Api, - List kubernetesPropertySourceSuppliers, - KubernetesNamespaceProvider kubernetesNamespaceProvider) { - return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, - kubernetesNamespaceProvider.getNamespace()); + public EnvironmentRepository kubernetesEnvironmentRepository(KubernetesEnvironmentRepositoryFactory factory, + KubernetesConfigServerProperties environmentProperties) { + return factory.build(environmentProperties); } @Bean diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java index 1e753994ba..ebf47a3689 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java @@ -17,13 +17,15 @@ package org.springframework.cloud.kubernetes.configserver; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.config.server.support.EnvironmentRepositoryProperties; /** * @author Ryan Baxter */ @ConfigurationProperties("spring.cloud.kubernetes.configserver") -public class KubernetesConfigServerProperties { +public class KubernetesConfigServerProperties implements EnvironmentRepositoryProperties { + private int order = Integer.MAX_VALUE; private String configMapNamespaces = ""; @@ -45,4 +47,11 @@ public void setSecretsNamespaces(String secretsNamespaces) { this.secretsNamespaces = secretsNamespaces; } + public int getOrder() { + return this.order; + } + + public void setOrder(int order) { + this.order = order; + } } diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java new file mode 100644 index 0000000000..1cb234aa70 --- /dev/null +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java @@ -0,0 +1,30 @@ +package org.springframework.cloud.kubernetes.configserver; + +import io.kubernetes.client.openapi.apis.CoreV1Api; +import org.springframework.cloud.config.server.environment.EnvironmentRepositoryFactory; +import org.springframework.context.annotation.Bean; + +import java.util.List; + +/** + * Factory for creating {@link KubernetesEnvironmentRepository} instances. + */ +public class KubernetesEnvironmentRepositoryFactory + implements EnvironmentRepositoryFactory { + + private final List kubernetesPropertySourceSupplierList; + + public KubernetesEnvironmentRepositoryFactory( + List kubernetesPropertySourceSupplierList + ) { + this.kubernetesPropertySourceSupplierList = kubernetesPropertySourceSupplierList; + } + + @Override + public KubernetesEnvironmentRepository build(KubernetesConfigServerProperties environmentProperties) { + CoreV1Api coreApi = new CoreV1Api(); + String namespace = environmentProperties.getSecretsNamespaces() != null ? environmentProperties.getSecretsNamespaces() : "default"; + return new KubernetesEnvironmentRepository(coreApi, this.kubernetesPropertySourceSupplierList, namespace); + } + +} diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml index 3449d2b60a..ab33cff1e8 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml @@ -1,4 +1,11 @@ spring: + cloud: + config: + server: + composite: + - type: kubernetes + profiles: + active: composite application: name: kubernetesconfigserver From e36b45241cb0fb8e4641c3469bf3c2dfb80a4b53 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 10 Feb 2025 12:06:52 +0530 Subject: [PATCH 02/19] testing default Signed-off-by: Arjav --- ...bernetesConfigServerAutoConfiguration.java | 22 +++++++------------ ...ubernetesEnvironmentRepositoryFactory.java | 22 ++++++++----------- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index f0d52d6a8f..7cbd937f93 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -21,19 +21,12 @@ import io.kubernetes.client.openapi.apis.CoreV1Api; -import io.micrometer.observation.ObservationRegistry; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.cloud.CloudPlatform; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration; -import org.springframework.cloud.config.server.config.ConfigServerProperties; import org.springframework.cloud.config.server.environment.EnvironmentRepository; -import org.springframework.cloud.config.server.environment.NativeEnvironmentProperties; -import org.springframework.cloud.config.server.environment.NativeEnvironmentRepositoryFactory; import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration; import org.springframework.cloud.kubernetes.client.config.KubernetesClientConfigContext; import org.springframework.cloud.kubernetes.client.config.KubernetesClientConfigMapPropertySource; @@ -48,7 +41,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import static org.springframework.cloud.kubernetes.configserver.KubernetesPropertySourceSupplier.namespaceSplitter; @@ -67,18 +59,20 @@ public class KubernetesConfigServerAutoConfiguration { static class KubernetesFactoryConfig { @Bean - public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( - List kubernetesPropertySourceSupplierList) { - return new KubernetesEnvironmentRepositoryFactory(kubernetesPropertySourceSupplierList); + public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory(CoreV1Api coreV1Api, + List kubernetesPropertySourceSupplierList) { + return new KubernetesEnvironmentRepositoryFactory(coreV1Api, kubernetesPropertySourceSupplierList); } } @Bean @Profile("kubernetes") - public EnvironmentRepository kubernetesEnvironmentRepository(KubernetesEnvironmentRepositoryFactory factory, - KubernetesConfigServerProperties environmentProperties) { - return factory.build(environmentProperties); + public EnvironmentRepository kubernetesEnvironmentRepository(CoreV1Api coreV1Api, + List kubernetesPropertySourceSuppliers, + KubernetesNamespaceProvider kubernetesNamespaceProvider) { + return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, + kubernetesNamespaceProvider.getNamespace()); } @Bean diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java index 1cb234aa70..ba3142e721 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java @@ -2,29 +2,25 @@ import io.kubernetes.client.openapi.apis.CoreV1Api; import org.springframework.cloud.config.server.environment.EnvironmentRepositoryFactory; -import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; import java.util.List; -/** - * Factory for creating {@link KubernetesEnvironmentRepository} instances. - */ +@Component public class KubernetesEnvironmentRepositoryFactory implements EnvironmentRepositoryFactory { - private final List kubernetesPropertySourceSupplierList; + private final CoreV1Api coreV1Api; + private final List kubernetesPropertySourceSuppliers; - public KubernetesEnvironmentRepositoryFactory( - List kubernetesPropertySourceSupplierList - ) { - this.kubernetesPropertySourceSupplierList = kubernetesPropertySourceSupplierList; + public KubernetesEnvironmentRepositoryFactory(CoreV1Api coreV1Api, + List kubernetesPropertySourceSuppliers) { + this.coreV1Api = coreV1Api; + this.kubernetesPropertySourceSuppliers = kubernetesPropertySourceSuppliers; } @Override public KubernetesEnvironmentRepository build(KubernetesConfigServerProperties environmentProperties) { - CoreV1Api coreApi = new CoreV1Api(); - String namespace = environmentProperties.getSecretsNamespaces() != null ? environmentProperties.getSecretsNamespaces() : "default"; - return new KubernetesEnvironmentRepository(coreApi, this.kubernetesPropertySourceSupplierList, namespace); + return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, "default"); } - } From 6eaa0a7ecd3141e8294e625d524b53a87af97e1c Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 10 Feb 2025 13:11:33 +0530 Subject: [PATCH 03/19] remove checkstyle Signed-off-by: Arjav --- pom.xml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index b9a9c852fc..fc25abf862 100644 --- a/pom.xml +++ b/pom.xml @@ -73,12 +73,6 @@ 4.1.6-SNAPSHOT 4.1.4-SNAPSHOT 4.1.6-SNAPSHOT - - true - true - - true - @@ -207,10 +201,7 @@ - - org.apache.maven.plugins - maven-checkstyle-plugin - + io.spring.javaformat spring-javaformat-maven-plugin From 00416ab0c6722ec79c868a4b02cef797acfcc338 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 10 Feb 2025 16:16:55 +0530 Subject: [PATCH 04/19] for try Signed-off-by: Arjav --- .../KubernetesConfigServerAutoConfiguration.java | 4 +++- .../KubernetesEnvironmentRepositoryFactory.java | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 7cbd937f93..9eb0ae55ea 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -23,7 +23,9 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.cloud.CloudPlatform; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration; import org.springframework.cloud.config.server.environment.EnvironmentRepository; @@ -51,7 +53,7 @@ @Configuration @AutoConfigureAfter({ KubernetesClientAutoConfiguration.class }) @AutoConfigureBefore({ ConfigServerAutoConfiguration.class }) -//@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) +@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) @EnableConfigurationProperties(KubernetesConfigServerProperties.class) public class KubernetesConfigServerAutoConfiguration { diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java index ba3142e721..e8893b3aff 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java @@ -5,6 +5,8 @@ import org.springframework.stereotype.Component; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; @Component public class KubernetesEnvironmentRepositoryFactory @@ -21,6 +23,9 @@ public KubernetesEnvironmentRepositoryFactory(CoreV1Api coreV1Api, @Override public KubernetesEnvironmentRepository build(KubernetesConfigServerProperties environmentProperties) { - return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, "default"); + String combinedNamespaces = Stream.of(environmentProperties.getSecretsNamespaces(), environmentProperties.getConfigMapNamespaces()) + .filter(ns -> ns != null && !ns.isEmpty()) + .collect(Collectors.joining(",")); + return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, combinedNamespaces); } } From 0f609fd83be213bf2049539d348d4ced8a9e97a1 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 10 Feb 2025 16:44:20 +0530 Subject: [PATCH 05/19] for try Signed-off-by: Arjav --- .../src/main/resources/application.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml index ab33cff1e8..3449d2b60a 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml @@ -1,11 +1,4 @@ spring: - cloud: - config: - server: - composite: - - type: kubernetes - profiles: - active: composite application: name: kubernetesconfigserver From bc028dd9667661c5d424f095b499ff5444744619 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 10 Feb 2025 18:06:03 +0530 Subject: [PATCH 06/19] trying existing bean Signed-off-by: Arjav --- ...bernetesConfigServerAutoConfiguration.java | 8 ++++---- ...ubernetesEnvironmentRepositoryFactory.java | 19 ++++--------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 9eb0ae55ea..7f12596d91 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -61,11 +61,10 @@ public class KubernetesConfigServerAutoConfiguration { static class KubernetesFactoryConfig { @Bean - public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory(CoreV1Api coreV1Api, - List kubernetesPropertySourceSupplierList) { - return new KubernetesEnvironmentRepositoryFactory(coreV1Api, kubernetesPropertySourceSupplierList); + public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( + KubernetesEnvironmentRepository kubernetesEnvironmentRepository) { + return new KubernetesEnvironmentRepositoryFactory(kubernetesEnvironmentRepository); } - } @Bean @@ -73,6 +72,7 @@ public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFac public EnvironmentRepository kubernetesEnvironmentRepository(CoreV1Api coreV1Api, List kubernetesPropertySourceSuppliers, KubernetesNamespaceProvider kubernetesNamespaceProvider) { + System.out.println("Creating KubernetesEnvironmentRepository bean..."); return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, kubernetesNamespaceProvider.getNamespace()); } diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java index e8893b3aff..2005ae0961 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java @@ -1,31 +1,20 @@ package org.springframework.cloud.kubernetes.configserver; -import io.kubernetes.client.openapi.apis.CoreV1Api; import org.springframework.cloud.config.server.environment.EnvironmentRepositoryFactory; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - @Component public class KubernetesEnvironmentRepositoryFactory implements EnvironmentRepositoryFactory { - private final CoreV1Api coreV1Api; - private final List kubernetesPropertySourceSuppliers; + private final KubernetesEnvironmentRepository kubernetesEnvironmentRepository; - public KubernetesEnvironmentRepositoryFactory(CoreV1Api coreV1Api, - List kubernetesPropertySourceSuppliers) { - this.coreV1Api = coreV1Api; - this.kubernetesPropertySourceSuppliers = kubernetesPropertySourceSuppliers; + public KubernetesEnvironmentRepositoryFactory(KubernetesEnvironmentRepository kubernetesEnvironmentRepository) { + this.kubernetesEnvironmentRepository = kubernetesEnvironmentRepository; } @Override public KubernetesEnvironmentRepository build(KubernetesConfigServerProperties environmentProperties) { - String combinedNamespaces = Stream.of(environmentProperties.getSecretsNamespaces(), environmentProperties.getConfigMapNamespaces()) - .filter(ns -> ns != null && !ns.isEmpty()) - .collect(Collectors.joining(",")); - return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, combinedNamespaces); + return kubernetesEnvironmentRepository; } } From e08461c86ca9e89ae72d0be789c37d46cdb0a708 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 12:04:24 +0530 Subject: [PATCH 07/19] reverting pom.xml Signed-off-by: Arjav --- pom.xml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index fc25abf862..851ba562aa 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - + 4.0.0 @@ -73,6 +73,12 @@ 4.1.6-SNAPSHOT 4.1.4-SNAPSHOT 4.1.6-SNAPSHOT + + true + true + + true + @@ -201,7 +207,10 @@ - + + org.apache.maven.plugins + maven-checkstyle-plugin + io.spring.javaformat spring-javaformat-maven-plugin From dd1c30935df7980b6452468d7f0e0cd83af3473d Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 12:18:51 +0530 Subject: [PATCH 08/19] ObjectProvider for missing bean Signed-off-by: Arjav --- ...KubernetesConfigServerAutoConfiguration.java | 17 ++++++++--------- .../KubernetesEnvironmentRepositoryFactory.java | 12 ++++++++---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 7f12596d91..2c00e8d07b 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -21,9 +21,11 @@ import io.kubernetes.client.openapi.apis.CoreV1Api; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -57,22 +59,19 @@ @EnableConfigurationProperties(KubernetesConfigServerProperties.class) public class KubernetesConfigServerAutoConfiguration { - @Configuration(proxyBeanMethods = false) - static class KubernetesFactoryConfig { - - @Bean - public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( - KubernetesEnvironmentRepository kubernetesEnvironmentRepository) { - return new KubernetesEnvironmentRepositoryFactory(kubernetesEnvironmentRepository); - } + @Bean + @ConditionalOnMissingBean + public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( + ObjectProvider kubernetesEnvironmentRepositoryProvider) { + return new KubernetesEnvironmentRepositoryFactory(kubernetesEnvironmentRepositoryProvider); } @Bean @Profile("kubernetes") + @ConditionalOnMissingBean public EnvironmentRepository kubernetesEnvironmentRepository(CoreV1Api coreV1Api, List kubernetesPropertySourceSuppliers, KubernetesNamespaceProvider kubernetesNamespaceProvider) { - System.out.println("Creating KubernetesEnvironmentRepository bean..."); return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, kubernetesNamespaceProvider.getNamespace()); } diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java index 2005ae0961..3bc0cb9bf0 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java @@ -1,20 +1,24 @@ package org.springframework.cloud.kubernetes.configserver; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.cloud.config.server.environment.EnvironmentRepositoryFactory; import org.springframework.stereotype.Component; +/** + * Factory class for creating instances of {@link KubernetesEnvironmentRepository}. + */ @Component public class KubernetesEnvironmentRepositoryFactory implements EnvironmentRepositoryFactory { - private final KubernetesEnvironmentRepository kubernetesEnvironmentRepository; + private final ObjectProvider kubernetesEnvironmentRepositoryProvider; - public KubernetesEnvironmentRepositoryFactory(KubernetesEnvironmentRepository kubernetesEnvironmentRepository) { - this.kubernetesEnvironmentRepository = kubernetesEnvironmentRepository; + public KubernetesEnvironmentRepositoryFactory(ObjectProvider kubernetesEnvironmentRepositoryProvider) { + this.kubernetesEnvironmentRepositoryProvider = kubernetesEnvironmentRepositoryProvider; } @Override public KubernetesEnvironmentRepository build(KubernetesConfigServerProperties environmentProperties) { - return kubernetesEnvironmentRepository; + return kubernetesEnvironmentRepositoryProvider.getIfAvailable(); } } From 774b1d7b4ba1bb1a2c19a8fa3817ea2dee3a1751 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 13:12:54 +0530 Subject: [PATCH 09/19] Update default order value in KubernetesConfigServerProperties Signed-off-by: Arjav --- .../configserver/KubernetesConfigServerProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java index ebf47a3689..27b6e7bb2b 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java @@ -25,7 +25,7 @@ @ConfigurationProperties("spring.cloud.kubernetes.configserver") public class KubernetesConfigServerProperties implements EnvironmentRepositoryProperties { - private int order = Integer.MAX_VALUE; + private int order = DEFAULT_ORDER; private String configMapNamespaces = ""; From a0e63c4c7f1f2548f57365b2fb03a2f597c73c08 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 15:06:22 +0530 Subject: [PATCH 10/19] code style fixes Signed-off-by: Arjav --- ...bernetesConfigServerAutoConfiguration.java | 8 +++---- .../KubernetesConfigServerProperties.java | 2 ++ ...ubernetesEnvironmentRepositoryFactory.java | 24 +++++++++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 2c00e8d07b..20e2ca8d42 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -62,7 +62,7 @@ public class KubernetesConfigServerAutoConfiguration { @Bean @ConditionalOnMissingBean public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( - ObjectProvider kubernetesEnvironmentRepositoryProvider) { + ObjectProvider kubernetesEnvironmentRepositoryProvider) { return new KubernetesEnvironmentRepositoryFactory(kubernetesEnvironmentRepositoryProvider); } @@ -70,10 +70,10 @@ public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFac @Profile("kubernetes") @ConditionalOnMissingBean public EnvironmentRepository kubernetesEnvironmentRepository(CoreV1Api coreV1Api, - List kubernetesPropertySourceSuppliers, - KubernetesNamespaceProvider kubernetesNamespaceProvider) { + List kubernetesPropertySourceSuppliers, + KubernetesNamespaceProvider kubernetesNamespaceProvider) { return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, - kubernetesNamespaceProvider.getNamespace()); + kubernetesNamespaceProvider.getNamespace()); } @Bean diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java index 27b6e7bb2b..ab8eb42bb9 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerProperties.java @@ -25,6 +25,7 @@ @ConfigurationProperties("spring.cloud.kubernetes.configserver") public class KubernetesConfigServerProperties implements EnvironmentRepositoryProperties { + private int order = DEFAULT_ORDER; private String configMapNamespaces = ""; @@ -54,4 +55,5 @@ public int getOrder() { public void setOrder(int order) { this.order = order; } + } diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java index 3bc0cb9bf0..b7e3501b4b 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactory.java @@ -1,19 +1,34 @@ +/* + * Copyright 2013-2021 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.configserver; import org.springframework.beans.factory.ObjectProvider; import org.springframework.cloud.config.server.environment.EnvironmentRepositoryFactory; -import org.springframework.stereotype.Component; /** * Factory class for creating instances of {@link KubernetesEnvironmentRepository}. */ -@Component public class KubernetesEnvironmentRepositoryFactory - implements EnvironmentRepositoryFactory { + implements EnvironmentRepositoryFactory { private final ObjectProvider kubernetesEnvironmentRepositoryProvider; - public KubernetesEnvironmentRepositoryFactory(ObjectProvider kubernetesEnvironmentRepositoryProvider) { + public KubernetesEnvironmentRepositoryFactory( + ObjectProvider kubernetesEnvironmentRepositoryProvider) { this.kubernetesEnvironmentRepositoryProvider = kubernetesEnvironmentRepositoryProvider; } @@ -21,4 +36,5 @@ public KubernetesEnvironmentRepositoryFactory(ObjectProvider Date: Tue, 11 Feb 2025 15:07:04 +0530 Subject: [PATCH 11/19] code style fixes Signed-off-by: Arjav --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 851ba562aa..283cc7ff8d 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - + 4.0.0 From 0b2773f35a8fa77781e28146b2c0de60ee6bbc04 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 15:08:01 +0530 Subject: [PATCH 12/19] code style fixes Signed-off-by: Arjav --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 283cc7ff8d..851ba562aa 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - + 4.0.0 From ede138adb5d2d5ec85171d8a269abb0435d14501 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 15:10:30 +0530 Subject: [PATCH 13/19] code style Signed-off-by: Arjav --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 851ba562aa..b9a9c852fc 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - + 4.0.0 From 066f0eb984e84372ea452817dde7b807e26a8300 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 15:51:53 +0530 Subject: [PATCH 14/19] test cases Signed-off-by: Arjav --- ...ithGitAndKubernetesConfigSourcesTests.java | 57 ++++++++++++++++ ...hMultipleKubernetesConfigSourcesTests.java | 52 ++++++++++++++ ...leWithOnlyKubernetesConfigSourceTests.java | 49 ++++++++++++++ ...etesEnvironmentRepositoryFactoryTests.java | 67 +++++++++++++++++++ 4 files changed, 225 insertions(+) create mode 100644 spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithGitAndKubernetesConfigSourcesTests.java create mode 100644 spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithMultipleKubernetesConfigSourcesTests.java create mode 100644 spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithOnlyKubernetesConfigSourceTests.java create mode 100644 spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactoryTests.java diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithGitAndKubernetesConfigSourcesTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithGitAndKubernetesConfigSourcesTests.java new file mode 100644 index 0000000000..e6ecd07fa4 --- /dev/null +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithGitAndKubernetesConfigSourcesTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2013-2022 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.configserver; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.config.server.environment.JGitEnvironmentRepository; +import org.springframework.context.ConfigurableApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = { KubernetesConfigServerApplication.class }, + properties = { "spring.main.cloud-platform=KUBERNETES", "spring.profiles.include=kubernetes", + "spring.cloud.kubernetes.client.namespace=default", "spring.profiles.active=composite", + "spring.cloud.config.server.composite[0].type=git", + "spring.cloud.config.server.composite[0].uri=https://github.com/spring-cloud-samples/config-repo", + "spring.cloud.config.server.composite[1].type=kubernetes", + "spring.cloud.config.server.composite[1].config-map-namespace=default", + "spring.cloud.config.server.composite[1].secrets-namespace=default" }) +class CompositeProfileWithGitAndKubernetesConfigSourcesTests { + + @Autowired + private ConfigurableApplicationContext context; + + @Test + void kubernetesEnvironmentRepositoryIsLoaded() { + assertThat(context.getBeanNamesForType(KubernetesEnvironmentRepository.class)).hasSize(2); + } + + @Test + void kubernetesPropertySourceSuppliersAreLoaded() { + assertThat(context.getBeanNamesForType(KubernetesPropertySourceSupplier.class)).isNotEmpty(); + } + + @Test + void gitEnvironmentRepositoryIsLoaded() { + assertThat(context.getBeanNamesForType(JGitEnvironmentRepository.class)).hasSize(1); + } + +} diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithMultipleKubernetesConfigSourcesTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithMultipleKubernetesConfigSourcesTests.java new file mode 100644 index 0000000000..e9744b3de1 --- /dev/null +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithMultipleKubernetesConfigSourcesTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2013-2022 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.configserver; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = { KubernetesConfigServerApplication.class }, + properties = { "spring.main.cloud-platform=KUBERNETES", "spring.profiles.include=kubernetes", + "spring.cloud.kubernetes.client.namespace=default", "spring.profiles.active=composite", + "spring.cloud.config.server.composite[0].type=kubernetes", + "spring.cloud.config.server.composite[0].config-map-namespace=default", + "spring.cloud.config.server.composite[0].secrets-namespace=default", + "spring.cloud.config.server.composite[1].type=kubernetes", + "spring.cloud.config.server.composite[1].config-map-namespace=another-namespace", + "spring.cloud.config.server.composite[1].secrets-namespace=another-namespace" }) +class CompositeProfileWithMultipleKubernetesConfigSourcesTests { + + @Autowired + private ConfigurableApplicationContext context; + + @Test + void kubernetesEnvironmentRepositoriesAreLoaded() { + assertThat(context.getBeanNamesForType(KubernetesEnvironmentRepository.class)).hasSize(3); + } + + @Test + void kubernetesPropertySourceSuppliersAreLoaded() { + assertThat(context.getBeanNamesForType(KubernetesPropertySourceSupplier.class)).isNotEmpty(); + } + +} diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithOnlyKubernetesConfigSourceTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithOnlyKubernetesConfigSourceTests.java new file mode 100644 index 0000000000..78a304a99b --- /dev/null +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/CompositeProfileWithOnlyKubernetesConfigSourceTests.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013-2022 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.configserver; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = { KubernetesConfigServerApplication.class }, + properties = { "spring.main.cloud-platform=KUBERNETES", "spring.profiles.include=kubernetes", + "spring.cloud.kubernetes.client.namespace=default", "spring.profiles.active=composite", + "spring.cloud.config.server.composite[0].type=kubernetes", + "spring.cloud.config.server.composite[0].config-map-namespace=default", + "spring.cloud.config.server.composite[0].secrets-namespace=default" }) +class CompositeProfileWithOnlyKubernetesConfigSourceTests { + + @Autowired + private ConfigurableApplicationContext context; + + @Test + void kubernetesEnvironmentRepositoryIsLoaded() { + assertThat(context.getBeanNamesForType(KubernetesEnvironmentRepository.class)).hasSize(2); + } + + @Test + void kubernetesPropertySourceSuppliersAreLoaded() { + assertThat(context.getBeanNamesForType(KubernetesPropertySourceSupplier.class)).isNotEmpty(); + } + +} diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactoryTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactoryTests.java new file mode 100644 index 0000000000..d47417aa4a --- /dev/null +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepositoryFactoryTests.java @@ -0,0 +1,67 @@ +/* + * Copyright 2013-2022 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.configserver; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.cloud.config.server.environment.EnvironmentRepository; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@SpringJUnitConfig +@SpringBootTest +class KubernetesEnvironmentRepositoryFactoryTests { + + @MockBean + private ObjectProvider kubernetesEnvironmentRepositoryProvider; + + @Test + void testBuild() { + KubernetesEnvironmentRepository mockRepository = mock(KubernetesEnvironmentRepository.class); + when(kubernetesEnvironmentRepositoryProvider.getIfAvailable()).thenReturn(mockRepository); + + KubernetesEnvironmentRepositoryFactory factory = new KubernetesEnvironmentRepositoryFactory( + kubernetesEnvironmentRepositoryProvider); + KubernetesConfigServerProperties properties = new KubernetesConfigServerProperties(); + + EnvironmentRepository repository = factory.build(properties); + + assertThat(repository).isNotNull(); + assertThat(repository).isInstanceOf(KubernetesEnvironmentRepository.class); + assertThat(repository).isEqualTo(mockRepository); + } + + @Configuration + static class TestConfig { + + @Bean + public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( + ObjectProvider kubernetesEnvironmentRepositoryProvider) { + return new KubernetesEnvironmentRepositoryFactory(kubernetesEnvironmentRepositoryProvider); + } + + } + +} From 9e26a831b383bfad8baf29df87ddef6695c4708a Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 17:57:45 +0530 Subject: [PATCH 15/19] logs to debug --- ...bernetesConfigServerAutoConfiguration.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 20e2ca8d42..c676ccb8a4 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.logging.Logger; import io.kubernetes.client.openapi.apis.CoreV1Api; @@ -59,10 +60,13 @@ @EnableConfigurationProperties(KubernetesConfigServerProperties.class) public class KubernetesConfigServerAutoConfiguration { + private static final Logger LOG = Logger.getLogger(KubernetesConfigServerAutoConfiguration.class.getName()); + @Bean @ConditionalOnMissingBean public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( - ObjectProvider kubernetesEnvironmentRepositoryProvider) { + ObjectProvider kubernetesEnvironmentRepositoryProvider) { + LOG.info("Creating KubernetesEnvironmentRepositoryFactory bean..."); return new KubernetesEnvironmentRepositoryFactory(kubernetesEnvironmentRepositoryProvider); } @@ -70,10 +74,11 @@ public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFac @Profile("kubernetes") @ConditionalOnMissingBean public EnvironmentRepository kubernetesEnvironmentRepository(CoreV1Api coreV1Api, - List kubernetesPropertySourceSuppliers, - KubernetesNamespaceProvider kubernetesNamespaceProvider) { + List kubernetesPropertySourceSuppliers, + KubernetesNamespaceProvider kubernetesNamespaceProvider) { + LOG.info("Creating KubernetesEnvironmentRepository bean..."); return new KubernetesEnvironmentRepository(coreV1Api, kubernetesPropertySourceSuppliers, - kubernetesNamespaceProvider.getNamespace()); + kubernetesNamespaceProvider.getNamespace()); } @Bean @@ -102,20 +107,28 @@ public KubernetesPropertySourceSupplier configMapPropertySourceSupplier( @ConditionalOnKubernetesSecretsEnabled @ConditionalOnProperty("spring.cloud.kubernetes.secrets.enableApi") public KubernetesPropertySourceSupplier secretsPropertySourceSupplier(KubernetesConfigServerProperties properties) { + LOG.info("Creating secretsPropertySourceSupplier bean..."); return (coreApi, applicationName, namespace, springEnv) -> { List namespaces = namespaceSplitter(properties.getSecretsNamespaces(), namespace); List propertySources = new ArrayList<>(); + LOG.info("Processing namespaces for secrets: " + namespaces); + namespaces.forEach(space -> { + LOG.info("Fetching secrets for namespace: " + space); NormalizedSource source = new NamedSecretNormalizedSource(applicationName, space, false, - ConfigUtils.Prefix.DEFAULT, true, true); + ConfigUtils.Prefix.DEFAULT, true, true); KubernetesClientConfigContext context = new KubernetesClientConfigContext(coreApi, source, space, - springEnv, false); - propertySources.add(new KubernetesClientSecretsPropertySource(context)); + springEnv, false); + MapPropertySource propertySource = new KubernetesClientSecretsPropertySource(context); + propertySources.add(propertySource); + LOG.info("Added property source for namespace: " + space); }); + LOG.info("Total property sources created: " + propertySources.size()); return propertySources; }; } + } From c82bcc0b75327cfd01dd3c13f59b19e7f84636d9 Mon Sep 17 00:00:00 2001 From: Arjav Date: Tue, 11 Feb 2025 18:17:05 +0530 Subject: [PATCH 16/19] logs --- .../KubernetesEnvironmentRepository.java | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java index aa377751d4..259a0101ea 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java @@ -47,10 +47,12 @@ public class KubernetesEnvironmentRepository implements EnvironmentRepository { private final String namespace; public KubernetesEnvironmentRepository(CoreV1Api coreApi, - List kubernetesPropertySourceSuppliers, String namespace) { + List kubernetesPropertySourceSuppliers, + String namespace) { this.coreApi = coreApi; this.kubernetesPropertySourceSuppliers = kubernetesPropertySourceSuppliers; this.namespace = namespace; + LOG.info("Initialized KubernetesEnvironmentRepository with namespace: " + namespace); } @Override @@ -60,62 +62,76 @@ public Environment findOne(String application, String profile, String label) { @Override public Environment findOne(String application, String profile, String label, boolean includeOrigin) { + LOG.info("Finding environment for application: " + application + ", profile: " + profile + ", label: " + label); + if (!StringUtils.hasText(profile)) { profile = "default"; + LOG.debug("No profile provided, using default profile"); } - List profiles = new ArrayList<>(List.of(StringUtils.commaDelimitedListToStringArray(profile))); + List profiles = new ArrayList<>(List.of(StringUtils.commaDelimitedListToStringArray(profile))); Collections.reverse(profiles); + if (!profiles.contains("default")) { profiles.add("default"); + LOG.debug("Added 'default' profile to the list of active profiles"); } - Environment environment = new Environment(application, profiles.toArray(profiles.toArray(new String[0])), label, - null, null); - LOG.info("Profiles: " + profile); - LOG.info("Application: " + application); - LOG.info("Label: " + label); + + Environment environment = new Environment(application, profiles.toArray(new String[0]), label, null, null); + LOG.info("Created Environment with profiles: " + StringUtils.collectionToCommaDelimitedString(profiles)); + for (String activeProfile : profiles) { try { - // This is needed so that when we get the application name in - // SourceDataProcessor.sorted that it actually - // exists in the Environment - StandardEnvironment springEnv = new KubernetesConfigServerEnvironment( - createPropertySources(application)); + LOG.debug("Processing profile: " + activeProfile); + StandardEnvironment springEnv = new KubernetesConfigServerEnvironment(createPropertySources(application)); springEnv.setActiveProfiles(activeProfile); + LOG.debug("Set active profile in Spring Environment: " + activeProfile); + if (!"application".equalsIgnoreCase(application)) { + LOG.debug("Adding application configuration for: " + application); addApplicationConfiguration(environment, springEnv, application); } - } - catch (Exception e) { - LOG.warn(e); + } catch (Exception e) { + LOG.warn("Error processing profile: " + activeProfile, e); } } + + LOG.debug("Adding default application configuration for 'application'"); StandardEnvironment springEnv = new KubernetesConfigServerEnvironment(createPropertySources("application")); addApplicationConfiguration(environment, springEnv, "application"); + + LOG.info("Final Environment: " + environment); return environment; } private MutablePropertySources createPropertySources(String application) { + LOG.debug("Creating property sources for application: " + application); Map applicationProperties = Map.of("spring.application.name", application); MapPropertySource propertySource = new MapPropertySource("kubernetes-config-server", applicationProperties); MutablePropertySources mutablePropertySources = new MutablePropertySources(); mutablePropertySources.addFirst(propertySource); + LOG.debug("Added property source: " + propertySource.getName()); return mutablePropertySources; } private void addApplicationConfiguration(Environment environment, StandardEnvironment springEnv, - String applicationName) { + String applicationName) { + LOG.debug("Adding application configuration for: " + applicationName); kubernetesPropertySourceSuppliers.forEach(supplier -> { + LOG.debug("Processing property source supplier: " + supplier.getClass().getSimpleName()); List propertySources = supplier.get(coreApi, applicationName, namespace, springEnv); + LOG.debug("Found " + propertySources.size() + " property sources for application: " + applicationName); + propertySources.forEach(propertySource -> { if (propertySource.getPropertyNames().length > 0) { - LOG.debug("Adding PropertySource " + propertySource.getName()); + LOG.debug("Adding PropertySource: " + propertySource.getName()); LOG.debug("PropertySource Names: " - + StringUtils.arrayToCommaDelimitedString(propertySource.getPropertyNames())); + + StringUtils.arrayToCommaDelimitedString(propertySource.getPropertyNames())); environment.add(new PropertySource(propertySource.getName(), propertySource.getSource())); + } else { + LOG.debug("Skipping empty PropertySource: " + propertySource.getName()); } }); }); } - } From 440a3c7f19e0f3ac9d289917def9d19f1b8e29dc Mon Sep 17 00:00:00 2001 From: Arjav Date: Wed, 12 Feb 2025 12:24:24 +0530 Subject: [PATCH 17/19] testing --- ...KubernetesConfigServerAutoConfiguration.java | 2 +- .../KubernetesEnvironmentRepository.java | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index c676ccb8a4..1c93fa7939 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -117,7 +117,7 @@ public KubernetesPropertySourceSupplier secretsPropertySourceSupplier(Kubernetes namespaces.forEach(space -> { LOG.info("Fetching secrets for namespace: " + space); NormalizedSource source = new NamedSecretNormalizedSource(applicationName, space, false, - ConfigUtils.Prefix.DEFAULT, true, true); + ConfigUtils.Prefix.DEFAULT, false, true); KubernetesClientConfigContext context = new KubernetesClientConfigContext(coreApi, source, space, springEnv, false); MapPropertySource propertySource = new KubernetesClientSecretsPropertySource(context); diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java index 259a0101ea..ec1f08ad35 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java @@ -16,15 +16,13 @@ package org.springframework.cloud.kubernetes.configserver; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import io.kubernetes.client.openapi.apis.CoreV1Api; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.config.environment.Environment; import org.springframework.cloud.config.environment.PropertySource; import org.springframework.cloud.config.server.environment.EnvironmentRepository; @@ -46,6 +44,9 @@ public class KubernetesEnvironmentRepository implements EnvironmentRepository { private final String namespace; + @Value("${spring.cloud.addProfile.secrets:false}") + private boolean addSecretsProfile; + public KubernetesEnvironmentRepository(CoreV1Api coreApi, List kubernetesPropertySourceSuppliers, String namespace) { @@ -117,6 +118,14 @@ private MutablePropertySources createPropertySources(String application) { private void addApplicationConfiguration(Environment environment, StandardEnvironment springEnv, String applicationName) { LOG.debug("Adding application configuration for: " + applicationName); + + Set activeProfiles = new HashSet<>(Arrays.asList(springEnv.getActiveProfiles())); + if (!activeProfiles.contains("secrets") && addSecretsProfile) { + activeProfiles.add("secrets"); + springEnv.setActiveProfiles(activeProfiles.toArray(new String[0])); + LOG.info("Automatically added 'secrets' profile since it was missing."); + } + kubernetesPropertySourceSuppliers.forEach(supplier -> { LOG.debug("Processing property source supplier: " + supplier.getClass().getSimpleName()); List propertySources = supplier.get(coreApi, applicationName, namespace, springEnv); From cf51c8058357e98c760313938c454896fe27413b Mon Sep 17 00:00:00 2001 From: Arjav Date: Wed, 12 Feb 2025 12:27:20 +0530 Subject: [PATCH 18/19] testing --- .../KubernetesConfigServerAutoConfiguration.java | 6 +++++- .../configserver/KubernetesEnvironmentRepository.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 1c93fa7939..37e72a0d0f 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -23,6 +23,7 @@ import io.kubernetes.client.openapi.apis.CoreV1Api; import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; @@ -62,6 +63,9 @@ public class KubernetesConfigServerAutoConfiguration { private static final Logger LOG = Logger.getLogger(KubernetesConfigServerAutoConfiguration.class.getName()); + @Value("${spring.cloud.includeProfileSpecificSources}") + private boolean includeProfileSpecificSources; + @Bean @ConditionalOnMissingBean public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( @@ -117,7 +121,7 @@ public KubernetesPropertySourceSupplier secretsPropertySourceSupplier(Kubernetes namespaces.forEach(space -> { LOG.info("Fetching secrets for namespace: " + space); NormalizedSource source = new NamedSecretNormalizedSource(applicationName, space, false, - ConfigUtils.Prefix.DEFAULT, false, true); + ConfigUtils.Prefix.DEFAULT, includeProfileSpecificSources, true); KubernetesClientConfigContext context = new KubernetesClientConfigContext(coreApi, source, space, springEnv, false); MapPropertySource propertySource = new KubernetesClientSecretsPropertySource(context); diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java index ec1f08ad35..f4d15a2bc3 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java @@ -44,7 +44,7 @@ public class KubernetesEnvironmentRepository implements EnvironmentRepository { private final String namespace; - @Value("${spring.cloud.addProfile.secrets:false}") + @Value("${spring.cloud.addProfile.secrets}") private boolean addSecretsProfile; public KubernetesEnvironmentRepository(CoreV1Api coreApi, From 09e86a6f11c8d7b2cdd4af82f423653d9f17938c Mon Sep 17 00:00:00 2001 From: Arjav Date: Fri, 14 Feb 2025 11:26:40 +0530 Subject: [PATCH 19/19] testing --- .../KubernetesConfigServerAutoConfiguration.java | 7 +++---- .../configserver/KubernetesEnvironmentRepository.java | 9 --------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java index 37e72a0d0f..31fe95a590 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesConfigServerAutoConfiguration.java @@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -63,10 +64,8 @@ public class KubernetesConfigServerAutoConfiguration { private static final Logger LOG = Logger.getLogger(KubernetesConfigServerAutoConfiguration.class.getName()); - @Value("${spring.cloud.includeProfileSpecificSources}") - private boolean includeProfileSpecificSources; - @Bean + @ConditionalOnBean(KubernetesEnvironmentRepository.class) @ConditionalOnMissingBean public KubernetesEnvironmentRepositoryFactory kubernetesEnvironmentRepositoryFactory( ObjectProvider kubernetesEnvironmentRepositoryProvider) { @@ -121,7 +120,7 @@ public KubernetesPropertySourceSupplier secretsPropertySourceSupplier(Kubernetes namespaces.forEach(space -> { LOG.info("Fetching secrets for namespace: " + space); NormalizedSource source = new NamedSecretNormalizedSource(applicationName, space, false, - ConfigUtils.Prefix.DEFAULT, includeProfileSpecificSources, true); + ConfigUtils.Prefix.DEFAULT, true, true); KubernetesClientConfigContext context = new KubernetesClientConfigContext(coreApi, source, space, springEnv, false); MapPropertySource propertySource = new KubernetesClientSecretsPropertySource(context); diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java index f4d15a2bc3..8dd73c8c36 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/java/org/springframework/cloud/kubernetes/configserver/KubernetesEnvironmentRepository.java @@ -44,8 +44,6 @@ public class KubernetesEnvironmentRepository implements EnvironmentRepository { private final String namespace; - @Value("${spring.cloud.addProfile.secrets}") - private boolean addSecretsProfile; public KubernetesEnvironmentRepository(CoreV1Api coreApi, List kubernetesPropertySourceSuppliers, @@ -119,13 +117,6 @@ private void addApplicationConfiguration(Environment environment, StandardEnviro String applicationName) { LOG.debug("Adding application configuration for: " + applicationName); - Set activeProfiles = new HashSet<>(Arrays.asList(springEnv.getActiveProfiles())); - if (!activeProfiles.contains("secrets") && addSecretsProfile) { - activeProfiles.add("secrets"); - springEnv.setActiveProfiles(activeProfiles.toArray(new String[0])); - LOG.info("Automatically added 'secrets' profile since it was missing."); - } - kubernetesPropertySourceSuppliers.forEach(supplier -> { LOG.debug("Processing property source supplier: " + supplier.getClass().getSimpleName()); List propertySources = supplier.get(coreApi, applicationName, namespace, springEnv);