Skip to content

Commit 18387ae

Browse files
committed
Merge branch 'master' of github.com:codecentric/spring-boot-admin
* 'master' of github.com:codecentric/spring-boot-admin: chore(deps): update spring boot to v3.1.1 (#2570) chore(deps): update storybook monorepo to v7.0.23 (#2569) Support discovery with Kubernetes Client (#2542) chore(deps): update dependency @vue/test-utils to v2.4.0 (#2568) chore(deps): update dependency sass to v1.63.6 (#2567) chore(deps): update dependency sass to v1.63.5 (#2566) chore(deps): update dependency org.apache.maven.plugins:maven-clean-plugin to v3.3.1 (#2565) chore(deps): update typescript-eslint monorepo to v5.60.0 (#2564) chore: add CODEOWNERS (#2562) chore(deps): update dependency eslint-plugin-vue to v9.15.0 (#2563) Fixed scrolling in loggers view (#2555) (#2556) chore(deps): update dependency vitest to v0.32.2 (#2559) fix(deps): update dependency autolinker to v4 (#2551) chore(deps): update storybook monorepo to v7.0.22 (#2560) chore(deps): update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.23 (#2557) chore(deps): update dependency vitest to v0.32.1 (#2558)
2 parents 20befaa + 85f820c commit 18387ae

File tree

12 files changed

+559
-591
lines changed

12 files changed

+559
-591
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @codecentric/spring-boot-admins

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
3737

3838
<!-- used dependencies versions -->
39-
<spring-boot.version>3.1.0</spring-boot.version>
39+
<spring-boot.version>3.1.1</spring-boot.version>
4040
<spring-cloud.version>2022.0.3</spring-cloud.version>
4141
<wiremock.version>2.35.0</wiremock.version>
4242
<hazelcast-tests.version>5.3.1</hazelcast-tests.version>
@@ -53,7 +53,7 @@
5353
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
5454
<versions-maven-plugin.version>2.16.0
5555
</versions-maven-plugin.version> <!-- because of https://github.com/mojohaus/versions/issues/855 -->
56-
<maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
56+
<maven-clean-plugin.version>3.3.1</maven-clean-plugin.version>
5757
<maven-site-plugin.version>3.12.1</maven-site-plugin.version>
5858
<maven-dependency-plugin.version>3.6.0</maven-dependency-plugin.version>
5959
<maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version>

spring-boot-admin-samples/spring-boot-admin-sample-servlet-graalvm/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
</parent>
3030

3131
<properties>
32-
<native-build-tools-plugin.version>0.9.22</native-build-tools-plugin.version>
32+
<native-build-tools-plugin.version>0.9.23</native-build-tools-plugin.version>
3333
<maven.javadoc.skip>true</maven.javadoc.skip>
3434
</properties>
3535

spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/config/AdminServerDiscoveryAutoConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.boot.context.properties.ConfigurationProperties;
2727
import org.springframework.cloud.client.discovery.DiscoveryClient;
2828
import org.springframework.cloud.kubernetes.client.discovery.KubernetesInformerDiscoveryClient;
29+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
2930
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesDiscoveryClient;
3031
import org.springframework.context.annotation.Bean;
3132
import org.springframework.context.annotation.Conditional;
@@ -87,8 +88,9 @@ public static class KubernetesConverterConfiguration {
8788

8889
@Bean
8990
@ConfigurationProperties(prefix = "spring.boot.admin.discovery.converter")
90-
public KubernetesServiceInstanceConverter serviceInstanceConverter() {
91-
return new KubernetesServiceInstanceConverter();
91+
public KubernetesServiceInstanceConverter serviceInstanceConverter(
92+
KubernetesDiscoveryProperties discoveryProperties) {
93+
return new KubernetesServiceInstanceConverter(discoveryProperties);
9294
}
9395

9496
}

spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/DefaultServiceInstanceConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class DefaultServiceInstanceConverter implements ServiceInstanceConverter
6868
*/
6969
private String healthEndpointPath = "health";
7070

71-
private static @Nullable String getMetadataValue(ServiceInstance instance, String[] keys) {
71+
protected static @Nullable String getMetadataValue(ServiceInstance instance, String... keys) {
7272
Map<String, String> metadata = instance.getMetadata();
7373
for (String key : keys) {
7474
String value = metadata.get(key);

spring-boot-admin-server-cloud/src/main/java/de/codecentric/boot/admin/server/cloud/discovery/KubernetesServiceInstanceConverter.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,31 @@
1717
package de.codecentric.boot.admin.server.cloud.discovery;
1818

1919
import org.springframework.cloud.client.ServiceInstance;
20+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
2021

2122
import static org.springframework.util.StringUtils.hasText;
2223

2324
public class KubernetesServiceInstanceConverter extends DefaultServiceInstanceConverter {
2425

26+
public static final String MANAGEMENT_PORT_NAME = "management";
27+
28+
private final String portsPrefix;
29+
30+
public KubernetesServiceInstanceConverter(KubernetesDiscoveryProperties discoveryProperties) {
31+
if (discoveryProperties.metadata() != null && discoveryProperties.metadata().portsPrefix() != null) {
32+
this.portsPrefix = discoveryProperties.metadata().portsPrefix();
33+
}
34+
else {
35+
this.portsPrefix = "";
36+
}
37+
}
38+
2539
@Override
2640
protected int getManagementPort(ServiceInstance instance) {
27-
String managementPort = instance.getMetadata().get("port.management");
41+
// the DiscoveryClient implementation using Kubernetes Client
42+
// (KubernetesInformerDiscoveryClient) currently ignores
43+
// the portsPrefix from KubernetesDiscoveryProperties
44+
String managementPort = getMetadataValue(instance, portsPrefix + MANAGEMENT_PORT_NAME, MANAGEMENT_PORT_NAME);
2845
if (hasText(managementPort)) {
2946
return Integer.parseInt(managementPort);
3047
}

spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/config/AdminServerDiscoveryAutoConfigurationTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@
2121
import org.springframework.boot.autoconfigure.AutoConfigurations;
2222
import org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration;
2323
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
24+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2425
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2526
import org.springframework.cloud.client.ServiceInstance;
2627
import org.springframework.cloud.client.discovery.DiscoveryClient;
2728
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
2829
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
2930
import org.springframework.cloud.kubernetes.client.discovery.KubernetesInformerDiscoveryClient;
31+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
3032
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesDiscoveryClient;
3133

3234
import de.codecentric.boot.admin.server.cloud.discovery.DefaultServiceInstanceConverter;
@@ -65,15 +67,16 @@ public void eurekaServiceInstanceConverter() {
6567

6668
@Test
6769
public void officialKubernetesServiceInstanceConverter() {
68-
this.contextRunner
70+
this.contextRunner.withUserConfiguration(KubernetesDiscoveryPropertiesConfiguration.class)
6971
.withBean(KubernetesInformerDiscoveryClient.class, () -> mock(KubernetesInformerDiscoveryClient.class))
7072
.run((context) -> assertThat(context).getBean(ServiceInstanceConverter.class)
7173
.isInstanceOf(KubernetesServiceInstanceConverter.class));
7274
}
7375

7476
@Test
7577
public void fabric8KubernetesServiceInstanceConverter() {
76-
this.contextRunner.withBean(KubernetesDiscoveryClient.class, () -> mock(KubernetesDiscoveryClient.class))
78+
this.contextRunner.withUserConfiguration(KubernetesDiscoveryPropertiesConfiguration.class)
79+
.withBean(KubernetesDiscoveryClient.class, () -> mock(KubernetesDiscoveryClient.class))
7780
.run((context) -> assertThat(context).getBean(ServiceInstanceConverter.class)
7881
.isInstanceOf(KubernetesServiceInstanceConverter.class));
7982
}
@@ -95,4 +98,9 @@ public Registration convert(ServiceInstance instance) {
9598

9699
}
97100

101+
@EnableConfigurationProperties(KubernetesDiscoveryProperties.class)
102+
public static class KubernetesDiscoveryPropertiesConfiguration {
103+
104+
}
105+
98106
}

spring-boot-admin-server-cloud/src/test/java/de/codecentric/boot/admin/server/cloud/discovery/KubernetesServiceInstanceConverterTest.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.junit.jupiter.api.Test;
2323
import org.springframework.cloud.client.ServiceInstance;
24+
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
2425

2526
import de.codecentric.boot.admin.server.domain.values.Registration;
2627

@@ -31,16 +32,34 @@
3132
public class KubernetesServiceInstanceConverterTest {
3233

3334
@Test
34-
public void convert_using_port_mgmt() {
35-
ServiceInstance service = mock(ServiceInstance.class);
36-
when(service.getUri()).thenReturn(URI.create("http://localhost:80"));
37-
when(service.getServiceId()).thenReturn("test");
38-
when(service.getMetadata()).thenReturn(Collections.singletonMap("port.management", "9080"));
35+
void convert_using_port_mgmt() {
36+
KubernetesDiscoveryProperties discoveryProperties = KubernetesDiscoveryProperties.DEFAULT;
37+
ServiceInstance service = mockServiceInstanceWithManagementPort(
38+
discoveryProperties.metadata().portsPrefix() + "management");
3939

40-
Registration registration = new KubernetesServiceInstanceConverter().convert(service);
40+
Registration registration = new KubernetesServiceInstanceConverter(discoveryProperties).convert(service);
4141

4242
assertThat(registration.getManagementUrl()).isEqualTo("http://localhost:9080/actuator");
4343
assertThat(registration.getHealthUrl()).isEqualTo("http://localhost:9080/actuator/health");
4444
}
4545

46+
@Test
47+
void fallback_for_port_mgmt() {
48+
KubernetesDiscoveryProperties discoveryProperties = KubernetesDiscoveryProperties.DEFAULT;
49+
ServiceInstance service = mockServiceInstanceWithManagementPort("management");
50+
51+
Registration registration = new KubernetesServiceInstanceConverter(discoveryProperties).convert(service);
52+
53+
assertThat(registration.getManagementUrl()).isEqualTo("http://localhost:9080/actuator");
54+
assertThat(registration.getHealthUrl()).isEqualTo("http://localhost:9080/actuator/health");
55+
}
56+
57+
private static ServiceInstance mockServiceInstanceWithManagementPort(String managementPortName) {
58+
ServiceInstance service = mock(ServiceInstance.class);
59+
when(service.getUri()).thenReturn(URI.create("http://localhost:80"));
60+
when(service.getServiceId()).thenReturn("test");
61+
when(service.getMetadata()).thenReturn(Collections.singletonMap(managementPortName, "9080"));
62+
return service;
63+
}
64+
4665
}

0 commit comments

Comments
 (0)