Skip to content

Commit 0b2a414

Browse files
Added new resource "Project Cloud Armor Tier" (#10698) (#7456)
[upstream:d1c1137a1943963d80fb143c34d78851620d18fa] Signed-off-by: Modular Magician <[email protected]>
1 parent b21c7ce commit 0b2a414

File tree

4 files changed

+588
-2
lines changed

4 files changed

+588
-2
lines changed

google-beta/provider/provider_mmv1_resources.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,9 +459,9 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
459459
}
460460

461461
// Resources
462-
// Generated resources: 474
462+
// Generated resources: 475
463463
// Generated IAM resources: 279
464-
// Total generated resources: 753
464+
// Total generated resources: 754
465465
var generatedResources = map[string]*schema.Resource{
466466
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
467467
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -694,6 +694,7 @@ var generatedResources = map[string]*schema.Resource{
694694
"google_compute_organization_security_policy_rule": compute.ResourceComputeOrganizationSecurityPolicyRule(),
695695
"google_compute_packet_mirroring": compute.ResourceComputePacketMirroring(),
696696
"google_compute_per_instance_config": compute.ResourceComputePerInstanceConfig(),
697+
"google_compute_project_cloud_armor_tier": compute.ResourceComputeProjectCloudArmorTier(),
697698
"google_compute_public_advertised_prefix": compute.ResourceComputePublicAdvertisedPrefix(),
698699
"google_compute_public_delegated_prefix": compute.ResourceComputePublicDelegatedPrefix(),
699700
"google_compute_region_autoscaler": compute.ResourceComputeRegionAutoscaler(),
Lines changed: 295 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
// ----------------------------------------------------------------------------
5+
//
6+
// *** AUTO GENERATED CODE *** Type: MMv1 ***
7+
//
8+
// ----------------------------------------------------------------------------
9+
//
10+
// This file is automatically generated by Magic Modules and manual
11+
// changes will be clobbered when the file is regenerated.
12+
//
13+
// Please read more about how to change this file in
14+
// .github/CONTRIBUTING.md.
15+
//
16+
// ----------------------------------------------------------------------------
17+
18+
package compute
19+
20+
import (
21+
"fmt"
22+
"log"
23+
"net/http"
24+
"reflect"
25+
"time"
26+
27+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
28+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
29+
30+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
31+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
32+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/verify"
33+
)
34+
35+
func ResourceComputeProjectCloudArmorTier() *schema.Resource {
36+
return &schema.Resource{
37+
Create: resourceComputeProjectCloudArmorTierCreate,
38+
Read: resourceComputeProjectCloudArmorTierRead,
39+
Update: resourceComputeProjectCloudArmorTierUpdate,
40+
Delete: resourceComputeProjectCloudArmorTierDelete,
41+
42+
Importer: &schema.ResourceImporter{
43+
State: resourceComputeProjectCloudArmorTierImport,
44+
},
45+
46+
Timeouts: &schema.ResourceTimeout{
47+
Create: schema.DefaultTimeout(20 * time.Minute),
48+
Update: schema.DefaultTimeout(20 * time.Minute),
49+
Delete: schema.DefaultTimeout(20 * time.Minute),
50+
},
51+
52+
CustomizeDiff: customdiff.All(
53+
tpgresource.DefaultProviderProject,
54+
),
55+
56+
Schema: map[string]*schema.Schema{
57+
"cloud_armor_tier": {
58+
Type: schema.TypeString,
59+
Required: true,
60+
ValidateFunc: verify.ValidateEnum([]string{"CA_STANDARD", "CA_ENTERPRISE_PAYGO"}),
61+
Description: `Managed protection tier to be set. Possible values: ["CA_STANDARD", "CA_ENTERPRISE_PAYGO"]`,
62+
},
63+
"project": {
64+
Type: schema.TypeString,
65+
Optional: true,
66+
Computed: true,
67+
ForceNew: true,
68+
},
69+
},
70+
UseJSONNumber: true,
71+
}
72+
}
73+
74+
func resourceComputeProjectCloudArmorTierCreate(d *schema.ResourceData, meta interface{}) error {
75+
config := meta.(*transport_tpg.Config)
76+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
77+
if err != nil {
78+
return err
79+
}
80+
81+
obj := make(map[string]interface{})
82+
cloudArmorTierProp, err := expandComputeProjectCloudArmorTierCloudArmorTier(d.Get("cloud_armor_tier"), d, config)
83+
if err != nil {
84+
return err
85+
} else if v, ok := d.GetOkExists("cloud_armor_tier"); !tpgresource.IsEmptyValue(reflect.ValueOf(cloudArmorTierProp)) && (ok || !reflect.DeepEqual(v, cloudArmorTierProp)) {
86+
obj["cloudArmorTier"] = cloudArmorTierProp
87+
}
88+
89+
url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/setCloudArmorTier")
90+
if err != nil {
91+
return err
92+
}
93+
94+
log.Printf("[DEBUG] Creating new ProjectCloudArmorTier: %#v", obj)
95+
billingProject := ""
96+
97+
project, err := tpgresource.GetProject(d, config)
98+
if err != nil {
99+
return fmt.Errorf("Error fetching project for ProjectCloudArmorTier: %s", err)
100+
}
101+
billingProject = project
102+
103+
// err == nil indicates that the billing_project value was found
104+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
105+
billingProject = bp
106+
}
107+
108+
headers := make(http.Header)
109+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
110+
Config: config,
111+
Method: "POST",
112+
Project: billingProject,
113+
RawURL: url,
114+
UserAgent: userAgent,
115+
Body: obj,
116+
Timeout: d.Timeout(schema.TimeoutCreate),
117+
Headers: headers,
118+
})
119+
if err != nil {
120+
return fmt.Errorf("Error creating ProjectCloudArmorTier: %s", err)
121+
}
122+
123+
// Store the ID now
124+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}")
125+
if err != nil {
126+
return fmt.Errorf("Error constructing id: %s", err)
127+
}
128+
d.SetId(id)
129+
130+
err = ComputeOperationWaitTime(
131+
config, res, project, "Creating ProjectCloudArmorTier", userAgent,
132+
d.Timeout(schema.TimeoutCreate))
133+
134+
if err != nil {
135+
// The resource didn't actually create
136+
d.SetId("")
137+
return fmt.Errorf("Error waiting to create ProjectCloudArmorTier: %s", err)
138+
}
139+
140+
log.Printf("[DEBUG] Finished creating ProjectCloudArmorTier %q: %#v", d.Id(), res)
141+
142+
return resourceComputeProjectCloudArmorTierRead(d, meta)
143+
}
144+
145+
func resourceComputeProjectCloudArmorTierRead(d *schema.ResourceData, meta interface{}) error {
146+
config := meta.(*transport_tpg.Config)
147+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
148+
if err != nil {
149+
return err
150+
}
151+
152+
url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/{{name}}?fields=cloudArmorTier")
153+
if err != nil {
154+
return err
155+
}
156+
157+
billingProject := ""
158+
159+
project, err := tpgresource.GetProject(d, config)
160+
if err != nil {
161+
return fmt.Errorf("Error fetching project for ProjectCloudArmorTier: %s", err)
162+
}
163+
billingProject = project
164+
165+
// err == nil indicates that the billing_project value was found
166+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
167+
billingProject = bp
168+
}
169+
170+
headers := make(http.Header)
171+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
172+
Config: config,
173+
Method: "GET",
174+
Project: billingProject,
175+
RawURL: url,
176+
UserAgent: userAgent,
177+
Headers: headers,
178+
})
179+
if err != nil {
180+
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("ComputeProjectCloudArmorTier %q", d.Id()))
181+
}
182+
183+
if err := d.Set("project", project); err != nil {
184+
return fmt.Errorf("Error reading ProjectCloudArmorTier: %s", err)
185+
}
186+
187+
if err := d.Set("cloud_armor_tier", flattenComputeProjectCloudArmorTierCloudArmorTier(res["cloudArmorTier"], d, config)); err != nil {
188+
return fmt.Errorf("Error reading ProjectCloudArmorTier: %s", err)
189+
}
190+
191+
return nil
192+
}
193+
194+
func resourceComputeProjectCloudArmorTierUpdate(d *schema.ResourceData, meta interface{}) error {
195+
config := meta.(*transport_tpg.Config)
196+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
197+
if err != nil {
198+
return err
199+
}
200+
201+
billingProject := ""
202+
203+
project, err := tpgresource.GetProject(d, config)
204+
if err != nil {
205+
return fmt.Errorf("Error fetching project for ProjectCloudArmorTier: %s", err)
206+
}
207+
billingProject = project
208+
209+
obj := make(map[string]interface{})
210+
cloudArmorTierProp, err := expandComputeProjectCloudArmorTierCloudArmorTier(d.Get("cloud_armor_tier"), d, config)
211+
if err != nil {
212+
return err
213+
} else if v, ok := d.GetOkExists("cloud_armor_tier"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, cloudArmorTierProp)) {
214+
obj["cloudArmorTier"] = cloudArmorTierProp
215+
}
216+
217+
url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/setCloudArmorTier")
218+
if err != nil {
219+
return err
220+
}
221+
222+
log.Printf("[DEBUG] Updating ProjectCloudArmorTier %q: %#v", d.Id(), obj)
223+
headers := make(http.Header)
224+
225+
// err == nil indicates that the billing_project value was found
226+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
227+
billingProject = bp
228+
}
229+
230+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
231+
Config: config,
232+
Method: "POST",
233+
Project: billingProject,
234+
RawURL: url,
235+
UserAgent: userAgent,
236+
Body: obj,
237+
Timeout: d.Timeout(schema.TimeoutUpdate),
238+
Headers: headers,
239+
})
240+
241+
if err != nil {
242+
return fmt.Errorf("Error updating ProjectCloudArmorTier %q: %s", d.Id(), err)
243+
} else {
244+
log.Printf("[DEBUG] Finished updating ProjectCloudArmorTier %q: %#v", d.Id(), res)
245+
}
246+
247+
err = ComputeOperationWaitTime(
248+
config, res, project, "Updating ProjectCloudArmorTier", userAgent,
249+
d.Timeout(schema.TimeoutUpdate))
250+
251+
if err != nil {
252+
return err
253+
}
254+
255+
return resourceComputeProjectCloudArmorTierRead(d, meta)
256+
}
257+
258+
func resourceComputeProjectCloudArmorTierDelete(d *schema.ResourceData, meta interface{}) error {
259+
config := meta.(*transport_tpg.Config)
260+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
261+
if err != nil {
262+
return err
263+
}
264+
265+
log.Printf("[WARNING] Resource [%s] will be only removed from Terraform state, but will be left intact on GCP. %s", d.Id(), userAgent)
266+
267+
return schema.RemoveFromState(d, meta)
268+
}
269+
270+
func resourceComputeProjectCloudArmorTierImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
271+
config := meta.(*transport_tpg.Config)
272+
if err := tpgresource.ParseImportId([]string{
273+
"^projects/(?P<project>[^/]+)$",
274+
"^(?P<project>[^/]+)$",
275+
}, d, config); err != nil {
276+
return nil, err
277+
}
278+
279+
// Replace import id for the resource id
280+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}")
281+
if err != nil {
282+
return nil, fmt.Errorf("Error constructing id: %s", err)
283+
}
284+
d.SetId(id)
285+
286+
return []*schema.ResourceData{d}, nil
287+
}
288+
289+
func flattenComputeProjectCloudArmorTierCloudArmorTier(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
290+
return v
291+
}
292+
293+
func expandComputeProjectCloudArmorTierCloudArmorTier(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
294+
return v, nil
295+
}

0 commit comments

Comments
 (0)