Skip to content

Commit df55dc7

Browse files
Direct google access (#4034) (#2649)
Signed-off-by: Modular Magician <[email protected]>
1 parent 12ae0c3 commit df55dc7

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

.changelog/4034.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `private_ipv6_google_access` field to `google_compute_subnetwork`
3+
```

google-beta/resource_compute_subnetwork.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,12 @@ Can only be specified if VPC flow logs for this subnetwork is enabled and "metad
177177
Description: `When enabled, VMs in this subnetwork without external IP addresses can
178178
access Google APIs and services by using Private Google Access.`,
179179
},
180+
"private_ipv6_google_access": {
181+
Type: schema.TypeString,
182+
Computed: true,
183+
Optional: true,
184+
Description: `The private IPv6 google access type for the VMs in this subnet.`,
185+
},
180186
"purpose": {
181187
Type: schema.TypeString,
182188
Computed: true,
@@ -376,6 +382,12 @@ func resourceComputeSubnetworkCreate(d *schema.ResourceData, meta interface{}) e
376382
} else if v, ok := d.GetOkExists("private_ip_google_access"); !isEmptyValue(reflect.ValueOf(privateIpGoogleAccessProp)) && (ok || !reflect.DeepEqual(v, privateIpGoogleAccessProp)) {
377383
obj["privateIpGoogleAccess"] = privateIpGoogleAccessProp
378384
}
385+
privateIpv6GoogleAccessProp, err := expandComputeSubnetworkPrivateIpv6GoogleAccess(d.Get("private_ipv6_google_access"), d, config)
386+
if err != nil {
387+
return err
388+
} else if v, ok := d.GetOkExists("private_ipv6_google_access"); !isEmptyValue(reflect.ValueOf(privateIpv6GoogleAccessProp)) && (ok || !reflect.DeepEqual(v, privateIpv6GoogleAccessProp)) {
389+
obj["privateIpv6GoogleAccess"] = privateIpv6GoogleAccessProp
390+
}
379391
regionProp, err := expandComputeSubnetworkRegion(d.Get("region"), d, config)
380392
if err != nil {
381393
return err
@@ -499,6 +511,9 @@ func resourceComputeSubnetworkRead(d *schema.ResourceData, meta interface{}) err
499511
if err := d.Set("private_ip_google_access", flattenComputeSubnetworkPrivateIpGoogleAccess(res["privateIpGoogleAccess"], d, config)); err != nil {
500512
return fmt.Errorf("Error reading Subnetwork: %s", err)
501513
}
514+
if err := d.Set("private_ipv6_google_access", flattenComputeSubnetworkPrivateIpv6GoogleAccess(res["privateIpv6GoogleAccess"], d, config)); err != nil {
515+
return fmt.Errorf("Error reading Subnetwork: %s", err)
516+
}
502517
if err := d.Set("region", flattenComputeSubnetworkRegion(res["region"], d, config)); err != nil {
503518
return fmt.Errorf("Error reading Subnetwork: %s", err)
504519
}
@@ -597,6 +612,40 @@ func resourceComputeSubnetworkUpdate(d *schema.ResourceData, meta interface{}) e
597612
return err
598613
}
599614
}
615+
if d.HasChange("private_ipv6_google_access") {
616+
obj := make(map[string]interface{})
617+
618+
privateIpv6GoogleAccessProp, err := expandComputeSubnetworkPrivateIpv6GoogleAccess(d.Get("private_ipv6_google_access"), d, config)
619+
if err != nil {
620+
return err
621+
} else if v, ok := d.GetOkExists("private_ipv6_google_access"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, privateIpv6GoogleAccessProp)) {
622+
obj["privateIpv6GoogleAccess"] = privateIpv6GoogleAccessProp
623+
}
624+
625+
url, err := replaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/regions/{{region}}/subnetworks/{{name}}")
626+
if err != nil {
627+
return err
628+
}
629+
630+
// err == nil indicates that the billing_project value was found
631+
if bp, err := getBillingProject(d, config); err == nil {
632+
billingProject = bp
633+
}
634+
635+
res, err := sendRequestWithTimeout(config, "PATCH", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutUpdate))
636+
if err != nil {
637+
return fmt.Errorf("Error updating Subnetwork %q: %s", d.Id(), err)
638+
} else {
639+
log.Printf("[DEBUG] Finished updating Subnetwork %q: %#v", d.Id(), res)
640+
}
641+
642+
err = computeOperationWaitTime(
643+
config, res, project, "Updating Subnetwork", userAgent,
644+
d.Timeout(schema.TimeoutUpdate))
645+
if err != nil {
646+
return err
647+
}
648+
}
600649
if d.HasChange("log_config") {
601650
obj := make(map[string]interface{})
602651

@@ -888,6 +937,10 @@ func flattenComputeSubnetworkPrivateIpGoogleAccess(v interface{}, d *schema.Reso
888937
return v
889938
}
890939

940+
func flattenComputeSubnetworkPrivateIpv6GoogleAccess(v interface{}, d *schema.ResourceData, config *Config) interface{} {
941+
return v
942+
}
943+
891944
func flattenComputeSubnetworkRegion(v interface{}, d *schema.ResourceData, config *Config) interface{} {
892945
if v == nil {
893946
return v
@@ -997,6 +1050,10 @@ func expandComputeSubnetworkPrivateIpGoogleAccess(v interface{}, d TerraformReso
9971050
return v, nil
9981051
}
9991052

1053+
func expandComputeSubnetworkPrivateIpv6GoogleAccess(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
1054+
return v, nil
1055+
}
1056+
10001057
func expandComputeSubnetworkRegion(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
10011058
f, err := parseGlobalFieldValue("regions", v.(string), "project", d, config, true)
10021059
if err != nil {

website/docs/r/compute_subnetwork.html.markdown

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ The following arguments are supported:
208208
When enabled, VMs in this subnetwork without external IP addresses can
209209
access Google APIs and services by using Private Google Access.
210210

211+
* `private_ipv6_google_access` -
212+
(Optional)
213+
The private IPv6 google access type for the VMs in this subnet.
214+
211215
* `region` -
212216
(Optional)
213217
The GCP region for this subnetwork.

0 commit comments

Comments
 (0)