Skip to content

Commit 8f98dcf

Browse files
Added kms_key and kms_key_version field to regional parameter manager resource and datasource (#13410)
[upstream:c40f16eb7804e13e7235a9aefae43454ca163b9d] Signed-off-by: Modular Magician <[email protected]>
1 parent f4327cc commit 8f98dcf

15 files changed

+392
-1
lines changed

.changelog/13410.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
```release-note:enhancement
2+
parametermanagerregional: added `kms_key` field to `google_parameter_manager_regional_parameter` resource and `google_parameter_manager_regional_parameters` datasource
3+
```
4+
```release-note:enhancement
5+
parametermanagerregional: added `kms_key_version` field to `google_parameter_manager_regional_parameter_version` resource and datasource
6+
```

google-beta/services/parametermanagerregional/data_source_parameter_manager_regional_parameter_version.go

+10
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ func DataSourceParameterManagerRegionalRegionalParameterVersion() *schema.Resour
5353
Type: schema.TypeBool,
5454
Computed: true,
5555
},
56+
"kms_key_version": {
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
5660
"location": {
5761
Type: schema.TypeString,
5862
Optional: true,
@@ -152,6 +156,12 @@ func dataSourceParameterManagerRegionalRegionalParameterVersionRead(d *schema.Re
152156
return fmt.Errorf("error reading regional parameterVersion: %s", err)
153157
}
154158

159+
if parameterVersion["kmsKeyVersion"] != nil {
160+
if err := d.Set("kms_key_version", parameterVersion["kmsKeyVersion"].(string)); err != nil {
161+
return fmt.Errorf("error setting kms_key_version: %s", err)
162+
}
163+
}
164+
155165
if err := d.Set("disabled", false); err != nil {
156166
return fmt.Errorf("error setting disabled: %s", err)
157167
}

google-beta/services/parametermanagerregional/data_source_parameter_manager_regional_parameter_version_test.go

+57
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,63 @@ data "google_parameter_manager_regional_parameter_version" "regional-parameter-v
195195
`, context)
196196
}
197197

198+
func TestAccDataSourceParameterManagerRegionalRegionalParameterVersion_withKmsKey(t *testing.T) {
199+
t.Parallel()
200+
201+
acctest.BootstrapIamMembers(t, []acctest.IamMember{
202+
{
203+
Member: "serviceAccount:service-{project_number}@gcp-sa-pm.iam.gserviceaccount.com",
204+
Role: "roles/cloudkms.cryptoKeyEncrypterDecrypter",
205+
},
206+
})
207+
208+
context := map[string]interface{}{
209+
"kms_key": acctest.BootstrapKMSKeyWithPurposeInLocationAndName(t, "ENCRYPT_DECRYPT", "us-central1", "tf-parameter-manager-managed-central-key1").CryptoKey.Name,
210+
"random_suffix": acctest.RandString(t, 10),
211+
}
212+
213+
acctest.VcrTest(t, resource.TestCase{
214+
PreCheck: func() { acctest.AccTestPreCheck(t) },
215+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
216+
CheckDestroy: testAccCheckParameterManagerRegionalRegionalParameterVersionDestroyProducer(t),
217+
Steps: []resource.TestStep{
218+
{
219+
Config: testAccParameterManagerRegionalRegionalParameterVersion_withKmsKey(context),
220+
Check: resource.ComposeTestCheckFunc(
221+
testAccCheckParameterManagerRegionalRegionalParameterDataDataSourceMatchesResource("data.google_parameter_manager_regional_parameter_version.regional-parameter-version-with-kms-key", "google_parameter_manager_regional_parameter_version.regional-parameter-version-with-kms-key"),
222+
),
223+
},
224+
},
225+
})
226+
227+
}
228+
229+
func testAccParameterManagerRegionalRegionalParameterVersion_withKmsKey(context map[string]interface{}) string {
230+
return acctest.Nprintf(`
231+
data "google_project" "project" {}
232+
233+
resource "google_parameter_manager_regional_parameter" "regional-parameter-basic" {
234+
parameter_id = "tf_test_regional_parameter%{random_suffix}"
235+
format = "YAML"
236+
location = "us-central1"
237+
}
238+
239+
resource "google_parameter_manager_regional_parameter_version" "regional-parameter-version-with-kms-key" {
240+
parameter = google_parameter_manager_regional_parameter.regional-parameter-basic.id
241+
parameter_version_id = "tf_test_regional_parameter_version%{random_suffix}"
242+
parameter_data = yamlencode({
243+
"key1": "val1",
244+
"key2": "val2"
245+
})
246+
}
247+
248+
data "google_parameter_manager_regional_parameter_version" "regional-parameter-version-with-kms-key" {
249+
parameter = google_parameter_manager_regional_parameter_version.regional-parameter-version-with-kms-key.parameter
250+
parameter_version_id = google_parameter_manager_regional_parameter_version.regional-parameter-version-with-kms-key.parameter_version_id
251+
}
252+
`, context)
253+
}
254+
198255
func testAccCheckParameterManagerRegionalRegionalParameterDataDataSourceMatchesResource(dataSource, resource string) resource.TestCheckFunc {
199256
return func(s *terraform.State) error {
200257
rs, ok := s.RootModule().Resources[resource]

google-beta/services/parametermanagerregional/data_source_parameter_manager_regional_parameters.go

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ func flattenParameterManagerRegionalRegionalParameterParameters(v interface{}, d
157157
"update_time": flattenParameterManagerRegionalRegionalParameterUpdateTime(original["updateTime"], d, config),
158158
"policy_member": flattenParameterManagerRegionalRegionalParameterPolicyMember(original["policyMember"], d, config),
159159
"name": flattenParameterManagerRegionalRegionalParameterName(original["name"], d, config),
160+
"kms_key": flattenParameterManagerRegionalRegionalParameterKmsKey(original["kmskey"], d, config),
160161
"project": getDataFromName(original["name"], 1),
161162
"location": getDataFromName(original["name"], 3),
162163
"parameter_id": getDataFromName(original["name"], 5),

google-beta/services/parametermanagerregional/resource_parameter_manager_regional_parameter.go

+33
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ func ResourceParameterManagerRegionalRegionalParameter() *schema.Resource {
7878
Description: `The format type of the regional parameter. Default value: "UNFORMATTED" Possible values: ["UNFORMATTED", "YAML", "JSON"]`,
7979
Default: "UNFORMATTED",
8080
},
81+
"kms_key": {
82+
Type: schema.TypeString,
83+
Optional: true,
84+
Description: `The resource name of the Cloud KMS CryptoKey used to encrypt regional parameter version payload. Format
85+
'projects/{{project}}/locations/{{location}}/keyRings/{{key_ring}}/cryptoKeys/{{crypto_key}}'`,
86+
},
8187
"labels": {
8288
Type: schema.TypeMap,
8389
Optional: true,
@@ -177,6 +183,12 @@ func resourceParameterManagerRegionalRegionalParameterCreate(d *schema.ResourceD
177183
} else if v, ok := d.GetOkExists("format"); !tpgresource.IsEmptyValue(reflect.ValueOf(formatProp)) && (ok || !reflect.DeepEqual(v, formatProp)) {
178184
obj["format"] = formatProp
179185
}
186+
kmsKeyProp, err := expandParameterManagerRegionalRegionalParameterKmsKey(d.Get("kms_key"), d, config)
187+
if err != nil {
188+
return err
189+
} else if v, ok := d.GetOkExists("kms_key"); !tpgresource.IsEmptyValue(reflect.ValueOf(kmsKeyProp)) && (ok || !reflect.DeepEqual(v, kmsKeyProp)) {
190+
obj["kmsKey"] = kmsKeyProp
191+
}
180192
labelsProp, err := expandParameterManagerRegionalRegionalParameterEffectiveLabels(d.Get("effective_labels"), d, config)
181193
if err != nil {
182194
return err
@@ -290,6 +302,9 @@ func resourceParameterManagerRegionalRegionalParameterRead(d *schema.ResourceDat
290302
if err := d.Set("format", flattenParameterManagerRegionalRegionalParameterFormat(res["format"], d, config)); err != nil {
291303
return fmt.Errorf("Error reading RegionalParameter: %s", err)
292304
}
305+
if err := d.Set("kms_key", flattenParameterManagerRegionalRegionalParameterKmsKey(res["kmsKey"], d, config)); err != nil {
306+
return fmt.Errorf("Error reading RegionalParameter: %s", err)
307+
}
293308
if err := d.Set("terraform_labels", flattenParameterManagerRegionalRegionalParameterTerraformLabels(res["labels"], d, config)); err != nil {
294309
return fmt.Errorf("Error reading RegionalParameter: %s", err)
295310
}
@@ -316,6 +331,12 @@ func resourceParameterManagerRegionalRegionalParameterUpdate(d *schema.ResourceD
316331
billingProject = project
317332

318333
obj := make(map[string]interface{})
334+
kmsKeyProp, err := expandParameterManagerRegionalRegionalParameterKmsKey(d.Get("kms_key"), d, config)
335+
if err != nil {
336+
return err
337+
} else if v, ok := d.GetOkExists("kms_key"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, kmsKeyProp)) {
338+
obj["kmsKey"] = kmsKeyProp
339+
}
319340
labelsProp, err := expandParameterManagerRegionalRegionalParameterEffectiveLabels(d.Get("effective_labels"), d, config)
320341
if err != nil {
321342
return err
@@ -332,6 +353,10 @@ func resourceParameterManagerRegionalRegionalParameterUpdate(d *schema.ResourceD
332353
headers := make(http.Header)
333354
updateMask := []string{}
334355

356+
if d.HasChange("kms_key") {
357+
updateMask = append(updateMask, "kmsKey")
358+
}
359+
335360
if d.HasChange("effective_labels") {
336361
updateMask = append(updateMask, "labels")
337362
}
@@ -493,6 +518,10 @@ func flattenParameterManagerRegionalRegionalParameterFormat(v interface{}, d *sc
493518
return v
494519
}
495520

521+
func flattenParameterManagerRegionalRegionalParameterKmsKey(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
522+
return v
523+
}
524+
496525
func flattenParameterManagerRegionalRegionalParameterTerraformLabels(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
497526
if v == nil {
498527
return v
@@ -516,6 +545,10 @@ func expandParameterManagerRegionalRegionalParameterFormat(v interface{}, d tpgr
516545
return v, nil
517546
}
518547

548+
func expandParameterManagerRegionalRegionalParameterKmsKey(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
549+
return v, nil
550+
}
551+
519552
func expandParameterManagerRegionalRegionalParameterEffectiveLabels(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
520553
if v == nil {
521554
return map[string]string{}, nil

google-beta/services/parametermanagerregional/resource_parameter_manager_regional_parameter_generated_meta.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ fields:
99
- field: 'effective_labels'
1010
provider_only: true
1111
- field: 'format'
12+
- field: 'kms_key'
1213
- field: 'labels'
1314
- field: 'location'
1415
provider_only: true

google-beta/services/parametermanagerregional/resource_parameter_manager_regional_parameter_generated_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,51 @@ resource "google_parameter_manager_regional_parameter" "regional-parameter-with-
141141
`, context)
142142
}
143143

144+
func TestAccParameterManagerRegionalRegionalParameter_regionalParameterWithKmsKeyExample(t *testing.T) {
145+
t.Parallel()
146+
acctest.BootstrapIamMembers(t, []acctest.IamMember{
147+
{
148+
Member: "serviceAccount:service-{project_number}@gcp-sa-pm.iam.gserviceaccount.com",
149+
Role: "roles/cloudkms.cryptoKeyEncrypterDecrypter",
150+
},
151+
})
152+
153+
context := map[string]interface{}{
154+
"kms_key": acctest.BootstrapKMSKeyInLocation(t, "us-central1").CryptoKey.Name,
155+
"random_suffix": acctest.RandString(t, 10),
156+
}
157+
158+
acctest.VcrTest(t, resource.TestCase{
159+
PreCheck: func() { acctest.AccTestPreCheck(t) },
160+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
161+
CheckDestroy: testAccCheckParameterManagerRegionalRegionalParameterDestroyProducer(t),
162+
Steps: []resource.TestStep{
163+
{
164+
Config: testAccParameterManagerRegionalRegionalParameter_regionalParameterWithKmsKeyExample(context),
165+
},
166+
{
167+
ResourceName: "google_parameter_manager_regional_parameter.regional-parameter-with-kms-key",
168+
ImportState: true,
169+
ImportStateVerify: true,
170+
ImportStateVerifyIgnore: []string{"labels", "location", "parameter_id", "terraform_labels"},
171+
},
172+
},
173+
})
174+
}
175+
176+
func testAccParameterManagerRegionalRegionalParameter_regionalParameterWithKmsKeyExample(context map[string]interface{}) string {
177+
return acctest.Nprintf(`
178+
data "google_project" "project" {}
179+
180+
resource "google_parameter_manager_regional_parameter" "regional-parameter-with-kms-key" {
181+
parameter_id = "tf_test_regional_parameter%{random_suffix}"
182+
location = "us-central1"
183+
184+
kms_key = "%{kms_key}"
185+
}
186+
`, context)
187+
}
188+
144189
func testAccCheckParameterManagerRegionalRegionalParameterDestroyProducer(t *testing.T) func(s *terraform.State) error {
145190
return func(s *terraform.State) error {
146191
for name, rs := range s.RootModule().Resources {

google-beta/services/parametermanagerregional/resource_parameter_manager_regional_parameter_test.go

+118
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77

88
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
910
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
1011
)
1112

@@ -149,3 +150,120 @@ resource "google_parameter_manager_regional_parameter" "regional-parameter-with-
149150
}
150151
`, context)
151152
}
153+
154+
func TestAccParameterManagerRegionalRegionalParameter_kmskeyUpdate(t *testing.T) {
155+
t.Parallel()
156+
157+
acctest.BootstrapIamMembers(t, []acctest.IamMember{
158+
{
159+
Member: "serviceAccount:service-{project_number}@gcp-sa-pm.iam.gserviceaccount.com",
160+
Role: "roles/cloudkms.cryptoKeyEncrypterDecrypter",
161+
},
162+
})
163+
164+
context := map[string]interface{}{
165+
"kms_key": acctest.BootstrapKMSKeyWithPurposeInLocationAndName(t, "ENCRYPT_DECRYPT", "us-central1", "tf-parameter-manager-managed-central-key1").CryptoKey.Name,
166+
"kms_key_other": acctest.BootstrapKMSKeyWithPurposeInLocationAndName(t, "ENCRYPT_DECRYPT", "us-central1", "tf-parameter-manager-managed-central-key2").CryptoKey.Name,
167+
"random_suffix": acctest.RandString(t, 10),
168+
}
169+
170+
acctest.VcrTest(t, resource.TestCase{
171+
PreCheck: func() { acctest.AccTestPreCheck(t) },
172+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
173+
CheckDestroy: testAccCheckParameterManagerRegionalRegionalParameterDestroyProducer(t),
174+
Steps: []resource.TestStep{
175+
{
176+
Config: testAccParameterManagerRegionalRegionalParameter_withoutKmsKey(context),
177+
},
178+
{
179+
ResourceName: "google_parameter_manager_regional_parameter.regional-parameter-with-kms-key",
180+
ImportState: true,
181+
ImportStateVerify: true,
182+
ImportStateVerifyIgnore: []string{"labels", "location", "parameter_id", "terraform_labels"},
183+
},
184+
{
185+
Config: testAccParameterManagerRegionalRegionalParameter_kmsKeyUpdate(context),
186+
ConfigPlanChecks: resource.ConfigPlanChecks{
187+
PreApply: []plancheck.PlanCheck{
188+
plancheck.ExpectResourceAction("google_parameter_manager_regional_parameter.regional-parameter-with-kms-key", plancheck.ResourceActionUpdate),
189+
},
190+
},
191+
},
192+
{
193+
ResourceName: "google_parameter_manager_regional_parameter.regional-parameter-with-kms-key",
194+
ImportState: true,
195+
ImportStateVerify: true,
196+
ImportStateVerifyIgnore: []string{"labels", "location", "parameter_id", "terraform_labels"},
197+
},
198+
{
199+
Config: testAccParameterManagerRegionalRegionalParameter_kmsKeyUpdateOther(context),
200+
ConfigPlanChecks: resource.ConfigPlanChecks{
201+
PreApply: []plancheck.PlanCheck{
202+
plancheck.ExpectResourceAction("google_parameter_manager_regional_parameter.regional-parameter-with-kms-key", plancheck.ResourceActionUpdate),
203+
},
204+
},
205+
},
206+
{
207+
ResourceName: "google_parameter_manager_regional_parameter.regional-parameter-with-kms-key",
208+
ImportState: true,
209+
ImportStateVerify: true,
210+
ImportStateVerifyIgnore: []string{"labels", "location", "parameter_id", "terraform_labels"},
211+
},
212+
{
213+
Config: testAccParameterManagerRegionalRegionalParameter_withoutKmsKey(context),
214+
ConfigPlanChecks: resource.ConfigPlanChecks{
215+
PreApply: []plancheck.PlanCheck{
216+
plancheck.ExpectResourceAction("google_parameter_manager_regional_parameter.regional-parameter-with-kms-key", plancheck.ResourceActionUpdate),
217+
},
218+
},
219+
},
220+
{
221+
ResourceName: "google_parameter_manager_regional_parameter.regional-parameter-with-kms-key",
222+
ImportState: true,
223+
ImportStateVerify: true,
224+
ImportStateVerifyIgnore: []string{"labels", "location", "parameter_id", "terraform_labels"},
225+
},
226+
},
227+
})
228+
}
229+
230+
func testAccParameterManagerRegionalRegionalParameter_withoutKmsKey(context map[string]interface{}) string {
231+
return acctest.Nprintf(`
232+
data "google_project" "project" {}
233+
234+
resource "google_parameter_manager_regional_parameter" "regional-parameter-with-kms-key" {
235+
parameter_id = "tf_test_parameter%{random_suffix}"
236+
location = "us-central1"
237+
format = "JSON"
238+
}
239+
`, context)
240+
}
241+
242+
func testAccParameterManagerRegionalRegionalParameter_kmsKeyUpdate(context map[string]interface{}) string {
243+
return acctest.Nprintf(`
244+
data "google_project" "project" {}
245+
246+
resource "google_parameter_manager_regional_parameter" "regional-parameter-with-kms-key" {
247+
parameter_id = "tf_test_parameter%{random_suffix}"
248+
location = "us-central1"
249+
format = "JSON"
250+
251+
kms_key = "%{kms_key}"
252+
}
253+
`, context)
254+
}
255+
256+
func testAccParameterManagerRegionalRegionalParameter_kmsKeyUpdateOther(context map[string]interface{}) string {
257+
return acctest.Nprintf(`
258+
data "google_project" "project" {
259+
}
260+
261+
resource "google_parameter_manager_regional_parameter" "regional-parameter-with-kms-key" {
262+
parameter_id = "tf_test_parameter%{random_suffix}"
263+
location = "us-central1"
264+
format = "JSON"
265+
266+
kms_key = "%{kms_key_other}"
267+
}
268+
`, context)
269+
}

0 commit comments

Comments
 (0)