Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add selective namespaces to fabric8 loadbalancer #1604

Merged
Show file tree
Hide file tree
Changes from 146 commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
032014e
test
wind57 Dec 4, 2021
c3d0ad2
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 13, 2021
10889fd
fix @Nested tests not running
wind57 Dec 16, 2021
8f0375a
merged main
wind57 Dec 17, 2021
96ebf42
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 5, 2022
db8403e
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 12, 2022
90a5345
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 12, 2022
b041c00
trigger again
wind57 Jan 13, 2022
9580444
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 15, 2022
a34ac47
Add renovate.json
renovate[bot] Jul 13, 2022
6613f78
Merge branch 'spring-cloud:main' into main
wind57 Jul 13, 2022
1b3eae9
Merge pull request #1 from wind57/renovate/configure
wind57 Jul 13, 2022
4275382
Merge branch 'spring-cloud:main' into main
wind57 Mar 13, 2023
618f25a
Delete renovate.json
wind57 Mar 14, 2023
100a9cd
Delete delme.sh
wind57 Mar 14, 2023
4b9056b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 14, 2023
315a85b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 15, 2023
ed3c264
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 15, 2023
446d630
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
6821a28
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
9e95a8a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
02840b1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
7e31d65
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 20, 2023
926f4d7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 20, 2023
344e1d4
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 21, 2023
e91ac12
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 23, 2023
ba6e088
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 28, 2023
49025e8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 1, 2023
a647bb3
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 4, 2023
16b09ab
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 4, 2023
c8d8a72
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 5, 2023
591f340
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 6, 2023
c331bd0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 6, 2023
f48b22b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 7, 2023
900843d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 8, 2023
76ecdd5
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 8, 2023
b69d4a6
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 11, 2023
df2ddcc
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 14, 2023
3ff1cdd
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 18, 2023
bd89cc8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 18, 2023
39ef510
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 19, 2023
d389953
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 19, 2023
b676bac
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 21, 2023
b1473c9
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 24, 2023
83ff113
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 24, 2023
33dfbb7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 24, 2023
316af58
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 25, 2023
425d30b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 26, 2023
763280a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 26, 2023
3afbaef
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 27, 2023
cb97ba1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 28, 2023
b33edc8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 1, 2023
7a1fdf1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 2, 2023
a8beed9
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 2, 2023
2e445d9
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 9, 2023
5b51db1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 12, 2023
b0ce76c
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 12, 2023
918bb7f
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 12, 2023
c629951
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 15, 2023
ccfc0bf
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 22, 2023
0f3fa24
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 23, 2023
b60a283
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 25, 2023
901cb66
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 26, 2023
251002b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 27, 2023
fedeb17
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 30, 2023
004f95b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 3, 2023
10168be
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 5, 2023
dc811cf
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 6, 2023
3dfe77d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 8, 2023
619c8d0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 16, 2023
12ca211
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 17, 2023
a91c1e1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 22, 2023
be2e809
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 24, 2023
1c84e33
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jul 17, 2023
1319fe7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jul 18, 2023
9424c2e
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jul 25, 2023
cddd550
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 2, 2023
f8d34f2
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 3, 2023
31d2fb8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 5, 2023
fa9fd09
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 8, 2023
22f3f51
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 16, 2023
bb44f4b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 21, 2023
9714f2c
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 22, 2023
0f9cb3d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 2, 2023
6e60174
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 11, 2023
78c5575
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 12, 2023
5eb5c51
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 16, 2023
48f7cb0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 18, 2023
8a18085
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 20, 2023
e4cab39
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 21, 2023
ba4cab0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 21, 2023
bbc6e30
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 23, 2023
0e9f1ad
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 26, 2023
8a5243c
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 28, 2023
cbf83c4
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 29, 2023
3dd0260
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 30, 2023
1408d44
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 2, 2023
2925ee1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 2, 2023
af3a12b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 5, 2023
f5a27dc
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 7, 2023
494454a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 7, 2023
add0f67
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 13, 2023
b6a4b45
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 20, 2023
00a559d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 27, 2023
882f9c1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 31, 2023
6c9071e
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 3, 2023
09c10bb
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 8, 2023
3615396
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 14, 2023
116c199
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 16, 2023
f1447cd
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 18, 2023
14b165b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 21, 2023
3ce8fac
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 30, 2023
41eaa8d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 4, 2023
4f89298
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 7, 2023
ee1031d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 19, 2023
f6707d5
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 22, 2023
9930c7d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 27, 2023
0043006
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 16, 2024
4e292ec
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 2, 2024
3129276
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 16, 2024
1c90fc2
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 16, 2024
fa0888a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 22, 2024
ab680d1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 25, 2024
e896ec4
dirty
wind57 Mar 9, 2024
4023ca3
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 9, 2024
7ed7f5d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 9, 2024
3be81b7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 10, 2024
dd710ec
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 10, 2024
cd93c3d
merge main, still dirty
wind57 Mar 11, 2024
faa1d85
still dirty
wind57 Mar 12, 2024
4fdd06a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 12, 2024
e8ba51d
still dirty
wind57 Mar 13, 2024
14a93c0
ready
wind57 Mar 13, 2024
bf61054
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 13, 2024
5151acd
Merge branch 'main' into add-namespace-provider-to-fabric8-loadbalancer
wind57 Mar 13, 2024
97028d4
merge main
wind57 Mar 13, 2024
f059697
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 13, 2024
0ec1230
Merge branch 'main' into add-namespace-provider-to-fabric8-loadbalancer
wind57 Mar 13, 2024
013cc6a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 14, 2024
44a35a5
Merge branch 'main' into add-namespace-provider-to-fabric8-loadbalancer
wind57 Mar 14, 2024
02fffce
refactor tests
wind57 Mar 16, 2024
beb0c02
cleanup
wind57 Mar 16, 2024
b48edd4
checkstyle
wind57 Mar 16, 2024
d3641d3
add support for selective namespaces
wind57 Mar 18, 2024
13ff3b3
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 18, 2024
c610258
merge main
wind57 Mar 18, 2024
d5a0d74
cleanup
wind57 Mar 18, 2024
f23f2e0
placeholder commit
wind57 Mar 18, 2024
9fdb042
fix test
wind57 Mar 18, 2024
f5ed360
checkstyle
wind57 Mar 18, 2024
c93cc89
review comments
wind57 Mar 18, 2024
88021bb
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 18, 2024
c908b6b
Merge branch 'main' into add-selective-namespaces-to-fabric8-loadbala…
wind57 Mar 18, 2024
738bfe6
checkstyle
wind57 Mar 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.client.KubernetesClient;
Expand Down Expand Up @@ -66,6 +67,20 @@ public Flux<List<ServiceInstance>> get() {
.withField("metadata.name", serviceName).list().getItems();
services.forEach(service -> result.add(mapper.map(service)));
}
else if (!discoveryProperties.namespaces().isEmpty()) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is the only interesting change in this PR, where I add "selective namespace" support. Everything else are just tests: either additions or refactor of them a bit

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could simplify this code a bit. The result.add call is the same and we could probably extract that out of this logic so we are not repeating it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed. And done, thank you

Set<String> selectiveNamespaces = discoveryProperties.namespaces();
LOG.debug(() -> "discovering services in selective namespaces : " + selectiveNamespaces);
selectiveNamespaces.forEach(selectiveNamespace -> {
Service one = kubernetesClient.services().inNamespace(selectiveNamespace).withName(serviceName).get();
if (one != null) {
result.add(mapper.map(one));
}
else {
LOG.debug(() -> "did not find service with name : " + serviceName + " in namespace : "
+ selectiveNamespace);
}
});
}
else {
String namespace = Fabric8Utils.getApplicationNamespace(kubernetesClient, null, "loadbalancer-service",
namespaceProvider);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,14 @@ void testAllNamespaces(CapturedOutput output) {
List<ServiceInstance> serviceInstancesSorted = serviceInstances.get(0).stream()
.sorted(Comparator.comparing(ServiceInstance::getServiceId)).toList();
Assertions.assertEquals(serviceInstancesSorted.size(), 2);
Assertions.assertEquals(inner.get(0).getServiceId(), "service-a");
Assertions.assertEquals(inner.get(0).getHost(), "service-a.a.svc.cluster.local");
Assertions.assertEquals(inner.get(0).getPort(), 8887);

Assertions.assertEquals(inner.get(1).getServiceId(), "service-a");
Assertions.assertEquals(inner.get(1).getHost(), "service-a.c.svc.cluster.local");
Assertions.assertEquals(inner.get(1).getPort(), 8889);
Assertions.assertEquals(serviceInstancesSorted.get(0).getServiceId(), "service-a");
Assertions.assertEquals(serviceInstancesSorted.get(0).getHost(), "service-a.a.svc.cluster.local");
Assertions.assertEquals(serviceInstancesSorted.get(0).getPort(), 8887);

Assertions.assertEquals(serviceInstancesSorted.get(1).getServiceId(), "service-a");
Assertions.assertEquals(serviceInstancesSorted.get(1).getHost(), "service-a.c.svc.cluster.local");
Assertions.assertEquals(serviceInstancesSorted.get(1).getPort(), 8889);

Assertions.assertTrue(output.getOut().contains("discovering services in all namespaces"));
}
Expand Down Expand Up @@ -138,6 +139,43 @@ void testOneNamespace(CapturedOutput output) {
Assertions.assertTrue(output.getOut().contains("discovering services in namespace : c"));
}

@Test
void testSelectiveNamespaces(CapturedOutput output) {

createService("a", "my-service", 8887);
createService("b", "my-service", 8888);
createService("c", "my-service", 8889);

Environment environment = new MockEnvironment().withProperty("loadbalancer.client.name", "my-service");
boolean allNamespaces = false;
Set<String> selectiveNamespaces = Set.of("a", "b");

KubernetesLoadBalancerProperties loadBalancerProperties = new KubernetesLoadBalancerProperties();
KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(true, allNamespaces,
selectiveNamespaces, true, 60, false, null, Set.of(), Map.of(), null,
KubernetesDiscoveryProperties.Metadata.DEFAULT, 0, false, false, null);

Fabric8ServicesListSupplier supplier = new Fabric8ServicesListSupplier(environment, mockClient,
new Fabric8ServiceInstanceMapper(loadBalancerProperties, discoveryProperties), discoveryProperties);

List<List<ServiceInstance>> serviceInstances = supplier.get().collectList().block();
Assertions.assertEquals(serviceInstances.size(), 1);
List<ServiceInstance> inner = serviceInstances.get(0);

List<ServiceInstance> serviceInstancesSorted = serviceInstances.get(0).stream()
.sorted(Comparator.comparing(ServiceInstance::getPort)).toList();
Assertions.assertEquals(serviceInstancesSorted.size(), 2);
Assertions.assertEquals(serviceInstancesSorted.get(0).getServiceId(), "my-service");
Assertions.assertEquals(serviceInstancesSorted.get(0).getHost(), "my-service.a.svc.cluster.local");
Assertions.assertEquals(serviceInstancesSorted.get(0).getPort(), 8887);

Assertions.assertEquals(serviceInstancesSorted.get(1).getServiceId(), "my-service");
Assertions.assertEquals(serviceInstancesSorted.get(1).getHost(), "my-service.b.svc.cluster.local");
Assertions.assertEquals(serviceInstancesSorted.get(1).getPort(), 8888);

Assertions.assertTrue(output.getOut().contains("discovering services in selective namespaces : [a, b]"));
}

private void createService(String namespace, String name, int port) {
Service service = new ServiceBuilder().withNewMetadata().withNamespace(namespace).withName(name).endMetadata()
.withSpec(new ServiceSpecBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,65 @@

package org.springframework.cloud.kubernetes.fabric8.loadbalancer.it;

import io.fabric8.kubernetes.api.model.EndpointAddressBuilder;
import io.fabric8.kubernetes.api.model.EndpointPortBuilder;
import io.fabric8.kubernetes.api.model.EndpointSubsetBuilder;
import io.fabric8.kubernetes.api.model.Endpoints;
import io.fabric8.kubernetes.api.model.EndpointsBuilder;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceBuilder;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.ServiceSpecBuilder;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.reactive.function.client.WebClient;

/**
* @author wind57
*/
final class Util {
public final class Util {

private Util() {

}

static Service createService(String namespace, String name, int port) {
public static Service service(String namespace, String name, int port) {
return new ServiceBuilder().withNewMetadata().withNamespace(namespace).withName(name).endMetadata()
.withSpec(new ServiceSpecBuilder()
.withPorts(new ServicePortBuilder().withName("http").withPort(port).build()).build())
.build();
.withSpec(new ServiceSpecBuilder()
.withPorts(new ServicePortBuilder().withName("http").withPort(port).build()).build())
.build();
}

public static Endpoints endpoints(int port, String host, String namespace) {
return new EndpointsBuilder()
.withSubsets(new EndpointSubsetBuilder().withPorts(new EndpointPortBuilder().withPort(port).build())
.withAddresses(new EndpointAddressBuilder().withIp(host).build()).build())
.withMetadata(new ObjectMetaBuilder().withName("random-name").withNamespace(namespace).build()).build();
}

@TestConfiguration
public static class LoadBalancerConfiguration {

@Bean
@LoadBalanced
WebClient.Builder client() {
return WebClient.builder();
}

}

@SpringBootApplication
public static class Configuration {

public static void main(String[] args) {
SpringApplication.run(Configuration.class);
}

}
}

Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,12 @@
* limitations under the License.
*/

package org.springframework.cloud.kubernetes.fabric8.loadbalancer.it;
package org.springframework.cloud.kubernetes.fabric8.loadbalancer.it.mode.pod;

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import io.fabric8.kubernetes.api.model.EndpointAddressBuilder;
import io.fabric8.kubernetes.api.model.EndpointPortBuilder;
import io.fabric8.kubernetes.api.model.EndpointSubsetBuilder;
import io.fabric8.kubernetes.api.model.Endpoints;
import io.fabric8.kubernetes.api.model.EndpointsBuilder;
import io.fabric8.kubernetes.api.model.EndpointsListBuilder;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.utils.Serialization;
Expand All @@ -37,23 +32,19 @@

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesServiceInstanceMapper;
import org.springframework.cloud.kubernetes.fabric8.loadbalancer.it.Util;
import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.core.DiscoveryClientServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
import org.springframework.web.reactive.function.client.WebClient;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
import static org.springframework.cloud.kubernetes.fabric8.loadbalancer.it.PodModeAllNamespacesTest.Configuration;
import static org.springframework.cloud.kubernetes.fabric8.loadbalancer.it.PodModeAllNamespacesTest.LoadBalancerConfiguration;
import static org.springframework.cloud.kubernetes.fabric8.loadbalancer.it.Util.Configuration;
import static org.springframework.cloud.kubernetes.fabric8.loadbalancer.it.Util.LoadBalancerConfiguration;

/**
* @author wind57
Expand All @@ -62,7 +53,7 @@
properties = { "spring.cloud.kubernetes.loadbalancer.mode=POD", "spring.main.cloud-platform=KUBERNETES",
"spring.cloud.kubernetes.discovery.all-namespaces=true" },
classes = { LoadBalancerConfiguration.class, Configuration.class })
class PodModeAllNamespacesTest {
class AllNamespacesTest {

private static final String SERVICE_A_URL = "http://service-a";

Expand Down Expand Up @@ -137,22 +128,11 @@ static void afterAll() {
@Test
void test() {

Service serviceA = Util.createService("a", "service-a", SERVICE_A_PORT);
Service serviceB = Util.createService("b", "service-b", SERVICE_B_PORT);
Service serviceA = Util.service("a", "service-a", SERVICE_A_PORT);
Service serviceB = Util.service("b", "service-b", SERVICE_B_PORT);

Endpoints endpointsA = new EndpointsBuilder()
.withSubsets(new EndpointSubsetBuilder()
.withPorts(new EndpointPortBuilder().withPort(SERVICE_A_PORT).build())
.withAddresses(new EndpointAddressBuilder().withIp("127.0.0.1").build()).build())
.withMetadata(new ObjectMetaBuilder().withName("no-port-name-service").withNamespace("a").build())
.build();

Endpoints endpointsB = new EndpointsBuilder()
.withSubsets(new EndpointSubsetBuilder()
.withPorts(new EndpointPortBuilder().withPort(SERVICE_B_PORT).build())
.withAddresses(new EndpointAddressBuilder().withIp("127.0.0.1").build()).build())
.withMetadata(new ObjectMetaBuilder().withName("no-port-name-service").withNamespace("b").build())
.build();
Endpoints endpointsA = Util.endpoints(SERVICE_A_PORT, "127.0.0.1", "a");
Endpoints endpointsB = Util.endpoints(SERVICE_B_PORT, "127.0.0.1", "b");

String endpointsAListAsString = Serialization.asJson(new EndpointsListBuilder().withItems(endpointsA).build());
String endpointsBListAsString = Serialization.asJson(new EndpointsListBuilder().withItems(endpointsB).build());
Expand Down Expand Up @@ -192,26 +172,18 @@ void test() {
.getIfAvailable().getProvider("service-a", ServiceInstanceListSupplier.class).getIfAvailable();
Assertions.assertThat(supplier.getDelegate().getClass())
.isSameAs(DiscoveryClientServiceInstanceListSupplier.class);
}

@TestConfiguration
static class LoadBalancerConfiguration {

@Bean
@LoadBalanced
WebClient.Builder client() {
return WebClient.builder();
}

}
wireMockServer.verify(WireMock.exactly(1), WireMock
.getRequestedFor(WireMock.urlEqualTo("/api/v1/endpoints?fieldSelector=metadata.name%3Dservice-a")));

@SpringBootApplication
static class Configuration {
wireMockServer.verify(WireMock.exactly(1), WireMock
.getRequestedFor(WireMock.urlEqualTo("/api/v1/endpoints?fieldSelector=metadata.name%3Dservice-b")));

public static void main(String[] args) {
SpringApplication.run(ServiceModeAllNamespacesTest.Configuration.class);
}
wireMockServer.verify(WireMock.exactly(1),
WireMock.getRequestedFor(WireMock.urlEqualTo("/api/v1/namespaces/a/services/service-a")));

wireMockServer.verify(WireMock.exactly(1),
WireMock.getRequestedFor(WireMock.urlEqualTo("/api/v1/namespaces/b/services/service-b")));
}

}
Loading
Loading