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
}