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