Merge branch '2.1.x'
This commit is contained in:
@@ -767,6 +767,23 @@ For example, if you run the following Vault command, all applications using the
|
||||
$ vault write secret/application foo=bar baz=bam
|
||||
----
|
||||
|
||||
===== CredHub Server
|
||||
|
||||
When using CredHub as a backend, you can share configuration with all applications by placing configuration in `/application/` or by placing it in the `default` profile for the application.
|
||||
For example, if you run the following CredHub command, all applications using the config server will have the properties `shared.color1` and `shared.color2` available to them:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
credhub set --name "/application/profile/master/shared" --type=json
|
||||
value: {"shared.color1": "blue", "shared.color": "red"}
|
||||
----
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
credhub set --name "/my-app/default/master/more-shared" --type=json
|
||||
value: {"shared.word1": "hello", "shared.word2": "world"}
|
||||
----
|
||||
|
||||
==== JDBC Backend
|
||||
|
||||
Spring Cloud Config Server supports JDBC (relational database) as a backend for configuration properties.
|
||||
@@ -917,6 +934,7 @@ All client applications with the name `spring.cloud.config.name=demo-app` will h
|
||||
----
|
||||
|
||||
NOTE: When no profile is specified `default` will be used and when no label is specified `master` will be used as a default value.
|
||||
NOTE: Values added to `application` will be shared by all the applications.
|
||||
|
||||
===== OAuth 2.0
|
||||
You can authenticate with link:https://oauth.net/2/[OAuth 2.0] using link:https://docs.cloudfoundry.org/concepts/architecture/uaa.html[UAA] as a provider.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.springframework.cloud.config.server.environment;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.cloud.config.environment.Environment;
|
||||
@@ -36,6 +36,12 @@ public class CredhubEnvironmentRepository implements EnvironmentRepository {
|
||||
|
||||
private CredHubOperations credHubOperations;
|
||||
|
||||
private static final String DEFAULT_PROFILE = "default";
|
||||
|
||||
private static final String DEFAULT_LABEL = "master";
|
||||
|
||||
private static final String DEFAULT_APPLICATION = "application";
|
||||
|
||||
public CredhubEnvironmentRepository(CredHubOperations credHubOperations) {
|
||||
this.credHubOperations = credHubOperations;
|
||||
}
|
||||
@@ -43,25 +49,49 @@ public class CredhubEnvironmentRepository implements EnvironmentRepository {
|
||||
@Override
|
||||
public Environment findOne(String application, String profilesList, String label) {
|
||||
if (StringUtils.isEmpty(profilesList)) {
|
||||
profilesList = "default";
|
||||
profilesList = DEFAULT_PROFILE;
|
||||
}
|
||||
if (StringUtils.isEmpty(label)) {
|
||||
label = "master";
|
||||
label = DEFAULT_LABEL;
|
||||
}
|
||||
|
||||
String[] profiles = StringUtils.commaDelimitedListToStringArray(profilesList);
|
||||
|
||||
Environment environment = new Environment(application, profiles, label, null,
|
||||
null);
|
||||
Map<Object, Object> properties = new HashMap<>();
|
||||
for (String profile : profiles) {
|
||||
properties.putAll(findProperties(application, profile, label));
|
||||
environment.add(new PropertySource(
|
||||
"credhub-" + application + "-" + profile + "-" + label,
|
||||
findProperties(application, profile, label)));
|
||||
if (!DEFAULT_APPLICATION.equals(application)) {
|
||||
addDefaultPropertySource(environment, DEFAULT_APPLICATION, profile,
|
||||
label);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Arrays.asList(profiles).contains(DEFAULT_PROFILE)) {
|
||||
addDefaultPropertySource(environment, application, DEFAULT_PROFILE, label);
|
||||
}
|
||||
|
||||
if (!Arrays.asList(profiles).contains(DEFAULT_PROFILE)
|
||||
&& !DEFAULT_APPLICATION.equals(application)) {
|
||||
addDefaultPropertySource(environment, DEFAULT_APPLICATION, DEFAULT_PROFILE,
|
||||
label);
|
||||
}
|
||||
environment.add(new PropertySource("credhub-" + application, properties));
|
||||
|
||||
return environment;
|
||||
}
|
||||
|
||||
private void addDefaultPropertySource(Environment environment, String application,
|
||||
String profile, String label) {
|
||||
Map<Object, Object> properties = findProperties(application, profile, label);
|
||||
if (!properties.isEmpty()) {
|
||||
PropertySource propertySource = new PropertySource(
|
||||
"credhub-" + application + "-" + profile + "-" + label, properties);
|
||||
environment.add(propertySource);
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Object, Object> findProperties(String application, String profile,
|
||||
String label) {
|
||||
String path = "/" + application + "/" + profile + "/" + label;
|
||||
|
||||
@@ -50,7 +50,7 @@ public class CredhubCompositeConfigServerIntegrationTests extends CredhubIntegra
|
||||
|
||||
assertThat(environment.getPropertySources().isEmpty()).isFalse();
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-myapp");
|
||||
.isEqualTo("credhub-myapp-master-default");
|
||||
assertThat(environment.getPropertySources().get(0).getSource().toString())
|
||||
.isEqualTo("{key=value}");
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ public class CredhubConfigServerIntegrationTests extends CredhubIntegrationTest
|
||||
|
||||
assertThat(environment.getPropertySources().isEmpty()).isFalse();
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-myapp");
|
||||
.isEqualTo("credhub-myapp-master-default");
|
||||
assertThat(environment.getPropertySources().get(0).getSource().toString())
|
||||
.isEqualTo("{key=value}");
|
||||
}
|
||||
|
||||
@@ -68,11 +68,13 @@ public class CredhubEnvironmentRepositoryTests {
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", "production", "mylabel");
|
||||
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(1);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application");
|
||||
.isEqualTo("credhub-my-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(0).getSource()).isEmpty();
|
||||
}
|
||||
|
||||
@@ -83,11 +85,13 @@ public class CredhubEnvironmentRepositoryTests {
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", null, null);
|
||||
|
||||
assertThat(environment.getLabel()).isEqualTo("master");
|
||||
assertThat(environment.getProfiles()).containsExactly("default");
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getProfiles()).containsExactly("default");
|
||||
assertThat(environment.getLabel()).isEqualTo("master");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(1);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application");
|
||||
.isEqualTo("credhub-my-application-default-master");
|
||||
assertThat(environment.getPropertySources().get(0).getSource())
|
||||
.isEqualTo(singletonMap("key1", "value1"));
|
||||
}
|
||||
@@ -100,11 +104,13 @@ public class CredhubEnvironmentRepositoryTests {
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", "production", "mylabel");
|
||||
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(1);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application");
|
||||
.isEqualTo("credhub-my-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(0).getSource())
|
||||
.isEqualTo(singletonMap("key1", "value1"));
|
||||
}
|
||||
@@ -118,16 +124,20 @@ public class CredhubEnvironmentRepositoryTests {
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", "production,cloud", "mylabel");
|
||||
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
assertThat(environment.getProfiles()).containsExactly("production", "cloud");
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getProfiles()).containsExactly("production", "cloud");
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(2);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application");
|
||||
HashMap<Object, Object> expectedValues = new HashMap<>();
|
||||
expectedValues.put("key1", "value1");
|
||||
expectedValues.put("key2", "value2");
|
||||
.isEqualTo("credhub-my-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(0).getSource())
|
||||
.isEqualTo(expectedValues);
|
||||
.isEqualTo(singletonMap("key1", "value1"));
|
||||
assertThat(environment.getPropertySources().get(1).getName())
|
||||
|
||||
.isEqualTo("credhub-my-application-cloud-mylabel");
|
||||
assertThat(environment.getPropertySources().get(1).getSource())
|
||||
.isEqualTo(singletonMap("key2", "value2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -158,12 +168,13 @@ public class CredhubEnvironmentRepositoryTests {
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", "production", "mylabel");
|
||||
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(1);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application-production-mylabel");
|
||||
HashMap<Object, Object> expectedValues = new HashMap<>();
|
||||
expectedValues.put("key1", "value1");
|
||||
expectedValues.put("key2", "value2");
|
||||
@@ -171,6 +182,64 @@ public class CredhubEnvironmentRepositoryTests {
|
||||
.isEqualTo(expectedValues);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldIncludeDefaultApplicationWhenOtherProvided() {
|
||||
stubCredentials("/my-application/production/mylabel", "toggles", "key1",
|
||||
"value1");
|
||||
stubCredentials("/application/production/mylabel", "abs", "key2", "value2");
|
||||
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", "production", "mylabel");
|
||||
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getProfiles()).containsExactly("production");
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(2);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(0).getSource())
|
||||
.isEqualTo(singletonMap("key1", "value1"));
|
||||
assertThat(environment.getPropertySources().get(1).getName())
|
||||
.isEqualTo("credhub-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(1).getSource())
|
||||
.isEqualTo(singletonMap("key2", "value2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldIncludeDefaultProfileWhenOtherProvided() {
|
||||
stubCredentials("/my-application/production/mylabel", "toggles", "key1",
|
||||
"value1");
|
||||
stubCredentials("/application/production/mylabel", "abs", "key2", "value2");
|
||||
stubCredentials("/my-application/default/mylabel", "abs", "key3", "value3");
|
||||
stubCredentials("/application/default/mylabel", "abs", "key4", "value4");
|
||||
|
||||
Environment environment = this.credhubEnvironmentRepository
|
||||
.findOne("my-application", "production", "mylabel");
|
||||
|
||||
assertThat(environment.getName()).isEqualTo("my-application");
|
||||
assertThat(environment.getProfiles()).contains("production");
|
||||
assertThat(environment.getLabel()).isEqualTo("mylabel");
|
||||
|
||||
assertThat(environment.getPropertySources().size()).isEqualTo(4);
|
||||
assertThat(environment.getPropertySources().get(0).getName())
|
||||
.isEqualTo("credhub-my-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(0).getSource())
|
||||
.isEqualTo(singletonMap("key1", "value1"));
|
||||
assertThat(environment.getPropertySources().get(1).getName())
|
||||
.isEqualTo("credhub-application-production-mylabel");
|
||||
assertThat(environment.getPropertySources().get(1).getSource())
|
||||
.isEqualTo(singletonMap("key2", "value2"));
|
||||
assertThat(environment.getPropertySources().get(2).getName())
|
||||
.isEqualTo("credhub-my-application-default-mylabel");
|
||||
assertThat(environment.getPropertySources().get(2).getSource())
|
||||
.isEqualTo(singletonMap("key3", "value3"));
|
||||
assertThat(environment.getPropertySources().get(3).getName())
|
||||
.isEqualTo("credhub-application-default-mylabel");
|
||||
assertThat(environment.getPropertySources().get(3).getSource())
|
||||
.isEqualTo(singletonMap("key4", "value4"));
|
||||
}
|
||||
|
||||
private void stubCredentials(String expectedPath, String name, String key,
|
||||
String value) {
|
||||
SimpleCredentialName credentialsName = new SimpleCredentialName(
|
||||
|
||||
Reference in New Issue
Block a user