@@ -1227,6 +1227,35 @@ func ResourceDataprocCluster() *schema.Resource {
1227
1227
},
1228
1228
},
1229
1229
},
1230
+ "provisioning_model_mix" : {
1231
+ Type : schema .TypeList ,
1232
+ Optional : true ,
1233
+ Computed : true ,
1234
+ AtLeastOneOf : []string {
1235
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.provisioning_model_mix.0.standard_capacity_base" ,
1236
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.provisioning_model_mix.0.standard_capacity_percent_above_base" ,
1237
+ },
1238
+ MaxItems : 1 ,
1239
+ Description : `Defines how Dataproc should create VMs with a mixture of provisioning models.` ,
1240
+ Elem : & schema.Resource {
1241
+ Schema : map [string ]* schema.Schema {
1242
+ "standard_capacity_base" : {
1243
+ Type : schema .TypeInt ,
1244
+ Optional : true ,
1245
+ Description : `The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need.` ,
1246
+ ValidateFunc : validation .IntAtLeast (0 ),
1247
+ },
1248
+
1249
+ "standard_capacity_percent_above_base" : {
1250
+ Type : schema .TypeInt ,
1251
+ Optional : true ,
1252
+ Description : `The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.` ,
1253
+ ForceNew : true ,
1254
+ ValidateFunc : validation .IntBetween (0 , 100 ),
1255
+ },
1256
+ },
1257
+ },
1258
+ },
1230
1259
},
1231
1260
},
1232
1261
},
@@ -2413,6 +2442,9 @@ func expandPreemptibleInstanceGroupConfig(cfg map[string]interface{}) *dataproc.
2413
2442
if v , ok := flexibilityPolicy ["instance_selection_list" ]; ok {
2414
2443
icg .InstanceFlexibilityPolicy .InstanceSelectionList = expandInstanceSelectionList (v )
2415
2444
}
2445
+ if v , ok := flexibilityPolicy ["provisioning_model_mix" ]; ok {
2446
+ icg .InstanceFlexibilityPolicy .ProvisioningModelMix = expandProvisioningModelMix (v )
2447
+ }
2416
2448
}
2417
2449
2418
2450
}
@@ -2444,6 +2476,18 @@ func expandInstanceSelectionList(v interface{}) []*dataproc.InstanceSelection {
2444
2476
return instanceSelections
2445
2477
}
2446
2478
2479
+ func expandProvisioningModelMix (v interface {}) * dataproc.ProvisioningModelMix {
2480
+ pmm := v .([]interface {})
2481
+ if len (pmm ) > 0 {
2482
+ provisioningModelMix := pmm [0 ].(map [string ]interface {})
2483
+ return & dataproc.ProvisioningModelMix {
2484
+ StandardCapacityBase : int64 (provisioningModelMix ["standard_capacity_base" ].(int )),
2485
+ StandardCapacityPercentAboveBase : int64 (provisioningModelMix ["standard_capacity_percent_above_base" ].(int )),
2486
+ }
2487
+ }
2488
+ return nil
2489
+ }
2490
+
2447
2491
func expandMasterInstanceGroupConfig (cfg map [string ]interface {}) * dataproc.InstanceGroupConfig {
2448
2492
icg := & dataproc.InstanceGroupConfig {}
2449
2493
@@ -3184,8 +3228,13 @@ func flattenPreemptibleInstanceGroupConfig(d *schema.ResourceData, icg *dataproc
3184
3228
disk ["local_ssd_interface" ] = icg .DiskConfig .LocalSsdInterface
3185
3229
}
3186
3230
if icg .InstanceFlexibilityPolicy != nil {
3187
- instanceFlexibilityPolicy ["instance_selection_list" ] = flattenInstanceSelectionList (icg .InstanceFlexibilityPolicy .InstanceSelectionList )
3188
- instanceFlexibilityPolicy ["instance_selection_results" ] = flattenInstanceSelectionResults (icg .InstanceFlexibilityPolicy .InstanceSelectionResults )
3231
+ if icg .InstanceFlexibilityPolicy .InstanceSelectionList != nil {
3232
+ instanceFlexibilityPolicy ["instance_selection_list" ] = flattenInstanceSelectionList (icg .InstanceFlexibilityPolicy .InstanceSelectionList )
3233
+ instanceFlexibilityPolicy ["instance_selection_results" ] = flattenInstanceSelectionResults (icg .InstanceFlexibilityPolicy .InstanceSelectionResults )
3234
+ }
3235
+ if icg .InstanceFlexibilityPolicy .ProvisioningModelMix != nil {
3236
+ instanceFlexibilityPolicy ["provisioning_model_mix" ] = flattenProvisioningModelMix (icg .InstanceFlexibilityPolicy .ProvisioningModelMix )
3237
+ }
3189
3238
}
3190
3239
}
3191
3240
@@ -3222,6 +3271,14 @@ func flattenInstanceSelectionResults(isr []*dataproc.InstanceSelectionResult) []
3222
3271
3223
3272
}
3224
3273
3274
+ func flattenProvisioningModelMix (pmm * dataproc.ProvisioningModelMix ) []map [string ]interface {} {
3275
+ provisioningModelMix := map [string ]interface {}{}
3276
+ provisioningModelMix ["standard_capacity_base" ] = pmm .StandardCapacityBase
3277
+ provisioningModelMix ["standard_capacity_percent_above_base" ] = pmm .StandardCapacityPercentAboveBase
3278
+
3279
+ return []map [string ]interface {}{provisioningModelMix }
3280
+ }
3281
+
3225
3282
func flattenMasterInstanceGroupConfig (d * schema.ResourceData , icg * dataproc.InstanceGroupConfig ) []map [string ]interface {} {
3226
3283
disk := map [string ]interface {}{}
3227
3284
data := map [string ]interface {}{}
0 commit comments