Polish "Make Kubernetes detection slightly more efficient"
See gh-19002
This commit is contained in:
parent
aee22bfb51
commit
ddb5cc3f99
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,8 +16,6 @@
|
||||||
|
|
||||||
package org.springframework.boot.cloud;
|
package org.springframework.boot.cloud;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
import org.springframework.core.env.ConfigurableEnvironment;
|
import org.springframework.core.env.ConfigurableEnvironment;
|
||||||
import org.springframework.core.env.EnumerablePropertySource;
|
import org.springframework.core.env.EnumerablePropertySource;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
@ -75,22 +73,16 @@ public enum CloudPlatform {
|
||||||
*/
|
*/
|
||||||
KUBERNETES {
|
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_HOST = "KUBERNETES_SERVICE_HOST";
|
||||||
|
|
||||||
private static final String KUBERNETES_SERVICE_PORT = "KUBERNETES_SERVICE_PORT";
|
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
|
@Override
|
||||||
public boolean isActive(Environment environment) {
|
public boolean isActive(Environment environment) {
|
||||||
if (environment.containsProperty(KUBERNETES_SERVICE_HOST)
|
|
||||||
|| environment.containsProperty(KUBERNETES_SERVICE_PORT) || isSecretLocationExists()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (environment instanceof ConfigurableEnvironment) {
|
if (environment instanceof ConfigurableEnvironment) {
|
||||||
return isActive((ConfigurableEnvironment) environment);
|
return isActive((ConfigurableEnvironment) environment);
|
||||||
}
|
}
|
||||||
|
@ -100,9 +92,15 @@ public enum CloudPlatform {
|
||||||
private boolean isActive(ConfigurableEnvironment environment) {
|
private boolean isActive(ConfigurableEnvironment environment) {
|
||||||
PropertySource<?> environmentPropertySource = environment.getPropertySources()
|
PropertySource<?> environmentPropertySource = environment.getPropertySources()
|
||||||
.get(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME);
|
.get(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME);
|
||||||
|
if (environmentPropertySource != null) {
|
||||||
|
if (environmentPropertySource.containsProperty(KUBERNETES_SERVICE_HOST)
|
||||||
|
&& environmentPropertySource.containsProperty(KUBERNETES_SERVICE_PORT)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (environmentPropertySource instanceof EnumerablePropertySource) {
|
if (environmentPropertySource instanceof EnumerablePropertySource) {
|
||||||
return isActive((EnumerablePropertySource<?>) environmentPropertySource);
|
return isActive((EnumerablePropertySource<?>) environmentPropertySource);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,11 +117,6 @@ public enum CloudPlatform {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSecretLocationExists() {
|
|
||||||
File file = new File(SECRET_LOCATION);
|
|
||||||
return file.exists() && file.isDirectory();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
package org.springframework.boot.cloud;
|
package org.springframework.boot.cloud;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -85,28 +84,38 @@ class CloudPlatformTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getActiveWhenHasServiceHostAndServicePortShouldReturnKubernetes() {
|
void getActiveWhenHasKubernetesServiceHostAndPortShouldReturnKubernetes() {
|
||||||
MockEnvironment environment = new MockEnvironment();
|
Map<String, Object> envVars = new HashMap<>();
|
||||||
Map<String, Object> source = new HashMap<>();
|
envVars.put("KUBERNETES_SERVICE_HOST", "---");
|
||||||
source.put("EXAMPLE_SERVICE_HOST", "---");
|
envVars.put("KUBERNETES_SERVICE_PORT", "8080");
|
||||||
source.put("EXAMPLE_SERVICE_PORT", "8080");
|
Environment environment = getEnvironmentWithEnvVariables(envVars);
|
||||||
PropertySource<?> propertySource = new SystemEnvironmentPropertySource(
|
|
||||||
StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, source);
|
|
||||||
environment.getPropertySources().addFirst(propertySource);
|
|
||||||
CloudPlatform platform = CloudPlatform.getActive(environment);
|
CloudPlatform platform = CloudPlatform.getActive(environment);
|
||||||
assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES);
|
assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES);
|
||||||
assertThat(platform.isActive(environment)).isTrue();
|
assertThat(platform.isActive(environment)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getActiveWhenHasKubernetesHostAndPortShouldReturnKubernetes() {
|
void getActiveWhenHasKubernetesServiceHostAndNoKubernetesServicePortShouldNotReturnKubernetes() {
|
||||||
MockEnvironment environment = new MockEnvironment();
|
Environment environment = getEnvironmentWithEnvVariables(
|
||||||
Map<String, Object> source = new HashMap<>();
|
Collections.singletonMap("KUBERNETES_SERVICE_HOST", "---"));
|
||||||
source.put("KUBERNETES_SERVICE_HOST", "---");
|
CloudPlatform platform = CloudPlatform.getActive(environment);
|
||||||
source.put("KUBERNETES_SERVICE_PORT", "8080");
|
assertThat(platform).isNull();
|
||||||
PropertySource<?> propertySource = new SystemEnvironmentPropertySource(
|
}
|
||||||
StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, source);
|
|
||||||
environment.getPropertySources().addFirst(propertySource);
|
@Test
|
||||||
|
void getActiveWhenHasKubernetesServicePortAndNoKubernetesServiceHostShouldNotReturnKubernetes() {
|
||||||
|
Environment environment = getEnvironmentWithEnvVariables(
|
||||||
|
Collections.singletonMap("KUBERNETES_SERVICE_PORT", "8080"));
|
||||||
|
CloudPlatform platform = CloudPlatform.getActive(environment);
|
||||||
|
assertThat(platform).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getActiveWhenHasServiceHostAndServicePortShouldReturnKubernetes() {
|
||||||
|
Map<String, Object> envVars = new HashMap<>();
|
||||||
|
envVars.put("EXAMPLE_SERVICE_HOST", "---");
|
||||||
|
envVars.put("EXAMPLE_SERVICE_PORT", "8080");
|
||||||
|
Environment environment = getEnvironmentWithEnvVariables(envVars);
|
||||||
CloudPlatform platform = CloudPlatform.getActive(environment);
|
CloudPlatform platform = CloudPlatform.getActive(environment);
|
||||||
assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES);
|
assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES);
|
||||||
assertThat(platform.isActive(environment)).isTrue();
|
assertThat(platform.isActive(environment)).isTrue();
|
||||||
|
@ -114,16 +123,18 @@ class CloudPlatformTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getActiveWhenHasServiceHostAndNoServicePortShouldNotReturnKubernetes() {
|
void getActiveWhenHasServiceHostAndNoServicePortShouldNotReturnKubernetes() {
|
||||||
MockEnvironment environment = new MockEnvironment();
|
Environment environment = getEnvironmentWithEnvVariables(
|
||||||
PropertySource<?> propertySource = new SystemEnvironmentPropertySource(
|
|
||||||
StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME,
|
|
||||||
Collections.singletonMap("EXAMPLE_SERVICE_HOST", "---"));
|
Collections.singletonMap("EXAMPLE_SERVICE_HOST", "---"));
|
||||||
environment.getPropertySources().addFirst(propertySource);
|
|
||||||
CloudPlatform platform = CloudPlatform.getActive(environment);
|
CloudPlatform platform = CloudPlatform.getActive(environment);
|
||||||
File path = new File("/var/run/secrets/kubernetes.io");
|
|
||||||
if (!path.exists() && !path.isDirectory()) {
|
|
||||||
assertThat(platform).isNull();
|
assertThat(platform).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Environment getEnvironmentWithEnvVariables(Map<String, Object> environmentVariables) {
|
||||||
|
MockEnvironment environment = new MockEnvironment();
|
||||||
|
PropertySource<?> propertySource = new SystemEnvironmentPropertySource(
|
||||||
|
StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, environmentVariables);
|
||||||
|
environment.getPropertySources().addFirst(propertySource);
|
||||||
|
return environment;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue