Skip to content

Commit 3875936

Browse files
Promote Global & Regional Parameter Manager Resources & Datasources to GA (#13473) (#22099)
[upstream:0ae61ce7a16c0c85a5399abab47c495e75f42e66] Signed-off-by: Modular Magician <[email protected]>
1 parent ee11fb5 commit 3875936

File tree

53 files changed

+6982
-288
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+6982
-288
lines changed

.changelog/13473.txt

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
```release-note:new-datasource
2+
`google_parameter_manager_parameter` (ga)
3+
```
4+
```release-note:new-datasource
5+
`google_parameter_manager_parameters` (ga)
6+
```
7+
```release-note:new-datasource
8+
`google_parameter_manager_parameter_version` (ga)
9+
```
10+
```release-note:new-datasource
11+
`google_parameter_manager_parameter_version_render` (ga)
12+
```
13+
```release-note:new-datasource
14+
`google_parameter_manager_regional_parameter` (ga)
15+
```
16+
```release-note:new-datasource
17+
`google_parameter_manager_regional_parameters` (ga)
18+
```
19+
```release-note:new-datasource
20+
`google_parameter_manager_regional_parameter_version` (ga)
21+
```
22+
```release-note:new-datasource
23+
`google_parameter_manager_regional_parameter_version_render` (ga)
24+
```
25+
```release-note:new-resource
26+
`google_parameter_manager_parameter` (ga)
27+
```
28+
```release-note:new-resource
29+
`google_parameter_manager_parameter_version` (ga)
30+
```
31+
```release-note:new-resource
32+
`google_parameter_manager_regional_parameter` (ga)
33+
```
34+
```release-note:new-resource
35+
`google_parameter_manager_regional_parameter_version` (ga)
36+
```

google/fwmodels/provider_model.go

+2
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ type ProviderModel struct {
145145
OSConfigV2CustomEndpoint types.String `tfsdk:"os_config_v2_custom_endpoint"`
146146
OSLoginCustomEndpoint types.String `tfsdk:"os_login_custom_endpoint"`
147147
ParallelstoreCustomEndpoint types.String `tfsdk:"parallelstore_custom_endpoint"`
148+
ParameterManagerCustomEndpoint types.String `tfsdk:"parameter_manager_custom_endpoint"`
149+
ParameterManagerRegionalCustomEndpoint types.String `tfsdk:"parameter_manager_regional_custom_endpoint"`
148150
PrivatecaCustomEndpoint types.String `tfsdk:"privateca_custom_endpoint"`
149151
PrivilegedAccessManagerCustomEndpoint types.String `tfsdk:"privileged_access_manager_custom_endpoint"`
150152
PublicCACustomEndpoint types.String `tfsdk:"public_ca_custom_endpoint"`

google/fwprovider/framework_provider.go

+12
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,18 @@ func (p *FrameworkProvider) Schema(_ context.Context, _ provider.SchemaRequest,
802802
transport_tpg.CustomEndpointValidator(),
803803
},
804804
},
805+
"parameter_manager_custom_endpoint": &schema.StringAttribute{
806+
Optional: true,
807+
Validators: []validator.String{
808+
transport_tpg.CustomEndpointValidator(),
809+
},
810+
},
811+
"parameter_manager_regional_custom_endpoint": &schema.StringAttribute{
812+
Optional: true,
813+
Validators: []validator.String{
814+
transport_tpg.CustomEndpointValidator(),
815+
},
816+
},
805817
"privateca_custom_endpoint": &schema.StringAttribute{
806818
Optional: true,
807819
Validators: []validator.String{

google/provider/provider.go

+12
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,16 @@ func Provider() *schema.Provider {
709709
Optional: true,
710710
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
711711
},
712+
"parameter_manager_custom_endpoint": {
713+
Type: schema.TypeString,
714+
Optional: true,
715+
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
716+
},
717+
"parameter_manager_regional_custom_endpoint": {
718+
Type: schema.TypeString,
719+
Optional: true,
720+
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
721+
},
712722
"privateca_custom_endpoint": {
713723
Type: schema.TypeString,
714724
Optional: true,
@@ -1180,6 +1190,8 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr
11801190
config.OSConfigV2BasePath = d.Get("os_config_v2_custom_endpoint").(string)
11811191
config.OSLoginBasePath = d.Get("os_login_custom_endpoint").(string)
11821192
config.ParallelstoreBasePath = d.Get("parallelstore_custom_endpoint").(string)
1193+
config.ParameterManagerBasePath = d.Get("parameter_manager_custom_endpoint").(string)
1194+
config.ParameterManagerRegionalBasePath = d.Get("parameter_manager_regional_custom_endpoint").(string)
11831195
config.PrivatecaBasePath = d.Get("privateca_custom_endpoint").(string)
11841196
config.PrivilegedAccessManagerBasePath = d.Get("privileged_access_manager_custom_endpoint").(string)
11851197
config.PublicCABasePath = d.Get("public_ca_custom_endpoint").(string)

google/provider/provider_mmv1_resources.go

+241-227
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,44 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package parametermanager
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
10+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
11+
)
12+
13+
func DataSourceParameterManagerParameter() *schema.Resource {
14+
15+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceParameterManagerParameter().Schema)
16+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "parameter_id")
17+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
18+
19+
return &schema.Resource{
20+
Read: dataSourceParameterManagerParameterRead,
21+
Schema: dsSchema,
22+
}
23+
}
24+
25+
func dataSourceParameterManagerParameterRead(d *schema.ResourceData, meta interface{}) error {
26+
id, err := tpgresource.ReplaceVars(d, meta.(*transport_tpg.Config), "projects/{{project}}/locations/global/parameters/{{parameter_id}}")
27+
if err != nil {
28+
return fmt.Errorf("Error constructing id: %s", err)
29+
}
30+
d.SetId(id)
31+
err = resourceParameterManagerParameterRead(d, meta)
32+
if err != nil {
33+
return err
34+
}
35+
36+
if err := tpgresource.SetDataSourceLabels(d); err != nil {
37+
return err
38+
}
39+
40+
if d.Id() == "" {
41+
return fmt.Errorf("%s not found", id)
42+
}
43+
return nil
44+
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,56 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package parametermanager_test
4+
5+
import (
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-provider-google/google/acctest"
10+
)
11+
12+
func TestAccDataSourceParameterManagerParameter_basic(t *testing.T) {
13+
t.Parallel()
14+
15+
context := map[string]interface{}{
16+
"random_suffix": acctest.RandString(t, 10),
17+
}
18+
19+
acctest.VcrTest(t, resource.TestCase{
20+
PreCheck: func() { acctest.AccTestPreCheck(t) },
21+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
22+
CheckDestroy: testAccCheckParameterManagerParameterDestroyProducer(t),
23+
Steps: []resource.TestStep{
24+
{
25+
Config: testAccDataSourceParameterManagerParameter_basic(context),
26+
Check: resource.ComposeTestCheckFunc(
27+
acctest.CheckDataSourceStateMatchesResourceState(
28+
"data.google_parameter_manager_parameter.parameter-datasource",
29+
"google_parameter_manager_parameter.parameter",
30+
),
31+
),
32+
},
33+
},
34+
})
35+
}
36+
37+
func testAccDataSourceParameterManagerParameter_basic(context map[string]interface{}) string {
38+
return acctest.Nprintf(`
39+
resource "google_parameter_manager_parameter" "parameter" {
40+
parameter_id = "tf_test_parameter%{random_suffix}"
41+
format = "YAML"
42+
43+
labels = {
44+
key1 = "val1"
45+
key2 = "val2"
46+
key3 = "val3"
47+
key4 = "val4"
48+
key5 = "val5"
49+
}
50+
}
51+
52+
data "google_parameter_manager_parameter" "parameter-datasource" {
53+
parameter_id = google_parameter_manager_parameter.parameter.parameter_id
54+
}
55+
`, context)
56+
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,171 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package parametermanager
4+
5+
import (
6+
"encoding/base64"
7+
"fmt"
8+
"net/http"
9+
"regexp"
10+
11+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
12+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
13+
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
15+
)
16+
17+
func DataSourceParameterManagerParameterVersion() *schema.Resource {
18+
return &schema.Resource{
19+
Read: dataSourceParameterManagerParameterVersionRead,
20+
Schema: map[string]*schema.Schema{
21+
"project": {
22+
Type: schema.TypeString,
23+
Optional: true,
24+
Computed: true,
25+
},
26+
"parameter": {
27+
Type: schema.TypeString,
28+
Required: true,
29+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
30+
},
31+
"parameter_version_id": {
32+
Type: schema.TypeString,
33+
Required: true,
34+
},
35+
"parameter_data": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
Sensitive: true,
39+
},
40+
"name": {
41+
Type: schema.TypeString,
42+
Computed: true,
43+
},
44+
"create_time": {
45+
Type: schema.TypeString,
46+
Computed: true,
47+
},
48+
"update_time": {
49+
Type: schema.TypeString,
50+
Computed: true,
51+
},
52+
"disabled": {
53+
Type: schema.TypeBool,
54+
Computed: true,
55+
},
56+
"kms_key_version": {
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
60+
},
61+
}
62+
}
63+
64+
func dataSourceParameterManagerParameterVersionRead(d *schema.ResourceData, meta interface{}) error {
65+
config := meta.(*transport_tpg.Config)
66+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
67+
if err != nil {
68+
return err
69+
}
70+
71+
// Check if the parameter is provided as a resource reference or a parameter id.
72+
parameterRegex := regexp.MustCompile("projects/(.+)/locations/global/parameters/(.+)$")
73+
dParameter, ok := d.Get("parameter").(string)
74+
if !ok {
75+
return fmt.Errorf("wrong type for parameter field (%T), expected string", d.Get("parameter"))
76+
}
77+
78+
parts := parameterRegex.FindStringSubmatch(dParameter)
79+
var project string
80+
81+
// if reference of the parameter is provided in the parameter field
82+
if len(parts) == 3 {
83+
// Stores value of project to set in state
84+
project = parts[1]
85+
if dProject, ok := d.Get("project").(string); !ok {
86+
return fmt.Errorf("wrong type for project (%T), expected string", d.Get("project"))
87+
} else if dProject != "" && dProject != project {
88+
return fmt.Errorf("project field value (%s) does not match project of parameter (%s).", dProject, project)
89+
}
90+
if err := d.Set("parameter", parts[2]); err != nil {
91+
return fmt.Errorf("error setting parameter: %s", err)
92+
}
93+
} else { // if parameter name is provided in the parameter field
94+
// Stores value of project to set in state
95+
project, err = tpgresource.GetProject(d, config)
96+
if err != nil {
97+
return fmt.Errorf("error fetching project for parameter: %s", err)
98+
}
99+
}
100+
if err := d.Set("project", project); err != nil {
101+
return fmt.Errorf("error setting project: %s", err)
102+
}
103+
104+
dParameterVersionId, ok := d.Get("parameter_version_id").(string)
105+
if !ok {
106+
return fmt.Errorf("wrong type for parameter version id field (%T), expected string", d.Get("parameter_version_id"))
107+
}
108+
109+
url, err := tpgresource.ReplaceVars(d, config, "{{ParameterManagerBasePath}}projects/{{project}}/locations/global/parameters/{{parameter}}/versions/{{parameter_version_id}}")
110+
if err != nil {
111+
return err
112+
}
113+
114+
headers := make(http.Header)
115+
parameterVersion, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
116+
Config: config,
117+
Method: "GET",
118+
Project: project,
119+
RawURL: url,
120+
UserAgent: userAgent,
121+
Headers: headers,
122+
})
123+
if err != nil {
124+
return fmt.Errorf("error retrieving available parameter manager parameter versions: %s", err.Error())
125+
}
126+
127+
// If the response contains the disabled value, return an error stating that the parameter version is currently disabled
128+
isDisabled, ok := parameterVersion["disabled"]
129+
if ok && isDisabled.(bool) {
130+
return fmt.Errorf("parameter version %s is in DISABLED state.", dParameterVersionId)
131+
}
132+
133+
nameValue, ok := parameterVersion["name"]
134+
if !ok {
135+
return fmt.Errorf("read response didn't contain critical fields. Read may not have succeeded.")
136+
}
137+
138+
if err := d.Set("name", nameValue.(string)); err != nil {
139+
return fmt.Errorf("error reading parameterVersion: %s", err)
140+
}
141+
142+
if err := d.Set("disabled", false); err != nil {
143+
return fmt.Errorf("error setting disabled: %s", err)
144+
}
145+
146+
if err := d.Set("update_time", parameterVersion["updateTime"].(string)); err != nil {
147+
return fmt.Errorf("error setting update_time: %s", err)
148+
}
149+
150+
if err := d.Set("create_time", parameterVersion["createTime"].(string)); err != nil {
151+
return fmt.Errorf("error setting create_time: %s", err)
152+
}
153+
154+
if parameterVersion["kmsKeyVersion"] != nil {
155+
if err := d.Set("kms_key_version", parameterVersion["kmsKeyVersion"].(string)); err != nil {
156+
return fmt.Errorf("error setting kms_key_version: %s", err)
157+
}
158+
}
159+
160+
data := parameterVersion["payload"].(map[string]interface{})
161+
parameterData, err := base64.StdEncoding.DecodeString(data["data"].(string))
162+
if err != nil {
163+
return fmt.Errorf("error decoding parameter manager parameter version data: %s", err.Error())
164+
}
165+
if err := d.Set("parameter_data", string(parameterData)); err != nil {
166+
return fmt.Errorf("error setting parameter_data: %s", err)
167+
}
168+
169+
d.SetId(nameValue.(string))
170+
return nil
171+
}

0 commit comments

Comments
 (0)