Skip to content

Added new resource "Project Cloud Armor Tier" #18319

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions google/provider/provider_mmv1_resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,9 +413,9 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
}

// Resources
// Generated resources: 419
// Generated resources: 420
// Generated IAM resources: 249
// Total generated resources: 668
// Total generated resources: 669
var generatedResources = map[string]*schema.Resource{
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
Expand Down Expand Up @@ -618,6 +618,7 @@ var generatedResources = map[string]*schema.Resource{
"google_compute_node_template": compute.ResourceComputeNodeTemplate(),
"google_compute_packet_mirroring": compute.ResourceComputePacketMirroring(),
"google_compute_per_instance_config": compute.ResourceComputePerInstanceConfig(),
"google_compute_project_cloud_armor_tier": compute.ResourceComputeProjectCloudArmorTier(),
"google_compute_public_advertised_prefix": compute.ResourceComputePublicAdvertisedPrefix(),
"google_compute_public_delegated_prefix": compute.ResourceComputePublicDelegatedPrefix(),
"google_compute_region_autoscaler": compute.ResourceComputeRegionAutoscaler(),
Expand Down
295 changes: 295 additions & 0 deletions google/services/compute/resource_compute_project_cloud_armor_tier.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

// ----------------------------------------------------------------------------
//
// *** AUTO GENERATED CODE *** Type: MMv1 ***
//
// ----------------------------------------------------------------------------
//
// This file is automatically generated by Magic Modules and manual
// changes will be clobbered when the file is regenerated.
//
// Please read more about how to change this file in
// .github/CONTRIBUTING.md.
//
// ----------------------------------------------------------------------------

package compute

import (
"fmt"
"log"
"net/http"
"reflect"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

"github.com/hashicorp/terraform-provider-google/google/tpgresource"
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
"github.com/hashicorp/terraform-provider-google/google/verify"
)

func ResourceComputeProjectCloudArmorTier() *schema.Resource {
return &schema.Resource{
Create: resourceComputeProjectCloudArmorTierCreate,
Read: resourceComputeProjectCloudArmorTierRead,
Update: resourceComputeProjectCloudArmorTierUpdate,
Delete: resourceComputeProjectCloudArmorTierDelete,

Importer: &schema.ResourceImporter{
State: resourceComputeProjectCloudArmorTierImport,
},

Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(20 * time.Minute),
Update: schema.DefaultTimeout(20 * time.Minute),
Delete: schema.DefaultTimeout(20 * time.Minute),
},

CustomizeDiff: customdiff.All(
tpgresource.DefaultProviderProject,
),

Schema: map[string]*schema.Schema{
"cloud_armor_tier": {
Type: schema.TypeString,
Required: true,
ValidateFunc: verify.ValidateEnum([]string{"CA_STANDARD", "CA_ENTERPRISE_PAYGO"}),
Description: `Managed protection tier to be set. Possible values: ["CA_STANDARD", "CA_ENTERPRISE_PAYGO"]`,
},
"project": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},
},
UseJSONNumber: true,
}
}

func resourceComputeProjectCloudArmorTierCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*transport_tpg.Config)
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
if err != nil {
return err
}

obj := make(map[string]interface{})
cloudArmorTierProp, err := expandComputeProjectCloudArmorTierCloudArmorTier(d.Get("cloud_armor_tier"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("cloud_armor_tier"); !tpgresource.IsEmptyValue(reflect.ValueOf(cloudArmorTierProp)) && (ok || !reflect.DeepEqual(v, cloudArmorTierProp)) {
obj["cloudArmorTier"] = cloudArmorTierProp
}

url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/setCloudArmorTier")
if err != nil {
return err
}

log.Printf("[DEBUG] Creating new ProjectCloudArmorTier: %#v", obj)
billingProject := ""

project, err := tpgresource.GetProject(d, config)
if err != nil {
return fmt.Errorf("Error fetching project for ProjectCloudArmorTier: %s", err)
}
billingProject = project

// err == nil indicates that the billing_project value was found
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
billingProject = bp
}

headers := make(http.Header)
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
Config: config,
Method: "POST",
Project: billingProject,
RawURL: url,
UserAgent: userAgent,
Body: obj,
Timeout: d.Timeout(schema.TimeoutCreate),
Headers: headers,
})
if err != nil {
return fmt.Errorf("Error creating ProjectCloudArmorTier: %s", err)
}

// Store the ID now
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}")
if err != nil {
return fmt.Errorf("Error constructing id: %s", err)
}
d.SetId(id)

err = ComputeOperationWaitTime(
config, res, project, "Creating ProjectCloudArmorTier", userAgent,
d.Timeout(schema.TimeoutCreate))

if err != nil {
// The resource didn't actually create
d.SetId("")
return fmt.Errorf("Error waiting to create ProjectCloudArmorTier: %s", err)
}

log.Printf("[DEBUG] Finished creating ProjectCloudArmorTier %q: %#v", d.Id(), res)

return resourceComputeProjectCloudArmorTierRead(d, meta)
}

func resourceComputeProjectCloudArmorTierRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*transport_tpg.Config)
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
if err != nil {
return err
}

url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/{{name}}?fields=cloudArmorTier")
if err != nil {
return err
}

billingProject := ""

project, err := tpgresource.GetProject(d, config)
if err != nil {
return fmt.Errorf("Error fetching project for ProjectCloudArmorTier: %s", err)
}
billingProject = project

// err == nil indicates that the billing_project value was found
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
billingProject = bp
}

headers := make(http.Header)
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
Config: config,
Method: "GET",
Project: billingProject,
RawURL: url,
UserAgent: userAgent,
Headers: headers,
})
if err != nil {
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("ComputeProjectCloudArmorTier %q", d.Id()))
}

if err := d.Set("project", project); err != nil {
return fmt.Errorf("Error reading ProjectCloudArmorTier: %s", err)
}

if err := d.Set("cloud_armor_tier", flattenComputeProjectCloudArmorTierCloudArmorTier(res["cloudArmorTier"], d, config)); err != nil {
return fmt.Errorf("Error reading ProjectCloudArmorTier: %s", err)
}

return nil
}

func resourceComputeProjectCloudArmorTierUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*transport_tpg.Config)
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
if err != nil {
return err
}

billingProject := ""

project, err := tpgresource.GetProject(d, config)
if err != nil {
return fmt.Errorf("Error fetching project for ProjectCloudArmorTier: %s", err)
}
billingProject = project

obj := make(map[string]interface{})
cloudArmorTierProp, err := expandComputeProjectCloudArmorTierCloudArmorTier(d.Get("cloud_armor_tier"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("cloud_armor_tier"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, cloudArmorTierProp)) {
obj["cloudArmorTier"] = cloudArmorTierProp
}

url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/setCloudArmorTier")
if err != nil {
return err
}

log.Printf("[DEBUG] Updating ProjectCloudArmorTier %q: %#v", d.Id(), obj)
headers := make(http.Header)

// err == nil indicates that the billing_project value was found
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
billingProject = bp
}

res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
Config: config,
Method: "POST",
Project: billingProject,
RawURL: url,
UserAgent: userAgent,
Body: obj,
Timeout: d.Timeout(schema.TimeoutUpdate),
Headers: headers,
})

if err != nil {
return fmt.Errorf("Error updating ProjectCloudArmorTier %q: %s", d.Id(), err)
} else {
log.Printf("[DEBUG] Finished updating ProjectCloudArmorTier %q: %#v", d.Id(), res)
}

err = ComputeOperationWaitTime(
config, res, project, "Updating ProjectCloudArmorTier", userAgent,
d.Timeout(schema.TimeoutUpdate))

if err != nil {
return err
}

return resourceComputeProjectCloudArmorTierRead(d, meta)
}

func resourceComputeProjectCloudArmorTierDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*transport_tpg.Config)
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
if err != nil {
return err
}

log.Printf("[WARNING] Resource [%s] will be only removed from Terraform state, but will be left intact on GCP. %s", d.Id(), userAgent)

return schema.RemoveFromState(d, meta)
}

func resourceComputeProjectCloudArmorTierImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
config := meta.(*transport_tpg.Config)
if err := tpgresource.ParseImportId([]string{
"^projects/(?P<project>[^/]+)$",
"^(?P<project>[^/]+)$",
}, d, config); err != nil {
return nil, err
}

// Replace import id for the resource id
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}")
if err != nil {
return nil, fmt.Errorf("Error constructing id: %s", err)
}
d.SetId(id)

return []*schema.ResourceData{d}, nil
}

func flattenComputeProjectCloudArmorTierCloudArmorTier(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
return v
}

func expandComputeProjectCloudArmorTierCloudArmorTier(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
return v, nil
}
Loading