in pkg/tfplan2cai/converters/services/compute/compute_instance_helpers.go [76:200]
func expandScheduling(v interface{}) (*compute.Scheduling, error) {
if v == nil {
// We can't set default values for lists.
return &compute.Scheduling{
AutomaticRestart: googleapi.Bool(true),
}, nil
}
ls := v.([]interface{})
if len(ls) == 0 {
// We can't set default values for lists
return &compute.Scheduling{
AutomaticRestart: googleapi.Bool(true),
}, nil
}
if len(ls) > 1 || ls[0] == nil {
return nil, fmt.Errorf("expected exactly one scheduling block")
}
original := ls[0].(map[string]interface{})
scheduling := &compute.Scheduling{
ForceSendFields: make([]string, 0, 4),
}
if v, ok := original["automatic_restart"]; ok {
scheduling.AutomaticRestart = googleapi.Bool(v.(bool))
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "AutomaticRestart")
}
if v, ok := original["preemptible"]; ok {
scheduling.Preemptible = v.(bool)
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "Preemptible")
}
if v, ok := original["on_host_maintenance"]; ok {
scheduling.OnHostMaintenance = v.(string)
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "OnHostMaintenance")
}
if v, ok := original["node_affinities"]; ok && v != nil {
naSet := v.(*schema.Set).List()
scheduling.NodeAffinities = make([]*compute.SchedulingNodeAffinity, len(ls))
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "NodeAffinities")
for _, nodeAffRaw := range naSet {
if nodeAffRaw == nil {
continue
}
nodeAff := nodeAffRaw.(map[string]interface{})
transformed := &compute.SchedulingNodeAffinity{
Key: nodeAff["key"].(string),
Operator: nodeAff["operator"].(string),
Values: tpgresource.ConvertStringArr(nodeAff["values"].(*schema.Set).List()),
}
scheduling.NodeAffinities = append(scheduling.NodeAffinities, transformed)
}
}
if v, ok := original["min_node_cpus"]; ok {
scheduling.MinNodeCpus = int64(v.(int))
}
if v, ok := original["provisioning_model"]; ok {
scheduling.ProvisioningModel = v.(string)
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "ProvisioningModel")
}
if v, ok := original["instance_termination_action"]; ok {
scheduling.InstanceTerminationAction = v.(string)
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "InstanceTerminationAction")
}
if v, ok := original["availability_domain"]; ok && v != nil {
scheduling.AvailabilityDomain = int64(v.(int))
}
if v, ok := original["max_run_duration"]; ok {
transformedMaxRunDuration, err := expandComputeMaxRunDuration(v)
if err != nil {
return nil, err
}
scheduling.MaxRunDuration = transformedMaxRunDuration
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "MaxRunDuration")
}
if v, ok := original["on_instance_stop_action"]; ok {
transformedOnInstanceStopAction, err := expandComputeOnInstanceStopAction(v)
if err != nil {
return nil, err
}
scheduling.OnInstanceStopAction = transformedOnInstanceStopAction
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "OnInstanceStopAction")
}
if v, ok := original["host_error_timeout_seconds"]; ok {
scheduling.HostErrorTimeoutSeconds = int64(v.(int))
//host_error_timeout_seconds doesn't get removed correctly due to an API bug on instances.SetScheduling.
//We need to set it to NullFields as a workaround because nil is rounded to 0
if v == 0 || v == nil {
scheduling.NullFields = append(scheduling.NullFields, "HostErrorTimeoutSeconds")
} else {
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "HostErrorTimeoutSeconds")
}
}
if v, ok := original["maintenance_interval"]; ok {
scheduling.MaintenanceInterval = v.(string)
}
if v, ok := original["graceful_shutdown"]; ok {
transformedGracefulShutdown, err := expandGracefulShutdown(v)
if err != nil {
return nil, err
}
scheduling.GracefulShutdown = transformedGracefulShutdown
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "GracefulShutdown")
}
if v, ok := original["local_ssd_recovery_timeout"]; ok {
transformedLocalSsdRecoveryTimeout, err := expandComputeLocalSsdRecoveryTimeout(v)
if err != nil {
return nil, err
}
scheduling.LocalSsdRecoveryTimeout = transformedLocalSsdRecoveryTimeout
scheduling.ForceSendFields = append(scheduling.ForceSendFields, "LocalSsdRecoveryTimeout")
}
if v, ok := original["termination_time"]; ok {
scheduling.TerminationTime = v.(string)
}
return scheduling, nil
}