def determine_azure_vm_for_task()

in api-server/tesazure/backends/common/__init__.py [0:0]


def determine_azure_vm_for_task(tes_resources, fallback_cpu_cores=1, fallback_mem_GiB=2, fallback_disk_GiB=10):
    GbToGib = 1000**3 / 1024**3
    cpu_cores = tes_resources.cpu_cores or fallback_cpu_cores
    mem_GiB = tes_resources.ram_gb * GbToGib or fallback_mem_GiB
    disk_GiB = tes_resources.disk_gb * GbToGib or fallback_disk_GiB
    low_prio = tes_resources.preemptible is True  # noqa: F841
    # TODO: support 'zones'

    vms_by_preference = [
        {'sku': 'Standard_A1_v2', 'cpu': 1, 'mem': 2, 'disk': 10, 'ssd': True},
        {'sku': 'Standard_A2m_v2', 'cpu': 2, 'mem': 16, 'disk': 20, 'ssd': True},
        {'sku': 'Standard_A2_v2', 'cpu': 2, 'mem': 4, 'disk': 20, 'ssd': True},
        {'sku': 'Standard_A4m_v2', 'cpu': 4, 'mem': 32, 'disk': 40, 'ssd': True},
        {'sku': 'Standard_A4_v2', 'cpu': 4, 'mem': 8, 'disk': 40, 'ssd': True},
        {'sku': 'Standard_A8m_v2', 'cpu': 8, 'mem': 64, 'disk': 80, 'ssd': True},
        {'sku': 'Standard_A8_v2', 'cpu': 8, 'mem': 16, 'disk': 80, 'ssd': True},
        {'sku': 'Standard_D2_v3', 'cpu': 2, 'mem': 8, 'disk': 50, 'ssd': True},
        {'sku': 'Standard_D4_v3', 'cpu': 4, 'mem': 16, 'disk': 100, 'ssd': True},
        {'sku': 'Standard_D8_v3', 'cpu': 8, 'mem': 32, 'disk': 200, 'ssd': True},
        {'sku': 'Standard_D16_v3', 'cpu': 16, 'mem': 64, 'disk': 400, 'ssd': True},
        {'sku': 'Standard_D32_v3', 'cpu': 32, 'mem': 128, 'disk': 800, 'ssd': True},
        {'sku': 'Standard_D64_v3', 'cpu': 64, 'mem': 256, 'disk': 1600, 'ssd': True},
        {'sku': 'Standard_G1', 'cpu': 2, 'mem': 28, 'disk': 384, 'ssd': True},
        {'sku': 'Standard_G2', 'cpu': 4, 'mem': 56, 'disk': 768, 'ssd': True},
        {'sku': 'Standard_G3', 'cpu': 8, 'mem': 112, 'disk': 1536, 'ssd': True},
        {'sku': 'Standard_G4', 'cpu': 16, 'mem': 224, 'disk': 3072, 'ssd': True},
        {'sku': 'Standard_G5', 'cpu': 32, 'mem': 448, 'disk': 6144, 'ssd': True}
    ]

    remaining_vms = list(filter(lambda vm: vm['cpu'] >= cpu_cores and vm['mem'] >= mem_GiB and vm['disk'] >= disk_GiB, vms_by_preference))
    if remaining_vms:
        return remaining_vms[0]['sku']
    else:
        raise ValueError("No such VM available")