Skip to content

Commit 7fb96d7

Browse files
Adding support for new Instance Settings resource and a test into a beta provider. (#9313) (#1674)
[upstream:f218e989981c0ff81605d43e2095564edbc7116f] Signed-off-by: Modular Magician <[email protected]>
1 parent 42a7547 commit 7fb96d7

File tree

3 files changed

+150
-3
lines changed

3 files changed

+150
-3
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/hashicorp/hcl/v2 v2.19.1
1212
github.com/hashicorp/terraform-json v0.17.1
1313
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0
14-
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231107235957-55a95b6345ad
14+
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108014047-60296494bb5f
1515
github.com/mitchellh/go-homedir v1.1.0 // indirect
1616
github.com/pkg/errors v0.9.1
1717
github.com/stretchr/testify v1.8.3

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwU
169169
github.com/hashicorp/terraform-plugin-mux v0.8.0 h1:WCTP66mZ+iIaIrCNJnjPEYnVjawTshnDJu12BcXK1EI=
170170
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0 h1:wcOKYwPI9IorAJEBLzgclh3xVolO7ZorYd6U1vnok14=
171171
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0/go.mod h1:qH/34G25Ugdj5FcM95cSoXzUgIbgfhVLXCcEcYaMwq8=
172-
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231107235957-55a95b6345ad h1:gedti28/mUdNkCA9RY6HFiLn+O0+cOZXbyLsE0NMmVw=
173-
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231107235957-55a95b6345ad/go.mod h1:hOUMXZXm7ztJQn7kTMlHgG3jh7ZoLMriRFbV2t7sA8o=
172+
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108014047-60296494bb5f h1:zlaaF1+ZNeCD3gyuUzoHR941mGQBXNL+mimBX0Y3rKc=
173+
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108014047-60296494bb5f/go.mod h1:hOUMXZXm7ztJQn7kTMlHgG3jh7ZoLMriRFbV2t7sA8o=
174174
github.com/hashicorp/terraform-registry-address v0.2.2 h1:lPQBg403El8PPicg/qONZJDC6YlgCVbWDtNmmZKtBno=
175175
github.com/hashicorp/terraform-registry-address v0.2.2/go.mod h1:LtwNbCihUoUZ3RYriyS2wF/lGPB6gF9ICLRtuDk7hSo=
176176
github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
// ----------------------------------------------------------------------------
2+
//
3+
// *** AUTO GENERATED CODE *** Type: MMv1 ***
4+
//
5+
// ----------------------------------------------------------------------------
6+
//
7+
// This file is automatically generated by Magic Modules and manual
8+
// changes will be clobbered when the file is regenerated.
9+
//
10+
// Please read more about how to change this file in
11+
// .github/CONTRIBUTING.md.
12+
//
13+
// ----------------------------------------------------------------------------
14+
15+
package compute
16+
17+
import (
18+
"fmt"
19+
"reflect"
20+
21+
"github.com/GoogleCloudPlatform/terraform-google-conversion/v2/tfplan2cai/converters/google/resources/cai"
22+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
23+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
24+
)
25+
26+
const ComputeInstanceSettingsAssetType string = "compute.googleapis.com/InstanceSettings"
27+
28+
func ResourceConverterComputeInstanceSettings() cai.ResourceConverter {
29+
return cai.ResourceConverter{
30+
AssetType: ComputeInstanceSettingsAssetType,
31+
Convert: GetComputeInstanceSettingsCaiObject,
32+
}
33+
}
34+
35+
func GetComputeInstanceSettingsCaiObject(d tpgresource.TerraformResourceData, config *transport_tpg.Config) ([]cai.Asset, error) {
36+
name, err := cai.AssetName(d, config, "//compute.googleapis.com/projects/{{project}}/zones/{{zone}}/instanceSettings")
37+
if err != nil {
38+
return []cai.Asset{}, err
39+
}
40+
if obj, err := GetComputeInstanceSettingsApiObject(d, config); err == nil {
41+
return []cai.Asset{{
42+
Name: name,
43+
Type: ComputeInstanceSettingsAssetType,
44+
Resource: &cai.AssetResource{
45+
Version: "beta",
46+
DiscoveryDocumentURI: "https://www.googleapis.com/discovery/v1/apis/compute/beta/rest",
47+
DiscoveryName: "InstanceSettings",
48+
Data: obj,
49+
},
50+
}}, nil
51+
} else {
52+
return []cai.Asset{}, err
53+
}
54+
}
55+
56+
func GetComputeInstanceSettingsApiObject(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]interface{}, error) {
57+
obj := make(map[string]interface{})
58+
fingerprintProp, err := expandComputeInstanceSettingsFingerprint(d.Get("fingerprint"), d, config)
59+
if err != nil {
60+
return nil, err
61+
} else if v, ok := d.GetOkExists("fingerprint"); !tpgresource.IsEmptyValue(reflect.ValueOf(fingerprintProp)) && (ok || !reflect.DeepEqual(v, fingerprintProp)) {
62+
obj["fingerprint"] = fingerprintProp
63+
}
64+
metadataProp, err := expandComputeInstanceSettingsMetadata(d.Get("metadata"), d, config)
65+
if err != nil {
66+
return nil, err
67+
} else if v, ok := d.GetOkExists("metadata"); !tpgresource.IsEmptyValue(reflect.ValueOf(metadataProp)) && (ok || !reflect.DeepEqual(v, metadataProp)) {
68+
obj["metadata"] = metadataProp
69+
}
70+
zoneProp, err := expandComputeInstanceSettingsZone(d.Get("zone"), d, config)
71+
if err != nil {
72+
return nil, err
73+
} else if v, ok := d.GetOkExists("zone"); !tpgresource.IsEmptyValue(reflect.ValueOf(zoneProp)) && (ok || !reflect.DeepEqual(v, zoneProp)) {
74+
obj["zone"] = zoneProp
75+
}
76+
77+
return obj, nil
78+
}
79+
80+
func expandComputeInstanceSettingsFingerprint(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
81+
project, err := tpgresource.GetProject(d, config)
82+
if err != nil {
83+
return nil, err
84+
}
85+
86+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
87+
if err != nil {
88+
return nil, err
89+
}
90+
91+
url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/zones/{{zone}}/instanceSettings/{{name}}")
92+
if err != nil {
93+
return nil, err
94+
}
95+
96+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
97+
Config: config,
98+
Method: "GET",
99+
Project: project,
100+
RawURL: url,
101+
UserAgent: userAgent,
102+
})
103+
104+
if err != nil {
105+
return nil, err
106+
}
107+
108+
return res["fingerprint"], nil
109+
}
110+
111+
func expandComputeInstanceSettingsMetadata(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
112+
l := v.([]interface{})
113+
if len(l) == 0 || l[0] == nil {
114+
return nil, nil
115+
}
116+
raw := l[0]
117+
original := raw.(map[string]interface{})
118+
transformed := make(map[string]interface{})
119+
120+
transformedItems, err := expandComputeInstanceSettingsMetadataItems(original["items"], d, config)
121+
if err != nil {
122+
return nil, err
123+
} else if val := reflect.ValueOf(transformedItems); val.IsValid() && !tpgresource.IsEmptyValue(val) {
124+
transformed["items"] = transformedItems
125+
}
126+
127+
return transformed, nil
128+
}
129+
130+
func expandComputeInstanceSettingsMetadataItems(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
131+
if v == nil {
132+
return map[string]string{}, nil
133+
}
134+
m := make(map[string]string)
135+
for k, val := range v.(map[string]interface{}) {
136+
m[k] = val.(string)
137+
}
138+
return m, nil
139+
}
140+
141+
func expandComputeInstanceSettingsZone(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
142+
f, err := tpgresource.ParseGlobalFieldValue("zones", v.(string), "project", d, config, true)
143+
if err != nil {
144+
return nil, fmt.Errorf("Invalid value for zone: %s", err)
145+
}
146+
return f.RelativeLink(), nil
147+
}

0 commit comments

Comments
 (0)