Skip to content

Commit d005a6c

Browse files
abheda-crestanoopkverma-google
authored andcommitted
Add support for parameter manager parameter version resource google_parameter_manager_parameter_version (GoogleCloudPlatform#12641)
1 parent fef5b18 commit d005a6c

11 files changed

+284
-14
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Copyright 2024 Google Inc.
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
#
6+
# http://www.apache.org/licenses/LICENSE-2.0
7+
#
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
14+
---
15+
name: 'ParameterVersion'
16+
description: |
17+
A Parameter Version resource that stores the actual value of the parameter.
18+
min_version: 'beta'
19+
references:
20+
guides:
21+
api: 'https://cloud.google.com/secret-manager/parameter-manager/docs/reference/rest/v1/projects.locations.parameters.versions'
22+
docs:
23+
base_url: '{{parameter}}/versions'
24+
self_link: '{{parameter}}/versions/{{parameter_version_id}}'
25+
create_url: '{{parameter}}/versions?parameter_version_id={{parameter_version_id}}'
26+
update_verb: 'PATCH'
27+
update_mask: true
28+
import_format:
29+
- 'projects/{{%project}}/locations/global/parameters/{{%parameter_id}}/versions/{{%parameter_version_id}}'
30+
timeouts:
31+
insert_minutes: 20
32+
update_minutes: 20
33+
delete_minutes: 20
34+
examples:
35+
- name: 'parameter_version_basic'
36+
primary_resource_id: 'parameter-version-basic'
37+
min_version: 'beta'
38+
vars:
39+
parameter_id: 'parameter'
40+
parameter_version_id: 'parameter_version'
41+
- name: 'parameter_version_with_json_format'
42+
primary_resource_id: 'parameter-version-with-json-format'
43+
min_version: 'beta'
44+
vars:
45+
parameter_id: 'parameter'
46+
parameter_version_id: 'parameter_version'
47+
- name: 'parameter_version_with_yaml_format'
48+
primary_resource_id: 'parameter-version-with-yaml-format'
49+
min_version: 'beta'
50+
vars:
51+
parameter_id: 'parameter'
52+
parameter_version_id: 'parameter_version'
53+
custom_code:
54+
custom_import: 'templates/terraform/custom_import/parameter_manager_parameter_version.go.tmpl'
55+
parameters:
56+
- name: 'parameter'
57+
type: ResourceRef
58+
description: |
59+
Parameter Manager Parameter resource.
60+
url_param_only: true
61+
required: true
62+
immutable: true
63+
resource: 'Parameter'
64+
imports: 'name'
65+
- name: 'parameter_version_id'
66+
type: String
67+
description: |
68+
Version ID of the Parameter Version Resource. This must be unique within the Parameter.
69+
url_param_only: true
70+
required: true
71+
immutable: true
72+
properties:
73+
- name: 'name'
74+
type: String
75+
description: |
76+
The resource name of the Parameter Version. Format:
77+
`projects/{{project}}/locations/global/parameters/{{parameter_id}}/versions/{{parameter_version_id}}`
78+
output: true
79+
- name: 'createTime'
80+
type: String
81+
description: |
82+
The time at which the Parameter Version was created.
83+
output: true
84+
- name: 'updateTime'
85+
type: String
86+
description: |
87+
The time at which the Parameter Version was updated.
88+
output: true
89+
- name: 'disabled'
90+
type: Boolean
91+
description: |
92+
The current state of Parameter Version. This field is only applicable for updating Parameter Version.
93+
- name: 'payload'
94+
type: NestedObject
95+
description: |
96+
The payload content of a ParameterVersion resource.
97+
flatten_object: true
98+
required: true
99+
immutable: true
100+
custom_flatten: 'templates/terraform/custom_flatten/parameter_version_parameter_data.go.tmpl'
101+
properties:
102+
- name: 'parameter_data'
103+
type: String
104+
description: |
105+
The Parameter data.
106+
api_name: data
107+
required: true
108+
immutable: true
109+
sensitive: true
110+
custom_expand: 'templates/terraform/custom_expand/base64.go.tmpl'

mmv1/products/parametermanagerregional/RegionalParameterVersion.yaml

-6
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,12 @@ examples:
4545
vars:
4646
parameter_id: 'regional_parameter'
4747
parameter_version_id: 'regional_parameter_version'
48-
data: 'parameter_data_json_format.yaml'
49-
test_vars_overrides:
50-
'data': '"./test-fixtures/parameter_data_json_format.json"'
5148
- name: 'regional_parameter_version_with_yaml_format'
5249
primary_resource_id: 'regional-parameter-version-with-yaml-format'
5350
min_version: 'beta'
5451
vars:
5552
parameter_id: 'regional_parameter'
5653
parameter_version_id: 'regional_parameter_version'
57-
data: 'parameter_data_yaml_format.yaml'
58-
test_vars_overrides:
59-
'data': '"./test-fixtures/parameter_data_yaml_format.yaml"'
6054
custom_code:
6155
pre_create: 'templates/terraform/pre_create/parameter_manager_regional_parameter_version.go.tmpl'
6256
custom_import: 'templates/terraform/custom_import/parameter_manager_regional_parameter_version.go.tmpl'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{{/*
2+
The license inside this block applies to this file
3+
Copyright 2024 Google Inc.
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
7+
Unless required by applicable law or agreed to in writing, software
8+
distributed under the License is distributed on an "AS IS" BASIS,
9+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
See the License for the specific language governing permissions and
11+
limitations under the License.
12+
*/ -}}
13+
config := meta.(*transport_tpg.Config)
14+
15+
// current import_formats can't import fields with forward slashes in their value
16+
if err := tpgresource.ParseImportId([]string{"(?P<name>.+)"}, d, config); err != nil {
17+
return nil, err
18+
}
19+
20+
name := d.Get("name").(string)
21+
parameterRegex := regexp.MustCompile("(projects/.+/locations/global/parameters/.+)/versions/.+$")
22+
versionRegex := regexp.MustCompile("projects/(.+)/locations/global/parameters/(.+)/versions/(.+)$")
23+
24+
parts := parameterRegex.FindStringSubmatch(name)
25+
if len(parts) != 2 {
26+
return nil, fmt.Errorf("Version name does not fit the format `projects/{{"{{"}}project{{"}}"}}/locations/global/parameters/{{"{{"}}parameter_id{{"}}"}}/versions/{{"{{"}}parameter_version_id{{"}}"}}`")
27+
}
28+
if err := d.Set("parameter", parts[1]); err != nil {
29+
return nil, fmt.Errorf("Error setting parameter: %s", err)
30+
}
31+
32+
parts = versionRegex.FindStringSubmatch(name)
33+
34+
if err := d.Set("parameter_version_id", parts[3]); err != nil {
35+
return nil, fmt.Errorf("Error setting parameter_version_id: %s", err)
36+
}
37+
38+
return []*schema.ResourceData{d}, nil
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
resource "google_parameter_manager_parameter" "parameter-basic" {
2+
provider = google-beta
3+
parameter_id = "{{index $.Vars "parameter_id"}}"
4+
}
5+
6+
resource "google_parameter_manager_parameter_version" "{{$.PrimaryResourceId}}" {
7+
provider = google-beta
8+
parameter = google_parameter_manager_parameter.parameter-basic.id
9+
parameter_version_id = "{{index $.Vars "parameter_version_id"}}"
10+
parameter_data = "app-parameter-version-data"
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
resource "google_parameter_manager_parameter" "parameter-basic" {
2+
provider = google-beta
3+
parameter_id = "{{index $.Vars "parameter_id"}}"
4+
format = "JSON"
5+
}
6+
7+
resource "google_parameter_manager_parameter_version" "{{$.PrimaryResourceId}}" {
8+
provider = google-beta
9+
parameter = google_parameter_manager_parameter.parameter-basic.id
10+
parameter_version_id = "{{index $.Vars "parameter_version_id"}}"
11+
parameter_data = jsonencode({
12+
"key1": "val1",
13+
"key2": "val2"
14+
})
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
resource "google_parameter_manager_parameter" "parameter-basic" {
2+
provider = google-beta
3+
parameter_id = "{{index $.Vars "parameter_id"}}"
4+
format = "YAML"
5+
}
6+
7+
resource "google_parameter_manager_parameter_version" "{{$.PrimaryResourceId}}" {
8+
provider = google-beta
9+
parameter = google_parameter_manager_parameter.parameter-basic.id
10+
parameter_version_id = "{{index $.Vars "parameter_version_id"}}"
11+
parameter_data = yamlencode({
12+
"key1": "val1",
13+
"key2": "val2"
14+
})
15+
}

mmv1/templates/terraform/examples/regional_parameter_version_with_json_format.tf.tmpl

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ resource "google_parameter_manager_regional_parameter_version" "{{$.PrimaryResou
99
provider = google-beta
1010
parameter = google_parameter_manager_regional_parameter.regional-parameter-basic.id
1111
parameter_version_id = "{{index $.Vars "parameter_version_id"}}"
12-
parameter_data = file("{{index $.Vars "data"}}")
12+
parameter_data = jsonencode({
13+
"key1": "val1",
14+
"key2": "val2"
15+
})
1316
}

mmv1/templates/terraform/examples/regional_parameter_version_with_yaml_format.tf.tmpl

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ resource "google_parameter_manager_regional_parameter_version" "{{$.PrimaryResou
99
provider = google-beta
1010
parameter = google_parameter_manager_regional_parameter.regional-parameter-basic.id
1111
parameter_version_id = "{{index $.Vars "parameter_version_id"}}"
12-
parameter_data = file("{{index $.Vars "data"}}")
12+
parameter_data = yamlencode({
13+
"key1": "val1",
14+
"key2": "val2"
15+
})
1316
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package parametermanager_test
2+
{{- if ne $.TargetVersionName "ga" }}
3+
4+
import (
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
8+
"github.com/hashicorp/terraform-provider-google/google/acctest"
9+
)
10+
11+
func TestAccParameterManagerParameterVersion_update(t *testing.T) {
12+
t.Parallel()
13+
14+
context := map[string]interface{}{
15+
"random_suffix": acctest.RandString(t, 10),
16+
}
17+
18+
acctest.VcrTest(t, resource.TestCase{
19+
PreCheck: func() { acctest.AccTestPreCheck(t) },
20+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
21+
CheckDestroy: testAccCheckParameterManagerParameterVersionDestroyProducer(t),
22+
Steps: []resource.TestStep{
23+
{
24+
Config: testAccParameterManagerParameterVersion_basic(context),
25+
},
26+
{
27+
ResourceName: "google_parameter_manager_parameter_version.parameter-version-update",
28+
ImportState: true,
29+
ImportStateVerify: true,
30+
ImportStateVerifyIgnore: []string{"parameter", "parameter_version_id"},
31+
},
32+
{
33+
Config: testAccParameterManagerParameterVersion_update(context),
34+
},
35+
{
36+
ResourceName: "google_parameter_manager_parameter_version.parameter-version-update",
37+
ImportState: true,
38+
ImportStateVerify: true,
39+
ImportStateVerifyIgnore: []string{"parameter", "parameter_version_id"},
40+
},
41+
{
42+
Config: testAccParameterManagerParameterVersion_basic(context),
43+
},
44+
{
45+
ResourceName: "google_parameter_manager_parameter_version.parameter-version-update",
46+
ImportState: true,
47+
ImportStateVerify: true,
48+
ImportStateVerifyIgnore: []string{"parameter", "parameter_version_id"},
49+
},
50+
},
51+
})
52+
}
53+
54+
func testAccParameterManagerParameterVersion_basic(context map[string]interface{}) string {
55+
return acctest.Nprintf(`
56+
resource "google_parameter_manager_parameter" "parameter-update" {
57+
provider = google-beta
58+
parameter_id = "tf_test_parameter%{random_suffix}"
59+
}
60+
61+
resource "google_parameter_manager_parameter_version" "parameter-version-update" {
62+
provider = google-beta
63+
parameter = google_parameter_manager_parameter.parameter-update.id
64+
parameter_version_id = "tf_test_parameter_version%{random_suffix}"
65+
parameter_data = "parameter-version-data"
66+
}
67+
`, context)
68+
}
69+
70+
func testAccParameterManagerParameterVersion_update(context map[string]interface{}) string {
71+
return acctest.Nprintf(`
72+
resource "google_parameter_manager_parameter" "parameter-update" {
73+
provider = google-beta
74+
parameter_id = "tf_test_parameter%{random_suffix}"
75+
}
76+
77+
resource "google_parameter_manager_parameter_version" "parameter-version-update" {
78+
provider = google-beta
79+
parameter = google_parameter_manager_parameter.parameter-update.id
80+
parameter_version_id = "tf_test_parameter_version%{random_suffix}"
81+
parameter_data = "parameter-version-data"
82+
disabled = true
83+
}
84+
`, context)
85+
}
86+
87+
{{ end }}

mmv1/third_party/terraform/services/parametermanagerregional/test-fixtures/parameter_data_json_format.json

-4
This file was deleted.

mmv1/third_party/terraform/services/parametermanagerregional/test-fixtures/parameter_data_yaml_format.yaml

-2
This file was deleted.

0 commit comments

Comments
 (0)