diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsClientBuilderConfigurer.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsClientBuilderConfigurer.java new file mode 100644 index 00000000..d2132dd4 --- /dev/null +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsClientBuilderConfigurer.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018-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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.config.server.environment; + +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.client.builder.AwsSyncClientBuilder; + +import org.springframework.util.StringUtils; + +abstract class AwsClientBuilderConfigurer { + private AwsClientBuilderConfigurer() { + } + + static void configureClientBuilder(AwsSyncClientBuilder clientBuilder, String region, String endpoint) { + if (StringUtils.hasText(region)) { + if (StringUtils.hasText(endpoint)) { + AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration( + endpoint, region); + clientBuilder.withEndpointConfiguration(endpointConfiguration); + } + else { + clientBuilder.withRegion(region); + } + } + } +} diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryFactory.java index 8219feff..37117d17 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryFactory.java @@ -16,13 +16,12 @@ package org.springframework.cloud.config.server.environment; -import com.amazonaws.client.builder.AwsClientBuilder; -import com.amazonaws.regions.Regions; import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagement; import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClientBuilder; import org.springframework.cloud.config.server.config.ConfigServerProperties; -import org.springframework.util.StringUtils; + +import static org.springframework.cloud.config.server.environment.AwsClientBuilderConfigurer.configureClientBuilder; /** * @author Iulian Antohe @@ -40,22 +39,7 @@ public class AwsParameterStoreEnvironmentRepositoryFactory implements public AwsParameterStoreEnvironmentRepository build(AwsParameterStoreEnvironmentProperties environmentProperties) { AWSSimpleSystemsManagementClientBuilder clientBuilder = AWSSimpleSystemsManagementClientBuilder.standard(); - String region = environmentProperties.getRegion(); - - if (StringUtils.hasLength(region)) { - Regions awsRegion = Regions.fromName(region); - - clientBuilder.withRegion(awsRegion); - - String endpoint = environmentProperties.getEndpoint(); - - if (StringUtils.hasLength(endpoint)) { - AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration( - endpoint, awsRegion.getName()); - - clientBuilder.withEndpointConfiguration(endpointConfiguration); - } - } + configureClientBuilder(clientBuilder, environmentProperties.getRegion(), environmentProperties.getEndpoint()); AWSSimpleSystemsManagement client = clientBuilder.build(); diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java index be967fb8..c79be96a 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java @@ -21,6 +21,8 @@ import com.amazonaws.services.s3.AmazonS3ClientBuilder; import org.springframework.cloud.config.server.config.ConfigServerProperties; +import static org.springframework.cloud.config.server.environment.AwsClientBuilderConfigurer.configureClientBuilder; + public class AwsS3EnvironmentRepositoryFactory implements EnvironmentRepositoryFactory { @@ -33,16 +35,7 @@ public class AwsS3EnvironmentRepositoryFactory @Override public AwsS3EnvironmentRepository build(AwsS3EnvironmentProperties environmentProperties) { final AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard(); - if (environmentProperties.getRegion() != null) { - if (environmentProperties.getEndpoint() != null) { - AmazonS3ClientBuilder.EndpointConfiguration endpointConfiguration = new AmazonS3ClientBuilder.EndpointConfiguration( - environmentProperties.getEndpoint(), environmentProperties.getRegion()); - clientBuilder.withEndpointConfiguration(endpointConfiguration); - } - else { - clientBuilder.withRegion(environmentProperties.getRegion()); - } - } + configureClientBuilder(clientBuilder, environmentProperties.getRegion(), environmentProperties.getEndpoint()); final AmazonS3 client = clientBuilder.build(); AwsS3EnvironmentRepository repository = new AwsS3EnvironmentRepository(client, diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryFactory.java index 50c891d3..ce7ecad1 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryFactory.java @@ -16,13 +16,12 @@ package org.springframework.cloud.config.server.environment; -import com.amazonaws.client.builder.AwsClientBuilder; -import com.amazonaws.regions.Regions; import com.amazonaws.services.secretsmanager.AWSSecretsManager; import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder; import org.springframework.cloud.config.server.config.ConfigServerProperties; -import org.springframework.util.StringUtils; + +import static org.springframework.cloud.config.server.environment.AwsClientBuilderConfigurer.configureClientBuilder; /** * @author Tejas Pandilwar @@ -39,19 +38,8 @@ public class AwsSecretsManagerEnvironmentRepositoryFactory implements @Override public AwsSecretsManagerEnvironmentRepository build(AwsSecretsManagerEnvironmentProperties environmentProperties) { AWSSecretsManagerClientBuilder clientBuilder = AWSSecretsManagerClientBuilder.standard(); - String region = environmentProperties.getRegion(); - if (!StringUtils.isEmpty(region)) { - Regions awsRegion = Regions.fromName(region); - clientBuilder.withRegion(awsRegion); - - String endpoint = environmentProperties.getEndpoint(); - if (!StringUtils.isEmpty(endpoint)) { - AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration( - endpoint, awsRegion.getName()); - clientBuilder.withEndpointConfiguration(endpointConfiguration); - } - } + configureClientBuilder(clientBuilder, environmentProperties.getRegion(), environmentProperties.getEndpoint()); AWSSecretsManager client = clientBuilder.build(); return new AwsSecretsManagerEnvironmentRepository(client, configServerProperties, environmentProperties); diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryTests.java index e9f6b19b..6a88189c 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsParameterStoreEnvironmentRepositoryTests.java @@ -695,6 +695,25 @@ public class AwsParameterStoreEnvironmentRepositoryTests { assertThat(result).usingRecursiveComparison().withStrictTypeChecking().isEqualTo(expected); } + @Test + public void factoryCustomizableWithRegion() { + AwsParameterStoreEnvironmentRepositoryFactory factory = new AwsParameterStoreEnvironmentRepositoryFactory(new ConfigServerProperties()); + AwsParameterStoreEnvironmentProperties properties = new AwsParameterStoreEnvironmentProperties(); + properties.setRegion("us-east-1"); + AwsParameterStoreEnvironmentRepository repository = factory.build(properties); + assertThat(repository).isNotNull(); + } + + @Test + public void factoryCustomizableWithRegionAndEndpoint() { + AwsParameterStoreEnvironmentRepositoryFactory factory = new AwsParameterStoreEnvironmentRepositoryFactory(new ConfigServerProperties()); + AwsParameterStoreEnvironmentProperties properties = new AwsParameterStoreEnvironmentProperties(); + properties.setRegion("us-east-1"); + properties.setEndpoint("https://myawsendpoint/"); + AwsParameterStoreEnvironmentRepository repository = factory.build(properties); + assertThat(repository).isNotNull(); + } + private void setupAwsSsmClientMocks(Environment environment) { setupAwsSsmClientMocks(environment, false, false); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryTests.java index 439061a6..9e2db3bf 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsSecretsManagerEnvironmentRepositoryTests.java @@ -715,6 +715,25 @@ public class AwsSecretsManagerEnvironmentRepositoryTests { assertThat(resultEnv).usingRecursiveComparison().withStrictTypeChecking().isEqualTo(expectedEnv); } + @Test + public void factoryCustomizableWithRegion() { + AwsSecretsManagerEnvironmentRepositoryFactory factory = new AwsSecretsManagerEnvironmentRepositoryFactory(new ConfigServerProperties()); + AwsSecretsManagerEnvironmentProperties properties = new AwsSecretsManagerEnvironmentProperties(); + properties.setRegion("us-east-1"); + AwsSecretsManagerEnvironmentRepository repository = factory.build(properties); + assertThat(repository).isNotNull(); + } + + @Test + public void factoryCustomizableWithRegionAndEndpoint() { + AwsSecretsManagerEnvironmentRepositoryFactory factory = new AwsSecretsManagerEnvironmentRepositoryFactory(new ConfigServerProperties()); + AwsSecretsManagerEnvironmentProperties properties = new AwsSecretsManagerEnvironmentProperties(); + properties.setRegion("us-east-1"); + properties.setEndpoint("https://myawsendpoint/"); + AwsSecretsManagerEnvironmentRepository repository = factory.build(properties); + assertThat(repository).isNotNull(); + } + private void setupAwsSmClientMocks(Environment environment) { for (PropertySource ps : environment.getPropertySources()) { String path = StringUtils.delete(ps.getName(), environmentProperties.getOrigin());