Skip to content

Commit 397ee8d

Browse files
author
t-qini
committed
Update vm, storageaccount, interface and disk client.
1 parent a9ad079 commit 397ee8d

File tree

8 files changed

+205
-299
lines changed

8 files changed

+205
-299
lines changed

cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/autoscaler/cluster-autoscaler/config/dynamic"
3636
"k8s.io/klog"
3737
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
38+
"k8s.io/legacy-cloud-providers/azure/retry"
3839
)
3940

4041
const (
@@ -149,16 +150,16 @@ func (as *AgentPool) getVirtualMachinesFromCache() ([]compute.VirtualMachine, er
149150
return virtualMachinesStatusCache.virtualMachines[as.Id()], nil
150151
}
151152
klog.V(4).Infof("getVirtualMachinesFromCache: get vms from API")
152-
vms, err := as.GetVirtualMachines()
153-
klog.V(4).Infof("getVirtualMachinesFromCache: got vms from API %+v", vms)
153+
vms, rerr := as.GetVirtualMachines()
154+
klog.V(4).Infof("getVirtualMachinesFromCache: got vms from API, len = %d", len(vms))
154155

155-
if err != nil {
156-
if isAzureRequestsThrottled(err) {
157-
klog.Warningf("getAllVirtualMachines: throttling with message %v, would return the cached vms", err)
156+
if rerr != nil {
157+
if isAzureRequestsThrottled(rerr) {
158+
klog.Warningf("getAllVirtualMachines: throttling with message %v, would return the cached vms", rerr)
158159
return virtualMachinesStatusCache.virtualMachines[as.Id()], nil
159160
}
160161

161-
return []compute.VirtualMachine{}, err
162+
return []compute.VirtualMachine{}, rerr.Error()
162163
}
163164

164165
virtualMachinesStatusCache.virtualMachines[as.Id()] = vms
@@ -361,15 +362,16 @@ func (as *AgentPool) IncreaseSize(delta int) error {
361362
}
362363

363364
// GetVirtualMachines returns list of nodes for the given agent pool.
364-
func (as *AgentPool) GetVirtualMachines() (instances []compute.VirtualMachine, err error) {
365+
func (as *AgentPool) GetVirtualMachines() ([]compute.VirtualMachine, *retry.Error) {
365366
ctx, cancel := getContextWithCancel()
366367
defer cancel()
367368

368-
result, err := as.manager.azClient.virtualMachinesClient.List(ctx, as.manager.config.ResourceGroup)
369-
if err != nil {
370-
return nil, err
369+
result, rerr := as.manager.azClient.virtualMachinesClient.List(ctx, as.manager.config.ResourceGroup)
370+
if rerr != nil {
371+
return nil, rerr
371372
}
372373

374+
instances := make([]compute.VirtualMachine, 0)
373375
for _, instance := range result {
374376
if instance.Tags == nil {
375377
continue
@@ -555,9 +557,9 @@ func (as *AgentPool) deleteBlob(accountName, vhdContainer, vhdBlob string) error
555557
ctx, cancel := getContextWithCancel()
556558
defer cancel()
557559

558-
storageKeysResult, err := as.manager.azClient.storageAccountsClient.ListKeys(ctx, as.manager.config.ResourceGroup, accountName)
559-
if err != nil {
560-
return err
560+
storageKeysResult, rerr := as.manager.azClient.storageAccountsClient.ListKeys(ctx, as.manager.config.ResourceGroup, accountName)
561+
if rerr != nil {
562+
return rerr.Error()
561563
}
562564

563565
keys := *storageKeysResult.Keys
@@ -578,15 +580,15 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
578580
ctx, cancel := getContextWithCancel()
579581
defer cancel()
580582

581-
vm, err := as.manager.azClient.virtualMachinesClient.Get(ctx, as.manager.config.ResourceGroup, name, "")
582-
if err != nil {
583-
if exists, _ := checkResourceExistsFromError(err); !exists {
583+
vm, rerr := as.manager.azClient.virtualMachinesClient.Get(ctx, as.manager.config.ResourceGroup, name, "")
584+
if rerr != nil {
585+
if exists, _ := checkResourceExistsFromRetryError(rerr); !exists {
584586
klog.V(2).Infof("VirtualMachine %s/%s has already been removed", as.manager.config.ResourceGroup, name)
585587
return nil
586588
}
587589

588-
klog.Errorf("failed to get VM: %s/%s: %s", as.manager.config.ResourceGroup, name, err.Error())
589-
return err
590+
klog.Errorf("failed to get VM: %s/%s: %s", as.manager.config.ResourceGroup, name, rerr.Error())
591+
return rerr.Error()
590592
}
591593

592594
vhd := vm.VirtualMachineProperties.StorageProfile.OsDisk.Vhd
@@ -602,7 +604,7 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
602604
if nicID == nil {
603605
klog.Warningf("NIC ID is not set for VM (%s/%s)", as.manager.config.ResourceGroup, name)
604606
} else {
605-
nicName, err = resourceName(*nicID)
607+
nicName, err := resourceName(*nicID)
606608
if err != nil {
607609
return err
608610
}
@@ -614,8 +616,8 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
614616
defer deleteCancel()
615617

616618
klog.Infof("waiting for VirtualMachine deletion: %s/%s", as.manager.config.ResourceGroup, name)
617-
_, err = as.manager.azClient.virtualMachinesClient.Delete(deleteCtx, as.manager.config.ResourceGroup, name)
618-
_, realErr := checkResourceExistsFromError(err)
619+
rerr = as.manager.azClient.virtualMachinesClient.Delete(deleteCtx, as.manager.config.ResourceGroup, name)
620+
_, realErr := checkResourceExistsFromRetryError(rerr)
619621
if realErr != nil {
620622
return realErr
621623
}
@@ -625,9 +627,9 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
625627
klog.Infof("deleting nic: %s/%s", as.manager.config.ResourceGroup, nicName)
626628
interfaceCtx, interfaceCancel := getContextWithCancel()
627629
defer interfaceCancel()
628-
_, err = as.manager.azClient.interfacesClient.Delete(interfaceCtx, as.manager.config.ResourceGroup, nicName)
630+
rerr := as.manager.azClient.interfacesClient.Delete(interfaceCtx, as.manager.config.ResourceGroup, nicName)
629631
klog.Infof("waiting for nic deletion: %s/%s", as.manager.config.ResourceGroup, nicName)
630-
_, realErr := checkResourceExistsFromError(err)
632+
_, realErr := checkResourceExistsFromRetryError(rerr)
631633
if realErr != nil {
632634
return realErr
633635
}
@@ -657,8 +659,8 @@ func (as *AgentPool) deleteVirtualMachine(name string) error {
657659
klog.Infof("deleting managed disk: %s/%s", as.manager.config.ResourceGroup, *osDiskName)
658660
disksCtx, disksCancel := getContextWithCancel()
659661
defer disksCancel()
660-
_, err = as.manager.azClient.disksClient.Delete(disksCtx, as.manager.config.ResourceGroup, *osDiskName)
661-
_, realErr := checkResourceExistsFromError(err)
662+
rerr := as.manager.azClient.disksClient.Delete(disksCtx, as.manager.config.ResourceGroup, *osDiskName)
663+
_, realErr := checkResourceExistsFromRetryError(rerr)
662664
if realErr != nil {
663665
return realErr
664666
}

cluster-autoscaler/cloudprovider/azure/azure_cache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (m *asgCache) FindForInstance(instance *azureRef, vmType string) (cloudprov
148148
}
149149

150150
// Look up caches for the instance.
151-
klog.V(4).Infof("FindForInstance: attempting to retrieve instance %v from cache", m.instanceToAsg)
151+
klog.V(6).Infof("FindForInstance: attempting to retrieve instance %v from cache", m.instanceToAsg)
152152
if asg := m.getInstanceFromCache(inst.Name); asg != nil {
153153
klog.V(4).Infof("FindForInstance: found asg %s in cache", asg.Id())
154154
return asg, nil

cluster-autoscaler/cloudprovider/azure/azure_client.go

Lines changed: 16 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,22 @@ import (
2323
"net/http"
2424
"time"
2525

26-
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
2726
"github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2018-03-31/containerservice"
28-
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network"
2927
"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources"
3028
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
3129
"github.com/Azure/go-autorest/autorest"
3230
"github.com/Azure/go-autorest/autorest/adal"
3331
"github.com/Azure/go-autorest/autorest/azure"
3432

3533
"k8s.io/klog"
34+
"k8s.io/legacy-cloud-providers/azure/clients/diskclient"
35+
"k8s.io/legacy-cloud-providers/azure/clients/interfaceclient"
36+
"k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient"
37+
"k8s.io/legacy-cloud-providers/azure/clients/vmclient"
3638
"k8s.io/legacy-cloud-providers/azure/clients/vmssclient"
3739
"k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient"
3840
)
3941

40-
// VirtualMachinesClient defines needed functions for azure compute.VirtualMachinesClient.
41-
type VirtualMachinesClient interface {
42-
Get(ctx context.Context, resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error)
43-
Delete(ctx context.Context, resourceGroupName string, VMName string) (resp *http.Response, err error)
44-
List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachine, err error)
45-
}
46-
47-
// InterfacesClient defines needed functions for azure network.InterfacesClient.
48-
type InterfacesClient interface {
49-
Delete(ctx context.Context, resourceGroupName string, networkInterfaceName string) (resp *http.Response, err error)
50-
}
51-
5242
// DeploymentsClient defines needed functions for azure network.DeploymentsClient.
5343
type DeploymentsClient interface {
5444
Get(ctx context.Context, resourceGroupName string, deploymentName string) (result resources.DeploymentExtended, err error)
@@ -58,111 +48,6 @@ type DeploymentsClient interface {
5848
Delete(ctx context.Context, resourceGroupName string, deploymentName string) (resp *http.Response, err error)
5949
}
6050

61-
// DisksClient defines needed functions for azure disk.DisksClient.
62-
type DisksClient interface {
63-
Delete(ctx context.Context, resourceGroupName string, diskName string) (resp *http.Response, err error)
64-
}
65-
66-
// AccountsClient defines needed functions for azure storage.AccountsClient.
67-
type AccountsClient interface {
68-
ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error)
69-
}
70-
71-
// azVirtualMachinesClient implements VirtualMachinesClient.
72-
type azVirtualMachinesClient struct {
73-
client compute.VirtualMachinesClient
74-
}
75-
76-
func newAzVirtualMachinesClient(subscriptionID, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken) *azVirtualMachinesClient {
77-
virtualMachinesClient := compute.NewVirtualMachinesClient(subscriptionID)
78-
virtualMachinesClient.BaseURI = endpoint
79-
virtualMachinesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
80-
virtualMachinesClient.PollingDelay = 5 * time.Second
81-
configureUserAgent(&virtualMachinesClient.Client)
82-
83-
return &azVirtualMachinesClient{
84-
client: virtualMachinesClient,
85-
}
86-
}
87-
88-
func (az *azVirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) {
89-
klog.V(10).Infof("azVirtualMachinesClient.Get(%q,%q,%q): start", resourceGroupName, VMName, expand)
90-
defer func() {
91-
klog.V(10).Infof("azVirtualMachinesClient.Get(%q,%q,%q): end", resourceGroupName, VMName, expand)
92-
}()
93-
94-
return az.client.Get(ctx, resourceGroupName, VMName, expand)
95-
}
96-
97-
func (az *azVirtualMachinesClient) Delete(ctx context.Context, resourceGroupName string, VMName string) (resp *http.Response, err error) {
98-
klog.V(10).Infof("azVirtualMachinesClient.Delete(%q,%q): start", resourceGroupName, VMName)
99-
defer func() {
100-
klog.V(10).Infof("azVirtualMachinesClient.Delete(%q,%q): end", resourceGroupName, VMName)
101-
}()
102-
103-
future, err := az.client.Delete(ctx, resourceGroupName, VMName)
104-
if err != nil {
105-
return future.Response(), err
106-
}
107-
108-
err = future.WaitForCompletionRef(ctx, az.client.Client)
109-
return future.Response(), err
110-
}
111-
112-
func (az *azVirtualMachinesClient) List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachine, err error) {
113-
klog.V(10).Infof("azVirtualMachinesClient.List(%q): start", resourceGroupName)
114-
defer func() {
115-
klog.V(10).Infof("azVirtualMachinesClient.List(%q): end", resourceGroupName)
116-
}()
117-
118-
iterator, err := az.client.ListComplete(ctx, resourceGroupName)
119-
if err != nil {
120-
return nil, err
121-
}
122-
123-
result = make([]compute.VirtualMachine, 0)
124-
for ; iterator.NotDone(); err = iterator.Next() {
125-
if err != nil {
126-
return nil, err
127-
}
128-
129-
result = append(result, iterator.Value())
130-
}
131-
132-
return result, nil
133-
}
134-
135-
type azInterfacesClient struct {
136-
client network.InterfacesClient
137-
}
138-
139-
func newAzInterfacesClient(subscriptionID, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken) *azInterfacesClient {
140-
interfacesClient := network.NewInterfacesClient(subscriptionID)
141-
interfacesClient.BaseURI = endpoint
142-
interfacesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
143-
interfacesClient.PollingDelay = 5 * time.Second
144-
configureUserAgent(&interfacesClient.Client)
145-
146-
return &azInterfacesClient{
147-
client: interfacesClient,
148-
}
149-
}
150-
151-
func (az *azInterfacesClient) Delete(ctx context.Context, resourceGroupName string, networkInterfaceName string) (resp *http.Response, err error) {
152-
klog.V(10).Infof("azInterfacesClient.Delete(%q,%q): start", resourceGroupName, networkInterfaceName)
153-
defer func() {
154-
klog.V(10).Infof("azInterfacesClient.Delete(%q,%q): end", resourceGroupName, networkInterfaceName)
155-
}()
156-
157-
future, err := az.client.Delete(ctx, resourceGroupName, networkInterfaceName)
158-
if err != nil {
159-
return future.Response(), err
160-
}
161-
162-
err = future.WaitForCompletionRef(ctx, az.client.Client)
163-
return future.Response(), err
164-
}
165-
16651
type azDeploymentsClient struct {
16752
client resources.DeploymentsClient
16853
}
@@ -250,70 +135,18 @@ func (az *azDeploymentsClient) Delete(ctx context.Context, resourceGroupName, de
250135
return future.Response(), err
251136
}
252137

253-
type azDisksClient struct {
254-
client compute.DisksClient
255-
}
256-
257-
func newAzDisksClient(subscriptionID, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken) *azDisksClient {
258-
disksClient := compute.NewDisksClient(subscriptionID)
259-
disksClient.BaseURI = endpoint
260-
disksClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
261-
disksClient.PollingDelay = 5 * time.Second
262-
configureUserAgent(&disksClient.Client)
263-
264-
return &azDisksClient{
265-
client: disksClient,
266-
}
267-
}
268-
269-
func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) (resp *http.Response, err error) {
270-
klog.V(10).Infof("azDisksClient.Delete(%q,%q): start", resourceGroupName, diskName)
271-
defer func() {
272-
klog.V(10).Infof("azDisksClient.Delete(%q,%q): end", resourceGroupName, diskName)
273-
}()
274-
275-
future, err := az.client.Delete(ctx, resourceGroupName, diskName)
276-
if err != nil {
277-
return future.Response(), err
278-
}
279-
280-
err = future.WaitForCompletionRef(ctx, az.client.Client)
281-
return future.Response(), err
282-
}
283-
284138
type azAccountsClient struct {
285139
client storage.AccountsClient
286140
}
287141

288-
func newAzAccountsClient(subscriptionID, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken) *azAccountsClient {
289-
accountsClient := storage.NewAccountsClient(subscriptionID)
290-
accountsClient.BaseURI = endpoint
291-
accountsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
292-
accountsClient.PollingDelay = 5 * time.Second
293-
configureUserAgent(&accountsClient.Client)
294-
295-
return &azAccountsClient{
296-
client: accountsClient,
297-
}
298-
}
299-
300-
func (az *azAccountsClient) ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) {
301-
klog.V(10).Infof("azAccountsClient.ListKeys(%q,%q): start", resourceGroupName, accountName)
302-
defer func() {
303-
klog.V(10).Infof("azAccountsClient.ListKeys(%q,%q): end", resourceGroupName, accountName)
304-
}()
305-
306-
return az.client.ListKeys(ctx, resourceGroupName, accountName)
307-
}
308-
309142
type azClient struct {
310143
virtualMachineScaleSetsClient vmssclient.Interface
311144
virtualMachineScaleSetVMsClient vmssvmclient.Interface
312-
virtualMachinesClient VirtualMachinesClient
145+
virtualMachinesClient vmclient.Interface
313146
deploymentsClient DeploymentsClient
314-
interfacesClient InterfacesClient
315-
disksClient DisksClient
316-
storageAccountsClient AccountsClient
147+
interfacesClient interfaceclient.Interface
148+
disksClient diskclient.Interface
149+
storageAccountsClient storageaccountclient.Interface
317150
containerServicesClient containerservice.ContainerServicesClient
318151
managedContainerServicesClient containerservice.ManagedClustersClient
319152
}
@@ -390,19 +223,23 @@ func newAzClient(cfg *Config, env *azure.Environment) (*azClient, error) {
390223
scaleSetVMsClient := vmssvmclient.New(vmssVMClientConfig)
391224
klog.V(5).Infof("Created scale set vm client with authorizer: %v", scaleSetVMsClient)
392225

393-
virtualMachinesClient := newAzVirtualMachinesClient(cfg.SubscriptionID, env.ResourceManagerEndpoint, spt)
226+
vmClientConfig := azClientConfig.WithRateLimiter(cfg.VirtualMachineRateLimit)
227+
virtualMachinesClient := vmclient.New(vmClientConfig)
394228
klog.V(5).Infof("Created vm client with authorizer: %v", virtualMachinesClient)
395229

396230
deploymentsClient := newAzDeploymentsClient(cfg.SubscriptionID, env.ResourceManagerEndpoint, spt)
397231
klog.V(5).Infof("Created deployments client with authorizer: %v", deploymentsClient)
398232

399-
interfacesClient := newAzInterfacesClient(cfg.SubscriptionID, env.ResourceManagerEndpoint, spt)
233+
interfaceClientConfig := azClientConfig.WithRateLimiter(cfg.InterfaceRateLimit)
234+
interfacesClient := interfaceclient.New(interfaceClientConfig)
400235
klog.V(5).Infof("Created interfaces client with authorizer: %v", interfacesClient)
401236

402-
storageAccountsClient := newAzAccountsClient(cfg.SubscriptionID, env.ResourceManagerEndpoint, spt)
237+
accountClientConfig := azClientConfig.WithRateLimiter(cfg.StorageAccountRateLimit)
238+
storageAccountsClient := storageaccountclient.New(accountClientConfig)
403239
klog.V(5).Infof("Created storage accounts client with authorizer: %v", storageAccountsClient)
404240

405-
disksClient := newAzDisksClient(cfg.SubscriptionID, env.ResourceManagerEndpoint, spt)
241+
diskClientConfig := azClientConfig.WithRateLimiter(cfg.DiskRateLimit)
242+
disksClient := diskclient.New(diskClientConfig)
406243
klog.V(5).Infof("Created disks client with authorizer: %v", disksClient)
407244

408245
containerServicesClient := containerservice.NewContainerServicesClient(cfg.SubscriptionID)

0 commit comments

Comments
 (0)