Skip to content

Commit 377551d

Browse files
authored
revert: "feat: added regional secret support for secret-manager (#3365)" (#3734)
This reverts commit 42dcccb.
1 parent 42dcccb commit 377551d

25 files changed

+166
-1799
lines changed

docs/src/main/asciidoc/secretmanager.adoc

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,12 @@ This allows you to specify and load secrets from Google Cloud Secret Manager as
5656

5757
The Secret Manager config data resource uses the following syntax to specify secrets:
5858

59-
== Global Secrets
60-
The following formats apply to **global secrets**, where secrets are stored without specifying a region.
61-
6259
[source]
6360
----
6461
# 1. Long form - specify the project ID, secret ID, and version
6562
sm@projects/<project-id>/secrets/<secret-id>/versions/<version-id>}
6663
67-
# 2. Long form - specify project ID, secret ID, and use latest version
64+
# 2. Long form - specify project ID, secret ID, and use latest version
6865
sm@projects/<project-id>/secrets/<secret-id>
6966
7067
# 3. Short form - specify project ID, secret ID, and version
@@ -81,28 +78,6 @@ sm@<secret-id>/<version>
8178
sm@<secret-id>
8279
----
8380

84-
== Regional Secrets
85-
The following formats apply to **regional secrets**, where secrets are stored in a specific Google Cloud region.
86-
For more details, see https://cloud.google.com/secret-manager/regional-secrets/data-residency[Google Cloud Regional Secrets].
87-
88-
[source]
89-
----
90-
# 6. Long form - specify project ID, location ID, secret ID, and version
91-
sm@projects/<project-id>/locations/<location-id>/secrets/<secret-id>/versions/<version-id>
92-
93-
# 7. Long form - specify project ID, location ID, secret ID, and use latest version
94-
sm@projects/<project-id>/locations/<location-id>/secrets/<secret-id>
95-
96-
# 8. Short form - specify project ID, location ID, secret ID, and version
97-
sm@<project-id>/<location-id>/<secret-id>/<version-id>
98-
99-
# 9. Short form - specify location ID, secret ID, version and use default project
100-
sm@locations/<location-id>/<secret-id>/<version>
101-
102-
# 10. Shortest form - specify location ID, secret ID, and use default project and latest version
103-
sm@locations/<location-id>/<secret-id>
104-
----
105-
10681
You can use this syntax in the following places:
10782

10883
1. In your `application.properties` file:

spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/DefaultSecretManagerServiceClientFactory.java

Lines changed: 0 additions & 72 deletions
This file was deleted.

spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222
import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration;
2323
import com.google.cloud.spring.core.GcpProjectIdProvider;
2424
import com.google.cloud.spring.core.UserAgentHeaderProvider;
25-
import com.google.cloud.spring.secretmanager.SecretManagerServiceClientFactory;
2625
import com.google.cloud.spring.secretmanager.SecretManagerTemplate;
2726
import java.io.IOException;
28-
import org.springframework.beans.factory.ObjectProvider;
2927
import org.springframework.boot.autoconfigure.AutoConfiguration;
3028
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
3129
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -34,7 +32,6 @@
3432
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3533
import org.springframework.context.annotation.Bean;
3634

37-
3835
/**
3936
* Autoconfiguration for GCP Secret Manager.
4037
*
@@ -66,36 +63,22 @@ public GcpSecretManagerAutoConfiguration(
6663

6764
@Bean
6865
@ConditionalOnMissingBean
69-
public SecretManagerServiceClient secretManagerClient() throws IOException {
66+
public SecretManagerServiceClient secretManagerClient()
67+
throws IOException {
7068
SecretManagerServiceSettings settings =
7169
SecretManagerServiceSettings.newBuilder()
7270
.setCredentialsProvider(this.credentialsProvider)
73-
.setHeaderProvider(new UserAgentHeaderProvider(GcpSecretManagerAutoConfiguration.class))
71+
.setHeaderProvider(
72+
new UserAgentHeaderProvider(GcpSecretManagerAutoConfiguration.class))
7473
.build();
75-
return SecretManagerServiceClient.create(settings);
76-
}
7774

78-
@Bean
79-
@ConditionalOnMissingBean
80-
public SecretManagerServiceClientFactory clientFactory(SecretManagerServiceClient client) {
81-
return new DefaultSecretManagerServiceClientFactory(this.credentialsProvider, client);
75+
return SecretManagerServiceClient.create(settings);
8276
}
8377

84-
8578
@Bean
8679
@ConditionalOnMissingBean
87-
public SecretManagerTemplate secretManagerTemplate(
88-
SecretManagerServiceClient client, ObjectProvider<SecretManagerServiceClientFactory> clientFactoryProvider) {
89-
90-
SecretManagerServiceClientFactory clientFactory = clientFactoryProvider.getIfAvailable();
91-
92-
if (clientFactory != null) {
93-
return new SecretManagerTemplate(clientFactory, this.gcpProjectIdProvider)
94-
.setAllowDefaultSecretValue(this.properties.isAllowDefaultSecret());
95-
} else {
96-
return new SecretManagerTemplate(client, this.gcpProjectIdProvider)
97-
.setAllowDefaultSecretValue(this.properties.isAllowDefaultSecret());
98-
}
80+
public SecretManagerTemplate secretManagerTemplate(SecretManagerServiceClient client) {
81+
return new SecretManagerTemplate(client, this.gcpProjectIdProvider)
82+
.setAllowDefaultSecretValue(this.properties.isAllowDefaultSecret());
9983
}
100-
10184
}

spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLoader.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ public ConfigData load(
4040
GcpProjectIdProvider projectIdProvider = context.getBootstrapContext()
4141
.get(GcpProjectIdProvider.class);
4242

43-
SecretManagerPropertySource secretManagerPropertySource = new SecretManagerPropertySource(
44-
"spring-cloud-gcp-secret-manager", secretManagerTemplate, projectIdProvider);
45-
return new ConfigData(Collections.singleton(secretManagerPropertySource));
43+
return new ConfigData(Collections.singleton(new SecretManagerPropertySource(
44+
"spring-cloud-gcp-secret-manager", secretManagerTemplate, projectIdProvider)));
4645
}
4746
}

spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java

Lines changed: 4 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@
1919
import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtils.getMatchedPrefixes;
2020
import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtils.warnIfUsingDeprecatedSyntax;
2121

22-
import com.google.api.gax.core.CredentialsProvider;
2322
import com.google.cloud.secretmanager.v1.SecretManagerServiceClient;
2423
import com.google.cloud.secretmanager.v1.SecretManagerServiceSettings;
2524
import com.google.cloud.spring.autoconfigure.core.GcpProperties;
2625
import com.google.cloud.spring.core.DefaultCredentialsProvider;
2726
import com.google.cloud.spring.core.DefaultGcpProjectIdProvider;
2827
import com.google.cloud.spring.core.GcpProjectIdProvider;
2928
import com.google.cloud.spring.core.UserAgentHeaderProvider;
30-
import com.google.cloud.spring.secretmanager.SecretManagerServiceClientFactory;
3129
import com.google.cloud.spring.secretmanager.SecretManagerTemplate;
3230
import java.io.IOException;
3331
import java.util.Collections;
@@ -54,10 +52,6 @@ public class SecretManagerConfigDataLocationResolver implements
5452
* A static client to avoid creating another client after refreshing.
5553
*/
5654
private static SecretManagerServiceClient secretManagerServiceClient;
57-
/**
58-
* A static client factory to avoid creating another client after refreshing.
59-
*/
60-
private static SecretManagerServiceClientFactory secretManagerServiceClientFactory;
6155

6256
/**
6357
* Checks if the property can be resolved by the Secret Manager resolver.
@@ -110,15 +104,8 @@ private static void registerSecretManagerBeans(ConfigDataLocationResolverContext
110104
// Register the Core properties.
111105
registerBean(context, GcpProperties.class, getGcpProperties(context));
112106
// Register the Secret Manager properties.
113-
registerBean(context, GcpSecretManagerProperties.class, getSecretManagerProperties(context));
114-
// Register the CredentialsProvider.
115-
registerBean(context, CredentialsProvider.class, getCredentialsProvider(context));
116-
// Register the Secret Manager client factory.
117-
registerAndPromoteBean(
118-
context,
119-
SecretManagerServiceClientFactory.class,
120-
BootstrapRegistry.InstanceSupplier.from(
121-
() -> createSecretManagerServiceClientFactory(context)));
107+
registerBean(
108+
context, GcpSecretManagerProperties.class, getSecretManagerProperties(context));
122109
// Register the Secret Manager client.
123110
registerAndPromoteBean(
124111
context,
@@ -148,20 +135,6 @@ private static GcpSecretManagerProperties getSecretManagerProperties(
148135
.orElse(new GcpSecretManagerProperties());
149136
}
150137

151-
private static CredentialsProvider getCredentialsProvider(
152-
ConfigDataLocationResolverContext context) {
153-
try {
154-
GcpSecretManagerProperties properties =
155-
context.getBootstrapContext().get(GcpSecretManagerProperties.class);
156-
return context.getBinder()
157-
.bind(GcpSecretManagerProperties.PREFIX, CredentialsProvider.class)
158-
.orElse(new DefaultCredentialsProvider(properties));
159-
} catch (IOException e) {
160-
throw new RuntimeException(
161-
"Failed to create the Secret Manager Client Factory for ConfigData loading.", e);
162-
}
163-
}
164-
165138
@VisibleForTesting
166139
static GcpProjectIdProvider createProjectIdProvider(ConfigDataLocationResolverContext context) {
167140
ConfigurableBootstrapContext bootstrapContext = context.getBootstrapContext();
@@ -203,36 +176,17 @@ static synchronized SecretManagerServiceClient createSecretManagerClient(
203176
}
204177
}
205178

206-
@VisibleForTesting
207-
static synchronized SecretManagerServiceClientFactory createSecretManagerServiceClientFactory(
208-
ConfigDataLocationResolverContext context) {
209-
if (secretManagerServiceClientFactory != null) {
210-
return secretManagerServiceClientFactory;
211-
}
212-
SecretManagerServiceClient client = context.getBootstrapContext()
213-
.get(SecretManagerServiceClient.class);
214-
return new DefaultSecretManagerServiceClientFactory(
215-
context.getBootstrapContext().get(CredentialsProvider.class), client);
216-
}
217-
218179
private static SecretManagerTemplate createSecretManagerTemplate(
219180
ConfigDataLocationResolverContext context) {
220181
SecretManagerServiceClient client = context.getBootstrapContext()
221182
.get(SecretManagerServiceClient.class);
222-
SecretManagerServiceClientFactory clientFactory = context.getBootstrapContext()
223-
.get(SecretManagerServiceClientFactory.class);
224183
GcpProjectIdProvider projectIdProvider = context.getBootstrapContext()
225184
.get(GcpProjectIdProvider.class);
226185
GcpSecretManagerProperties properties = context.getBootstrapContext()
227186
.get(GcpSecretManagerProperties.class);
228187

229-
if (clientFactory != null) {
230-
return new SecretManagerTemplate(clientFactory, projectIdProvider)
231-
.setAllowDefaultSecretValue(properties.isAllowDefaultSecret());
232-
} else {
233-
return new SecretManagerTemplate(client, projectIdProvider)
234-
.setAllowDefaultSecretValue(properties.isAllowDefaultSecret());
235-
}
188+
return new SecretManagerTemplate(client, projectIdProvider)
189+
.setAllowDefaultSecretValue(properties.isAllowDefaultSecret());
236190
}
237191

238192
/**
@@ -269,10 +223,4 @@ private static <T> void registerAndPromoteBean(
269223
static void setSecretManagerServiceClient(SecretManagerServiceClient client) {
270224
secretManagerServiceClient = client;
271225
}
272-
273-
@VisibleForTesting
274-
static void setSecretManagerServiceClientFactory(
275-
SecretManagerServiceClientFactory clientFactory) {
276-
secretManagerServiceClientFactory = clientFactory;
277-
}
278226
}

spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfigurationUnitTests.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
package com.google.cloud.spring.autoconfigure.secretmanager;
1818

1919
import static org.assertj.core.api.Assertions.assertThat;
20+
import static org.mockito.Mockito.mock;
2021

2122
import com.google.api.gax.core.CredentialsProvider;
23+
import com.google.auth.Credentials;
2224
import com.google.cloud.secretmanager.v1.SecretManagerServiceClient;
2325
import com.google.cloud.spring.autoconfigure.TestUtils;
2426
import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration;
25-
import com.google.cloud.spring.secretmanager.SecretManagerServiceClientFactory;
2627
import com.google.cloud.spring.secretmanager.SecretManagerTemplate;
2728
import org.junit.jupiter.api.BeforeEach;
2829
import org.junit.jupiter.api.Test;
@@ -66,13 +67,6 @@ void testSecretManagerServiceClientExists() {
6667
.isNotNull());
6768
}
6869

69-
@Test
70-
void testSecretManagerServiceClientFactoryExists() {
71-
contextRunner.run(
72-
ctx -> assertThat(ctx.getBean(SecretManagerServiceClientFactory.class))
73-
.isNotNull());
74-
}
75-
7670
@Test
7771
void testSecretManagerTemplateExists() {
7872
contextRunner.run(

spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLoaderUnitTests.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
import static org.mockito.Mockito.mock;
66
import static org.mockito.Mockito.when;
77

8-
import com.google.api.gax.core.CredentialsProvider;
98
import com.google.cloud.spring.core.GcpProjectIdProvider;
109
import com.google.cloud.spring.secretmanager.SecretManagerTemplate;
11-
import org.junit.jupiter.params.ParameterizedTest;
12-
import org.junit.jupiter.params.provider.CsvSource;
10+
import org.junit.jupiter.api.Test;
1311
import org.springframework.boot.ConfigurableBootstrapContext;
1412
import org.springframework.boot.context.config.ConfigDataLoaderContext;
1513
import org.springframework.boot.context.config.ConfigDataLocation;
@@ -23,23 +21,15 @@ class SecretManagerConfigDataLoaderUnitTests {
2321
private final ConfigDataLoaderContext loaderContext = mock(ConfigDataLoaderContext.class);
2422
private final GcpProjectIdProvider idProvider = mock(GcpProjectIdProvider.class);
2523
private final SecretManagerTemplate template = mock(SecretManagerTemplate.class);
26-
private final GcpSecretManagerProperties properties = mock(GcpSecretManagerProperties.class);
27-
private final CredentialsProvider credentialsProvider = mock(CredentialsProvider.class);
2824
private final ConfigurableBootstrapContext bootstrapContext = mock(
2925
ConfigurableBootstrapContext.class);
3026
private final SecretManagerConfigDataLoader loader = new SecretManagerConfigDataLoader();
3127

32-
@ParameterizedTest
33-
@CsvSource({
34-
"regional-fake, us-central1",
35-
"fake, "
36-
})
37-
void loadIncorrectResourceThrowsException(String resourceName, String location) {
28+
@Test
29+
void loadIncorrectResourceThrowsException() {
3830
when(loaderContext.getBootstrapContext()).thenReturn(bootstrapContext);
3931
when(bootstrapContext.get(GcpProjectIdProvider.class)).thenReturn(idProvider);
4032
when(bootstrapContext.get(SecretManagerTemplate.class)).thenReturn(template);
41-
when(bootstrapContext.get(GcpSecretManagerProperties.class)).thenReturn(properties);
42-
when(bootstrapContext.get(CredentialsProvider.class)).thenReturn(credentialsProvider);
4333
when(template.secretExists(anyString(), anyString())).thenReturn(false);
4434
SecretManagerConfigDataResource resource = new SecretManagerConfigDataResource(
4535
ConfigDataLocation.of("fake"));

0 commit comments

Comments
 (0)