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 9f1c19c856..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. @@ -16,8 +16,6 @@ package org.springframework.boot.cloud; -import java.io.File; - import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.Environment; @@ -75,22 +73,16 @@ public enum CloudPlatform { */ KUBERNETES { - private static final String SERVICE_HOST_SUFFIX = "_SERVICE_HOST"; - - private static final String SERVICE_PORT_SUFFIX = "_SERVICE_PORT"; - - private static final String SECRET_LOCATION = "/var/run/secrets/kubernetes.io"; - 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"; + @Override public boolean isActive(Environment environment) { - if (environment.containsProperty(KUBERNETES_SERVICE_HOST) - || environment.containsProperty(KUBERNETES_SERVICE_PORT) || isSecretLocationExists()) { - return true; - } if (environment instanceof ConfigurableEnvironment) { return isActive((ConfigurableEnvironment) environment); } @@ -100,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; } @@ -119,11 +117,6 @@ public enum CloudPlatform { return false; } - private boolean isSecretLocationExists() { - File file = new File(SECRET_LOCATION); - return file.exists() && file.isDirectory(); - } - }; /** 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 7589a998e3..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. @@ -16,7 +16,6 @@ package org.springframework.boot.cloud; -import java.io.File; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -85,28 +84,38 @@ class CloudPlatformTests { } @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); + 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 getActiveWhenHasKubernetesHostAndPortShouldReturnKubernetes() { - MockEnvironment environment = new MockEnvironment(); - Map source = new HashMap<>(); - source.put("KUBERNETES_SERVICE_HOST", "---"); - source.put("KUBERNETES_SERVICE_PORT", "8080"); - PropertySource propertySource = new SystemEnvironmentPropertySource( - StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, source); - environment.getPropertySources().addFirst(propertySource); + 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() { + 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(); @@ -114,16 +123,18 @@ class CloudPlatformTests { @Test void getActiveWhenHasServiceHostAndNoServicePortShouldNotReturnKubernetes() { + Environment environment = getEnvironmentWithEnvVariables( + Collections.singletonMap("EXAMPLE_SERVICE_HOST", "---")); + 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, - Collections.singletonMap("EXAMPLE_SERVICE_HOST", "---")); + StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, environmentVariables); environment.getPropertySources().addFirst(propertySource); - CloudPlatform platform = CloudPlatform.getActive(environment); - File path = new File("/var/run/secrets/kubernetes.io"); - if (!path.exists() && !path.isDirectory()) { - assertThat(platform).isNull(); - } + return environment; } }