@@ -1185,6 +1185,7 @@ func ResourceDataprocCluster() *schema.Resource {
1185
1185
ForceNew : true ,
1186
1186
AtLeastOneOf : []string {
1187
1187
"cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.instance_selection_list" ,
1188
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.provisioning_model_mix" ,
1188
1189
},
1189
1190
Description : `List of instance selection options that the group will use when creating new VMs.` ,
1190
1191
Elem : & schema.Resource {
@@ -1229,6 +1230,36 @@ func ResourceDataprocCluster() *schema.Resource {
1229
1230
},
1230
1231
},
1231
1232
},
1233
+ "provisioning_model_mix" : {
1234
+ Type : schema .TypeList ,
1235
+ Optional : true ,
1236
+ ForceNew : true ,
1237
+ AtLeastOneOf : []string {
1238
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.instance_selection_list" ,
1239
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.provisioning_model_mix" ,
1240
+ },
1241
+ MaxItems : 1 ,
1242
+ Description : `Defines how Dataproc should create VMs with a mixture of provisioning models.` ,
1243
+ Elem : & schema.Resource {
1244
+ Schema : map [string ]* schema.Schema {
1245
+ "standard_capacity_base" : {
1246
+ Type : schema .TypeInt ,
1247
+ Optional : true ,
1248
+ ForceNew : true ,
1249
+ Description : `The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need.` ,
1250
+ ValidateFunc : validation .IntAtLeast (0 ),
1251
+ },
1252
+
1253
+ "standard_capacity_percent_above_base" : {
1254
+ Type : schema .TypeInt ,
1255
+ Optional : true ,
1256
+ ForceNew : true ,
1257
+ Description : `The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.` ,
1258
+ ValidateFunc : validation .IntBetween (0 , 100 ),
1259
+ },
1260
+ },
1261
+ },
1262
+ },
1232
1263
},
1233
1264
},
1234
1265
},
@@ -2415,6 +2446,9 @@ func expandPreemptibleInstanceGroupConfig(cfg map[string]interface{}) *dataproc.
2415
2446
if v , ok := flexibilityPolicy ["instance_selection_list" ]; ok {
2416
2447
icg .InstanceFlexibilityPolicy .InstanceSelectionList = expandInstanceSelectionList (v )
2417
2448
}
2449
+ if v , ok := flexibilityPolicy ["provisioning_model_mix" ]; ok {
2450
+ icg .InstanceFlexibilityPolicy .ProvisioningModelMix = expandProvisioningModelMix (v )
2451
+ }
2418
2452
}
2419
2453
2420
2454
}
@@ -2446,6 +2480,18 @@ func expandInstanceSelectionList(v interface{}) []*dataproc.InstanceSelection {
2446
2480
return instanceSelections
2447
2481
}
2448
2482
2483
+ func expandProvisioningModelMix (v interface {}) * dataproc.ProvisioningModelMix {
2484
+ pmm := v .([]interface {})
2485
+ if len (pmm ) > 0 {
2486
+ provisioningModelMix := pmm [0 ].(map [string ]interface {})
2487
+ return & dataproc.ProvisioningModelMix {
2488
+ StandardCapacityBase : int64 (provisioningModelMix ["standard_capacity_base" ].(int )),
2489
+ StandardCapacityPercentAboveBase : int64 (provisioningModelMix ["standard_capacity_percent_above_base" ].(int )),
2490
+ }
2491
+ }
2492
+ return nil
2493
+ }
2494
+
2449
2495
func expandMasterInstanceGroupConfig (cfg map [string ]interface {}) * dataproc.InstanceGroupConfig {
2450
2496
icg := & dataproc.InstanceGroupConfig {}
2451
2497
@@ -3186,8 +3232,13 @@ func flattenPreemptibleInstanceGroupConfig(d *schema.ResourceData, icg *dataproc
3186
3232
disk ["local_ssd_interface" ] = icg .DiskConfig .LocalSsdInterface
3187
3233
}
3188
3234
if icg .InstanceFlexibilityPolicy != nil {
3189
- instanceFlexibilityPolicy ["instance_selection_list" ] = flattenInstanceSelectionList (icg .InstanceFlexibilityPolicy .InstanceSelectionList )
3190
- instanceFlexibilityPolicy ["instance_selection_results" ] = flattenInstanceSelectionResults (icg .InstanceFlexibilityPolicy .InstanceSelectionResults )
3235
+ if icg .InstanceFlexibilityPolicy .InstanceSelectionList != nil {
3236
+ instanceFlexibilityPolicy ["instance_selection_list" ] = flattenInstanceSelectionList (icg .InstanceFlexibilityPolicy .InstanceSelectionList )
3237
+ instanceFlexibilityPolicy ["instance_selection_results" ] = flattenInstanceSelectionResults (icg .InstanceFlexibilityPolicy .InstanceSelectionResults )
3238
+ }
3239
+ if icg .InstanceFlexibilityPolicy .ProvisioningModelMix != nil {
3240
+ instanceFlexibilityPolicy ["provisioning_model_mix" ] = flattenProvisioningModelMix (icg .InstanceFlexibilityPolicy .ProvisioningModelMix )
3241
+ }
3191
3242
}
3192
3243
}
3193
3244
@@ -3224,6 +3275,14 @@ func flattenInstanceSelectionResults(isr []*dataproc.InstanceSelectionResult) []
3224
3275
3225
3276
}
3226
3277
3278
+ func flattenProvisioningModelMix (pmm * dataproc.ProvisioningModelMix ) []map [string ]interface {} {
3279
+ provisioningModelMix := map [string ]interface {}{}
3280
+ provisioningModelMix ["standard_capacity_base" ] = pmm .StandardCapacityBase
3281
+ provisioningModelMix ["standard_capacity_percent_above_base" ] = pmm .StandardCapacityPercentAboveBase
3282
+
3283
+ return []map [string ]interface {}{provisioningModelMix }
3284
+ }
3285
+
3227
3286
func flattenMasterInstanceGroupConfig (d * schema.ResourceData , icg * dataproc.InstanceGroupConfig ) []map [string ]interface {} {
3228
3287
disk := map [string ]interface {}{}
3229
3288
data := map [string ]interface {}{}
0 commit comments