Skip to content

Commit 284e6cd

Browse files
authored
Merge pull request #1518 from dsyer/loadbalancer
Create LoadBalancer by hand instead of via annotation
2 parents 4681f03 + a630003 commit 284e6cd

File tree

11 files changed

+53
-213
lines changed

11 files changed

+53
-213
lines changed

examples/examples-release-12/src/main/java/io/kubernetes/client/examples/SpringLoadBalancerExample.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,20 @@
1212
*/
1313
package io.kubernetes.client.examples;
1414

15-
import io.kubernetes.client.extended.network.LoadBalancer;
16-
import io.kubernetes.client.informer.SharedInformerFactory;
17-
import io.kubernetes.client.spring.extended.network.annotation.KubernetesEndpointsLoadBalanced;
1815
import org.springframework.boot.CommandLineRunner;
1916
import org.springframework.boot.SpringApplication;
2017
import org.springframework.boot.autoconfigure.SpringBootApplication;
2118
import org.springframework.context.annotation.Bean;
2219
import org.springframework.context.annotation.Configuration;
2320

21+
import io.kubernetes.client.extended.network.EndpointsLoadBalancer;
22+
import io.kubernetes.client.extended.network.LoadBalancer;
23+
import io.kubernetes.client.extended.network.RoundRobinLoadBalanceStrategy;
24+
import io.kubernetes.client.informer.SharedInformerFactory;
25+
import io.kubernetes.client.informer.cache.Lister;
26+
import io.kubernetes.client.openapi.models.V1Endpoints;
27+
import io.kubernetes.client.spring.extended.network.endpoints.InformerEndpointsGetter;
28+
2429
@SpringBootApplication
2530
public class SpringLoadBalancerExample {
2631

@@ -44,14 +49,23 @@ public CommandLineRunner loadBalancerCommandLineRunner(
4449
}
4550

4651
@Bean
47-
public MyService myService() {
48-
return new MyService();
52+
public MyService myService(Lister<V1Endpoints> lister) {
53+
return new MyService(lister);
4954
}
5055
}
5156

5257
public static class MyService {
5358

54-
@KubernetesEndpointsLoadBalanced(namespace = "default", name = "kubernetes")
5559
private LoadBalancer defaultKubernetesLoadBalancer;
60+
61+
public MyService(Lister<V1Endpoints> lister) {
62+
InformerEndpointsGetter getter = new InformerEndpointsGetter(lister);
63+
RoundRobinLoadBalanceStrategy strategy = new RoundRobinLoadBalanceStrategy();
64+
defaultKubernetesLoadBalancer = new EndpointsLoadBalancer(
65+
() -> getter.get("default", "kubernetes"),
66+
strategy
67+
);
68+
}
69+
5670
}
5771
}

spring/src/main/java/io/kubernetes/client/spring/extended/network/KubernetesEndpointsLoadBalancerProcessor.java

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

spring/src/main/java/io/kubernetes/client/spring/extended/network/annotation/KubernetesEndpointsLoadBalanced.java

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

spring/src/main/java/io/kubernetes/client/spring/extended/network/config/ConditionalOnKubernetesLoadBalancerEnabled.java

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

spring/src/main/java/io/kubernetes/client/spring/extended/network/config/KubernetesLoadBalancerAutoConfiguration.java

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

spring/src/main/java/io/kubernetes/client/spring/extended/network/endpoints/InformerEndpointsGetter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414

1515
import io.kubernetes.client.informer.cache.Lister;
1616
import io.kubernetes.client.openapi.models.V1Endpoints;
17-
import org.springframework.beans.factory.annotation.Autowired;
1817

1918
public class InformerEndpointsGetter implements EndpointsGetter {
2019

21-
@Autowired private Lister<V1Endpoints> endpointsLister;
20+
private final Lister<V1Endpoints> endpointsLister;
21+
22+
public InformerEndpointsGetter(Lister<V1Endpoints> lister) {
23+
this.endpointsLister = lister;
24+
}
2225

2326
@Override
2427
public V1Endpoints get(String namespace, String name) {

spring/src/main/java/io/kubernetes/client/spring/extended/network/endpoints/PollingEndpointsGetter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@
2020
import io.kubernetes.client.openapi.apis.CoreV1Api;
2121
import io.kubernetes.client.openapi.models.V1Endpoints;
2222
import java.time.Duration;
23-
import org.springframework.beans.factory.annotation.Autowired;
2423

2524
public class PollingEndpointsGetter implements EndpointsGetter {
2625

2726
private static final Cache<NamespaceName, V1Endpoints> lastObservedEndpoints =
2827
Caffeine.newBuilder().expireAfterWrite(Duration.ofMinutes(5)).build();
2928

30-
@Autowired private ApiClient apiClient;
29+
private final ApiClient apiClient;
30+
31+
public PollingEndpointsGetter(ApiClient apiClient) {
32+
this.apiClient = apiClient;
33+
}
3134

3235
@Override
3336
public V1Endpoints get(String namespace, String name) {
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
22
io.kubernetes.client.spring.extended.controller.config.KubernetesInformerAutoConfiguration, \
33
io.kubernetes.client.spring.extended.controller.config.KubernetesReconcilerAutoConfiguration, \
4-
io.kubernetes.client.spring.extended.network.config.KubernetesLoadBalancerAutoConfiguration, \
54
io.kubernetes.client.spring.extended.manifests.config.KubernetesManifestsAutoConfiguration

spring/src/test/java/io/kubernetes/client/spring/extended/controller/KubernetesInformerCreatorTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ static class TestSharedInformerFactory extends SharedInformerFactory {}
9999

100100
@Autowired private Lister<V1ConfigMap> configMapLister;
101101

102-
@Autowired private ApiClient apiClient;
103-
104102
@Test
105103
public void testInformerInjection() throws InterruptedException {
106104
assertNotNull(podInformer);

spring/src/test/java/io/kubernetes/client/spring/extended/network/KubernetesEndpointsLoadBalancerCreatorTest.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,14 @@
1212
*/
1313
package io.kubernetes.client.spring.extended.network;
1414

15-
import static org.junit.Assert.*;
15+
import static org.junit.Assert.assertEquals;
16+
import static org.junit.Assert.assertNotNull;
17+
import static org.junit.Assert.assertThrows;
1618

19+
import io.kubernetes.client.extended.network.EndpointsLoadBalancer;
1720
import io.kubernetes.client.extended.network.LoadBalanceStrategy;
1821
import io.kubernetes.client.extended.network.LoadBalancer;
22+
import io.kubernetes.client.extended.network.RoundRobinLoadBalanceStrategy;
1923
import io.kubernetes.client.extended.network.exception.NoAvailableAddressException;
2024
import io.kubernetes.client.informer.cache.Cache;
2125
import io.kubernetes.client.informer.cache.Lister;
@@ -24,8 +28,8 @@
2428
import io.kubernetes.client.openapi.models.V1EndpointSubset;
2529
import io.kubernetes.client.openapi.models.V1Endpoints;
2630
import io.kubernetes.client.openapi.models.V1ObjectMeta;
27-
import io.kubernetes.client.spring.extended.network.annotation.KubernetesEndpointsLoadBalanced;
2831
import io.kubernetes.client.spring.extended.network.endpoints.EndpointsGetter;
32+
import io.kubernetes.client.spring.extended.network.endpoints.InformerEndpointsGetter;
2933
import java.util.List;
3034
import org.junit.Test;
3135
import org.junit.runner.RunWith;
@@ -53,28 +57,32 @@ public Lister<V1Endpoints> endpointsLister(Cache<V1Endpoints> endpointsCache) {
5357
}
5458

5559
@Bean
56-
public MyBean myBean() {
57-
return new MyBean();
60+
public MyBean myBean(Lister<V1Endpoints> lister) {
61+
return new MyBean(new MyEndpointGetter(), new MyStrategy(), lister);
5862
}
5963
}
6064

6165
static class MyBean {
62-
@KubernetesEndpointsLoadBalanced(namespace = "default", name = "no-such")
66+
67+
public MyBean(
68+
MyEndpointGetter myEndpointGetter, MyStrategy myStrategy, Lister<V1Endpoints> lister) {
69+
InformerEndpointsGetter getter = new InformerEndpointsGetter(lister);
70+
RoundRobinLoadBalanceStrategy strategy = new RoundRobinLoadBalanceStrategy();
71+
noSuchLoadBalancer =
72+
new EndpointsLoadBalancer(() -> getter.get("default", "no-such"), strategy);
73+
fooLoadBalancer = new EndpointsLoadBalancer(() -> getter.get("default", "foo"), strategy);
74+
customStrategyLoadBalancer =
75+
new EndpointsLoadBalancer(() -> getter.get("default", "foo"), myStrategy);
76+
customEndpointGetterLoadBalancer =
77+
new EndpointsLoadBalancer(() -> myEndpointGetter.get("default", "foo"), strategy);
78+
}
79+
6380
private LoadBalancer noSuchLoadBalancer;
6481

65-
@KubernetesEndpointsLoadBalanced(namespace = "default", name = "foo")
6682
private LoadBalancer fooLoadBalancer;
6783

68-
@KubernetesEndpointsLoadBalanced(
69-
namespace = "default",
70-
name = "foo",
71-
strategy = MyStrategy.class)
7284
private LoadBalancer customStrategyLoadBalancer;
7385

74-
@KubernetesEndpointsLoadBalanced(
75-
namespace = "default",
76-
name = "foo",
77-
endpointsGetter = MyEndpointGetter.class)
7886
private LoadBalancer customEndpointGetterLoadBalancer;
7987
}
8088

@@ -109,6 +117,7 @@ public V1Endpoints get(String namespace, String name) {
109117
new V1EndpointSubset()
110118
.addAddressesItem(new V1EndpointAddress().ip("127.0.0.1"))
111119
.addPortsItem(new V1EndpointPort().port(8080)));
120+
112121
@Autowired private MyBean myBean;
113122

114123
@Autowired private Cache<V1Endpoints> endpointsCache;

spring/src/test/java/io/kubernetes/client/spring/extended/network/TestApplication.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@
1212
*/
1313
package io.kubernetes.client.spring.extended.network;
1414

15-
import io.kubernetes.client.spring.extended.network.config.KubernetesLoadBalancerAutoConfiguration;
1615
import org.springframework.boot.SpringBootConfiguration;
17-
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
1816

1917
@SpringBootConfiguration
20-
@ImportAutoConfiguration({
21-
KubernetesLoadBalancerAutoConfiguration.class,
22-
})
2318
public class TestApplication {}

0 commit comments

Comments
 (0)