@@ -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,37 @@ func ResourceDataprocCluster() *schema.Resource {
1227
1228
},
1228
1229
},
1229
1230
},
1231
+ "provisioning_model_mix" : {
1232
+ Type : schema .TypeList ,
1233
+ Optional : true ,
1234
+ Computed : true ,
1235
+ AtLeastOneOf : []string {
1236
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.provisioning_model_mix.0.standard_capacity_base" ,
1237
+ "cluster_config.0.preemptible_worker_config.0.instance_flexibility_policy.0.provisioning_model_mix.0.standard_capacity_percent_above_base" ,
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
+ Computed : 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
+ Computed : true ,
1255
+ Description : `The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.` ,
1256
+ ForceNew : true ,
1257
+ ValidateFunc : validation .IntBetween (0 , 100 ),
1258
+ },
1259
+ },
1260
+ },
1261
+ },
1230
1262
},
1231
1263
},
1232
1264
},
@@ -2413,6 +2445,9 @@ func expandPreemptibleInstanceGroupConfig(cfg map[string]interface{}) *dataproc.
2413
2445
if v , ok := flexibilityPolicy ["instance_selection_list" ]; ok {
2414
2446
icg .InstanceFlexibilityPolicy .InstanceSelectionList = expandInstanceSelectionList (v )
2415
2447
}
2448
+ if v , ok := flexibilityPolicy ["provisioning_model_mix" ]; ok {
2449
+ icg .InstanceFlexibilityPolicy .ProvisioningModelMix = expandProvisioningModelMix (v )
2450
+ }
2416
2451
}
2417
2452
2418
2453
}
@@ -2444,6 +2479,18 @@ func expandInstanceSelectionList(v interface{}) []*dataproc.InstanceSelection {
2444
2479
return instanceSelections
2445
2480
}
2446
2481
2482
+ func expandProvisioningModelMix (v interface {}) * dataproc.ProvisioningModelMix {
2483
+ pmm := v .([]interface {})
2484
+ if len (pmm ) > 0 {
2485
+ provisioningModelMix := pmm [0 ].(map [string ]interface {})
2486
+ return & dataproc.ProvisioningModelMix {
2487
+ StandardCapacityBase : int64 (provisioningModelMix ["standard_capacity_base" ].(int )),
2488
+ StandardCapacityPercentAboveBase : int64 (provisioningModelMix ["standard_capacity_percent_above_base" ].(int )),
2489
+ }
2490
+ }
2491
+ return nil
2492
+ }
2493
+
2447
2494
func expandMasterInstanceGroupConfig (cfg map [string ]interface {}) * dataproc.InstanceGroupConfig {
2448
2495
icg := & dataproc.InstanceGroupConfig {}
2449
2496
@@ -3184,8 +3231,13 @@ func flattenPreemptibleInstanceGroupConfig(d *schema.ResourceData, icg *dataproc
3184
3231
disk ["local_ssd_interface" ] = icg .DiskConfig .LocalSsdInterface
3185
3232
}
3186
3233
if icg .InstanceFlexibilityPolicy != nil {
3187
- instanceFlexibilityPolicy ["instance_selection_list" ] = flattenInstanceSelectionList (icg .InstanceFlexibilityPolicy .InstanceSelectionList )
3188
- instanceFlexibilityPolicy ["instance_selection_results" ] = flattenInstanceSelectionResults (icg .InstanceFlexibilityPolicy .InstanceSelectionResults )
3234
+ if icg .InstanceFlexibilityPolicy .InstanceSelectionList != nil {
3235
+ instanceFlexibilityPolicy ["instance_selection_list" ] = flattenInstanceSelectionList (icg .InstanceFlexibilityPolicy .InstanceSelectionList )
3236
+ instanceFlexibilityPolicy ["instance_selection_results" ] = flattenInstanceSelectionResults (icg .InstanceFlexibilityPolicy .InstanceSelectionResults )
3237
+ }
3238
+ if icg .InstanceFlexibilityPolicy .ProvisioningModelMix != nil {
3239
+ instanceFlexibilityPolicy ["provisioning_model_mix" ] = flattenProvisioningModelMix (icg .InstanceFlexibilityPolicy .ProvisioningModelMix )
3240
+ }
3189
3241
}
3190
3242
}
3191
3243
@@ -3222,6 +3274,14 @@ func flattenInstanceSelectionResults(isr []*dataproc.InstanceSelectionResult) []
3222
3274
3223
3275
}
3224
3276
3277
+ func flattenProvisioningModelMix (pmm * dataproc.ProvisioningModelMix ) []map [string ]interface {} {
3278
+ provisioningModelMix := map [string ]interface {}{}
3279
+ provisioningModelMix ["standard_capacity_base" ] = pmm .StandardCapacityBase
3280
+ provisioningModelMix ["standard_capacity_percent_above_base" ] = pmm .StandardCapacityPercentAboveBase
3281
+
3282
+ return []map [string ]interface {}{provisioningModelMix }
3283
+ }
3284
+
3225
3285
func flattenMasterInstanceGroupConfig (d * schema.ResourceData , icg * dataproc.InstanceGroupConfig ) []map [string ]interface {} {
3226
3286
disk := map [string ]interface {}{}
3227
3287
data := map [string ]interface {}{}
0 commit comments