diff --git a/docs/modules/ROOT/pages/property-source-config/namespace-label-filtering.adoc b/docs/modules/ROOT/pages/property-source-config/namespace-label-filtering.adoc index 4123fff339..90f92fa89e 100644 --- a/docs/modules/ROOT/pages/property-source-config/namespace-label-filtering.adoc +++ b/docs/modules/ROOT/pages/property-source-config/namespace-label-filtering.adoc @@ -25,27 +25,7 @@ spring: Such a configuration will make the app watch changes only in the `my-namespace` namespace. Mind that this will watch _all_ configmaps/secrets (depending on which one you enable). If you want an even more fine-grained approach, -you can enable "label-filtering". First we need to enable such support via : `enable-reload-filtering: true` - -[source,yaml] ----- -spring: - application: - name: event-reload - cloud: - kubernetes: - reload: - enabled: true - strategy: shutdown - mode: event - namespaces: - - my-namespaces - monitoring-config-maps: true - enable-reload-filtering: true ----- - -What this will do, is watch configmaps/secrets that only have the `spring.cloud.kubernetes.config.informer.enabled: true` label. -In the next major release this support will be removed and replaced with: +you can set the labels that are supposed to be watched, via: [source,yaml] ---- @@ -80,7 +60,6 @@ spring: | `spring.cloud.kubernetes.reload.mode` | `Enum` | `event` | Specifies how to listen for changes in property sources (`event` or `polling`) | `spring.cloud.kubernetes.reload.period` | `Duration`| `15s` | The period for verifying changes when using the `polling` strategy | `spring.cloud.kubernetes.reload.namespaces` | `String[]`| | namespaces where we should watch for changes -| `spring.cloud.kubernetes.reload.enable-reload-filtering` | `String` | | enabled labeled filtering for reload functionality |=== Notes: diff --git a/docs/modules/ROOT/pages/spring-cloud-kubernetes-configuration-watcher.adoc b/docs/modules/ROOT/pages/spring-cloud-kubernetes-configuration-watcher.adoc index 3b6378560d..0c5fc83e95 100644 --- a/docs/modules/ROOT/pages/spring-cloud-kubernetes-configuration-watcher.adoc +++ b/docs/modules/ROOT/pages/spring-cloud-kubernetes-configuration-watcher.adoc @@ -36,54 +36,39 @@ env: value: "namespace-a" ---- -This one lets watcher know where to search for secrets and configmaps. You have two options here: selective namespaces (the setting above) and a namespace chosen by xref:property-source-config.adoc#namespace-resolution[Namespace Resolution] (this is the default option). +This tells the watcher where to search for Secrets and ConfigMaps. You have two options here: selective namespaces (the setting above) and a namespace chosen by xref:property-source-config.adoc#namespace-resolution[Namespace Resolution] (this is the default option). Keep in mind that all these options require proper RBAC rules. -By default, Configuration Watcher monitors only ConfigMaps labeled: +Configuration Watcher can monitor ConfigMaps and Secrets in the configured namespace(s). If you want it to react only to particular sources, configure label filters for the watched resources: [source] ---- -spring.cloud.kubernetes.config: "true" +spring.cloud.kubernetes.reload.config-maps-labels[a]=b +spring.cloud.kubernetes.reload.secrets-labels[x]=y ---- -Secrets are not monitored by default. To enable Secret monitoring, set: +or via environment variables in the watcher deployment: [source,yaml] ---- env: - - name: SPRING_CLOUD_KUBERNETES_SECRETS_ENABLED - value: "TRUE" ----- - -Once enabled, only Secrets labeled: `spring.cloud.kubernetes.secret: "true"` are monitored. - -You can customize these label selectors in the Configuration Watcher application itself: - -[source,yaml] ----- -spring: - cloud: - kubernetes: - reload: - config-maps-labels: - my-configmap-label: "my-configmap-value" - secrets-labels: - my-secret-label: "my-secret-value" + - name: SPRING_CLOUD_KUBERNETES_RELOAD_CONFIG_MAPS_LABELS_A + value: "b" + - name: SPRING_CLOUD_KUBERNETES_RELOAD_SECRETS_LABELS_X + value: "y" ---- +When such filters are configured, only ConfigMaps or Secrets matching those labels will trigger a refresh event. -or via environment variables in the watcher Deployment: +Secrets are not monitored by default. To enable Secret monitoring, set: [source,yaml] ---- env: - - name: SPRING_CLOUD_KUBERNETES_RELOAD_CONFIG_MAPS_LABELS_MY_CONFIGMAP_LABEL - value: "my-configmap-value" - - name: SPRING_CLOUD_KUBERNETES_RELOAD_SECRETS_LABELS_MY_SECRET_LABEL - value: "my-secret-value" + - name: SPRING_CLOUD_KUBERNETES_SECRETS_ENABLED + value: "TRUE" ---- - One more important configuration, especially for configmaps and secrets that are mounted as volumes (via `spring.config.import`) is: [source] @@ -92,7 +77,7 @@ One more important configuration, especially for configmaps and secrets that are value: "10000" ---- -This tells how many milliseconds should we wait before firing the event from configuration watcher. This is important because kubernetes documentation says: +This tells the watcher how many milliseconds to wait before firing the refresh event. This is important because Kubernetes documentation says: > When a ConfigMap currently consumed in a volume is updated, projected keys are eventually updated as well. @@ -191,13 +176,13 @@ The controller needs access to read data about ConfigMaps, Pods, Services, Endpo ## Monitoring ConfigMaps and Secrets -If a change is made to a ConfigMap or Secret with valid labels (as detailed above), then Spring Cloud Kubernetes Configuration Watcher will take the name of the ConfigMap or Secret +If a change is made to a ConfigMap or Secret that matches the configured watcher labels, then Spring Cloud Kubernetes Configuration Watcher will take the name of the ConfigMap or Secret and send a notification to the application with that name. This might not be enough for your use-case though, you could for example want to: - bind a config-map to multiple applications, so that a change inside a single configmap triggers a refresh for many services - have profile based sources trigger events for your application -For that reasons there is an addition annotation you could specify: +For those cases there are additional annotations you can specify: `spring.cloud.kubernetes.configmap.apps` or `spring.cloud.kubernetes.secret.apps`. It takes a String of apps separated by comma, that specifies the names of applications that will receive a notification when changes happen in this secret/configmap. @@ -210,8 +195,6 @@ kind: ConfigMap apiVersion: v1 metadata: name: example-configmap - labels: - spring.cloud.kubernetes.config: "true" annotations: spring.cloud.kubernetes.configmap.apps: "app-a, app-b" ---- @@ -239,8 +222,6 @@ kind: ConfigMap apiVersion: v1 metadata: name: example-configmap - labels: - spring.cloud.kubernetes.config: "true" annotations: spring.cloud.kubernetes.configmap.labels: "app=demo,tier=backend" ---- diff --git a/docs/modules/ROOT/partials/_configprops.adoc b/docs/modules/ROOT/partials/_configprops.adoc index 9479559246..a7576ed168 100644 --- a/docs/modules/ROOT/partials/_configprops.adoc +++ b/docs/modules/ROOT/partials/_configprops.adoc @@ -101,8 +101,6 @@ |spring.cloud.kubernetes.loadbalancer.enabled | `+++true+++` | Load balancer enabled,default true. |spring.cloud.kubernetes.loadbalancer.mode | `+++pod+++` | {@link KubernetesLoadBalancerMode} setting load balancer server list with ip of pod or service name. default value is POD. |spring.cloud.kubernetes.loadbalancer.port-name | `+++http+++` | service port name. -|spring.cloud.kubernetes.reload.config-maps-labels | | Labels for which to watch config maps. -|spring.cloud.kubernetes.reload.enable-reload-filtering | `+++false+++` | create an informer only for sources that have 'spring.cloud.kubernetes.config.informer.enabled=true' label. This property is only relevant for event based reloading. |spring.cloud.kubernetes.reload.enabled | `+++false+++` | Enables the Kubernetes configuration reload on change. |spring.cloud.kubernetes.reload.max-wait-for-restart | `+++2s+++` | Restart or Shutdown strategies are used, Spring Cloud Kubernetes waits a random amount of time before restarting. This is done in order to avoid having all instances of the same application restart at the same time. This property configures the maximum of amount of wait time from the moment the signal is received that a restart is needed until the moment the restart is actually triggered |spring.cloud.kubernetes.reload.mode | `+++EVENT+++` | Sets the detection mode for Kubernetes configuration reload. @@ -123,4 +121,4 @@ |spring.cloud.kubernetes.secrets.sources | | |spring.cloud.kubernetes.secrets.use-name-as-prefix | `+++false+++` | -|=== \ No newline at end of file +|=== diff --git a/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedConfigMapChangeDetector.java b/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedConfigMapChangeDetector.java index 69e90a452e..fe51b0acff 100644 --- a/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedConfigMapChangeDetector.java +++ b/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedConfigMapChangeDetector.java @@ -71,8 +71,6 @@ public class KubernetesClientEventBasedConfigMapChangeDetector extends Configura private final ConfigurableEnvironment environment; - private final boolean enableReloadFiltering; - private final boolean monitoringConfigMaps; private final Map configMapsLabels; @@ -115,7 +113,6 @@ public KubernetesClientEventBasedConfigMapChangeDetector(CoreV1Api coreV1Api, Co this.propertySourceLocator = propertySourceLocator; this.coreV1Api = coreV1Api; this.apiClient = createApiClientForInformerClient(); - this.enableReloadFiltering = properties.enableReloadFiltering(); this.monitoringConfigMaps = properties.monitoringConfigMaps(); this.configMapsLabels = properties.configMapsLabels(); namespaces = namespaces(kubernetesNamespaceProvider, properties, "configmap"); @@ -126,21 +123,6 @@ void inform() { if (monitoringConfigMaps) { LOG.info(() -> "Kubernetes event-based configMap change detector activated"); - Map labelSelector; - - if (enableReloadFiltering) { - LOG.warn(() -> "enable reload filtering is deprecated and will be removed in the next major release"); - LOG.warn(() -> "use spring.cloud.kubernetes.reload.config-maps-labels instead"); - if (!configMapsLabels.isEmpty()) { - LOG.warn(() -> "spring.cloud.kubernetes.reload.config-maps-labels is not empty, but " - + "spring.cloud.kubernetes.reload.enable-reload-filtering is enabled and will override the former"); - } - labelSelector = Map.of(ConfigReloadProperties.RELOAD_LABEL_FILTER, "true"); - } - else { - labelSelector = configMapsLabels; - } - namespaces.forEach(namespace -> { SharedIndexInformer informer; @@ -151,11 +133,11 @@ void inform() { .timeoutSeconds(params.timeoutSeconds) .resourceVersion(params.resourceVersion) .watch(params.watch) - .labelSelector(labelSelector(labelSelector)) + .labelSelector(labelSelector(configMapsLabels)) .buildCall(null), V1ConfigMap.class, V1ConfigMapList.class); - LOG.debug(() -> "added configmap informer for namespace : " + namespace + " with labels : " - + labelSelector); + LOG.debug( + () -> "configmap informer for namespace : " + namespace + " with labels : " + configMapsLabels); informer.addEventHandler(handler); informers.add(informer); diff --git a/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetector.java b/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetector.java index 63337cad08..d2f0b4105e 100644 --- a/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetector.java +++ b/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetector.java @@ -72,8 +72,6 @@ public class KubernetesClientEventBasedSecretsChangeDetector extends Configurati private final ConfigurableEnvironment environment; - private final boolean enableReloadFiltering; - private final boolean monitoringSecrets; private final Map secretsLabels; @@ -117,7 +115,6 @@ public KubernetesClientEventBasedSecretsChangeDetector(CoreV1Api coreV1Api, Conf this.propertySourceLocator = propertySourceLocator; this.coreV1Api = coreV1Api; this.apiClient = createApiClientForInformerClient(); - this.enableReloadFiltering = properties.enableReloadFiltering(); this.monitoringSecrets = properties.monitoringSecrets(); this.secretsLabels = properties.secretsLabels(); namespaces = namespaces(kubernetesNamespaceProvider, properties, "secret"); @@ -127,21 +124,6 @@ public KubernetesClientEventBasedSecretsChangeDetector(CoreV1Api coreV1Api, Conf void inform() { LOG.info(() -> "Kubernetes event-based secrets change detector activated"); - Map labelSelector; - - if (enableReloadFiltering) { - LOG.warn(() -> "enable reload filtering is deprecated and will be removed in the next major release"); - LOG.warn(() -> "use spring.cloud.kubernetes.reload.secrets-labels instead"); - if (!secretsLabels.isEmpty()) { - LOG.warn(() -> "spring.cloud.kubernetes.reload.secrets-labels is not empty, but " - + "spring.cloud.kubernetes.reload.enable-reload-filtering is enabled and will override the former"); - } - labelSelector = Map.of(ConfigReloadProperties.RELOAD_LABEL_FILTER, "true"); - } - else { - labelSelector = secretsLabels; - } - if (monitoringSecrets) { namespaces.forEach(namespace -> { SharedIndexInformer informer; @@ -153,10 +135,10 @@ void inform() { .timeoutSeconds(params.timeoutSeconds) .resourceVersion(params.resourceVersion) .watch(params.watch) - .labelSelector(labelSelector(labelSelector)) + .labelSelector(labelSelector(secretsLabels)) .buildCall(null), V1Secret.class, V1SecretList.class); - LOG.debug(() -> "secret informer for namespace : " + namespace + " with filter : " + secretsLabels); + LOG.debug(() -> "secret informer for namespace : " + namespace + " with labels : " + secretsLabels); informer.addEventHandler(handler); informers.add(informer); diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigUtilsTests.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigUtilsTests.java index 96a47a883b..d19ff769ff 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigUtilsTests.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigUtilsTests.java @@ -17,6 +17,7 @@ package org.springframework.cloud.kubernetes.client.config; import java.time.Duration; +import java.util.Map; import java.util.Set; import org.assertj.core.api.Assertions; @@ -33,9 +34,9 @@ class KubernetesClientConfigUtilsTests { @Test void testNamespacesFromProperties() { - ConfigReloadProperties properties = new ConfigReloadProperties(false, false, false, + ConfigReloadProperties properties = new ConfigReloadProperties(false, false, Map.of(), false, Map.of(), ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(15000), Set.of("non-default"), false, Duration.ofSeconds(2)); + Duration.ofMillis(15000), Set.of("non-default"), Duration.ofSeconds(2)); Set namespaces = KubernetesClientConfigUtils .namespaces(new KubernetesNamespaceProvider(new MockEnvironment()), properties, "configmap"); Assertions.assertThat(1).isEqualTo(namespaces.size()); diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithFilterTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithFilterTest.java deleted file mode 100644 index 35b6ba3e80..0000000000 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithFilterTest.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright 2012-present 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.client.config.reload; - -import java.time.Duration; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.github.tomakehurst.wiremock.WireMockServer; -import com.github.tomakehurst.wiremock.client.VerificationException; -import com.github.tomakehurst.wiremock.client.WireMock; -import io.kubernetes.client.openapi.ApiClient; -import io.kubernetes.client.openapi.JSON; -import io.kubernetes.client.openapi.apis.CoreV1Api; -import io.kubernetes.client.openapi.models.V1ConfigMap; -import io.kubernetes.client.openapi.models.V1ConfigMapList; -import io.kubernetes.client.openapi.models.V1ListMeta; -import io.kubernetes.client.openapi.models.V1ObjectMeta; -import io.kubernetes.client.util.ClientBuilder; -import io.kubernetes.client.util.Watch; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.system.OutputCaptureExtension; -import org.springframework.cloud.kubernetes.client.KubernetesClientUtils; -import org.springframework.cloud.kubernetes.client.config.KubernetesClientConfigMapPropertySource; -import org.springframework.cloud.kubernetes.client.config.KubernetesClientConfigMapPropertySourceLocator; -import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider; -import org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadProperties; -import org.springframework.cloud.kubernetes.commons.config.reload.ConfigurationUpdateStrategy; -import org.springframework.cloud.kubernetes.integration.tests.commons.Awaitilities; -import org.springframework.mock.env.MockPropertySource; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; -import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; -import static io.kubernetes.client.informer.EventType.ADDED; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.springframework.cloud.kubernetes.client.KubernetesClientUtils.getApplicationNamespace; - -/** - * @author wind57 - */ -@SpringBootTest(properties = { "spring.main.allow-bean-definition-overriding=true" }) -@ExtendWith(OutputCaptureExtension.class) -class ConfigMapReloadWithFilterTest { - - private static WireMockServer wireMockServer; - - private static final String PATH = "^/api/v1/namespaces/default/configmaps.*"; - - private static CoreV1Api coreV1Api; - - private static final MockedStatic MOCK_STATIC = Mockito - .mockStatic(KubernetesClientUtils.class); - - @BeforeAll - static void setup() { - wireMockServer = new WireMockServer(options().dynamicPort()); - - wireMockServer.start(); - WireMock.configureFor("localhost", wireMockServer.port()); - - ApiClient client = new ClientBuilder().setBasePath("http://localhost:" + wireMockServer.port()).build(); - MOCK_STATIC.when(KubernetesClientUtils::createApiClientForInformerClient).thenReturn(client); - MOCK_STATIC.when(() -> getApplicationNamespace(Mockito.nullable(String.class), anyString(), any())) - .thenReturn("default"); - coreV1Api = new CoreV1Api(client); - } - - @AfterAll - static void after() { - MOCK_STATIC.close(); - wireMockServer.stop(); - } - - @Test - void test() { - - V1ConfigMap myConfigMap = new V1ConfigMap() - .metadata(new V1ObjectMeta().namespace("default") - .name("my-config-map") - .labels(Map.of("spring.cloud.kubernetes.config.informer.enabled", "true"))) - .data(Map.of("shape", "round")); - - V1ConfigMapList configMapList = new V1ConfigMapList().metadata(new V1ListMeta().resourceVersion("1")) - .items(List.of(myConfigMap)); - - // 1. first call to informer - stubFor(get(urlMatching(PATH)).withQueryParam("watch", equalTo("false")) - .withQueryParam("resourceVersion", equalTo("0")) - .withQueryParam("labelSelector", equalTo("spring.cloud.kubernetes.config.informer.enabled=true")) - .willReturn(aResponse().withStatus(200).withBody(JSON.serialize(configMapList)))); - - // 2. second call to informer - V1ConfigMap second = new V1ConfigMap() - .metadata(new V1ObjectMeta().namespace("default") - .name("second") - .labels(Map.of("spring.cloud.kubernetes.config.informer.enabled", "true")) - .resourceVersion("2")) - .data(Map.of("a", "b")); - Watch.Response watchResponse = new Watch.Response<>(ADDED.name(), second); - - stubFor(get(urlMatching(PATH)).withQueryParam("watch", equalTo("true")) - .withQueryParam("resourceVersion", equalTo("1")) - .withQueryParam("labelSelector", equalTo("spring.cloud.kubernetes.config.informer.enabled=true")) - .willReturn(aResponse().withStatus(200).withBody(JSON.serialize(watchResponse)))); - - // 3. all future calls to informer ( any call with resourceVersion >= 2 ) - stubFor(get(urlMatching(PATH)).atPriority(10) - .withQueryParam("watch", equalTo("true")) - .withQueryParam("resourceVersion", WireMock.matching("[2-9][0-9]*")) - .withQueryParam("labelSelector", equalTo("spring.cloud.kubernetes.config.informer.enabled=true")) - .willReturn(aResponse().withStatus(200).withBody(""))); - - // update strategy - ConfigurationUpdateStrategy strategy = new ConfigurationUpdateStrategy("strategy", () -> { - - }); - - // mock environment - KubernetesMockEnvironment environment = new KubernetesMockEnvironment( - mock(KubernetesClientConfigMapPropertySource.class)); - - // change locator - KubernetesClientConfigMapPropertySourceLocator locator = mock( - KubernetesClientConfigMapPropertySourceLocator.class); - when(locator.locate(environment)).thenAnswer(x -> new MockPropertySource()); - - // namespace provider - KubernetesNamespaceProvider namespaceProvider = mock(KubernetesNamespaceProvider.class); - when(namespaceProvider.getNamespace()).thenReturn("default"); - - // properties - boolean enableReloadFiltering = true; - boolean monitorConfigMaps = true; - boolean monitorSecrets = false; - Map configMapsLabels = Map.of(); - Map secretsLabels = Map.of(); - ConfigReloadProperties properties = new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, - monitorSecrets, secretsLabels, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of(), - enableReloadFiltering, Duration.ofSeconds(2)); - - // change detector - KubernetesClientEventBasedConfigMapChangeDetector changeDetector = new KubernetesClientEventBasedConfigMapChangeDetector( - coreV1Api, environment, properties, strategy, locator, namespaceProvider); - - changeDetector.inform(); - - // assert that both requests from informer are label based - Awaitilities.awaitUntil(10, 1000, () -> { - try { - - WireMock.verify(WireMock.moreThanOrExactly(1), - getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("false")) - .withQueryParam("labelSelector", - equalTo("spring.cloud.kubernetes.config.informer.enabled=true"))); - - WireMock.verify(WireMock.moreThanOrExactly(1), - getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("true")) - .withQueryParam("labelSelector", - equalTo("spring.cloud.kubernetes.config.informer.enabled=true"))); - - WireMock.verify(0, getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("false")) - .withoutQueryParam("labelSelector")); - - WireMock.verify(0, getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("true")) - .withoutQueryParam("labelSelector")); - - return true; - } - catch (VerificationException e) { - return false; - } - }); - - changeDetector.shutdown(); - - assertThat(wireMockServer.findAllUnmatchedRequests()).isEmpty(); - - } - -} diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithLabelsTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithLabelsTest.java index bd05a81b72..45e3c6c319 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithLabelsTest.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/ConfigMapReloadWithLabelsTest.java @@ -159,7 +159,6 @@ void test() { when(namespaceProvider.getNamespace()).thenReturn("default"); // properties - boolean enableReloadFiltering = false; boolean monitorConfigMaps = true; boolean monitorSecrets = false; Map configMapsLabels = Map.of("only-shape", "round"); @@ -167,7 +166,7 @@ void test() { ConfigReloadProperties properties = new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, monitorSecrets, secretsLabels, ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of(), - enableReloadFiltering, Duration.ofSeconds(2)); + Duration.ofSeconds(2)); // change detector KubernetesClientEventBasedConfigMapChangeDetector changeDetector = new KubernetesClientEventBasedConfigMapChangeDetector( diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetectorTests.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetectorTests.java index e8bbd8fa44..1d958ff9a8 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetectorTests.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/KubernetesClientEventBasedSecretsChangeDetectorTests.java @@ -280,9 +280,9 @@ private void changeDetectorAssert() { .thenAnswer(ignoreMe -> new MockPropertySource().withProperty("db-password", "p455w0rd2")); // properties - ConfigReloadProperties properties = new ConfigReloadProperties(false, false, true, + ConfigReloadProperties properties = new ConfigReloadProperties(false, false, Map.of(), true, Map.of(), ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(15000), Set.of(), false, Duration.ofSeconds(2)); + Duration.ofMillis(15000), Set.of(), Duration.ofSeconds(2)); // namespace provider KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class); diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithFilterTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithFilterTest.java deleted file mode 100644 index 2bb9f64bf2..0000000000 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithFilterTest.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright 2012-present 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.client.config.reload; - -import java.time.Duration; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.github.tomakehurst.wiremock.WireMockServer; -import com.github.tomakehurst.wiremock.client.VerificationException; -import com.github.tomakehurst.wiremock.client.WireMock; -import io.kubernetes.client.openapi.ApiClient; -import io.kubernetes.client.openapi.JSON; -import io.kubernetes.client.openapi.apis.CoreV1Api; -import io.kubernetes.client.openapi.models.V1ListMeta; -import io.kubernetes.client.openapi.models.V1ObjectMeta; -import io.kubernetes.client.openapi.models.V1Secret; -import io.kubernetes.client.openapi.models.V1SecretList; -import io.kubernetes.client.util.ClientBuilder; -import io.kubernetes.client.util.Watch; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.system.OutputCaptureExtension; -import org.springframework.cloud.kubernetes.client.KubernetesClientUtils; -import org.springframework.cloud.kubernetes.client.config.KubernetesClientSecretsPropertySource; -import org.springframework.cloud.kubernetes.client.config.KubernetesClientSecretsPropertySourceLocator; -import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider; -import org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadProperties; -import org.springframework.cloud.kubernetes.commons.config.reload.ConfigurationUpdateStrategy; -import org.springframework.cloud.kubernetes.integration.tests.commons.Awaitilities; -import org.springframework.mock.env.MockPropertySource; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; -import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; -import static io.kubernetes.client.informer.EventType.ADDED; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.springframework.cloud.kubernetes.client.KubernetesClientUtils.getApplicationNamespace; - -/** - * @author wind57 - */ -@SpringBootTest(properties = { "spring.main.allow-bean-definition-overriding=true" }) -@ExtendWith(OutputCaptureExtension.class) -class SecretReloadWithFilterTest { - - private static WireMockServer wireMockServer; - - private static final String PATH = "^/api/v1/namespaces/default/secrets.*"; - - private static CoreV1Api coreV1Api; - - private static final MockedStatic MOCK_STATIC = Mockito - .mockStatic(KubernetesClientUtils.class); - - @BeforeAll - static void setup() { - wireMockServer = new WireMockServer(options().dynamicPort()); - - wireMockServer.start(); - WireMock.configureFor("localhost", wireMockServer.port()); - - ApiClient client = new ClientBuilder().setBasePath("http://localhost:" + wireMockServer.port()).build(); - MOCK_STATIC.when(KubernetesClientUtils::createApiClientForInformerClient).thenReturn(client); - MOCK_STATIC.when(() -> getApplicationNamespace(Mockito.nullable(String.class), anyString(), any())) - .thenReturn("default"); - coreV1Api = new CoreV1Api(client); - } - - @AfterAll - static void after() { - MOCK_STATIC.close(); - wireMockServer.stop(); - } - - @Test - void test() { - - V1Secret mySecret = new V1Secret() - .metadata(new V1ObjectMeta().namespace("default") - .name("my-secret") - .labels(Map.of("spring.cloud.kubernetes.config.informer.enabled", "true"))) - .data(Map.of("shape", "round".getBytes())); - - V1SecretList secretList = new V1SecretList().metadata(new V1ListMeta().resourceVersion("1")) - .items(List.of(mySecret)); - - // 1. first call to informer - stubFor(get(urlMatching(PATH)).withQueryParam("watch", equalTo("false")) - .withQueryParam("resourceVersion", equalTo("0")) - .withQueryParam("labelSelector", equalTo("spring.cloud.kubernetes.config.informer.enabled=true")) - .willReturn(aResponse().withStatus(200).withBody(JSON.serialize(secretList)))); - - // 2. second call to informer - V1Secret second = new V1Secret() - .metadata(new V1ObjectMeta().namespace("default") - .name("second") - .labels(Map.of("spring.cloud.kubernetes.config.informer.enabled", "true")) - .resourceVersion("2")) - .data(Map.of("a", "b".getBytes())); - Watch.Response watchResponse = new Watch.Response<>(ADDED.name(), second); - - stubFor(get(urlMatching(PATH)).withQueryParam("watch", equalTo("true")) - .withQueryParam("resourceVersion", equalTo("1")) - .withQueryParam("labelSelector", equalTo("spring.cloud.kubernetes.config.informer.enabled=true")) - .willReturn(aResponse().withStatus(200).withBody(JSON.serialize(watchResponse)))); - - // 3. all future calls to informer ( any call with resourceVersion >= 2 ) - stubFor(get(urlMatching(PATH)).atPriority(10) - .withQueryParam("watch", equalTo("true")) - .withQueryParam("resourceVersion", WireMock.matching("[2-9][0-9]*")) - .withQueryParam("labelSelector", equalTo("spring.cloud.kubernetes.config.informer.enabled=true")) - .willReturn(aResponse().withStatus(200).withBody(""))); - - // update strategy - ConfigurationUpdateStrategy strategy = new ConfigurationUpdateStrategy("strategy", () -> { - - }); - - // mock environment - KubernetesMockEnvironment environment = new KubernetesMockEnvironment( - mock(KubernetesClientSecretsPropertySource.class)); - - // change locator - KubernetesClientSecretsPropertySourceLocator locator = mock(KubernetesClientSecretsPropertySourceLocator.class); - when(locator.locate(environment)).thenAnswer(x -> new MockPropertySource()); - - // namespace provider - KubernetesNamespaceProvider namespaceProvider = mock(KubernetesNamespaceProvider.class); - when(namespaceProvider.getNamespace()).thenReturn("default"); - - // properties - boolean enableReloadFiltering = true; - boolean monitorConfigMaps = false; - boolean monitorSecrets = true; - Map configMapsLabels = Map.of(); - Map secretsLabels = Map.of(); - ConfigReloadProperties properties = new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, - monitorSecrets, secretsLabels, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of(), - enableReloadFiltering, Duration.ofSeconds(2)); - - // change detector - KubernetesClientEventBasedSecretsChangeDetector changeDetector = new KubernetesClientEventBasedSecretsChangeDetector( - coreV1Api, environment, properties, strategy, locator, namespaceProvider); - - changeDetector.inform(); - - // assert that both requests from informer are label based - Awaitilities.awaitUntil(10, 1000, () -> { - try { - - WireMock.verify(WireMock.moreThanOrExactly(1), - getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("false")) - .withQueryParam("labelSelector", - equalTo("spring.cloud.kubernetes.config.informer.enabled=true"))); - - WireMock.verify(WireMock.moreThanOrExactly(1), - getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("true")) - .withQueryParam("labelSelector", - equalTo("spring.cloud.kubernetes.config.informer.enabled=true"))); - - WireMock.verify(0, getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("false")) - .withoutQueryParam("labelSelector")); - - WireMock.verify(0, getRequestedFor(urlMatching(PATH)).withQueryParam("watch", equalTo("true")) - .withoutQueryParam("labelSelector")); - - return true; - - } - catch (VerificationException e) { - return false; - } - }); - - changeDetector.shutdown(); - - assertThat(wireMockServer.findAllUnmatchedRequests()).isEmpty(); - - } - -} diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithLabelsTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithLabelsTest.java index d5149fc153..b1876c199a 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithLabelsTest.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload/SecretReloadWithLabelsTest.java @@ -157,7 +157,6 @@ void test() { when(namespaceProvider.getNamespace()).thenReturn("default"); // properties - boolean enableReloadFiltering = false; boolean monitorConfigMaps = false; boolean monitorSecrets = true; Map configMapsLabels = Map.of(); @@ -165,7 +164,7 @@ void test() { ConfigReloadProperties properties = new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, monitorSecrets, secretsLabels, ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of(), - enableReloadFiltering, Duration.ofSeconds(2)); + Duration.ofSeconds(2)); // change detector KubernetesClientEventBasedSecretsChangeDetector changeDetector = new KubernetesClientEventBasedSecretsChangeDetector( diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadConfigMapTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadConfigMapTest.java index eb1f25cb0a..c4c3b2e666 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadConfigMapTest.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadConfigMapTest.java @@ -197,9 +197,9 @@ VisibleKubernetesClientEventBasedConfigMapChangeDetector kubernetesClientEventBa @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("spring-k8s"), - false, Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), false, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(2000), Set.of("spring-k8s"), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadSecretTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadSecretTest.java index a4b838206a..137eb32fe3 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadSecretTest.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/EventReloadSecretTest.java @@ -202,9 +202,9 @@ VisibleKubernetesClientEventBasedSecretsChangeDetector kubernetesClientEventBase @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("spring-k8s"), - false, Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), false, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(2000), Set.of("spring-k8s"), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadConfigMapTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadConfigMapTest.java index 610bb42a36..58f3311a64 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadConfigMapTest.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadConfigMapTest.java @@ -173,9 +173,9 @@ PollingConfigMapChangeDetector pollingConfigMapChangeDetector(AbstractEnvironmen @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("non-default"), - false, Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), false, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(2000), Set.of("non-default"), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadSecretTest.java b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadSecretTest.java index d961f02269..9b2401f61f 100644 --- a/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadSecretTest.java +++ b/spring-cloud-kubernetes-client-config/src/test/java/org/springframework/cloud/kubernetes/client/config/reload_it/PollingReloadSecretTest.java @@ -175,9 +175,9 @@ PollingSecretsChangeDetector pollingSecretsChangeDetector(AbstractEnvironment en @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, false, true, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("non-default"), - false, Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, false, Map.of(), true, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(2000), Set.of("non-default"), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/reload/ConfigReloadProperties.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/reload/ConfigReloadProperties.java index 30dc5245b8..1d1ad56b6c 100644 --- a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/reload/ConfigReloadProperties.java +++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/reload/ConfigReloadProperties.java @@ -21,7 +21,6 @@ import java.util.Set; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.bind.ConstructorBinding; import org.springframework.boot.context.properties.bind.DefaultValue; /** @@ -37,9 +36,6 @@ * @param period Sets the polling period to use when the detection mode is POLLING. * @param namespaces namespaces where an informer will be set-up. this property is only * relevant for event based reloading. - * @param enableReloadFiltering create an informer only for sources that have - * 'spring.cloud.kubernetes.config.informer.enabled=true' label. This property is only - * relevant for event based reloading. * @param maxWaitForRestart Restart or Shutdown strategies are used, Spring Cloud * Kubernetes waits a random amount of time before restarting. This is done in order to * avoid having all instances of the same application restart at the same time. This @@ -48,56 +44,19 @@ * @author Nicola Ferraro */ @ConfigurationProperties(prefix = "spring.cloud.kubernetes.reload") -public record ConfigReloadProperties(boolean enabled, boolean monitoringConfigMaps, - Map configMapsLabels, boolean monitoringSecrets, Map secretsLabels, - ReloadStrategy strategy, ReloadDetectionMode mode, Duration period, Set namespaces, - boolean enableReloadFiltering, Duration maxWaitForRestart) { - - @ConstructorBinding - public ConfigReloadProperties(boolean enabled, @DefaultValue("true") boolean monitoringConfigMaps, - @DefaultValue Map configMapsLabels, boolean monitoringSecrets, - @DefaultValue Map secretsLabels, @DefaultValue("REFRESH") ReloadStrategy strategy, - @DefaultValue("EVENT") ReloadDetectionMode mode, @DefaultValue("15000ms") Duration period, - @DefaultValue Set namespaces, boolean enableReloadFiltering, - @DefaultValue("2s") Duration maxWaitForRestart) { - - this.enabled = enabled; - this.monitoringConfigMaps = monitoringConfigMaps; - this.configMapsLabels = configMapsLabels; - this.monitoringSecrets = monitoringSecrets; - this.secretsLabels = secretsLabels; - this.strategy = strategy; - this.mode = mode; - this.period = period; - this.namespaces = namespaces; - this.enableReloadFiltering = enableReloadFiltering; - this.maxWaitForRestart = maxWaitForRestart; - } - - @Deprecated(forRemoval = true) - public ConfigReloadProperties(boolean enabled, @DefaultValue("true") boolean monitoringConfigMaps, - boolean monitoringSecrets, @DefaultValue("REFRESH") ReloadStrategy strategy, - @DefaultValue("EVENT") ReloadDetectionMode mode, @DefaultValue("15000ms") Duration period, - @DefaultValue Set namespaces, boolean enableReloadFiltering, - @DefaultValue("2s") Duration maxWaitForRestart) { - - this(enabled, monitoringConfigMaps, Map.of(), monitoringSecrets, Map.of(), strategy, mode, period, namespaces, - enableReloadFiltering, maxWaitForRestart); - } +public record ConfigReloadProperties(boolean enabled, @DefaultValue("true") boolean monitoringConfigMaps, + @DefaultValue Map configMapsLabels, boolean monitoringSecrets, + @DefaultValue Map secretsLabels, @DefaultValue("REFRESH") ReloadStrategy strategy, + @DefaultValue("EVENT") ReloadDetectionMode mode, @DefaultValue("15000ms") Duration period, + @DefaultValue Set namespaces, @DefaultValue("2s") Duration maxWaitForRestart) { /** * default instance. */ public static final ConfigReloadProperties DEFAULT = new ConfigReloadProperties(false, true, Map.of(), false, - Map.of(), ReloadStrategy.REFRESH, ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of(), false, + Map.of(), ReloadStrategy.REFRESH, ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of(), Duration.ofSeconds(2)); - /** - * label for filtering sources. - */ - @Deprecated(forRemoval = true) - public static final String RELOAD_LABEL_FILTER = "spring.cloud.kubernetes.config.informer.enabled"; - /** * Reload strategies. */ diff --git a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/ConfigReloadPropertiesTests.java b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/ConfigReloadPropertiesTests.java index 574187e72e..3de0fdeae8 100644 --- a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/ConfigReloadPropertiesTests.java +++ b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/config/ConfigReloadPropertiesTests.java @@ -47,7 +47,6 @@ void testDefaults() { assertThat(ConfigReloadProperties.ReloadDetectionMode.EVENT).isEqualTo(properties.mode()); assertThat(Duration.ofMillis(15000)).isEqualTo(properties.period()); assertThat(properties.namespaces().isEmpty()).isTrue(); - assertThat(properties.enableReloadFiltering()).isFalse(); assertThat(Duration.ofSeconds(2)).isEqualTo(properties.maxWaitForRestart()); }); } @@ -63,7 +62,6 @@ void testNonDefaults() { "spring.cloud.kubernetes.reload.strategy=SHUTDOWN", "spring.cloud.kubernetes.reload.mode=POLLING", "spring.cloud.kubernetes.reload.period=1000ms", "spring.cloud.kubernetes.reload.namespaces[0]=a", "spring.cloud.kubernetes.reload.namespaces[1]=b", - "spring.cloud.kubernetes.reload.enable-reload-filtering=true", "spring.cloud.kubernetes.reload.max-wait-for-restart=5s") .run(context -> { ConfigReloadProperties properties = context.getBean(ConfigReloadProperties.class); @@ -77,7 +75,6 @@ void testNonDefaults() { assertThat(ConfigReloadProperties.ReloadDetectionMode.POLLING).isEqualTo(properties.mode()); assertThat(Duration.ofMillis(1000)).isEqualTo(properties.period()); assertThat(properties.namespaces()).containsExactlyInAnyOrder("a", "b"); - assertThat(properties.enableReloadFiltering()).isTrue(); assertThat(Duration.ofSeconds(5)).isEqualTo(properties.maxWaitForRestart()); }); } diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigMapKubernetesSource.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigMapKubernetesSource.java index 49d4c7e28e..0694d036d3 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigMapKubernetesSource.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigMapKubernetesSource.java @@ -34,11 +34,6 @@ public String description() { return "configmap"; } - @Override - public String requiredResourceLabel() { - return ConfigurationWatcherConfigurationProperties.CONFIG_MAP_LABEL; - } - @Override public String toString() { return "ConfigMapKubernetesSource{" + "resourceName='" + resourceName + '\'' + ", serviceNames=" + serviceNames diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigurationWatcherConfigurationProperties.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigurationWatcherConfigurationProperties.java index b261ea28d2..928303335d 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigurationWatcherConfigurationProperties.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/ConfigurationWatcherConfigurationProperties.java @@ -43,30 +43,6 @@ public class ConfigurationWatcherConfigurationProperties { */ static final String NOT_AMQP_NOT_KAFKA = "!" + AMQP + " & !" + KAFKA; - /** - * label to enable refresh/restart when using configmaps. - */ - @Deprecated(forRemoval = true) - public static final String CONFIG_MAP_LABEL = "spring.cloud.kubernetes.config"; - - /** - * label to enable refresh/restart when using secrets. - */ - @Deprecated(forRemoval = true) - public static final String SECRET_LABEL = "spring.cloud.kubernetes.secret"; - - /** - * annotation name to enable refresh/restart for specific apps when using configmaps. - */ - @Deprecated(forRemoval = true) - public static final String CONFIG_MAP_APPS_ANNOTATION = "spring.cloud.kubernetes.configmap.apps"; - - /** - * annotation name to enable refresh/restart for specific apps when using secrets. - */ - @Deprecated(forRemoval = true) - public static final String SECRET_APPS_ANNOTATION = "spring.cloud.kubernetes.secret.apps"; - /** * Annotation key for actuator port and path. */ diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSource.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSource.java index 65138b10b3..d7fb6fe151 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSource.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSource.java @@ -34,8 +34,6 @@ sealed interface KubernetesSource permits ConfigMapKubernetesSource, SecretKuber String description(); - String requiredResourceLabel(); - Set serviceNames(); Map serviceLabels(); diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/SecretKubernetesSource.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/SecretKubernetesSource.java index be0f56a8e6..71f5067839 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/SecretKubernetesSource.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/SecretKubernetesSource.java @@ -34,11 +34,6 @@ public String description() { return "secret"; } - @Override - public String requiredResourceLabel() { - return ConfigurationWatcherConfigurationProperties.SECRET_LABEL; - } - @Override public String toString() { return "SecretKubernetesSource{" + "resourceName='" + resourceName + '\'' + ", serviceNames=" + serviceNames diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtil.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtil.java index e4d8c83245..7456550e0c 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtil.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/main/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtil.java @@ -47,14 +47,6 @@ static void onEvent(KubernetesObject kubernetesObject, long refreshDelay, Schedu Function> triggerRefresh) { KubernetesSource kubernetesSource = kubernetesSource(kubernetesObject); - String name = kubernetesObject.getMetadata().getName(); - String label = kubernetesSource.requiredResourceLabel(); - - if (!isSpringCloudKubernetes(kubernetesObject, label)) { - LOG.debug(() -> "Not publishing event : " + kubernetesSource.description() + ": " + name - + " does not contain the label " + label); - return; - } // we need defer, because otherwise triggerRefresh.apply(kubernetesSource) is // called when the pipeline is being built, not when it's run. diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSourceProviderTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSourceProviderTests.java index b386dcfe8f..f599b09c76 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSourceProviderTests.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/KubernetesSourceProviderTests.java @@ -165,8 +165,6 @@ void kubernetesSourceForConfigMap() { assertThat(source).isInstanceOf(ConfigMapKubernetesSource.class); assertThat(source.description()).isEqualTo("configmap"); - assertThat(source.requiredResourceLabel()) - .isEqualTo(ConfigurationWatcherConfigurationProperties.CONFIG_MAP_LABEL); assertThat(source.serviceNames()).containsExactlyInAnyOrder("app-one", "app-two"); assertThat(source.serviceLabels()) .containsExactlyInAnyOrderEntriesOf(Map.of("app", "my-app", "tier", "backend")); @@ -185,7 +183,6 @@ void kubernetesSourceForSecret() { assertThat(source).isInstanceOf(SecretKubernetesSource.class); assertThat(source.description()).isEqualTo("secret"); - assertThat(source.requiredResourceLabel()).isEqualTo(ConfigurationWatcherConfigurationProperties.SECRET_LABEL); assertThat(source.serviceNames()).containsExactlyInAnyOrder("app-one", "app-two"); assertThat(source.serviceLabels()) .containsExactlyInAnyOrderEntriesOf(Map.of("app", "my-app", "tier", "backend")); diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtilTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtilTests.java deleted file mode 100644 index 711d8ce022..0000000000 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/WatcherUtilTests.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2013-present 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.configuration.watcher; - -import java.util.Map; - -import io.kubernetes.client.openapi.models.V1ConfigMap; -import io.kubernetes.client.openapi.models.V1ConfigMapBuilder; -import io.kubernetes.client.openapi.models.V1ObjectMeta; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -class WatcherUtilTests { - - @Test - void configMapWithRequiredLabelIsAccepted() { - V1ConfigMap configMap = configMap(Map.of(ConfigurationWatcherConfigurationProperties.CONFIG_MAP_LABEL, "true")); - - boolean accepted = WatcherUtil.isSpringCloudKubernetes(configMap, - ConfigurationWatcherConfigurationProperties.CONFIG_MAP_LABEL); - - assertThat(accepted).isTrue(); - } - - @Test - void configMapWithoutRequiredLabelIsRejected() { - V1ConfigMap configMap = configMap(Map.of()); - - boolean accepted = WatcherUtil.isSpringCloudKubernetes(configMap, - ConfigurationWatcherConfigurationProperties.CONFIG_MAP_LABEL); - - assertThat(accepted).isFalse(); - } - - private static V1ConfigMap configMap(Map labels) { - return new V1ConfigMapBuilder().withMetadata(new V1ObjectMeta().name("my-configmap").labels(labels)).build(); - } - -} diff --git a/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedConfigMapChangeDetector.java b/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedConfigMapChangeDetector.java index c08fd9fe33..c84b28dc8f 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedConfigMapChangeDetector.java +++ b/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedConfigMapChangeDetector.java @@ -66,8 +66,6 @@ public class Fabric8EventBasedConfigMapChangeDetector extends ConfigurationChang private final ConfigurableEnvironment environment; - private final boolean enableReloadFiltering; - private final boolean monitorConfigMaps; private final Map configMapsLabels; @@ -80,7 +78,6 @@ public Fabric8EventBasedConfigMapChangeDetector(AbstractEnvironment environment, this.environment = environment; this.kubernetesClient = kubernetesClient; this.fabric8ConfigMapPropertySourceLocator = fabric8ConfigMapPropertySourceLocator; - this.enableReloadFiltering = properties.enableReloadFiltering(); this.monitorConfigMaps = properties.monitoringConfigMaps(); this.configMapsLabels = properties.configMapsLabels(); namespaces = namespaces(kubernetesClient, namespaceProvider, properties, "configmap"); @@ -92,25 +89,11 @@ private void inform() { LOG.info("Kubernetes event-based configMap change detector activated"); - Map labelSelector; - - if (enableReloadFiltering) { - LOG.warn(() -> "enable reload filtering is deprecated and will be removed in the next major release"); - LOG.warn(() -> "use spring.cloud.kubernetes.reload.config-maps-labels instead"); - if (!configMapsLabels.isEmpty()) { - LOG.warn(() -> "spring.cloud.kubernetes.reload.config-maps-labels is not empty, but " - + "spring.cloud.kubernetes.reload.enable-reload-filtering is enabled and will override the former"); - } - labelSelector = Map.of(ConfigReloadProperties.RELOAD_LABEL_FILTER, "true"); - } - else { - labelSelector = configMapsLabels; - } - namespaces.forEach(namespace -> { SharedIndexInformer informer; - informer = kubernetesClient.configMaps().inNamespace(namespace).withLabels(labelSelector).inform(); - LOG.debug("added configmap informer for namespace : " + namespace + " with labels : " + labelSelector); + informer = kubernetesClient.configMaps().inNamespace(namespace).withLabels(configMapsLabels).inform(); + LOG.debug( + "added configmap informer for namespace : " + namespace + " with labels : " + configMapsLabels); informer.addEventHandler(new ConfigMapInformerAwareEventHandler(informer)); informers.add(informer); diff --git a/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedSecretsChangeDetector.java b/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedSecretsChangeDetector.java index 2d57903393..dd92996240 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedSecretsChangeDetector.java +++ b/spring-cloud-kubernetes-fabric8-config/src/main/java/org/springframework/cloud/kubernetes/fabric8/config/reload/Fabric8EventBasedSecretsChangeDetector.java @@ -66,8 +66,6 @@ public class Fabric8EventBasedSecretsChangeDetector extends ConfigurationChangeD private final ConfigurableEnvironment environment; - private final boolean enableReloadFiltering; - private final boolean monitorSecrets; private final Map secretsLabels; @@ -80,7 +78,6 @@ public Fabric8EventBasedSecretsChangeDetector(AbstractEnvironment environment, C this.environment = environment; this.kubernetesClient = kubernetesClient; this.fabric8SecretsPropertySourceLocator = fabric8SecretsPropertySourceLocator; - this.enableReloadFiltering = properties.enableReloadFiltering(); this.monitorSecrets = properties.monitoringSecrets(); secretsLabels = properties.secretsLabels(); namespaces = namespaces(kubernetesClient, namespaceProvider, properties, "secrets"); @@ -100,25 +97,10 @@ private void inform() { LOG.info("Kubernetes event-based secrets change detector activated"); - Map labelSelector; - - if (enableReloadFiltering) { - LOG.warn(() -> "enable reload filtering is deprecated and will be removed in the next major release"); - LOG.warn(() -> "use spring.cloud.kubernetes.reload.secrets-labels instead"); - if (!secretsLabels.isEmpty()) { - LOG.warn(() -> "spring.cloud.kubernetes.reload.secrets-labels is not empty, but " - + "spring.cloud.kubernetes.reload.enable-reload-filtering is enabled and will override the former"); - } - labelSelector = Map.of(ConfigReloadProperties.RELOAD_LABEL_FILTER, "true"); - } - else { - labelSelector = secretsLabels; - } - namespaces.forEach(namespace -> { SharedIndexInformer informer; - informer = kubernetesClient.secrets().inNamespace(namespace).withLabels(labelSelector).inform(); - LOG.debug("added secret informer for namespace : " + namespace + " with labels : " + labelSelector); + informer = kubernetesClient.secrets().inNamespace(namespace).withLabels(secretsLabels).inform(); + LOG.debug("added secret informer for namespace : " + namespace + " with labels : " + secretsLabels); informer.addEventHandler(new SecretInformerAwareEventHandler(informer)); informers.add(informer); diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/Fabric8ConfigUtilsTests.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/Fabric8ConfigUtilsTests.java index bd0c09fd39..592a68f936 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/Fabric8ConfigUtilsTests.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/Fabric8ConfigUtilsTests.java @@ -17,6 +17,7 @@ package org.springframework.cloud.kubernetes.fabric8.config; import java.time.Duration; +import java.util.Map; import java.util.Set; import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; @@ -35,9 +36,10 @@ class Fabric8ConfigUtilsTests { @Test void testNamespacesFromProperties() { - ConfigReloadProperties configReloadProperties = new ConfigReloadProperties(false, true, false, - ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(15000), Set.of("non-default"), false, Duration.ofSeconds(2)); + ConfigReloadProperties configReloadProperties = new ConfigReloadProperties(false, true, Map.of(), false, + Map.of(), ConfigReloadProperties.ReloadStrategy.REFRESH, + ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(15000), Set.of("non-default"), + Duration.ofSeconds(2)); Set namespaces = Fabric8ConfigUtils.namespaces(null, new KubernetesNamespaceProvider(new MockEnvironment()), configReloadProperties, "configmap"); Assertions.assertThat(namespaces.size()).isEqualTo(1); diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadConfigMapTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadConfigMapTest.java index 0279f5e8b2..6c03398cdb 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadConfigMapTest.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadConfigMapTest.java @@ -158,9 +158,9 @@ Fabric8EventBasedConfigMapChangeDetector fabric8EventBasedSecretsChangeDetector( @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(2000), Set.of(NAMESPACE), false, - Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), false, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, + Duration.ofMillis(2000), Set.of(NAMESPACE), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadSecretTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadSecretTest.java index 35b77c24ee..8743525e33 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadSecretTest.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/EventReloadSecretTest.java @@ -163,9 +163,9 @@ Fabric8EventBasedSecretsChangeDetector fabric8EventBasedSecretsChangeDetector(Ab @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, true, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.EVENT, Duration.ofMillis(2000), Set.of(NAMESPACE), false, - Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), true, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, + Duration.ofMillis(2000), Set.of(NAMESPACE), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapAndSecretTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapAndSecretTest.java index c640e2c506..77206bec58 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapAndSecretTest.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapAndSecretTest.java @@ -172,9 +172,9 @@ private static ConfigurationUpdateStrategy secretConfigurationUpdateStrategy() { } private static ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, true, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(200), Set.of(NAMESPACE), false, - Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), true, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(200), Set.of(NAMESPACE), Duration.ofSeconds(2)); } @TestConfiguration diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapTest.java index a381e1e810..57b9d8d672 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapTest.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadConfigMapTest.java @@ -139,9 +139,9 @@ PollingConfigMapChangeDetector pollingConfigMapChangeDetector(AbstractEnvironmen @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("non-default"), - false, Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), false, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(2000), Set.of("non-default"), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadSecretTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadSecretTest.java index c69754c1df..226c026ef8 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadSecretTest.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/PollingReloadSecretTest.java @@ -145,9 +145,9 @@ PollingSecretsChangeDetector pollingSecretsChangeDetector(AbstractEnvironment en @Bean @Primary ConfigReloadProperties configReloadProperties() { - return new ConfigReloadProperties(true, true, true, ConfigReloadProperties.ReloadStrategy.REFRESH, - ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("non-default"), - false, Duration.ofSeconds(2)); + return new ConfigReloadProperties(true, true, Map.of(), true, Map.of(), + ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.POLLING, + Duration.ofMillis(2000), Set.of("non-default"), Duration.ofSeconds(2)); } @Bean diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/CommonAbstractFiltering.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/CommonAbstractFiltering.java index 9be20fec97..1f61ff0188 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/CommonAbstractFiltering.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/CommonAbstractFiltering.java @@ -192,22 +192,6 @@ Fabric8SecretsPropertySourceLocator fabric8SecretsPropertySourceLocator( @TestConfiguration static class ConfigReloadPropertiesConfiguration { - @Bean - @Primary - @ConditionalOnProperty(value = "configmaps.reload.filtering", havingValue = "true", matchIfMissing = false) - ConfigReloadProperties configReloadPropertiesA() { - - boolean monitorConfigMaps = true; - boolean monitorSecrets = false; - boolean enableReloadFiltering = true; - Map configMapsLabels = Map.of(); - Map secretsLabels = Map.of(); - - return new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, monitorSecrets, secretsLabels, - ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(2000), Set.of(NAMESPACE), enableReloadFiltering, Duration.ofSeconds(2)); - } - @Bean @Primary @ConditionalOnProperty(value = "configmaps.labels.filtering", havingValue = "true", matchIfMissing = false) @@ -215,29 +199,12 @@ ConfigReloadProperties configReloadPropertiesB() { boolean monitorConfigMaps = true; boolean monitorSecrets = false; - boolean enableReloadFiltering = false; Map configMapsLabels = Map.of("only-shape", "round"); Map secretsLabels = Map.of(); return new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, monitorSecrets, secretsLabels, ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(2000), Set.of(NAMESPACE), enableReloadFiltering, Duration.ofSeconds(2)); - } - - @Bean - @Primary - @ConditionalOnProperty(value = "secrets.reload.filtering", havingValue = "true", matchIfMissing = false) - ConfigReloadProperties configReloadPropertiesC() { - - boolean monitorConfigMaps = false; - boolean monitorSecrets = true; - boolean enableReloadFiltering = true; - Map configMapsLabels = Map.of(); - Map secretsLabels = Map.of(); - - return new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, monitorSecrets, secretsLabels, - ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(2000), Set.of(NAMESPACE), enableReloadFiltering, Duration.ofSeconds(2)); + Duration.ofMillis(2000), Set.of(NAMESPACE), Duration.ofSeconds(2)); } @Bean @@ -247,13 +214,12 @@ ConfigReloadProperties configReloadProperties() { boolean monitorConfigMaps = false; boolean monitorSecrets = true; - boolean enableReloadFiltering = false; Map configMapsLabels = Map.of(); Map secretsLabels = Map.of("only-shape", "round"); return new ConfigReloadProperties(true, monitorConfigMaps, configMapsLabels, monitorSecrets, secretsLabels, ConfigReloadProperties.ReloadStrategy.REFRESH, ConfigReloadProperties.ReloadDetectionMode.EVENT, - Duration.ofMillis(2000), Set.of(NAMESPACE), enableReloadFiltering, Duration.ofSeconds(2)); + Duration.ofMillis(2000), Set.of(NAMESPACE), Duration.ofSeconds(2)); } } diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/ConfigMapReloadWithFilterTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/ConfigMapReloadWithFilterTest.java deleted file mode 100644 index 721fd8c20d..0000000000 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/ConfigMapReloadWithFilterTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2012-present 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.fabric8.config.reload_it.labels; - -import java.util.Map; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextConfiguration; - -import static org.springframework.cloud.kubernetes.integration.tests.commons.Awaitilities.awaitUntil; - -/** - * @author wind57 - */ -@SpringBootTest( - properties = { "spring.main.allow-bean-definition-overriding=true", "configmaps.reload.filtering=true" }, - classes = { CommonAbstractFiltering.TestConfig.class, - CommonAbstractFiltering.ConfigReloadPropertiesConfiguration.class }) -@ContextConfiguration(initializers = CommonAbstractFiltering.Initializer.class) -class ConfigMapReloadWithFilterTest extends CommonAbstractFiltering { - - /** - *
-	 *     - we enable reload filtering, via 'spring.cloud.kubernetes.reload.enable-reload-filtering=true'
-	 *       ( this is done in ConfigReloadProperties )
-	 *     - as such, only configmaps that have 'spring.cloud.kubernetes.config.informer.enabled=true'
-	 *       label are being watched. This is what the informer is created with.
-	 * 
- */ - @Test - void test() { - ConfigMap configMapWithInformerEnabled = configMap(CONFIG_MAP_NAME, Map.of("a", "b"), - Map.of("spring.cloud.kubernetes.config.informer.enabled", "true")); - - kubernetesClient.configMaps().inNamespace(NAMESPACE).resource(configMapWithInformerEnabled).create(); - awaitUntil(10, 1000, reloadProbe::isCalled); - } - -} diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/ConfigMapReloadWithoutFilterTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/ConfigMapReloadWithoutFilterTest.java deleted file mode 100644 index 6ce09fe7fd..0000000000 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/ConfigMapReloadWithoutFilterTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2012-present 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.fabric8.config.reload_it.labels; - -import java.time.Duration; -import java.util.Map; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import org.awaitility.Awaitility; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextConfiguration; - -/** - * @author wind57 - */ -@SpringBootTest( - properties = { "spring.main.allow-bean-definition-overriding=true", "configmaps.reload.filtering=true" }, - classes = { CommonAbstractFiltering.TestConfig.class, - CommonAbstractFiltering.ConfigReloadPropertiesConfiguration.class }) -@ContextConfiguration(initializers = CommonAbstractFiltering.Initializer.class) -class ConfigMapReloadWithoutFilterTest extends CommonAbstractFiltering { - - /** - *
-	 * 	- informers are created with 'spring.cloud.kubernetes.reload.enable-reload-filtering',
-	 * 	  but this config map does not have such a label, so nothing happens.
-	 * 
- */ - @Test - void test() { - ConfigMap configMapOne = configMap(CONFIG_MAP_NAME, Map.of("a", "b"), Map.of("shape", "round")); - - kubernetesClient.configMaps().inNamespace(NAMESPACE).resource(configMapOne).create(); - - Awaitility.await() - .during(Duration.ofSeconds(3)) - .atMost(Duration.ofSeconds(4)) - .pollInterval(Duration.ofMillis(100)) - .until(reloadProbe::isNotCalled); - - } - -} diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithFilterTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithFilterTest.java deleted file mode 100644 index 456c15ffeb..0000000000 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithFilterTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2012-present 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.fabric8.config.reload_it.labels; - -import java.util.Map; - -import io.fabric8.kubernetes.api.model.Secret; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextConfiguration; - -import static org.springframework.cloud.kubernetes.integration.tests.commons.Awaitilities.awaitUntil; - -/** - * @author wind57 - */ -@SpringBootTest(properties = { "spring.main.allow-bean-definition-overriding=true", "secrets.reload.filtering=true" }, - classes = { CommonAbstractFiltering.TestConfig.class, - CommonAbstractFiltering.ConfigReloadPropertiesConfiguration.class }) -@ContextConfiguration(initializers = CommonAbstractFiltering.Initializer.class) -class SecretReloadWithFilterTest extends CommonAbstractFiltering { - - /** - *
-	 *     - we enable reload filtering, via 'spring.cloud.kubernetes.reload.enable-reload-filtering=true'
-	 *       ( this is done in ConfigReloadProperties )
-	 *     - as such, only secrets that have 'spring.cloud.kubernetes.config.informer.enabled=true'
-	 *       label are being watched. This is what the informer is created with.
-	 * 
- */ - @Test - void test() { - Secret secret = secret(SECRET_NAME, Map.of("a", "b"), - Map.of("spring.cloud.kubernetes.config.informer.enabled", "true")); - - kubernetesClient.secrets().inNamespace(NAMESPACE).resource(secret).create(); - awaitUntil(10, 1000, reloadProbe::isCalled); - } - -} diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithLabelsTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithLabelsTest.java index 3f9af4b0be..41681dea21 100644 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithLabelsTest.java +++ b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithLabelsTest.java @@ -42,7 +42,6 @@ class SecretReloadWithLabelsTest extends CommonAbstractFiltering { @Test void test() { Secret secret = secret(SECRET_NAME, Map.of("a", "b"), Map.of("only-shape", "round")); - kubernetesClient.secrets().inNamespace(NAMESPACE).resource(secret).create(); Awaitilities.awaitUntil(10, 1000, reloadProbe::isCalled); } diff --git a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithoutFilterTest.java b/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithoutFilterTest.java deleted file mode 100644 index fe48a0806b..0000000000 --- a/spring-cloud-kubernetes-fabric8-config/src/test/java/org/springframework/cloud/kubernetes/fabric8/config/reload_it/labels/SecretReloadWithoutFilterTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2012-present 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.fabric8.config.reload_it.labels; - -import java.time.Duration; -import java.util.Map; - -import io.fabric8.kubernetes.api.model.Secret; -import org.awaitility.Awaitility; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextConfiguration; - -/** - * @author wind57 - */ -@SpringBootTest(properties = { "spring.main.allow-bean-definition-overriding=true", "secrets.reload.filtering=true" }, - classes = { CommonAbstractFiltering.TestConfig.class, - CommonAbstractFiltering.ConfigReloadPropertiesConfiguration.class }) -@ContextConfiguration(initializers = CommonAbstractFiltering.Initializer.class) -class SecretReloadWithoutFilterTest extends CommonAbstractFiltering { - - /** - *
-	 * 	- informers are created with 'spring.cloud.kubernetes.reload.enable-reload-filtering',
-	 * 	  but this secret does not have such a label, so nothing happens.
-	 * 
- */ - @Test - void test() { - Secret secret = secret(SECRET_NAME, Map.of("a", "b"), Map.of("shape", "round")); - - kubernetesClient.secrets().inNamespace(NAMESPACE).resource(secret).create(); - - Awaitility.await() - .during(Duration.ofSeconds(3)) - .atMost(Duration.ofSeconds(4)) - .pollInterval(Duration.ofMillis(100)) - .until(reloadProbe::isNotCalled); - - } - -} diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/main/resources/application-three.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/main/resources/application-three.yaml index 72f6a44c1e..e94a919948 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/main/resources/application-three.yaml +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/main/resources/application-three.yaml @@ -10,4 +10,5 @@ spring: namespaces: - right monitoring-config-maps: true - enable-reload-filtering: true + config-maps-labels: + spring.cloud.kubernetes.config.informer.enabled : "true" diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/main/resources/application-three.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/main/resources/application-three.yaml index 72f6a44c1e..e94a919948 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/main/resources/application-three.yaml +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/main/resources/application-three.yaml @@ -10,4 +10,5 @@ spring: namespaces: - right monitoring-config-maps: true - enable-reload-filtering: true + config-maps-labels: + spring.cloud.kubernetes.config.informer.enabled : "true" diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapEventTriggeredIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapEventTriggeredIT.java index 5b69b6dc91..3327c4afd0 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapEventTriggeredIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapEventTriggeredIT.java @@ -99,8 +99,8 @@ static void afterAllLocal(NativeClientKubernetesFixture fixture) { @Test void test(CapturedOutput output) { - assertReloadLogStatements("added configmap informer for namespace : right with labels : {}", - "added secret informer for namespace", output); + assertReloadLogStatements("configmap informer for namespace : right with labels : {}", + "secret informer for namespace", output); Assertions.assertThat(rightProperties.getValue()).isEqualTo("right-initial"); diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapLabelEventTriggeredIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapLabelEventTriggeredIT.java index ac747d35a3..c52bc3b956 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapLabelEventTriggeredIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapLabelEventTriggeredIT.java @@ -104,9 +104,9 @@ static void afterAllLocal(NativeClientKubernetesFixture fixture) { void test(CapturedOutput output) { assertReloadLogStatements( - "added configmap informer for namespace : " + "configmap informer for namespace : " + "right with labels : {spring.cloud.kubernetes.config.informer.enabled=true}", - "added secret informer for namespace", output); + "secret informer for namespace", output); // read the initial value from the right-configmap Assertions.assertThat(rightProperties.getValue()).isEqualTo("right-initial");