in cli_tools/gce_ovf_import/gce_utils/machine_type_provider.go [39:90]
func (mp *MachineTypeProvider) GetMachineType() (string, error) {
if mp.MachineType != "" {
return mp.MachineType, nil
}
virtualSystem, err := ovfutils.GetVirtualSystem(mp.OvfDescriptor)
if err != nil {
return "", err
}
virtualHardwareSection, err := ovfutils.GetVirtualHardwareSection(virtualSystem)
if err != nil {
return "", err
}
memoryMB, err := ovfutils.GetMemoryInMB(virtualHardwareSection)
if err != nil {
return "", err
}
cpuCount, err := ovfutils.GetNumberOfCPUs(virtualHardwareSection)
if err != nil {
return "", err
}
machineTypes, err := mp.ComputeClient.ListMachineTypes(mp.Project, mp.Zone)
if err != nil {
return "", err
}
cpuCountToMachineTypes, cpuCounts := groupMachineTypesByCPUCount(machineTypes)
cpuIndex := 0
memoryIndex := 0
for cpuIndex < len(cpuCounts) {
if cpuCounts[cpuIndex] < cpuCount {
cpuIndex++
memoryIndex = 0
continue
}
for memoryIndex < len(cpuCountToMachineTypes[cpuCounts[cpuIndex]]) &&
cpuCountToMachineTypes[cpuCounts[cpuIndex]][memoryIndex].MemoryMb < memoryMB {
memoryIndex++
}
if memoryIndex >= len(cpuCountToMachineTypes[cpuCounts[cpuIndex]]) {
cpuIndex++
memoryIndex = 0
continue
}
return cpuCountToMachineTypes[cpuCounts[cpuIndex]][memoryIndex].Name, nil
}
return "", daisy.Errf(
"no machine type has at least %v MBs of memory and %v vCPUs", memoryMB, cpuCount)
}