Don't detect CloudPlatform when property is set
Update `CloudPlatform.isActive` to back-off from detection when any `spring.main.cloud-platform` property is set. See gh-25455
This commit is contained in:
parent
fcb2210a87
commit
70f44d3a56
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2020 the original author or authors.
|
* Copyright 2012-2021 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.
|
||||||
|
|
@ -28,6 +28,7 @@ import org.springframework.core.env.StandardEnvironment;
|
||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
* @author Brian Clozel
|
* @author Brian Clozel
|
||||||
|
* @author Nguyen Sach
|
||||||
* @since 1.3.0
|
* @since 1.3.0
|
||||||
*/
|
*/
|
||||||
public enum CloudPlatform {
|
public enum CloudPlatform {
|
||||||
|
|
@ -131,13 +132,15 @@ public enum CloudPlatform {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final String PROPERTY_NAME = "spring.main.cloud-platform";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if the platform is active (i.e. the application is running in it).
|
* Determines if the platform is active (i.e. the application is running in it).
|
||||||
* @param environment the environment
|
* @param environment the environment
|
||||||
* @return if the platform is active.
|
* @return if the platform is active.
|
||||||
*/
|
*/
|
||||||
public boolean isActive(Environment environment) {
|
public boolean isActive(Environment environment) {
|
||||||
return isEnforced(environment) || isDetected(environment);
|
return isEnforced(environment) || (isAutoDetectionEnabled(environment) && isDetected(environment));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -148,7 +151,7 @@ public enum CloudPlatform {
|
||||||
* @since 2.3.0
|
* @since 2.3.0
|
||||||
*/
|
*/
|
||||||
public boolean isEnforced(Environment environment) {
|
public boolean isEnforced(Environment environment) {
|
||||||
String platform = environment.getProperty("spring.main.cloud-platform");
|
String platform = environment.getProperty(PROPERTY_NAME);
|
||||||
return name().equalsIgnoreCase(platform);
|
return name().equalsIgnoreCase(platform);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -161,6 +164,16 @@ public enum CloudPlatform {
|
||||||
*/
|
*/
|
||||||
public abstract boolean isDetected(Environment environment);
|
public abstract boolean isDetected(Environment environment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if it is enabled that the platform is detected by looking for
|
||||||
|
* platform-specific environment variables.
|
||||||
|
* @param environment the environment
|
||||||
|
* @return if the platform auto-detection is enabled.
|
||||||
|
*/
|
||||||
|
private boolean isAutoDetectionEnabled(Environment environment) {
|
||||||
|
return environment.getProperty(PROPERTY_NAME) == null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns if the platform is behind a load balancer and uses
|
* Returns if the platform is behind a load balancer and uses
|
||||||
* {@literal X-Forwarded-For} headers.
|
* {@literal X-Forwarded-For} headers.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2020 the original author or authors.
|
* Copyright 2012-2021 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.
|
||||||
|
|
@ -18,7 +18,10 @@ package org.springframework.boot.cloud;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
|
@ -34,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
* Tests for {@link CloudPlatform}.
|
* Tests for {@link CloudPlatform}.
|
||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
|
* @author Nguyen Sach
|
||||||
*/
|
*/
|
||||||
class CloudPlatformTests {
|
class CloudPlatformTests {
|
||||||
|
|
||||||
|
|
@ -137,6 +141,18 @@ class CloudPlatformTests {
|
||||||
assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES);
|
assertThat(platform).isEqualTo(CloudPlatform.KUBERNETES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isActiveWhenNoCloudPlatformIsEnforcedAndHasKubernetesServiceHostAndKubernetesServicePort() {
|
||||||
|
Map<String, Object> envVars = new HashMap<>();
|
||||||
|
envVars.put("EXAMPLE_SERVICE_HOST", "---");
|
||||||
|
envVars.put("EXAMPLE_SERVICE_PORT", "8080");
|
||||||
|
Environment environment = getEnvironmentWithEnvVariables(envVars);
|
||||||
|
((MockEnvironment) environment).setProperty("spring.main.cloud-platform", "none");
|
||||||
|
List<CloudPlatform> activeCloudPlatforms = Stream.of(CloudPlatform.values())
|
||||||
|
.filter((cloudPlatform) -> cloudPlatform.isActive(environment)).collect(Collectors.toList());
|
||||||
|
assertThat(activeCloudPlatforms).containsExactly(CloudPlatform.NONE);
|
||||||
|
}
|
||||||
|
|
||||||
private Environment getEnvironmentWithEnvVariables(Map<String, Object> environmentVariables) {
|
private Environment getEnvironmentWithEnvVariables(Map<String, Object> environmentVariables) {
|
||||||
MockEnvironment environment = new MockEnvironment();
|
MockEnvironment environment = new MockEnvironment();
|
||||||
PropertySource<?> propertySource = new SystemEnvironmentPropertySource(
|
PropertySource<?> propertySource = new SystemEnvironmentPropertySource(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue