@@ -365,6 +365,40 @@ with RFC1035.`,
365
365
},
366
366
ConflictsWith : []string {"group_placement_policy" , "instance_schedule_policy" , "disk_consistency_group_policy" },
367
367
},
368
+ "workload_policy" : {
369
+ Type : schema .TypeList ,
370
+ Optional : true ,
371
+ Description : `Represents the workload policy.` ,
372
+ MaxItems : 1 ,
373
+ Elem : & schema.Resource {
374
+ Schema : map [string ]* schema.Schema {
375
+ "type" : {
376
+ Type : schema .TypeString ,
377
+ Required : true ,
378
+ ForceNew : true ,
379
+ ValidateFunc : verify .ValidateEnum ([]string {"HIGH_AVAILABILITY" , "HIGH_THROUGHPUT" }),
380
+ Description : `The type of workload policy. Possible values: ["HIGH_AVAILABILITY", "HIGH_THROUGHPUT"]` ,
381
+ },
382
+ "accelerator_topology" : {
383
+ Type : schema .TypeString ,
384
+ Optional : true ,
385
+ ForceNew : true ,
386
+ Description : `The accelerator topology. This field can be set only when the workload policy type is HIGH_THROUGHPUT
387
+ and cannot be set if max topology distance is set.` ,
388
+ ConflictsWith : []string {"workload_policy.0.max_topology_distance" },
389
+ },
390
+ "max_topology_distance" : {
391
+ Type : schema .TypeString ,
392
+ Optional : true ,
393
+ ForceNew : true ,
394
+ ValidateFunc : verify .ValidateEnum ([]string {"BLOCK" , "CLUSTER" , "SUBBLOCK" , "" }),
395
+ Description : `The maximum topology distance. This field can be set only when the workload policy type is HIGH_THROUGHPUT
396
+ and cannot be set if accelerator topology is set. Possible values: ["BLOCK", "CLUSTER", "SUBBLOCK"]` ,
397
+ ConflictsWith : []string {"workload_policy.0.accelerator_topology" },
398
+ },
399
+ },
400
+ },
401
+ },
368
402
"project" : {
369
403
Type : schema .TypeString ,
370
404
Optional : true ,
@@ -443,6 +477,12 @@ func resourceComputeResourcePolicyCreate(d *schema.ResourceData, meta interface{
443
477
} else if v , ok := d .GetOkExists ("disk_consistency_group_policy" ); ok || ! reflect .DeepEqual (v , diskConsistencyGroupPolicyProp ) {
444
478
obj ["diskConsistencyGroupPolicy" ] = diskConsistencyGroupPolicyProp
445
479
}
480
+ workloadPolicyProp , err := expandComputeResourcePolicyWorkloadPolicy (d .Get ("workload_policy" ), d , config )
481
+ if err != nil {
482
+ return err
483
+ } else if v , ok := d .GetOkExists ("workload_policy" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (workloadPolicyProp )) && (ok || ! reflect .DeepEqual (v , workloadPolicyProp )) {
484
+ obj ["workloadPolicy" ] = workloadPolicyProp
485
+ }
446
486
regionProp , err := expandComputeResourcePolicyRegion (d .Get ("region" ), d , config )
447
487
if err != nil {
448
488
return err
@@ -574,6 +614,9 @@ func resourceComputeResourcePolicyRead(d *schema.ResourceData, meta interface{})
574
614
if err := d .Set ("disk_consistency_group_policy" , flattenComputeResourcePolicyDiskConsistencyGroupPolicy (res ["diskConsistencyGroupPolicy" ], d , config )); err != nil {
575
615
return fmt .Errorf ("Error reading ResourcePolicy: %s" , err )
576
616
}
617
+ if err := d .Set ("workload_policy" , flattenComputeResourcePolicyWorkloadPolicy (res ["workloadPolicy" ], d , config )); err != nil {
618
+ return fmt .Errorf ("Error reading ResourcePolicy: %s" , err )
619
+ }
577
620
if err := d .Set ("self_link" , tpgresource .ConvertSelfLinkToV1 (res ["selfLink" ].(string ))); err != nil {
578
621
return fmt .Errorf ("Error reading ResourcePolicy: %s" , err )
579
622
}
@@ -633,6 +676,12 @@ func resourceComputeResourcePolicyUpdate(d *schema.ResourceData, meta interface{
633
676
} else if v , ok := d .GetOkExists ("disk_consistency_group_policy" ); ok || ! reflect .DeepEqual (v , diskConsistencyGroupPolicyProp ) {
634
677
obj ["diskConsistencyGroupPolicy" ] = diskConsistencyGroupPolicyProp
635
678
}
679
+ workloadPolicyProp , err := expandComputeResourcePolicyWorkloadPolicy (d .Get ("workload_policy" ), d , config )
680
+ if err != nil {
681
+ return err
682
+ } else if v , ok := d .GetOkExists ("workload_policy" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , workloadPolicyProp )) {
683
+ obj ["workloadPolicy" ] = workloadPolicyProp
684
+ }
636
685
637
686
url , err := tpgresource .ReplaceVars (d , config , "{{ComputeBasePath}}projects/{{project}}/regions/{{region}}/resourcePolicies/{{name}}" )
638
687
if err != nil {
@@ -1136,6 +1185,35 @@ func flattenComputeResourcePolicyDiskConsistencyGroupPolicy(v interface{}, d *sc
1136
1185
return []interface {}{transformed }
1137
1186
}
1138
1187
1188
+ func flattenComputeResourcePolicyWorkloadPolicy (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1189
+ if v == nil {
1190
+ return nil
1191
+ }
1192
+ original := v .(map [string ]interface {})
1193
+ if len (original ) == 0 {
1194
+ return nil
1195
+ }
1196
+ transformed := make (map [string ]interface {})
1197
+ transformed ["type" ] =
1198
+ flattenComputeResourcePolicyWorkloadPolicyType (original ["type" ], d , config )
1199
+ transformed ["max_topology_distance" ] =
1200
+ flattenComputeResourcePolicyWorkloadPolicyMaxTopologyDistance (original ["maxTopologyDistance" ], d , config )
1201
+ transformed ["accelerator_topology" ] =
1202
+ flattenComputeResourcePolicyWorkloadPolicyAcceleratorTopology (original ["acceleratorTopology" ], d , config )
1203
+ return []interface {}{transformed }
1204
+ }
1205
+ func flattenComputeResourcePolicyWorkloadPolicyType (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1206
+ return v
1207
+ }
1208
+
1209
+ func flattenComputeResourcePolicyWorkloadPolicyMaxTopologyDistance (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1210
+ return v
1211
+ }
1212
+
1213
+ func flattenComputeResourcePolicyWorkloadPolicyAcceleratorTopology (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1214
+ return v
1215
+ }
1216
+
1139
1217
func expandComputeResourcePolicyName (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1140
1218
return v , nil
1141
1219
}
@@ -1622,6 +1700,51 @@ func expandComputeResourcePolicyDiskConsistencyGroupPolicy(v interface{}, d tpgr
1622
1700
return transformed , nil
1623
1701
}
1624
1702
1703
+ func expandComputeResourcePolicyWorkloadPolicy (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1704
+ l := v .([]interface {})
1705
+ if len (l ) == 0 || l [0 ] == nil {
1706
+ return nil , nil
1707
+ }
1708
+ raw := l [0 ]
1709
+ original := raw .(map [string ]interface {})
1710
+ transformed := make (map [string ]interface {})
1711
+
1712
+ transformedType , err := expandComputeResourcePolicyWorkloadPolicyType (original ["type" ], d , config )
1713
+ if err != nil {
1714
+ return nil , err
1715
+ } else if val := reflect .ValueOf (transformedType ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1716
+ transformed ["type" ] = transformedType
1717
+ }
1718
+
1719
+ transformedMaxTopologyDistance , err := expandComputeResourcePolicyWorkloadPolicyMaxTopologyDistance (original ["max_topology_distance" ], d , config )
1720
+ if err != nil {
1721
+ return nil , err
1722
+ } else if val := reflect .ValueOf (transformedMaxTopologyDistance ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1723
+ transformed ["maxTopologyDistance" ] = transformedMaxTopologyDistance
1724
+ }
1725
+
1726
+ transformedAcceleratorTopology , err := expandComputeResourcePolicyWorkloadPolicyAcceleratorTopology (original ["accelerator_topology" ], d , config )
1727
+ if err != nil {
1728
+ return nil , err
1729
+ } else if val := reflect .ValueOf (transformedAcceleratorTopology ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1730
+ transformed ["acceleratorTopology" ] = transformedAcceleratorTopology
1731
+ }
1732
+
1733
+ return transformed , nil
1734
+ }
1735
+
1736
+ func expandComputeResourcePolicyWorkloadPolicyType (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1737
+ return v , nil
1738
+ }
1739
+
1740
+ func expandComputeResourcePolicyWorkloadPolicyMaxTopologyDistance (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1741
+ return v , nil
1742
+ }
1743
+
1744
+ func expandComputeResourcePolicyWorkloadPolicyAcceleratorTopology (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1745
+ return v , nil
1746
+ }
1747
+
1625
1748
func expandComputeResourcePolicyRegion (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1626
1749
f , err := tpgresource .ParseGlobalFieldValue ("regions" , v .(string ), "project" , d , config , true )
1627
1750
if err != nil {
0 commit comments