@@ -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
178178access 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+
891944func 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+
10001057func expandComputeSubnetworkRegion (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
10011058 f , err := parseGlobalFieldValue ("regions" , v .(string ), "project" , d , config , true )
10021059 if err != nil {
0 commit comments