diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java index 2db1b48e56..c7f124bfae 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/cloud/CloudPlatform.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -73,6 +73,10 @@ public enum CloudPlatform { */ KUBERNETES { + private static final String KUBERNETES_SERVICE_HOST = "KUBERNETES_SERVICE_HOST"; + + private static final String KUBERNETES_SERVICE_PORT = "KUBERNETES_SERVICE_PORT"; + private static final String SERVICE_HOST_SUFFIX = "_SERVICE_HOST"; private static final String SERVICE_PORT_SUFFIX = "_SERVICE_PORT"; @@ -88,8 +92,14 @@ public enum CloudPlatform { private boolean isActive(ConfigurableEnvironment environment) { PropertySource environmentPropertySource = environment.getPropertySources() .get(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME); - if (environmentPropertySource instanceof EnumerablePropertySource) { - return isActive((EnumerablePropertySource) environmentPropertySource); + if (environmentPropertySource != null) { + if (environmentPropertySource.containsProperty(KUBERNETES_SERVICE_HOST) + && environmentPropertySource.containsProperty(KUBERNETES_SERVICE_PORT)) { + return true; + } + if (environmentPropertySource instanceof EnumerablePropertySource) { + return isActive((EnumerablePropertySource) environmentPropertySource); + } } return false; } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java index 1eb711b981..9787259337 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/cloud/CloudPlatformTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -83,15 +83,39 @@ class CloudPlatformTests { assertThat(platform.isActive(environment)).isTrue(); } + @Test + void getActiveWhenHasKubernetesServiceHostAndPortShouldReturnKubernetes() { + Map envVars = new HashMap<>(); + envVars.put("KUBERNETES_SERVICE_HOST", "---"); + envVars.put("KUBERNETES_SERVICE_PORT", "8080"); + Environment environment = getEnvironmentWithEnvVariables(envVars); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES); + assertThat(platform.isActive(environment)).isTrue(); + } + + @Test + void getActiveWhenHasKubernetesServiceHostAndNoKubernetesServicePortShouldNotReturnKubernetes() { + Environment environment = getEnvironmentWithEnvVariables( + Collections.singletonMap("KUBERNETES_SERVICE_HOST", "---")); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isNull(); + } + + @Test + void getActiveWhenHasKubernetesServicePortAndNoKubernetesServiceHostShouldNotReturnKubernetes() { + Environment environment = getEnvironmentWithEnvVariables( + Collections.singletonMap("KUBERNETES_SERVICE_PORT", "8080")); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isNull(); + } + @Test void getActiveWhenHasServiceHostAndServicePortShouldReturnKubernetes() { - MockEnvironment environment = new MockEnvironment(); - Map source = new HashMap<>(); - source.put("EXAMPLE_SERVICE_HOST", "---"); - source.put("EXAMPLE_SERVICE_PORT", "8080"); - PropertySource propertySource = new SystemEnvironmentPropertySource( - StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, source); - environment.getPropertySources().addFirst(propertySource); + Map envVars = new HashMap<>(); + envVars.put("EXAMPLE_SERVICE_HOST", "---"); + envVars.put("EXAMPLE_SERVICE_PORT", "8080"); + Environment environment = getEnvironmentWithEnvVariables(envVars); CloudPlatform platform = CloudPlatform.getActive(environment); assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES); assertThat(platform.isActive(environment)).isTrue(); @@ -99,13 +123,18 @@ class CloudPlatformTests { @Test void getActiveWhenHasServiceHostAndNoServicePortShouldNotReturnKubernetes() { - MockEnvironment environment = new MockEnvironment(); - PropertySource propertySource = new SystemEnvironmentPropertySource( - StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, + Environment environment = getEnvironmentWithEnvVariables( Collections.singletonMap("EXAMPLE_SERVICE_HOST", "---")); - environment.getPropertySources().addFirst(propertySource); CloudPlatform platform = CloudPlatform.getActive(environment); assertThat(platform).isNull(); } + private Environment getEnvironmentWithEnvVariables(Map environmentVariables) { + MockEnvironment environment = new MockEnvironment(); + PropertySource propertySource = new SystemEnvironmentPropertySource( + StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, environmentVariables); + environment.getPropertySources().addFirst(propertySource); + return environment; + } + }