diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/main/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerController.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/main/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerController.java index 2671256e..e32fdef3 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/main/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerController.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/main/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerController.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2021 the original author or authors. + * Copyright 2013-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,8 +52,21 @@ public class DiscoveryServerController { return reactiveDiscoveryClient.getInstances(name); } + /** + * use the "appInstanceNonDeprecated" instead. + */ + @Deprecated(forRemoval = true) @GetMapping("/app/{name}/{instanceId}") public Mono appInstance(@PathVariable String name, @PathVariable String instanceId) { + return innerAppInstance(name, instanceId); + } + + @GetMapping("/apps/{name}/{instanceId}") + Mono appInstanceNonDeprecated(@PathVariable String name, @PathVariable String instanceId) { + return innerAppInstance(name, instanceId); + } + + private Mono innerAppInstance(String name, String instanceId) { return reactiveDiscoveryClient.getInstances(name) .filter(serviceInstance -> serviceInstance.getInstanceId().equals(instanceId)).singleOrEmpty(); } diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/test/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerIntegrationInstanceEndpointTest.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/test/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerIntegrationInstanceEndpointTest.java index 8176e096..3037c627 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/test/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerIntegrationInstanceEndpointTest.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-discoveryserver/src/test/java/org/springframework/cloud/kubernetes/discoveryserver/DiscoveryServerIntegrationInstanceEndpointTest.java @@ -74,7 +74,7 @@ class DiscoveryServerIntegrationInstanceEndpointTest { private WebTestClient webTestClient; @Test - void instance() { + void instanceDeprecated() { Map metadata = new HashMap<>(); metadata.put("spring", "true"); metadata.put("port.http", "8080"); @@ -91,6 +91,24 @@ class DiscoveryServerIntegrationInstanceEndpointTest { .isEqualTo(kubernetesServiceInstance); } + @Test + void instance() { + Map metadata = new HashMap<>(); + metadata.put("spring", "true"); + metadata.put("port.http", "8080"); + metadata.put("k8s_namespace", "namespace"); + metadata.put("type", "ClusterIP"); + metadata.put("k8s", "true"); + + DefaultKubernetesServiceInstance kubernetesServiceInstance = new DefaultKubernetesServiceInstance( + TEST_ENDPOINTS.getSubsets().get(0).getAddresses().get(0).getTargetRef().getUid(), + TEST_SERVICE.getMetadata().getName(), TEST_ENDPOINTS.getSubsets().get(0).getAddresses().get(0).getIp(), + TEST_ENDPOINTS.getSubsets().get(0).getPorts().get(0).getPort(), metadata, false, + TEST_SERVICE.getMetadata().getNamespace(), null); + webTestClient.get().uri("/apps/test-svc-3/uid2").exchange().expectBody(DefaultKubernetesServiceInstance.class) + .isEqualTo(kubernetesServiceInstance); + } + @TestConfiguration static class TestConfig {