diff --git a/docs/modules/ROOT/pages/server/environment-repository/credhub-backend.adoc b/docs/modules/ROOT/pages/server/environment-repository/credhub-backend.adoc index 5365fa74..f39a5df3 100644 --- a/docs/modules/ROOT/pages/server/environment-repository/credhub-backend.adoc +++ b/docs/modules/ROOT/pages/server/environment-repository/credhub-backend.adoc @@ -52,7 +52,10 @@ 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: When no label is specified `master` will be used as a default value. You can change that by setting `spring.cloud.config.server.credhub.defaultLabel`. + +NOTE: When no profile is specified `default` will be used. + NOTE: Values added to `application` will be shared by all the applications. [[oauth-2-0]] diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentProperties.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentProperties.java index 9747a87b..042cf3e0 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentProperties.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentProperties.java @@ -26,8 +26,18 @@ import org.springframework.core.Ordered; @ConfigurationProperties("spring.cloud.config.server.credhub") public class CredhubEnvironmentProperties implements EnvironmentRepositoryProperties { + private String defaultLabel = "master"; + private int order = Ordered.LOWEST_PRECEDENCE; + public void setDefaultLabel(String defaultLabel) { + this.defaultLabel = defaultLabel; + } + + public String getDefaultLabel() { + return defaultLabel; + } + public int getOrder() { return this.order; } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepository.java index efed30cf..1e847736 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepository.java @@ -43,16 +43,23 @@ public class CredhubEnvironmentRepository implements EnvironmentRepository, Orde private static final String DEFAULT_PROFILE = "default"; - private static final String DEFAULT_LABEL = "master"; - private static final String DEFAULT_APPLICATION = "application"; - private int order = Ordered.LOWEST_PRECEDENCE; + private final String defaultLabel; + + private int order; private final CredHubOperations credHubOperations; public CredhubEnvironmentRepository(CredHubOperations credHubOperations) { + this(credHubOperations, new CredhubEnvironmentProperties()); + } + + public CredhubEnvironmentRepository(CredHubOperations credHubOperations, CredhubEnvironmentProperties properties) { this.credHubOperations = credHubOperations; + + this.order = properties.getOrder(); + this.defaultLabel = properties.getDefaultLabel(); } @Override @@ -61,7 +68,7 @@ public class CredhubEnvironmentRepository implements EnvironmentRepository, Orde profile = DEFAULT_PROFILE; } if (ObjectUtils.isEmpty(label)) { - label = DEFAULT_LABEL; + label = this.defaultLabel; } List applications = normalize(application, DEFAULT_APPLICATION); diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryFactory.java index 41e3e1d0..c0ed335c 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryFactory.java @@ -25,7 +25,7 @@ import org.springframework.credhub.core.CredHubOperations; public class CredhubEnvironmentRepositoryFactory implements EnvironmentRepositoryFactory { - private CredHubOperations credhubOperations; + private final CredHubOperations credhubOperations; public CredhubEnvironmentRepositoryFactory(CredHubOperations credhubOperations) { this.credhubOperations = credhubOperations; @@ -33,9 +33,7 @@ public class CredhubEnvironmentRepositoryFactory @Override public CredhubEnvironmentRepository build(CredhubEnvironmentProperties environmentProperties) { - CredhubEnvironmentRepository repository = new CredhubEnvironmentRepository(this.credhubOperations); - repository.setOrder(environmentProperties.getOrder()); - return repository; + return new CredhubEnvironmentRepository(this.credhubOperations, environmentProperties); } } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryTests.java index 10a1df4c..937f36b6 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CredhubEnvironmentRepositoryTests.java @@ -47,8 +47,8 @@ public class CredhubEnvironmentRepositoryTests { @BeforeEach public void setUp() { - CredHubOperations credhubOperations = Mockito.mock(CredHubOperations.class); this.credhubCredentialOperations = Mockito.mock(CredHubCredentialOperations.class); + CredHubOperations credhubOperations = Mockito.mock(CredHubOperations.class); when(credhubOperations.credentials()).thenReturn(this.credhubCredentialOperations); this.credhubEnvironmentRepository = new CredhubEnvironmentRepository(credhubOperations); @@ -258,6 +258,29 @@ public class CredhubEnvironmentRepositoryTests { assertThat(environment.getPropertySources().get(3).getSource()).isEqualTo(Map.of("k4", "v4")); } + @Test + public void shouldUseCustomDefaultLabelIfProvided() { + stubCredentials("/myApp/default/master", credential("c1", "k1", "v1")); + stubCredentials("/myApp/default/main", credential("c2", "k2", "v2")); + + var credhubOperations = Mockito.mock(CredHubOperations.class); + when(credhubOperations.credentials()).thenReturn(this.credhubCredentialOperations); + + var properties = new CredhubEnvironmentProperties(); + properties.setDefaultLabel("main"); + + var environment = new CredhubEnvironmentRepository(credhubOperations, properties).findOne("myApp", null, null); + + assertThat(environment.getName()).isEqualTo("myApp"); + assertThat(environment.getProfiles()).containsExactly("default"); + assertThat(environment.getLabel()).isEqualTo("main"); + + assertThat(environment.getPropertySources()).hasSize(1); + + assertThat(environment.getPropertySources().get(0).getName()).isEqualTo("credhub-myApp-default-main"); + assertThat(environment.getPropertySources().get(0).getSource()).isEqualTo(Map.of("k2", "v2")); + } + @SafeVarargs private void stubCredentials(String path, CredentialDetails... details) { when(this.credhubCredentialOperations.findByPath(path)).thenReturn(