func VirtualMachineScaleSetVMsViaAzureAPI()

in cmd/utils/vmss.go [147:198]


func VirtualMachineScaleSetVMsViaAzureAPI(subID, rg, clusterName string) (map[string]*VirtualMachineScaleSetVM, error) {
	creds, err := GetCredentials()
	if err != nil {
		return nil, fmt.Errorf("getting credentials: %w", err)
	}

	ctx := context.Background()
	aksClient, err := armcontainerservice.NewManagedClustersClient(subID, creds, nil)
	if err != nil {
		return nil, fmt.Errorf("creating AKS client: %w", err)
	}
	cluster, err := aksClient.Get(ctx, rg, clusterName, nil)
	if err != nil {
		return nil, fmt.Errorf("getting cluster: %w", err)
	}
	var nodePools []string
	vmssClient, err := armcompute.NewVirtualMachineScaleSetsClient(subID, creds, nil)
	if err != nil {
		return nil, fmt.Errorf("creating VMSS client: %w", err)
	}
	nodePoolPager := vmssClient.NewListPager(to.String(cluster.Properties.NodeResourceGroup), nil)
	for nodePoolPager.More() {
		nextResult, err := nodePoolPager.NextPage(ctx)
		if err != nil {
			return nil, fmt.Errorf("getting next page of node pools: %w", err)
		}
		for _, np := range nextResult.Value {
			nodePools = append(nodePools, to.String(np.Name))
		}
	}
	vmssVMs := make(map[string]*VirtualMachineScaleSetVM)
	vmClient, err := armcompute.NewVirtualMachineScaleSetVMsClient(subID, creds, nil)
	if err != nil {
		return nil, fmt.Errorf("creating VMSS VMs client: %w", err)
	}
	for _, np := range nodePools {
		instances, err := instancesForNodePool(ctx, vmClient, np, to.String(cluster.Properties.NodeResourceGroup))
		if err != nil {
			return nil, fmt.Errorf("getting instances for node pool %q: %w", np, err)
		}
		for _, instance := range instances {
			vmssVMs[instanceName(instance)] = &VirtualMachineScaleSetVM{
				SubscriptionID:    subID,
				VMScaleSet:        np,
				NodeResourceGroup: strings.ToLower(to.String(cluster.Properties.NodeResourceGroup)),
				InstanceID:        to.String(instance.InstanceID),
			}
		}
	}

	return vmssVMs, nil
}