func()

in tools/instance_mapper/instance_mapper.go [559:623]


func (im *InstanceMapper) LoadAzureInstanceTypes(ctx context.Context, subscriptionId string, debug bool) error {
	im.InstanceData.AzureInstances = make(map[string]map[string]InstanceType, 0)
	im.InstanceData.AzureInstances["all"] = make(map[string]InstanceType, 0)

	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		return err
	}

	client := armcompute.NewResourceSKUsClient(subscriptionId, cred, nil)
	pager := client.List(&armcompute.ResourceSKUsListOptions{})
	for pager.NextPage(ctx) {
		for _, instance := range pager.PageResponse().ResourceSKUsResult.Value {
			it := InstanceType{
				InstanceTypeId: *instance.Name,
			}
			if instance.Family != nil {
				it.InstanceFamily = *instance.Family
			}

			supportsIaaS := false
			for _, cap := range instance.Capabilities {
				var err error
				switch name := *cap.Name; name {
				case "VMDeploymentTypes":
					if strings.Contains(*cap.Value, "IaaS") {
						supportsIaaS = true
					}
				case "vCPUs":
					it.VCPUs, err = strconv.Atoi(*cap.Value)
					it.GPUType = ""
				case "GPUs":
					it.GPUs, err = strconv.Atoi(*cap.Value)
				case "MemoryGB":
					memory, err := strconv.ParseFloat(*cap.Value, 64)
					if err == nil {
						it.Memory = int(math.Round(memory * 1024.0))
					}
				}
				if err != nil {
					return err
				}
			}
			if supportsIaaS {
				for _, loc := range instance.LocationInfo {
					if _, found := im.InstanceData.AzureInstances[*loc.Location]; !found {
						im.InstanceData.AzureInstances[*loc.Location] = make(map[string]InstanceType, 0)
					}
					if _, found := im.InstanceData.AzureInstances[*loc.Location][it.InstanceTypeId]; !found {
						im.InstanceData.AzureInstances[*loc.Location][it.InstanceTypeId] = it
					}
				}
				if _, found := im.InstanceData.AzureInstances["all"][it.InstanceTypeId]; !found {
					im.InstanceData.AzureInstances["all"][it.InstanceTypeId] = it
				}
				log.Infof("Azure instance type: %s\n", it.String())
			}
		}

		if pager.Err() != nil {
			return pager.Err()
		}
	}
	return nil
}