From 69b23470c74aff94ef218274cafd60e748f85107 Mon Sep 17 00:00:00 2001 From: Julien Dubois Date: Wed, 25 Aug 2021 21:15:22 +0200 Subject: [PATCH 1/2] Use more precise variables to detect Azure App Service See gh-27819 --- .../org/springframework/boot/cloud/CloudPlatform.java | 11 ++++++++--- .../boot/cloud/CloudPlatformTests.java | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) 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 f4402190819c..ff7b68048781 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 @@ -140,12 +140,17 @@ private boolean isAutoDetected(EnumerablePropertySource environmentPropertySo private static final String WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"; - private static final String WEBSITES_ENABLE_APP_SERVICE_STORAGE = "WEBSITES_ENABLE_APP_SERVICE_STORAGE"; + private static final String WEBSITE_INSTANCE_ID = "WEBSITE_INSTANCE_ID"; + + private static final String WEBSITE_RESOURCE_GROUP = "WEBSITE_RESOURCE_GROUP"; + + private static final String WEBSITE_SKU = "WEBSITE_SKU"; @Override public boolean isDetected(Environment environment) { - return environment.containsProperty(WEBSITE_SITE_NAME) - && environment.containsProperty(WEBSITES_ENABLE_APP_SERVICE_STORAGE); + return environment.containsProperty(WEBSITE_SITE_NAME) && environment.containsProperty(WEBSITE_INSTANCE_ID) + && environment.containsProperty(WEBSITE_RESOURCE_GROUP) + && environment.containsProperty(WEBSITE_SKU); } }; 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 8172589016db..b00ee15c5857 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 @@ -136,7 +136,9 @@ void getActiveWhenHasServiceHostAndNoServicePortShouldNotReturnKubernetes() { void getActiveWhenHasWebsiteSiteNameAndWebsitesEnableAppServiceStorageShouldReturnAzureAppService() { Map envVars = new HashMap<>(); envVars.put("WEBSITE_SITE_NAME", "---"); - envVars.put("WEBSITES_ENABLE_APP_SERVICE_STORAGE", "false"); + envVars.put("WEBSITE_INSTANCE_ID", "1234"); + envVars.put("WEBSITE_RESOURCE_GROUP", "test"); + envVars.put("WEBSITE_SKU", "1234"); Environment environment = getEnvironmentWithEnvVariables(envVars); CloudPlatform platform = CloudPlatform.getActive(environment); assertThat(platform).isEqualTo(CloudPlatform.AZURE_APP_SERVICE); From d6cc1f6d7d49724599c62ae3706ea577ad58ae24 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 6 Sep 2021 08:28:58 +0200 Subject: [PATCH 2/2] Polish "Use more precise variables to detect Azure App Service" See gh-27819 --- .../boot/cloud/CloudPlatform.java | 16 +++----- .../boot/cloud/CloudPlatformTests.java | 41 ++++++++++++++++--- 2 files changed, 41 insertions(+), 16 deletions(-) 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 ff7b68048781..674a8ff490c4 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 @@ -16,6 +16,9 @@ package org.springframework.boot.cloud; +import java.util.Arrays; +import java.util.List; + import org.springframework.boot.context.properties.bind.Binder; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.EnumerablePropertySource; @@ -138,19 +141,12 @@ private boolean isAutoDetected(EnumerablePropertySource environmentPropertySo */ AZURE_APP_SERVICE { - private static final String WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"; - - private static final String WEBSITE_INSTANCE_ID = "WEBSITE_INSTANCE_ID"; - - private static final String WEBSITE_RESOURCE_GROUP = "WEBSITE_RESOURCE_GROUP"; - - private static final String WEBSITE_SKU = "WEBSITE_SKU"; + private final List azureEnvVariables = Arrays.asList("WEBSITE_SITE_NAME", "WEBSITE_INSTANCE_ID", + "WEBSITE_RESOURCE_GROUP", "WEBSITE_SKU"); @Override public boolean isDetected(Environment environment) { - return environment.containsProperty(WEBSITE_SITE_NAME) && environment.containsProperty(WEBSITE_INSTANCE_ID) - && environment.containsProperty(WEBSITE_RESOURCE_GROUP) - && environment.containsProperty(WEBSITE_SKU); + return this.azureEnvVariables.stream().allMatch(environment::containsProperty); } }; 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 b00ee15c5857..884057e21f68 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 @@ -133,7 +133,7 @@ void getActiveWhenHasServiceHostAndNoServicePortShouldNotReturnKubernetes() { } @Test - void getActiveWhenHasWebsiteSiteNameAndWebsitesEnableAppServiceStorageShouldReturnAzureAppService() { + void getActiveWhenHasAllAzureEnvVariablesShouldReturnAzureAppService() { Map envVars = new HashMap<>(); envVars.put("WEBSITE_SITE_NAME", "---"); envVars.put("WEBSITE_INSTANCE_ID", "1234"); @@ -146,16 +146,45 @@ void getActiveWhenHasWebsiteSiteNameAndWebsitesEnableAppServiceStorageShouldRetu } @Test - void getActiveWhenHasWebsiteSiteNameAndNoWebsitesEnableAppServiceStorageShouldNotReturnAzureAppService() { - Environment environment = getEnvironmentWithEnvVariables(Collections.singletonMap("WEBSITE_SITE_NAME", "---")); + void getActiveWhenHasMissingWebsiteSiteNameShouldNotReturnAzureAppService() { + Map envVars = new HashMap<>(); + envVars.put("WEBSITE_INSTANCE_ID", "1234"); + envVars.put("WEBSITE_RESOURCE_GROUP", "test"); + envVars.put("WEBSITE_SKU", "1234"); + Environment environment = getEnvironmentWithEnvVariables(envVars); CloudPlatform platform = CloudPlatform.getActive(environment); assertThat(platform).isNull(); } @Test - void getActiveWhenHasWebsitesEnableAppServiceStorageAndNoWebsiteSiteNameShouldNotReturnAzureAppService() { - Environment environment = getEnvironmentWithEnvVariables( - Collections.singletonMap("WEBSITES_ENABLE_APP_SERVICE_STORAGE", "false")); + void getActiveWhenHasMissingWebsiteInstanceIdShouldNotReturnAzureAppService() { + Map envVars = new HashMap<>(); + envVars.put("WEBSITE_SITE_NAME", "---"); + envVars.put("WEBSITE_RESOURCE_GROUP", "test"); + envVars.put("WEBSITE_SKU", "1234"); + Environment environment = getEnvironmentWithEnvVariables(envVars); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isNull(); + } + + @Test + void getActiveWhenHasMissingWebsiteResourceGroupShouldNotReturnAzureAppService() { + Map envVars = new HashMap<>(); + envVars.put("WEBSITE_SITE_NAME", "---"); + envVars.put("WEBSITE_INSTANCE_ID", "1234"); + envVars.put("WEBSITE_SKU", "1234"); + Environment environment = getEnvironmentWithEnvVariables(envVars); + CloudPlatform platform = CloudPlatform.getActive(environment); + assertThat(platform).isNull(); + } + + @Test + void getActiveWhenHasMissingWebsiteSkuShouldNotReturnAzureAppService() { + Map envVars = new HashMap<>(); + envVars.put("WEBSITE_SITE_NAME", "---"); + envVars.put("WEBSITE_INSTANCE_ID", "1234"); + envVars.put("WEBSITE_RESOURCE_GROUP", "test"); + Environment environment = getEnvironmentWithEnvVariables(envVars); CloudPlatform platform = CloudPlatform.getActive(environment); assertThat(platform).isNull(); }