Merge branch '3.1.x'

This commit is contained in:
Ryan Baxter
2023-05-03 16:49:34 -04:00
3 changed files with 59 additions and 41 deletions

View File

@@ -18,10 +18,10 @@ package org.springframework.cloud.config.server.environment;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.stream.Collectors;
import software.amazon.awssdk.core.ResponseInputStream;
import software.amazon.awssdk.services.s3.S3Client;
@@ -73,16 +73,17 @@ public class AwsS3EnvironmentRepository implements EnvironmentRepository, Ordere
@Override
public Environment findOne(String specifiedApplication, String specifiedProfiles, String specifiedLabel) {
final String application = !StringUtils.hasText(specifiedApplication)
final String application = ObjectUtils.isEmpty(specifiedApplication)
? serverProperties.getDefaultApplicationName() : specifiedApplication;
final String profiles = !StringUtils.hasText(specifiedProfiles) ? serverProperties.getDefaultProfile()
final String profiles = ObjectUtils.isEmpty(specifiedProfiles) ? serverProperties.getDefaultProfile()
: specifiedProfiles;
final String label = !StringUtils.hasText(specifiedLabel) ? serverProperties.getDefaultLabel() : specifiedLabel;
final String label = ObjectUtils.isEmpty(specifiedLabel) ? serverProperties.getDefaultLabel() : specifiedLabel;
String[] profileArray = parseProfiles(profiles);
String[] apps = new String[] { application };
if (application != null) {
apps = StringUtils.commaDelimitedListToStringArray(application.replace(" ", ""));
List<String> apps = Arrays.asList(StringUtils.commaDelimitedListToStringArray(application.replace(" ", "")));
if (!apps.contains(serverProperties.getDefaultApplicationName())) {
apps = new ArrayList<>(apps);
apps.add(serverProperties.getDefaultApplicationName());
}
final Environment environment = new Environment(application, profileArray);
@@ -90,34 +91,36 @@ public class AwsS3EnvironmentRepository implements EnvironmentRepository, Ordere
for (String profile : profileArray) {
for (String app : apps) {
S3ConfigFile s3ConfigFile = getS3ConfigFile(app, profile, label);
if (s3ConfigFile != null) {
environment.setVersion(s3ConfigFile.getVersion());
final Properties config = s3ConfigFile.read();
config.putAll(serverProperties.getOverrides());
StringBuilder propertySourceName = new StringBuilder().append("s3:").append(app);
if (profile != null) {
propertySourceName.append("-").append(profile);
}
environment.add(new PropertySource(propertySourceName.toString(), config));
}
addPropertySource(environment, app, profile, label);
}
}
// Add propertysources without profiles as well
for (String app : apps) {
addPropertySource(environment, app, null, label);
}
return environment;
}
private String[] parseProfiles(String profiles) {
if (ObjectUtils.isEmpty(profiles)) {
return new String[] { "" };
private void addPropertySource(Environment environment, String app, String profile, String label) {
S3ConfigFile s3ConfigFile = getS3ConfigFile(app, profile, label);
if (s3ConfigFile != null) {
environment.setVersion(s3ConfigFile.getVersion());
final Properties config = s3ConfigFile.read();
config.putAll(serverProperties.getOverrides());
StringBuilder propertySourceName = new StringBuilder().append("s3:").append(app);
if (profile != null) {
propertySourceName.append("-").append(profile);
}
environment.add(new PropertySource(propertySourceName.toString(), config));
}
List<String> parsedProfiles = Arrays.stream(profiles.split(","))
.collect(Collectors.collectingAndThen(Collectors.toList(), p -> {
p.add("");
return p;
}));
return parsedProfiles.toArray(new String[0]);
}
private String[] parseProfiles(String profiles) {
return StringUtils.commaDelimitedListToStringArray(profiles);
}
private S3ConfigFile getS3ConfigFile(String application, String profile, String label) {

View File

@@ -90,6 +90,10 @@ public class AwsS3IntegrationTests {
RequestBody.fromString("this is a test in main"));
s3Client.putObject((request) -> request.bucket("test-bucket").key("application.properties"),
RequestBody.fromString("foo=1"));
s3Client.putObject((request) -> request.bucket("test-bucket").key("data.properties"),
RequestBody.fromString("bar=1"));
s3Client.putObject((request) -> request.bucket("test-bucket").key("data-dev.properties"),
RequestBody.fromString("bar=1"));
}
}
@@ -107,6 +111,17 @@ public class AwsS3IntegrationTests {
.isEqualTo("this is a test");
}
@Test
public void defaultApplicationAndProfileIncluded() throws IOException {
RestTemplate rest = new RestTemplateBuilder().build();
String configServerUrl = "http://localhost:" + configServerPort;
Environment env = rest.getForObject(configServerUrl + "/data/dev", Environment.class);
assertThat(env.getPropertySources().size()).isEqualTo(3);
assertThat(env.getPropertySources().get(0).getName()).isEqualTo("s3:data-dev");
assertThat(env.getPropertySources().get(1).getName()).isEqualTo("s3:data");
assertThat(env.getPropertySources().get(2).getName()).isEqualTo("s3:application");
}
@AfterAll
public static void after() {
server.close();

View File

@@ -145,7 +145,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "bar", null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar");
}
@Test
@@ -154,7 +154,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "bar", null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar");
}
@Test
@@ -163,7 +163,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "bar", null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar");
}
@Test
@@ -172,7 +172,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "bar", null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar");
}
@Test
@@ -181,7 +181,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", null, null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "default", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "default");
}
@Test
@@ -190,7 +190,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", null, null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "default", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "default");
}
@Test
@@ -200,7 +200,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "profile1,profile2", null);
assertExpectedEnvironment(env, "foo", null, versionId, 2, "profile1", "profile2", "");
assertExpectedEnvironment(env, "foo", null, versionId, 2, "profile1", "profile2");
}
@Test
@@ -209,7 +209,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "profile1,profile2", null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "profile1", "profile2", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "profile1", "profile2");
}
@Test
@@ -219,7 +219,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "profile1", null);
assertExpectedEnvironment(env, "foo", null, versionId, 2, "profile1", "");
assertExpectedEnvironment(env, "foo", null, versionId, 2, "profile1");
}
@Test
@@ -229,7 +229,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", null, null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "");
assertExpectedEnvironment(env, "foo", null, versionId, 1);
}
@@ -239,7 +239,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "bar", "label1");
assertExpectedEnvironment(env, "foo", "label1", versionId, 1, "bar", "");
assertExpectedEnvironment(env, "foo", "label1", versionId, 1, "bar");
}
@Test
@@ -248,7 +248,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo", "bar", null);
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar", "");
assertExpectedEnvironment(env, "foo", null, versionId, 1, "bar");
}
@Test
@@ -258,7 +258,7 @@ public class AwsS3EnvironmentRepositoryTests {
final Environment env = envRepo.findOne("foo,bar", "profile1", null);
assertExpectedEnvironment(env, "foo,bar", null, versionId, 2, "profile1", "");
assertExpectedEnvironment(env, "foo,bar", null, versionId, 2, "profile1");
}