Skip to content

Commit 7ee21b1

Browse files
authored
Merge pull request #9181 from k8s-infra-cherrypick-robot/cherry-pick-8784-to-cluster-autoscaler-release-1.35
[cluster-autoscaler-release-1.35] CA: Update Azure SDK to v2
2 parents 061849f + ce10220 commit 7ee21b1

32 files changed

+2097
-1753
lines changed

cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ import (
2424
"sync"
2525
"time"
2626

27-
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute"
28-
"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources"
29-
azStorage "github.com/Azure/azure-sdk-for-go/storage"
27+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6"
28+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
3029
"k8s.io/utils/ptr"
3130

31+
azerrors "github.com/Azure/azure-sdk-for-go-extensions/pkg/errors"
3232
apiv1 "k8s.io/api/core/v1"
3333
utilerrors "k8s.io/apimachinery/pkg/util/errors"
3434
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider"
@@ -85,7 +85,7 @@ func (as *AgentPool) initialize() error {
8585
template, err := as.manager.azClient.deploymentClient.ExportTemplate(ctx, as.manager.config.ResourceGroup, as.manager.config.Deployment)
8686
if err != nil {
8787
klog.Errorf("deploymentClient.ExportTemplate(%s, %s) failed: %v", as.manager.config.ResourceGroup, as.manager.config.Deployment, err)
88-
return err.Error()
88+
return err
8989
}
9090

9191
as.template = template.Template.(map[string]interface{})
@@ -136,10 +136,10 @@ func (as *AgentPool) Id() string {
136136
return as.Name
137137
}
138138

139-
func (as *AgentPool) getVMsFromCache() ([]compute.VirtualMachine, error) {
139+
func (as *AgentPool) getVMsFromCache() ([]*armcompute.VirtualMachine, error) {
140140
allVMs := as.manager.azureCache.getVirtualMachines()
141141
if _, exists := allVMs[as.Name]; !exists {
142-
return []compute.VirtualMachine{}, fmt.Errorf("could not find VMs with poolName: %s", as.Name)
142+
return nil, fmt.Errorf("could not find VMs with poolName: %s", as.Name)
143143
}
144144
return allVMs[as.Name], nil
145145
}
@@ -157,7 +157,14 @@ func (as *AgentPool) GetVMIndexes() ([]int, map[int]string, error) {
157157
indexes := make([]int, 0)
158158
indexToVM := make(map[int]string)
159159
for _, instance := range instances {
160-
index, err := GetVMNameIndex(instance.StorageProfile.OsDisk.OsType, *instance.Name)
160+
if instance.Properties == nil || instance.Properties.StorageProfile == nil || instance.Properties.StorageProfile.OSDisk == nil {
161+
continue
162+
}
163+
var osType armcompute.OperatingSystemTypes
164+
if instance.Properties.StorageProfile.OSDisk.OSType != nil {
165+
osType = *instance.Properties.StorageProfile.OSDisk.OSType
166+
}
167+
index, err := GetVMNameIndex(osType, *instance.Name)
161168
if err != nil {
162169
return nil, nil, err
163170
}
@@ -211,27 +218,28 @@ func (as *AgentPool) TargetSize() (int, error) {
211218
return int(size), nil
212219
}
213220

214-
func (as *AgentPool) getAllSucceededAndFailedDeployments() ([]resources.DeploymentExtended, error) {
221+
func (as *AgentPool) getAllSucceededAndFailedDeployments() ([]*armresources.DeploymentExtended, error) {
215222
ctx, cancel := getContextWithCancel()
216223
defer cancel()
217224

218225
allDeployments, rerr := as.manager.azClient.deploymentClient.List(ctx, as.manager.config.ResourceGroup)
219226
if rerr != nil {
220-
klog.Errorf("getAllSucceededAndFailedDeployments: failed to list deployments with error: %v", rerr.Error())
221-
return nil, rerr.Error()
227+
klog.Errorf("getAllSucceededAndFailedDeployments: failed to list deployments with error: %v", rerr)
228+
return nil, rerr
222229
}
223230

224-
result := make([]resources.DeploymentExtended, 0)
231+
result := make([]*armresources.DeploymentExtended, 0)
225232
for _, deployment := range allDeployments {
226233
if deployment.Properties == nil || deployment.Properties.ProvisioningState == nil {
227234
continue
228235
}
229-
if *deployment.Properties.ProvisioningState == "Succeeded" || *deployment.Properties.ProvisioningState == "Failed" {
236+
provState := string(*deployment.Properties.ProvisioningState)
237+
if provState == "Succeeded" || provState == "Failed" {
230238
result = append(result, deployment)
231239
}
232240
}
233241

234-
return result, rerr.Error()
242+
return result, nil
235243
}
236244

237245
// deleteOutdatedDeployments keeps the newest deployments in the resource group and delete others,
@@ -256,7 +264,12 @@ func (as *AgentPool) deleteOutdatedDeployments() (err error) {
256264
}
257265

258266
sort.Slice(deployments, func(i, j int) bool {
259-
return deployments[i].Properties.Timestamp.Time.After(deployments[j].Properties.Timestamp.Time)
267+
iTime := deployments[i].Properties.Timestamp
268+
jTime := deployments[j].Properties.Timestamp
269+
if iTime == nil || jTime == nil {
270+
return false
271+
}
272+
return iTime.After(*jTime)
260273
})
261274

262275
toBeDeleted := deployments[as.manager.config.MaxDeploymentsCount:]
@@ -269,7 +282,7 @@ func (as *AgentPool) deleteOutdatedDeployments() (err error) {
269282
klog.V(4).Infof("deleteOutdatedDeployments: starts deleting outdated deployment (%s)", *deployment.Name)
270283
rerr := as.manager.azClient.deploymentClient.Delete(ctx, as.manager.config.ResourceGroup, *deployment.Name)
271284
if rerr != nil {
272-
errList = append(errList, rerr.Error())
285+
errList = append(errList, rerr)
273286
}
274287
}
275288

@@ -317,20 +330,20 @@ func (as *AgentPool) IncreaseSize(delta int) error {
317330
as.parameters[as.Name+"Offset"] = map[string]int{"value": highestUsedIndex + 1}
318331

319332
newDeploymentName := fmt.Sprintf("cluster-autoscaler-%d", rand.New(rand.NewSource(time.Now().UnixNano())).Int31())
320-
newDeployment := resources.Deployment{
321-
Properties: &resources.DeploymentProperties{
333+
newDeployment := armresources.Deployment{
334+
Properties: &armresources.DeploymentProperties{
322335
Template: &as.template,
323336
Parameters: &as.parameters,
324-
Mode: resources.Incremental,
337+
Mode: ptr.To(armresources.DeploymentModeIncremental),
325338
},
326339
}
327340
ctx, cancel := getContextWithCancel()
328341
defer cancel()
329342
klog.V(3).Infof("Waiting for deploymentClient.CreateOrUpdate(%s, %s, %v)", as.manager.config.ResourceGroup, newDeploymentName, newDeployment)
330-
rerr := as.manager.azClient.deploymentClient.CreateOrUpdate(ctx, as.manager.config.ResourceGroup, newDeploymentName, newDeployment, "")
343+
_, rerr := as.manager.azClient.deploymentClient.CreateOrUpdate(ctx, as.manager.config.ResourceGroup, newDeploymentName, newDeployment)
331344
if rerr != nil {
332-
klog.Errorf("deploymentClient.CreateOrUpdate for deployment %q failed: %v", newDeploymentName, rerr.Error())
333-
return rerr.Error()
345+
klog.Errorf("deploymentClient.CreateOrUpdate for deployment %q failed: %v", newDeploymentName, rerr)
346+
return rerr
334347
}
335348
klog.V(3).Infof("deploymentClient.CreateOrUpdate(%s, %s, %v) success", as.manager.config.ResourceGroup, newDeploymentName, newDeployment)
336349

@@ -512,61 +525,52 @@ func (as *AgentPool) Nodes() ([]cloudprovider.Instance, error) {
512525
}
513526

514527
func (as *AgentPool) deleteBlob(accountName, vhdContainer, vhdBlob string) error {
515-
ctx, cancel := getContextWithCancel()
516-
defer cancel()
517-
518-
storageKeysResult, rerr := as.manager.azClient.storageAccountsClient.ListKeys(ctx, as.manager.config.SubscriptionID, as.manager.config.ResourceGroup, accountName)
519-
if rerr != nil {
520-
return rerr.Error()
521-
}
522-
523-
keys := *storageKeysResult.Keys
524-
client, err := azStorage.NewBasicClientOnSovereignCloud(accountName, ptr.Deref(keys[0].Value, ""), as.manager.env)
525-
if err != nil {
526-
return err
527-
}
528-
529-
bs := client.GetBlobService()
530-
containerRef := bs.GetContainerReference(vhdContainer)
531-
blobRef := containerRef.GetBlobReference(vhdBlob)
532-
533-
return blobRef.Delete(&azStorage.DeleteBlobOptions{})
528+
util := &AzUtil{manager: as.manager}
529+
return util.DeleteBlob(accountName, vhdContainer, vhdBlob)
534530
}
535531

536532
// deleteVirtualMachine deletes a VM and any associated OS disk
537533
func (as *AgentPool) deleteVirtualMachine(name string) error {
538534
ctx, cancel := getContextWithCancel()
539535
defer cancel()
540536

541-
vm, rerr := as.manager.azClient.virtualMachinesClient.Get(ctx, as.manager.config.ResourceGroup, name, "")
537+
vm, rerr := as.manager.azClient.virtualMachinesClient.Get(ctx, as.manager.config.ResourceGroup, name, nil)
542538
if rerr != nil {
543-
if exists, _ := checkResourceExistsFromRetryError(rerr); !exists {
539+
if azerrors.IsNotFoundErr(rerr) {
544540
klog.V(2).Infof("VirtualMachine %s/%s has already been removed", as.manager.config.ResourceGroup, name)
545541
return nil
546542
}
547543

548-
klog.Errorf("failed to get VM: %s/%s: %s", as.manager.config.ResourceGroup, name, rerr.Error())
549-
return rerr.Error()
544+
klog.Errorf("failed to get VM: %s/%s: %v", as.manager.config.ResourceGroup, name, rerr)
545+
return rerr
550546
}
551547

552-
vhd := vm.VirtualMachineProperties.StorageProfile.OsDisk.Vhd
553-
managedDisk := vm.VirtualMachineProperties.StorageProfile.OsDisk.ManagedDisk
548+
if vm.Properties == nil || vm.Properties.StorageProfile == nil || vm.Properties.StorageProfile.OSDisk == nil {
549+
klog.Errorf("failed to get a valid os disk for VM: %s/%s", as.manager.config.ResourceGroup, name)
550+
return fmt.Errorf("os disk information not available")
551+
}
552+
553+
vhd := vm.Properties.StorageProfile.OSDisk.Vhd
554+
managedDisk := vm.Properties.StorageProfile.OSDisk.ManagedDisk
554555
if vhd == nil && managedDisk == nil {
555556
klog.Errorf("failed to get a valid os disk URI for VM: %s/%s", as.manager.config.ResourceGroup, name)
556557
return fmt.Errorf("os disk does not have a VHD URI")
557558
}
558559

559-
osDiskName := vm.VirtualMachineProperties.StorageProfile.OsDisk.Name
560+
osDiskName := vm.Properties.StorageProfile.OSDisk.Name
560561
var nicName string
561-
nicID := (*vm.VirtualMachineProperties.NetworkProfile.NetworkInterfaces)[0].ID
562-
if nicID == nil {
563-
klog.Warningf("NIC ID is not set for VM (%s/%s)", as.manager.config.ResourceGroup, name)
564-
} else {
565-
nicName, err := resourceName(*nicID)
566-
if err != nil {
567-
return err
562+
if vm.Properties.NetworkProfile != nil && vm.Properties.NetworkProfile.NetworkInterfaces != nil && len(vm.Properties.NetworkProfile.NetworkInterfaces) > 0 {
563+
nicID := vm.Properties.NetworkProfile.NetworkInterfaces[0].ID
564+
if nicID == nil {
565+
klog.Warningf("NIC ID is not set for VM (%s/%s)", as.manager.config.ResourceGroup, name)
566+
} else {
567+
var err error
568+
nicName, err = resourceName(*nicID)
569+
if err != nil {
570+
return err
571+
}
572+
klog.Infof("found nic name for VM (%s/%s): %s", as.manager.config.ResourceGroup, name, nicName)
568573
}
569-
klog.Infof("found nic name for VM (%s/%s): %s", as.manager.config.ResourceGroup, name, nicName)
570574
}
571575

572576
klog.Infof("deleting VM: %s/%s", as.manager.config.ResourceGroup, name)
@@ -575,9 +579,8 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
575579

576580
klog.Infof("waiting for VirtualMachine deletion: %s/%s", as.manager.config.ResourceGroup, name)
577581
rerr = as.manager.azClient.virtualMachinesClient.Delete(deleteCtx, as.manager.config.ResourceGroup, name)
578-
_, realErr := checkResourceExistsFromRetryError(rerr)
579-
if realErr != nil {
580-
return realErr
582+
if rerr != nil && !azerrors.IsNotFoundErr(rerr) {
583+
return rerr
581584
}
582585
klog.V(2).Infof("VirtualMachine %s/%s removed", as.manager.config.ResourceGroup, name)
583586

@@ -587,9 +590,8 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
587590
defer interfaceCancel()
588591
rerr := as.manager.azClient.interfacesClient.Delete(interfaceCtx, as.manager.config.ResourceGroup, nicName)
589592
klog.Infof("waiting for nic deletion: %s/%s", as.manager.config.ResourceGroup, nicName)
590-
_, realErr := checkResourceExistsFromRetryError(rerr)
591-
if realErr != nil {
592-
return realErr
593+
if rerr != nil && !azerrors.IsNotFoundErr(rerr) {
594+
return rerr
593595
}
594596
klog.V(2).Infof("interface %s/%s removed", as.manager.config.ResourceGroup, nicName)
595597
}
@@ -604,23 +606,21 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
604606

605607
klog.Infof("deleting blob: %s/%s", vhdContainer, vhdBlob)
606608
if err = as.deleteBlob(accountName, vhdContainer, vhdBlob); err != nil {
607-
_, realErr := checkResourceExistsFromError(err)
608-
if realErr != nil {
609-
return realErr
609+
if !azerrors.IsNotFoundErr(err) {
610+
return err
610611
}
611-
klog.V(2).Infof("Blob %s/%s removed", as.manager.config.ResourceGroup, vhdBlob)
612612
}
613+
klog.V(2).Infof("Blob %s/%s removed", as.manager.config.ResourceGroup, vhdBlob)
613614
} else if managedDisk != nil {
614615
if osDiskName == nil {
615616
klog.Warningf("osDisk is not set for VM %s/%s", as.manager.config.ResourceGroup, name)
616617
} else {
617618
klog.Infof("deleting managed disk: %s/%s", as.manager.config.ResourceGroup, *osDiskName)
618619
disksCtx, disksCancel := getContextWithCancel()
619620
defer disksCancel()
620-
rerr := as.manager.azClient.disksClient.Delete(disksCtx, as.manager.config.SubscriptionID, as.manager.config.ResourceGroup, *osDiskName)
621-
_, realErr := checkResourceExistsFromRetryError(rerr)
622-
if realErr != nil {
623-
return realErr
621+
rerr := as.manager.azClient.disksClient.Delete(disksCtx, as.manager.config.ResourceGroup, *osDiskName)
622+
if rerr != nil && !azerrors.IsNotFoundErr(rerr) {
623+
return rerr
624624
}
625625
klog.V(2).Infof("disk %s/%s removed", as.manager.config.ResourceGroup, *osDiskName)
626626
}

0 commit comments

Comments
 (0)