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
}