Skip to content

Commit

Permalink
making allowPscGlobalAccess updatable (#8772) (#15691)
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <magic-modules@google.com>
  • Loading branch information
modular-magician authored Aug 30, 2023
1 parent 3d04145 commit a2b0b63
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 3 deletions.
3 changes: 3 additions & 0 deletions .changelog/8772.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
compute: field `allowPscGlobalAccess` is now updatable in `google_compute_forwarding_rule` resource
```
67 changes: 66 additions & 1 deletion google/services/compute/resource_compute_forwarding_rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ internal load balancer.`,
"allow_psc_global_access": {
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
Description: `This is used in PSC consumer ForwardingRule to control whether the PSC endpoint can be accessed from another region.`,
},
"backend_service": {
Expand Down Expand Up @@ -1015,6 +1014,72 @@ func resourceComputeForwardingRuleUpdate(d *schema.ResourceData, meta interface{
return err
}
}
if d.HasChange("allow_psc_global_access") {
obj := make(map[string]interface{})

getUrl, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/regions/{{region}}/forwardingRules/{{name}}")
if err != nil {
return err
}

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

getRes, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
Config: config,
Method: "GET",
Project: billingProject,
RawURL: getUrl,
UserAgent: userAgent,
})
if err != nil {
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("ComputeForwardingRule %q", d.Id()))
}

obj["fingerprint"] = getRes["fingerprint"]

allowPscGlobalAccessProp, err := expandComputeForwardingRuleAllowPscGlobalAccess(d.Get("allow_psc_global_access"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("allow_psc_global_access"); ok || !reflect.DeepEqual(v, allowPscGlobalAccessProp) {
obj["allowPscGlobalAccess"] = allowPscGlobalAccessProp
}

url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/regions/{{region}}/forwardingRules/{{name}}")
if err != nil {
return err
}
url = strings.ReplaceAll(url, "projects/projects/", "projects/")

// 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: "PATCH",
Project: billingProject,
RawURL: url,
UserAgent: userAgent,
Body: obj,
Timeout: d.Timeout(schema.TimeoutUpdate),
})
if err != nil {
return fmt.Errorf("Error updating ForwardingRule %q: %s", d.Id(), err)
} else {
log.Printf("[DEBUG] Finished updating ForwardingRule %q: %#v", d.Id(), res)
}

err = ComputeOperationWaitTime(
config, res, project, "Updating ForwardingRule", userAgent,
d.Timeout(schema.TimeoutUpdate))
if err != nil {
return err
}
}

d.Partial(false)

Expand Down
21 changes: 19 additions & 2 deletions google/services/compute/resource_compute_forwarding_rule_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,15 @@ func TestAccComputeForwardingRule_forwardingRuleVpcPscExampleUpdate(t *testing.T
ImportStateVerify: true,
},
{
Config: testAccComputeForwardingRule_forwardingRuleVpcPscExampleUpdate(context),
Config: testAccComputeForwardingRule_forwardingRuleVpcPscExampleUpdate(context, true),
},
{
ResourceName: "google_compute_forwarding_rule.default",
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccComputeForwardingRule_forwardingRuleVpcPscExampleUpdate(context, false),
},
{
ResourceName: "google_compute_forwarding_rule.default",
Expand Down Expand Up @@ -251,7 +259,15 @@ resource "google_compute_forwarding_rule" "foobar" {
`, poolName, ruleName)
}

func testAccComputeForwardingRule_forwardingRuleVpcPscExampleUpdate(context map[string]interface{}) string {
func testAccComputeForwardingRule_forwardingRuleVpcPscExampleUpdate(context map[string]interface{}, preventDestroy bool) string {
context["lifecycle_block"] = ""
if preventDestroy {
context["lifecycle_block"] = `
lifecycle {
prevent_destroy = true
}`
}

return acctest.Nprintf(`
// Forwarding rule for VPC private service connect
resource "google_compute_forwarding_rule" "default" {
Expand All @@ -262,6 +278,7 @@ resource "google_compute_forwarding_rule" "default" {
network = google_compute_network.consumer_net.name
ip_address = google_compute_address.consumer_address.id
allow_psc_global_access = false
%{lifecycle_block}
}
// Consumer service endpoint
Expand Down

0 comments on commit a2b0b63

Please sign in to comment.