@@ -351,6 +351,14 @@ This field can only be set when enableDynamicPortAllocation is enabled.`,
351
351
Optional : true ,
352
352
Description : `Minimum number of ports allocated to a VM from this NAT. Defaults to 64 for static port allocation and 32 dynamic port allocation if not set.` ,
353
353
},
354
+ "nat64_subnetwork" : {
355
+ Type : schema .TypeSet ,
356
+ Optional : true ,
357
+ Description : `One or more subnetwork NAT configurations whose traffic should be translated by NAT64 Gateway.
358
+ Only used if 'source_subnetwork_ip_ranges_to_nat64' is set to 'LIST_OF_IPV6_SUBNETWORKS'` ,
359
+ Elem : computeRouterNatNat64SubnetworkSchema (),
360
+ Set : computeRouterNatSubnetworkHash ,
361
+ },
354
362
"nat_ip_allocate_option" : {
355
363
Type : schema .TypeString ,
356
364
Optional : true ,
@@ -389,6 +397,16 @@ the number of resources can be increased/decreased without triggering the 'resou
389
397
Elem : computeRouterNatRulesSchema (),
390
398
Set : computeRouterNatRulesHash ,
391
399
},
400
+ "source_subnetwork_ip_ranges_to_nat64" : {
401
+ Type : schema .TypeString ,
402
+ Optional : true ,
403
+ ValidateFunc : verify .ValidateEnum ([]string {"ALL_IPV6_SUBNETWORKS" , "LIST_OF_IPV6_SUBNETWORKS" , "" }),
404
+ Description : `Specify the Nat option for NAT64, which can take one of the following values:
405
+ ALL_IPV6_SUBNETWORKS: All of the IP ranges in every Subnetwork are allowed to Nat.
406
+ LIST_OF_IPV6_SUBNETWORKS: A list of Subnetworks are allowed to Nat (specified in the field nat64Subnetwork below).
407
+ Note that if this field contains NAT64_ALL_V6_SUBNETWORKS no other Router.Nat section in this region can also enable NAT64 for any Subnetworks in this network.
408
+ Other Router.Nat sections can still be present to enable NAT44 only. Possible values: ["ALL_IPV6_SUBNETWORKS", "LIST_OF_IPV6_SUBNETWORKS"]` ,
409
+ },
392
410
"subnetwork" : {
393
411
Type : schema .TypeSet ,
394
412
Optional : true ,
@@ -484,6 +502,19 @@ sourceIpRangesToNat`,
484
502
}
485
503
}
486
504
505
+ func computeRouterNatNat64SubnetworkSchema () * schema.Resource {
506
+ return & schema.Resource {
507
+ Schema : map [string ]* schema.Schema {
508
+ "name" : {
509
+ Type : schema .TypeString ,
510
+ Required : true ,
511
+ DiffSuppressFunc : tpgresource .CompareSelfLinkOrResourceName ,
512
+ Description : `Self-link of the subnetwork resource that will use NAT64` ,
513
+ },
514
+ },
515
+ }
516
+ }
517
+
487
518
func computeRouterNatRulesSchema () * schema.Resource {
488
519
return & schema.Resource {
489
520
Schema : map [string ]* schema.Schema {
@@ -629,6 +660,18 @@ func resourceComputeRouterNatCreate(d *schema.ResourceData, meta interface{}) er
629
660
} else if v , ok := d .GetOkExists ("subnetwork" ); ok || ! reflect .DeepEqual (v , subnetworksProp ) {
630
661
obj ["subnetworks" ] = subnetworksProp
631
662
}
663
+ sourceSubnetworkIpRangesToNat64Prop , err := expandNestedComputeRouterNatSourceSubnetworkIpRangesToNat64 (d .Get ("source_subnetwork_ip_ranges_to_nat64" ), d , config )
664
+ if err != nil {
665
+ return err
666
+ } else if v , ok := d .GetOkExists ("source_subnetwork_ip_ranges_to_nat64" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (sourceSubnetworkIpRangesToNat64Prop )) && (ok || ! reflect .DeepEqual (v , sourceSubnetworkIpRangesToNat64Prop )) {
667
+ obj ["sourceSubnetworkIpRangesToNat64" ] = sourceSubnetworkIpRangesToNat64Prop
668
+ }
669
+ nat64SubnetworksProp , err := expandNestedComputeRouterNatNat64Subnetwork (d .Get ("nat64_subnetwork" ), d , config )
670
+ if err != nil {
671
+ return err
672
+ } else if v , ok := d .GetOkExists ("nat64_subnetwork" ); ok || ! reflect .DeepEqual (v , nat64SubnetworksProp ) {
673
+ obj ["nat64Subnetworks" ] = nat64SubnetworksProp
674
+ }
632
675
minPortsPerVmProp , err := expandNestedComputeRouterNatMinPortsPerVm (d .Get ("min_ports_per_vm" ), d , config )
633
676
if err != nil {
634
677
return err
@@ -885,6 +928,12 @@ func resourceComputeRouterNatRead(d *schema.ResourceData, meta interface{}) erro
885
928
if err := d .Set ("subnetwork" , flattenNestedComputeRouterNatSubnetwork (res ["subnetworks" ], d , config )); err != nil {
886
929
return fmt .Errorf ("Error reading RouterNat: %s" , err )
887
930
}
931
+ if err := d .Set ("source_subnetwork_ip_ranges_to_nat64" , flattenNestedComputeRouterNatSourceSubnetworkIpRangesToNat64 (res ["sourceSubnetworkIpRangesToNat64" ], d , config )); err != nil {
932
+ return fmt .Errorf ("Error reading RouterNat: %s" , err )
933
+ }
934
+ if err := d .Set ("nat64_subnetwork" , flattenNestedComputeRouterNatNat64Subnetwork (res ["nat64Subnetworks" ], d , config )); err != nil {
935
+ return fmt .Errorf ("Error reading RouterNat: %s" , err )
936
+ }
888
937
if err := d .Set ("min_ports_per_vm" , flattenNestedComputeRouterNatMinPortsPerVm (res ["minPortsPerVm" ], d , config )); err != nil {
889
938
return fmt .Errorf ("Error reading RouterNat: %s" , err )
890
939
}
@@ -977,6 +1026,18 @@ func resourceComputeRouterNatUpdate(d *schema.ResourceData, meta interface{}) er
977
1026
} else if v , ok := d .GetOkExists ("subnetwork" ); ok || ! reflect .DeepEqual (v , subnetworksProp ) {
978
1027
obj ["subnetworks" ] = subnetworksProp
979
1028
}
1029
+ sourceSubnetworkIpRangesToNat64Prop , err := expandNestedComputeRouterNatSourceSubnetworkIpRangesToNat64 (d .Get ("source_subnetwork_ip_ranges_to_nat64" ), d , config )
1030
+ if err != nil {
1031
+ return err
1032
+ } else if v , ok := d .GetOkExists ("source_subnetwork_ip_ranges_to_nat64" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , sourceSubnetworkIpRangesToNat64Prop )) {
1033
+ obj ["sourceSubnetworkIpRangesToNat64" ] = sourceSubnetworkIpRangesToNat64Prop
1034
+ }
1035
+ nat64SubnetworksProp , err := expandNestedComputeRouterNatNat64Subnetwork (d .Get ("nat64_subnetwork" ), d , config )
1036
+ if err != nil {
1037
+ return err
1038
+ } else if v , ok := d .GetOkExists ("nat64_subnetwork" ); ok || ! reflect .DeepEqual (v , nat64SubnetworksProp ) {
1039
+ obj ["nat64Subnetworks" ] = nat64SubnetworksProp
1040
+ }
980
1041
minPortsPerVmProp , err := expandNestedComputeRouterNatMinPortsPerVm (d .Get ("min_ports_per_vm" ), d , config )
981
1042
if err != nil {
982
1043
return err
@@ -1290,6 +1351,35 @@ func flattenNestedComputeRouterNatSubnetworkSecondaryIpRangeNames(v interface{},
1290
1351
return schema .NewSet (schema .HashString , v .([]interface {}))
1291
1352
}
1292
1353
1354
+ func flattenNestedComputeRouterNatSourceSubnetworkIpRangesToNat64 (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1355
+ return v
1356
+ }
1357
+
1358
+ func flattenNestedComputeRouterNatNat64Subnetwork (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1359
+ if v == nil {
1360
+ return v
1361
+ }
1362
+ l := v .([]interface {})
1363
+ transformed := schema .NewSet (computeRouterNatSubnetworkHash , []interface {}{})
1364
+ for _ , raw := range l {
1365
+ original := raw .(map [string ]interface {})
1366
+ if len (original ) < 1 {
1367
+ // Do not include empty json objects coming back from the api
1368
+ continue
1369
+ }
1370
+ transformed .Add (map [string ]interface {}{
1371
+ "name" : flattenNestedComputeRouterNatNat64SubnetworkName (original ["name" ], d , config ),
1372
+ })
1373
+ }
1374
+ return transformed
1375
+ }
1376
+ func flattenNestedComputeRouterNatNat64SubnetworkName (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1377
+ if v == nil {
1378
+ return v
1379
+ }
1380
+ return tpgresource .ConvertSelfLinkToV1 (v .(string ))
1381
+ }
1382
+
1293
1383
func flattenNestedComputeRouterNatMinPortsPerVm (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1294
1384
// Handles the string fixed64 format
1295
1385
if strVal , ok := v .(string ); ok {
@@ -1648,6 +1738,41 @@ func expandNestedComputeRouterNatSubnetworkSecondaryIpRangeNames(v interface{},
1648
1738
return v , nil
1649
1739
}
1650
1740
1741
+ func expandNestedComputeRouterNatSourceSubnetworkIpRangesToNat64 (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1742
+ return v , nil
1743
+ }
1744
+
1745
+ func expandNestedComputeRouterNatNat64Subnetwork (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1746
+ v = v .(* schema.Set ).List ()
1747
+ l := v .([]interface {})
1748
+ req := make ([]interface {}, 0 , len (l ))
1749
+ for _ , raw := range l {
1750
+ if raw == nil {
1751
+ continue
1752
+ }
1753
+ original := raw .(map [string ]interface {})
1754
+ transformed := make (map [string ]interface {})
1755
+
1756
+ transformedName , err := expandNestedComputeRouterNatNat64SubnetworkName (original ["name" ], d , config )
1757
+ if err != nil {
1758
+ return nil , err
1759
+ } else if val := reflect .ValueOf (transformedName ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1760
+ transformed ["name" ] = transformedName
1761
+ }
1762
+
1763
+ req = append (req , transformed )
1764
+ }
1765
+ return req , nil
1766
+ }
1767
+
1768
+ func expandNestedComputeRouterNatNat64SubnetworkName (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1769
+ f , err := tpgresource .ParseRegionalFieldValue ("subnetworks" , v .(string ), "project" , "region" , "zone" , d , config , true )
1770
+ if err != nil {
1771
+ return nil , fmt .Errorf ("Invalid value for name: %s" , err )
1772
+ }
1773
+ return f .RelativeLink (), nil
1774
+ }
1775
+
1651
1776
func expandNestedComputeRouterNatMinPortsPerVm (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1652
1777
return v , nil
1653
1778
}
@@ -2021,6 +2146,8 @@ func resourceComputeRouterNatPatchUpdateEncoder(d *schema.ResourceData, meta int
2021
2146
"drainNatIps" : struct {}{},
2022
2147
"sourceSubnetworkIpRangesToNat" : struct {}{},
2023
2148
"subnetworks" : struct {}{},
2149
+ "sourceSubnetworkIpRangesToNat64" : struct {}{},
2150
+ "nat64Subnetworks" : struct {}{},
2024
2151
"minPortsPerVm" : struct {}{},
2025
2152
"maxPortsPerVm" : struct {}{},
2026
2153
"enableDynamicPortAllocation" : struct {}{},
0 commit comments