Skip to content

Commit 10acbb9

Browse files
committed
wip
Signed-off-by: wind57 <[email protected]>
1 parent d71abd5 commit 10acbb9

File tree

6 files changed

+63
-62
lines changed

6 files changed

+63
-62
lines changed

spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesClientInformerAutoConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import static org.springframework.cloud.kubernetes.client.KubernetesClientUtils.getApplicationNamespace;
5353

5454
/**
55+
* This one uses: 'ConditionalOnBlockingOrReactiveDiscoveryEnabled' because beans it contains
56+
* are specific to both clients.
5557
* @author wind57
5658
*/
5759
@Configuration(proxyBeanMethods = false)
@@ -69,7 +71,7 @@ final class KubernetesClientInformerAutoConfiguration {
6971
// we rely on the order of namespaces to enable listers, as such provide a bean of
7072
// namespaces as a list, instead of the incoming Set.
7173
@Bean
72-
List<String> k8sDiscoveryClientNamespaces(KubernetesDiscoveryProperties properties,
74+
List<String> k8sClientDiscoveryNamespaces(KubernetesDiscoveryProperties properties,
7375
KubernetesNamespaceProvider provider) {
7476

7577
if (properties.allNamespaces()) {

spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesClientInformerDiscoveryClientAutoConfiguration.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,23 @@
2626
import io.kubernetes.client.openapi.models.V1Endpoints;
2727
import io.kubernetes.client.openapi.models.V1Service;
2828

29+
import org.apache.commons.logging.LogFactory;
2930
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
3031
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
3132
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3233
import org.springframework.cloud.client.CommonsClientAutoConfiguration;
3334
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
3435
import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration;
36+
import org.springframework.cloud.kubernetes.commons.PodUtils;
3537
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnSpringCloudKubernetesBlockingDiscovery;
36-
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthConfiguration;
38+
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnSpringCloudKubernetesBlockingDiscoveryHealthInitializer;
39+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
3740
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
3841
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
42+
import org.springframework.context.ApplicationEventPublisher;
3943
import org.springframework.context.annotation.Bean;
4044
import org.springframework.context.annotation.Configuration;
41-
import org.springframework.context.annotation.Import;
45+
import org.springframework.core.log.LogAccessor;
4246

4347
/**
4448
* @author wind57
@@ -48,9 +52,11 @@
4852
@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class, CommonsClientAutoConfiguration.class })
4953
@AutoConfigureAfter({ KubernetesClientAutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class,
5054
KubernetesClientDiscoveryClientSpelAutoConfiguration.class })
51-
@Import(KubernetesDiscoveryClientHealthConfiguration.class)
5255
final class KubernetesClientInformerDiscoveryClientAutoConfiguration {
5356

57+
private static final LogAccessor LOG = new LogAccessor(
58+
LogFactory.getLog(KubernetesClientInformerDiscoveryClientAutoConfiguration.class));
59+
5460
@Bean
5561
@ConditionalOnMissingBean
5662
KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClient(
@@ -62,4 +68,12 @@ KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClient(
6268
serviceInformers, endpointsInformers, properties, coreV1Api, predicate);
6369
}
6470

71+
@Bean
72+
@ConditionalOnSpringCloudKubernetesBlockingDiscoveryHealthInitializer
73+
KubernetesDiscoveryClientHealthIndicatorInitializer indicatorInitializer(
74+
ApplicationEventPublisher applicationEventPublisher, PodUtils<?> podUtils) {
75+
LOG.debug(() -> "Will publish InstanceRegisteredEvent from blocking implementation");
76+
return new KubernetesDiscoveryClientHealthIndicatorInitializer(podUtils, applicationEventPublisher);
77+
}
78+
6579
}

spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesClientInformerReactiveDiscoveryClientAutoConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
4444
import org.springframework.context.ApplicationEventPublisher;
4545
import org.springframework.context.annotation.Bean;
46-
import org.springframework.context.annotation.Conditional;
4746
import org.springframework.context.annotation.Configuration;
4847
import org.springframework.core.log.LogAccessor;
4948

@@ -66,7 +65,13 @@ final class KubernetesClientInformerReactiveDiscoveryClientAutoConfiguration {
6665
@Bean
6766
@ConditionalOnMissingBean
6867
KubernetesClientInformerReactiveDiscoveryClient kubernetesClientReactiveDiscoveryClient(
69-
KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClient) {
68+
List<SharedInformerFactory> sharedInformerFactories, List<Lister<V1Service>> serviceListers,
69+
List<Lister<V1Endpoints>> endpointsListers, List<SharedInformer<V1Service>> serviceInformers,
70+
List<SharedInformer<V1Endpoints>> endpointsInformers, KubernetesDiscoveryProperties properties,
71+
CoreV1Api coreV1Api, Predicate<V1Service> predicate) {
72+
KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClient =
73+
new KubernetesClientInformerDiscoveryClient(sharedInformerFactories, serviceListers, endpointsListers,
74+
serviceInformers, endpointsInformers, properties, coreV1Api, predicate);
7075
return new KubernetesClientInformerReactiveDiscoveryClient(kubernetesClientInformerDiscoveryClient);
7176
}
7277

spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesClientInformerReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.context.annotation.Primary;
4141

4242
import static org.assertj.core.api.Assertions.assertThat;
43+
import static org.springframework.cloud.kubernetes.client.discovery.TestUtils.assertInformerBeansMissing;
4344
import static org.springframework.cloud.kubernetes.client.discovery.TestUtils.assertInformerBeansPresent;
4445

4546
/**
@@ -224,7 +225,8 @@ void kubernetesDiscoveryDisabledWithSelectiveNamespaces() {
224225
// only "simple" one from commons, as ours is not picked up
225226
assertThat(context).hasSingleBean(ReactiveDiscoveryClientHealthIndicator.class);
226227

227-
assertInformerBeansPresent(context , 2);
228+
// we don't read the KubernetesClientInformerAutoConfiguration
229+
assertInformerBeansMissing(context);
228230
});
229231
}
230232

@@ -267,15 +269,15 @@ void kubernetesReactiveDiscoveryEnabledWithSelectiveNamespaces() {
267269
@Test
268270
void kubernetesReactiveDiscoveryDisabled() {
269271
setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
270-
"spring.cloud.discovery.reactive.enabled=false");
272+
"spring.cloud.discovery.reactive.enabled=false", "spring.cloud.kubernetes.client.namespace=default");
271273
applicationContextRunner.run(context -> {
272-
assertThat(context).doesNotHaveBean(KubernetesClientInformerDiscoveryClient.class);
274+
assertThat(context).hasSingleBean(KubernetesClientInformerDiscoveryClient.class);
273275
assertThat(context).doesNotHaveBean(KubernetesClientInformerReactiveDiscoveryClient.class);
274276

275277
assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
276-
assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
278+
assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
277279

278-
assertInformerBeansPresent(context, 2);
280+
assertInformerBeansPresent(context, 1);
279281
});
280282
}
281283

@@ -288,7 +290,7 @@ void kubernetesReactiveDiscoveryDisabledWithSelectiveNamespaces() {
288290
assertThat(context).doesNotHaveBean(KubernetesClientInformerReactiveDiscoveryClient.class);
289291

290292
assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
291-
assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
293+
assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
292294

293295
assertInformerBeansPresent(context, 2);
294296
});
@@ -323,7 +325,7 @@ void blockingDisabledWithSelectiveNamespaces() {
323325
setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
324326
"spring.cloud.discovery.blocking.enabled=false", "spring.cloud.kubernetes.discovery.namespaces=a,b");
325327
applicationContextRunner.run(context -> {
326-
assertThat(context).hasSingleBean(KubernetesClientInformerDiscoveryClient.class);
328+
assertThat(context).doesNotHaveBean(KubernetesClientInformerDiscoveryClient.class);
327329
assertThat(context).hasSingleBean(KubernetesClientInformerReactiveDiscoveryClient.class);
328330

329331
// simple from commons and ours

spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/TestUtils.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,31 @@ static void assertInformerBeansPresent(AssertableApplicationContext context, int
7878
assertThat(endpointsListers.size()).isEqualTo(times);
7979
}
8080

81+
static void assertInformerBeansMissing(AssertableApplicationContext context) {
82+
String[] sharedInformerFactoriesBeanName = context
83+
.getBeanNamesForType(ResolvableType.forType(new ParameterizedTypeReference<List<SharedInformerFactory>>() {
84+
}));
85+
assertThat(sharedInformerFactoriesBeanName).isEmpty();
86+
87+
String[] serviceSharedIndexInformersBeanName = context.getBeanNamesForType(
88+
ResolvableType.forType(new ParameterizedTypeReference<List<SharedIndexInformer<V1Service>>>() {
89+
}));
90+
assertThat(serviceSharedIndexInformersBeanName).isEmpty();
91+
92+
String[] endpointsSharedIndexInformersBeanName = context.getBeanNamesForType(
93+
ResolvableType.forType(new ParameterizedTypeReference<List<SharedIndexInformer<V1Endpoints>>>() {
94+
}));
95+
assertThat(endpointsSharedIndexInformersBeanName).isEmpty();
96+
97+
String[] serviceListersBeanName = context
98+
.getBeanNamesForType(ResolvableType.forType(new ParameterizedTypeReference<List<Lister<V1Service>>>() {
99+
}));
100+
assertThat(serviceListersBeanName).isEmpty();
101+
102+
String[] endpointsListersBeanName = context
103+
.getBeanNamesForType(ResolvableType.forType(new ParameterizedTypeReference<List<Lister<V1Endpoints>>>() {
104+
}));
105+
assertThat(endpointsListersBeanName).isEmpty();
106+
}
107+
81108
}

spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryClientHealthConfiguration.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)