From 46f55e4498e7ba1118c68a2fc3ca4374c1c7cd7e Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 1 Feb 2021 15:17:44 +0000 Subject: [PATCH] Create LoadBalancer by hand instead of via annotation Fixes #1505 --- .../examples/SpringLoadBalancerExample.java | 11 +++++- .../endpoints/InformerEndpointsGetter.java | 7 +++- ...netesEndpointsLoadBalancerCreatorTest.java | 37 ++++++++++++------- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/examples/examples-release-12/src/main/java/io/kubernetes/client/examples/SpringLoadBalancerExample.java b/examples/examples-release-12/src/main/java/io/kubernetes/client/examples/SpringLoadBalancerExample.java index 69dd3697aa..a3fa23228f 100644 --- a/examples/examples-release-12/src/main/java/io/kubernetes/client/examples/SpringLoadBalancerExample.java +++ b/examples/examples-release-12/src/main/java/io/kubernetes/client/examples/SpringLoadBalancerExample.java @@ -51,7 +51,16 @@ public MyService myService() { public static class MyService { - @KubernetesEndpointsLoadBalanced(namespace = "default", name = "kubernetes") private LoadBalancer defaultKubernetesLoadBalancer; + + public MyService(Lister lister) { + InformerEndpointsGetter getter = new InformerEndpointsGetter(lister); + RoundRobinLoadBalanceStrategy strategy = new RoundRobinLoadBalanceStrategy(); + defaultKubernetesLoadBalancer = new EndpointsLoadBalancer( + () -> getter.get("default", "kubernetes"), + strategy + ); + } + } } diff --git a/spring/src/main/java/io/kubernetes/client/spring/extended/network/endpoints/InformerEndpointsGetter.java b/spring/src/main/java/io/kubernetes/client/spring/extended/network/endpoints/InformerEndpointsGetter.java index 1a898ca67f..b5a1912dc4 100644 --- a/spring/src/main/java/io/kubernetes/client/spring/extended/network/endpoints/InformerEndpointsGetter.java +++ b/spring/src/main/java/io/kubernetes/client/spring/extended/network/endpoints/InformerEndpointsGetter.java @@ -14,11 +14,14 @@ import io.kubernetes.client.informer.cache.Lister; import io.kubernetes.client.openapi.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; public class InformerEndpointsGetter implements EndpointsGetter { - @Autowired private Lister endpointsLister; + private final Lister endpointsLister; + + public InformerEndpointsGetter(Lister lister) { + this.endpointsLister = lister; + } @Override public V1Endpoints get(String namespace, String name) { diff --git a/spring/src/test/java/io/kubernetes/client/spring/extended/network/KubernetesEndpointsLoadBalancerCreatorTest.java b/spring/src/test/java/io/kubernetes/client/spring/extended/network/KubernetesEndpointsLoadBalancerCreatorTest.java index 1ccab284e7..8ac6a3496d 100644 --- a/spring/src/test/java/io/kubernetes/client/spring/extended/network/KubernetesEndpointsLoadBalancerCreatorTest.java +++ b/spring/src/test/java/io/kubernetes/client/spring/extended/network/KubernetesEndpointsLoadBalancerCreatorTest.java @@ -12,10 +12,14 @@ */ package io.kubernetes.client.spring.extended.network; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import io.kubernetes.client.extended.network.EndpointsLoadBalancer; import io.kubernetes.client.extended.network.LoadBalanceStrategy; import io.kubernetes.client.extended.network.LoadBalancer; +import io.kubernetes.client.extended.network.RoundRobinLoadBalanceStrategy; import io.kubernetes.client.extended.network.exception.NoAvailableAddressException; import io.kubernetes.client.informer.cache.Cache; import io.kubernetes.client.informer.cache.Lister; @@ -24,8 +28,8 @@ import io.kubernetes.client.openapi.models.V1EndpointSubset; import io.kubernetes.client.openapi.models.V1Endpoints; import io.kubernetes.client.openapi.models.V1ObjectMeta; -import io.kubernetes.client.spring.extended.network.annotation.KubernetesEndpointsLoadBalanced; import io.kubernetes.client.spring.extended.network.endpoints.EndpointsGetter; +import io.kubernetes.client.spring.extended.network.endpoints.InformerEndpointsGetter; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -53,28 +57,32 @@ public Lister endpointsLister(Cache endpointsCache) { } @Bean - public MyBean myBean() { - return new MyBean(); + public MyBean myBean(Lister lister) { + return new MyBean(new MyEndpointGetter(), new MyStrategy(), lister); } } static class MyBean { - @KubernetesEndpointsLoadBalanced(namespace = "default", name = "no-such") + + public MyBean( + MyEndpointGetter myEndpointGetter, MyStrategy myStrategy, Lister lister) { + InformerEndpointsGetter getter = new InformerEndpointsGetter(lister); + RoundRobinLoadBalanceStrategy strategy = new RoundRobinLoadBalanceStrategy(); + noSuchLoadBalancer = + new EndpointsLoadBalancer(() -> getter.get("default", "no-such"), strategy); + fooLoadBalancer = new EndpointsLoadBalancer(() -> getter.get("default", "foo"), strategy); + customStrategyLoadBalancer = + new EndpointsLoadBalancer(() -> getter.get("default", "foo"), myStrategy); + customEndpointGetterLoadBalancer = + new EndpointsLoadBalancer(() -> myEndpointGetter.get("default", "foo"), strategy); + } + private LoadBalancer noSuchLoadBalancer; - @KubernetesEndpointsLoadBalanced(namespace = "default", name = "foo") private LoadBalancer fooLoadBalancer; - @KubernetesEndpointsLoadBalanced( - namespace = "default", - name = "foo", - strategy = MyStrategy.class) private LoadBalancer customStrategyLoadBalancer; - @KubernetesEndpointsLoadBalanced( - namespace = "default", - name = "foo", - endpointsGetter = MyEndpointGetter.class) private LoadBalancer customEndpointGetterLoadBalancer; } @@ -109,6 +117,7 @@ public V1Endpoints get(String namespace, String name) { new V1EndpointSubset() .addAddressesItem(new V1EndpointAddress().ip("127.0.0.1")) .addPortsItem(new V1EndpointPort().port(8080))); + @Autowired private MyBean myBean; @Autowired private Cache endpointsCache;