Skip to content

Commit 9d3a9a2

Browse files
secretmanager: added fetch_secret_data to google_secret_manager_secret_version to be able to skip fetching the secret data (#14313) (#23471)
[upstream:fec965e9b4658245a3dcb388e94535c638e91a4a] Signed-off-by: Modular Magician <[email protected]>
1 parent 5542d78 commit 9d3a9a2

File tree

4 files changed

+84
-26
lines changed

4 files changed

+84
-26
lines changed

.changelog/14313.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
secretmanager: added `fetch_secret_data` to `google_secret_manager_secret_version` to be able to skip fetching the secret data
3+
```

google/services/secretmanager/data_source_secret_manager_secret_version.go

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ func DataSourceSecretManagerSecretVersion() *schema.Resource {
7373
Optional: true,
7474
Default: false,
7575
},
76+
"fetch_secret_data": {
77+
Type: schema.TypeBool,
78+
Optional: true,
79+
Default: true,
80+
},
7681
},
7782
}
7883
}
@@ -153,16 +158,32 @@ func dataSourceSecretManagerSecretVersionRead(d *schema.ResourceData, meta inter
153158
return fmt.Errorf("error setting version: %s", err)
154159
}
155160

156-
url = fmt.Sprintf("%s:access", url)
157-
resp, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
158-
Config: config,
159-
Method: "GET",
160-
Project: project,
161-
RawURL: url,
162-
UserAgent: userAgent,
163-
})
164-
if err != nil {
165-
return fmt.Errorf("error retrieving available secret manager secret version access: %s", err.Error())
161+
if d.Get("fetch_secret_data").(bool) {
162+
url = fmt.Sprintf("%s:access", url)
163+
resp, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
164+
Config: config,
165+
Method: "GET",
166+
Project: project,
167+
RawURL: url,
168+
UserAgent: userAgent,
169+
})
170+
if err != nil {
171+
return fmt.Errorf("error retrieving available secret manager secret version access: %s", err.Error())
172+
}
173+
data := resp["payload"].(map[string]interface{})
174+
var secretData string
175+
if d.Get("is_secret_data_base64").(bool) {
176+
secretData = data["data"].(string)
177+
} else {
178+
payloadData, err := base64.StdEncoding.DecodeString(data["data"].(string))
179+
if err != nil {
180+
return fmt.Errorf("error decoding secret manager secret version data: %s", err.Error())
181+
}
182+
secretData = string(payloadData)
183+
}
184+
if err := d.Set("secret_data", secretData); err != nil {
185+
return fmt.Errorf("error setting secret_data: %s", err)
186+
}
166187
}
167188

168189
if err := d.Set("create_time", version["createTime"].(string)); err != nil {
@@ -180,21 +201,6 @@ func dataSourceSecretManagerSecretVersionRead(d *schema.ResourceData, meta inter
180201
return fmt.Errorf("error setting enabled: %s", err)
181202
}
182203

183-
data := resp["payload"].(map[string]interface{})
184-
var secretData string
185-
if d.Get("is_secret_data_base64").(bool) {
186-
secretData = data["data"].(string)
187-
} else {
188-
payloadData, err := base64.StdEncoding.DecodeString(data["data"].(string))
189-
if err != nil {
190-
return fmt.Errorf("error decoding secret manager secret version data: %s", err.Error())
191-
}
192-
secretData = string(payloadData)
193-
}
194-
if err := d.Set("secret_data", secretData); err != nil {
195-
return fmt.Errorf("error setting secret_data: %s", err)
196-
}
197-
198204
d.SetId(nameValue.(string))
199205
return nil
200206
}

google/services/secretmanager/data_source_secret_manager_secret_version_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,27 @@ func TestAccDatasourceSecretManagerSecretVersion_basic(t *testing.T) {
4848
})
4949
}
5050

51+
func TestAccDatasourceSecretManagerSecretVersion_fetchSecretDataFalse(t *testing.T) {
52+
t.Parallel()
53+
54+
randomString := acctest.RandString(t, 10)
55+
56+
acctest.VcrTest(t, resource.TestCase{
57+
PreCheck: func() { acctest.AccTestPreCheck(t) },
58+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
59+
CheckDestroy: testAccCheckSecretManagerSecretVersionDestroyProducer(t),
60+
Steps: []resource.TestStep{
61+
{
62+
Config: testAccDatasourceSecretManagerSecretVersion_fetchSecretDataFalse(randomString),
63+
Check: resource.ComposeTestCheckFunc(
64+
testAccCheckDatasourceSecretManagerSecretVersion("data.google_secret_manager_secret_version.basic", "1"),
65+
resource.TestCheckNoResourceAttr("data.google_secret_manager_secret_version.basic", "secret_data"),
66+
),
67+
},
68+
},
69+
})
70+
}
71+
5172
func TestAccDatasourceSecretManagerSecretVersion_latest(t *testing.T) {
5273
t.Parallel()
5374

@@ -205,6 +226,31 @@ data "google_secret_manager_secret_version" "basic" {
205226
`, randomString, randomString)
206227
}
207228

229+
func testAccDatasourceSecretManagerSecretVersion_fetchSecretDataFalse(randomString string) string {
230+
return fmt.Sprintf(`
231+
resource "google_secret_manager_secret" "secret-basic" {
232+
secret_id = "tf-test-secret-version-%s"
233+
labels = {
234+
label = "my-label"
235+
}
236+
replication {
237+
auto {}
238+
}
239+
}
240+
241+
resource "google_secret_manager_secret_version" "secret-version-basic" {
242+
secret = google_secret_manager_secret.secret-basic.name
243+
secret_data = "my-tf-test-secret-%s"
244+
}
245+
246+
data "google_secret_manager_secret_version" "basic" {
247+
secret = google_secret_manager_secret_version.secret-version-basic.secret
248+
version = 1
249+
fetch_secret_data = false
250+
}
251+
`, randomString, randomString)
252+
}
253+
208254
func testAccDatasourceSecretManagerSecretVersion_withBase64SecretData(randomString, data string) string {
209255
return fmt.Sprintf(`
210256
resource "google_secret_manager_secret" "secret-basic-base64" {

website/docs/d/secret_manager_secret_version.html.markdown

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@ The following arguments are supported:
4242
* `version` - (Optional) The version of the secret to get. If it
4343
is not provided, the latest version is retrieved.
4444

45-
* `is_secret_data_base64` - (Optional) If set to 'true', the secret data is
45+
* `is_secret_data_base64` - (Optional) If set to `true`, the secret data is
4646
expected to be base64-encoded string.
4747

48+
* `fetch_secret_data` - (Optional) If set to `false`, the `secret_data`
49+
will not be fetched. Default is `true`.
50+
4851
## Attributes Reference
4952

5053
The following attributes are exported:

0 commit comments

Comments
 (0)