diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigMapPropertySourceLocatorTests.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigMapPropertySourceLocatorTests.java index 8e3111a1..da740ac8 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigMapPropertySourceLocatorTests.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigMapPropertySourceLocatorTests.java @@ -113,8 +113,10 @@ class KubernetesClientConfigMapPropertySourceLocatorTests { .willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(PROPERTIES_CONFIGMAP_LIST)))); ConfigMapConfigProperties configMapConfigProperties = new ConfigMapConfigProperties(); configMapConfigProperties.setName("fake-name"); - ConfigMapConfigProperties.Source source = new ConfigMapConfigProperties.Source("bootstrap-640", "default", - Collections.emptyMap(), null, null, null); + ConfigMapConfigProperties.Source source = new ConfigMapConfigProperties.Source( + "bootstrap-640", "default", Collections.emptyMap(), null, null, null + ); + List sources = Collections.singletonList(source); configMapConfigProperties.setSources(sources); KubernetesClientProperties kubernetesClientProperties = new KubernetesClientProperties(); diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientSecretsPropertySourceLocatorTests.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientSecretsPropertySourceLocatorTests.java index b897f987..d2c3b2df 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientSecretsPropertySourceLocatorTests.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientSecretsPropertySourceLocatorTests.java @@ -17,6 +17,7 @@ package org.springframework.cloud.kubernetes.client.config; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.github.tomakehurst.wiremock.WireMockServer; @@ -106,12 +107,15 @@ class KubernetesClientSecretsPropertySourceLocatorTests { CoreV1Api api = new CoreV1Api(); stubFor(get(LIST_API).willReturn(aResponse().withStatus(200).withBody(LIST_BODY))); SecretsConfigProperties secretsConfigProperties = new SecretsConfigProperties(); - SecretsConfigProperties.Source source1 = new SecretsConfigProperties.Source(); - source1.setName("db-secret"); - source1.setNamespace(""); - SecretsConfigProperties.Source source2 = new SecretsConfigProperties.Source(); - source2.setName("rabbit-password"); - source2.setNamespace(""); + + SecretsConfigProperties.Source source1 = new SecretsConfigProperties.Source( + "db-secret", "", Collections.emptyMap(), null, null, null + ); + + SecretsConfigProperties.Source source2 = new SecretsConfigProperties.Source( + "rabbit-password", "", Collections.emptyMap(), null, null, null + ); + List sources = new ArrayList<>(); sources.add(source1); sources.add(source2); diff --git a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigProperties.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigProperties.java index 5bafde32..0ac6eaab 100644 --- a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigProperties.java +++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigProperties.java @@ -24,6 +24,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.bind.DefaultValue; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; @@ -107,94 +108,17 @@ public class SecretsConfigProperties extends AbstractConfigProperties { .collect(Collectors.toList()); } - public static class Source { - - /** - * The name of the Secret. - */ - private String name; - - /** - * The namespace where the Secret is found. - */ - private String namespace; - - /** - * The labels of the Secret to find. - */ - private Map labels = Collections.emptyMap(); - - /** - * An explicit prefix to be used for properties. - */ - private String explicitPrefix; - - /** - * Use secret name as prefix for properties. Can't be a primitive, we need to know - * if it was explicitly set or not - */ - private Boolean useNameAsPrefix; - - /** - * Use profile name to append to a config map name. Can't be a primitive, we need - * to know if it was explicitly set or not - */ - protected Boolean includeProfileSpecificSources; - - public Source() { - } - - public String getName() { - return this.name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNamespace() { - return this.namespace; - } - - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - public void setLabels(Map labels) { - this.labels = labels; - } - - public Map getLabels() { - return this.labels; - } - - public String getExplicitPrefix() { - return explicitPrefix; - } - - public void setExplicitPrefix(String explicitPrefix) { - this.explicitPrefix = explicitPrefix; - } - - public Boolean getUseNameAsPrefix() { - return useNameAsPrefix; - } - - public void setUseNameAsPrefix(Boolean useNameAsPrefix) { - this.useNameAsPrefix = useNameAsPrefix; - } - - public Boolean getIncludeProfileSpecificSources() { - return includeProfileSpecificSources; - } - - public void setIncludeProfileSpecificSources(Boolean includeProfileSpecificSources) { - this.includeProfileSpecificSources = includeProfileSpecificSources; - } - - public boolean isEmpty() { - return !StringUtils.hasLength(this.name) && !StringUtils.hasLength(this.namespace); - } + /** + * @param name The name of the Secret. + * @param namespace The namespace where the Secret is found. + * @param labels The labels of the Secret to find. + * @param explicitPrefix An explicit prefix to be used for properties. + * @param useNameAsPrefix Use secret name as prefix for properties. + * @param includeProfileSpecificSources Use profile name to append to a config map + * name. + */ + public record Source(String name, String namespace, @DefaultValue Map labels, String explicitPrefix, + Boolean useNameAsPrefix, Boolean includeProfileSpecificSources) { private Stream normalize(String defaultName, String defaultNamespace, Map defaultLabels, boolean defaultIncludeProfileSpecificSources, boolean failFast, diff --git a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigPropertiesTests.java b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigPropertiesTests.java index ef689907..9c97dd34 100644 --- a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigPropertiesTests.java +++ b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/SecretsConfigPropertiesTests.java @@ -70,18 +70,14 @@ class SecretsConfigPropertiesTests { */ @Test void multipleSources() { - SecretsConfigProperties.Source one = new SecretsConfigProperties.Source(); - one.setNamespace("spring-k8s"); - one.setName("one"); - one.setLabels(Collections.singletonMap("one", "1")); + SecretsConfigProperties.Source one = new SecretsConfigProperties.Source("one", "spring-k8s", + Collections.singletonMap("one", "1"), null, null, null); - SecretsConfigProperties.Source two = new SecretsConfigProperties.Source(); - two.setLabels(Collections.singletonMap("two", "2")); - two.setNamespace("spring-k8s"); + SecretsConfigProperties.Source two = new SecretsConfigProperties.Source(null, "spring-k8s", + Collections.singletonMap("two", "2"), null, null, null); - SecretsConfigProperties.Source three = new SecretsConfigProperties.Source(); - three.setLabels(Collections.singletonMap("three", "3")); - three.setNamespace("spring-k8s"); + SecretsConfigProperties.Source three = new SecretsConfigProperties.Source(null, "spring-k8s", + Collections.singletonMap("three", "3"), null, null, null); properties.setSources(Arrays.asList(one, two, three)); @@ -188,8 +184,8 @@ class SecretsConfigPropertiesTests { properties.setUseNameAsPrefix(true); properties.setNamespace("spring-k8s"); - SecretsConfigProperties.Source one = new SecretsConfigProperties.Source(); - one.setName("secret-one"); + SecretsConfigProperties.Source one = new SecretsConfigProperties.Source("secret-one", null, + Collections.emptyMap(), null, null, null); properties.setSources(Collections.singletonList(one)); List sources = properties.determineSources(new MockEnvironment()); @@ -226,16 +222,14 @@ class SecretsConfigPropertiesTests { properties.setUseNameAsPrefix(true); properties.setNamespace("spring-k8s"); - SecretsConfigProperties.Source one = new SecretsConfigProperties.Source(); - one.setName("secret-one"); - one.setUseNameAsPrefix(false); + SecretsConfigProperties.Source one = new SecretsConfigProperties.Source("secret-one", null, + Collections.emptyMap(), null, false, null); - SecretsConfigProperties.Source two = new SecretsConfigProperties.Source(); - two.setName("secret-two"); - two.setUseNameAsPrefix(true); + SecretsConfigProperties.Source two = new SecretsConfigProperties.Source("secret-two", null, + Collections.emptyMap(), null, true, null); - SecretsConfigProperties.Source three = new SecretsConfigProperties.Source(); - three.setName("secret-three"); + SecretsConfigProperties.Source three = new SecretsConfigProperties.Source("secret-three", null, + Collections.emptyMap(), null, null, null); properties.setSources(Arrays.asList(one, two, three)); @@ -276,22 +270,17 @@ class SecretsConfigPropertiesTests { properties.setUseNameAsPrefix(false); properties.setNamespace("spring-k8s"); - SecretsConfigProperties.Source one = new SecretsConfigProperties.Source(); - one.setName("secret-one"); - one.setUseNameAsPrefix(false); - one.setExplicitPrefix("one"); + SecretsConfigProperties.Source one = new SecretsConfigProperties.Source("secret-one", null, + Collections.emptyMap(), "one", false, null); - SecretsConfigProperties.Source two = new SecretsConfigProperties.Source(); - two.setName("secret-two"); - two.setUseNameAsPrefix(true); - two.setExplicitPrefix("two"); + SecretsConfigProperties.Source two = new SecretsConfigProperties.Source("secret-two", null, + Collections.emptyMap(), "two", true, null); - SecretsConfigProperties.Source three = new SecretsConfigProperties.Source(); - three.setName("secret-three"); - three.setExplicitPrefix("three"); + SecretsConfigProperties.Source three = new SecretsConfigProperties.Source("secret-three", null, + Collections.emptyMap(), "three", null, null); - SecretsConfigProperties.Source four = new SecretsConfigProperties.Source(); - four.setName("secret-four"); + SecretsConfigProperties.Source four = new SecretsConfigProperties.Source("secret-four", null, + Collections.emptyMap(), null, null, null); properties.setSources(Arrays.asList(one, two, three, four)); @@ -338,28 +327,23 @@ class SecretsConfigPropertiesTests { */ @Test void testLabelsMultipleCases() { + SecretsConfigProperties properties = new SecretsConfigProperties(); properties.setUseNameAsPrefix(false); properties.setNamespace("spring-k8s"); properties.setIncludeProfileSpecificSources(false); - SecretsConfigProperties.Source one = new SecretsConfigProperties.Source(); - one.setLabels(Map.of("first-label", "secret-one")); - one.setUseNameAsPrefix(false); - one.setExplicitPrefix("one"); + SecretsConfigProperties.Source one = new SecretsConfigProperties.Source(null, null, + Map.of("first-label", "secret-one"), "one", false, null); - SecretsConfigProperties.Source two = new SecretsConfigProperties.Source(); - two.setLabels(Map.of("second-label", "secret-two")); - two.setUseNameAsPrefix(true); - two.setExplicitPrefix("two"); - two.setIncludeProfileSpecificSources(true); + SecretsConfigProperties.Source two = new SecretsConfigProperties.Source(null, null, + Map.of("second-label", "secret-two"), "two", true, true); - SecretsConfigProperties.Source three = new SecretsConfigProperties.Source(); - three.setLabels(Map.of("third-label", "secret-three")); - three.setExplicitPrefix("three"); + SecretsConfigProperties.Source three = new SecretsConfigProperties.Source(null, null, + Map.of("third-label", "secret-three"), "three", null, null); - SecretsConfigProperties.Source four = new SecretsConfigProperties.Source(); - four.setLabels(Map.of("fourth-label", "secret-four")); + SecretsConfigProperties.Source four = new SecretsConfigProperties.Source(null, null, + Map.of("fourth-label", "secret-four"), null, null, null); properties.setSources(Arrays.asList(one, two, three, four));