From 8a0cae8647f50657024a887d9012d6cc895fee35 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Tue, 24 Apr 2018 14:32:56 +0800 Subject: [PATCH] Upgrade virtualmachin/disk/storageaccount client to use new SDK --- .../providers/azure/azure_client.go | 221 +++++++++--------- 1 file changed, 108 insertions(+), 113 deletions(-) diff --git a/pkg/cloudprovider/providers/azure/azure_client.go b/pkg/cloudprovider/providers/azure/azure_client.go index 88a41f6eb26..b2ffc7079df 100644 --- a/pkg/cloudprovider/providers/azure/azure_client.go +++ b/pkg/cloudprovider/providers/azure/azure_client.go @@ -22,11 +22,9 @@ import ( "net/http" "time" - "github.com/Azure/azure-sdk-for-go/arm/compute" - "github.com/Azure/azure-sdk-for-go/arm/disk" - "github.com/Azure/azure-sdk-for-go/arm/storage" - computepreview "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2017-12-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2017-12-01/compute" "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network" + "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/adal" "github.com/golang/glog" @@ -84,10 +82,9 @@ type SubnetListResultPage interface { // VirtualMachinesClient defines needed functions for azure compute.VirtualMachinesClient type VirtualMachinesClient interface { - CreateOrUpdate(resourceGroupName string, VMName string, parameters compute.VirtualMachine, cancel <-chan struct{}) (<-chan compute.VirtualMachine, <-chan error) - Get(resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) - List(resourceGroupName string) (result compute.VirtualMachineListResult, err error) - ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineListResult) (result compute.VirtualMachineListResult, err error) + CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachine) (resp *http.Response, err error) + Get(ctx context.Context, resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) + List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachine, err error) } // InterfacesClient defines needed functions for azure network.InterfacesClient @@ -131,20 +128,20 @@ type SecurityGroupsClient interface { List(resourceGroupName string) (result SecurityGroupListResultPage, err error) } -// VirtualMachineScaleSetsClient defines needed functions for azure computepreview.VirtualMachineScaleSetsClient +// VirtualMachineScaleSetsClient defines needed functions for azure compute.VirtualMachineScaleSetsClient type VirtualMachineScaleSetsClient interface { - CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters computepreview.VirtualMachineScaleSet) (resp *http.Response, err error) - Get(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result computepreview.VirtualMachineScaleSet, err error) - List(ctx context.Context, resourceGroupName string) (result []computepreview.VirtualMachineScaleSet, err error) - UpdateInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs computepreview.VirtualMachineScaleSetVMInstanceRequiredIDs) (resp *http.Response, err error) + CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet) (resp *http.Response, err error) + Get(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result compute.VirtualMachineScaleSet, err error) + List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachineScaleSet, err error) + UpdateInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs compute.VirtualMachineScaleSetVMInstanceRequiredIDs) (resp *http.Response, err error) } -// VirtualMachineScaleSetVMsClient defines needed functions for azure computepreview.VirtualMachineScaleSetVMsClient +// VirtualMachineScaleSetVMsClient defines needed functions for azure compute.VirtualMachineScaleSetVMsClient type VirtualMachineScaleSetVMsClient interface { - Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result computepreview.VirtualMachineScaleSetVM, err error) - GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result computepreview.VirtualMachineScaleSetVMInstanceView, err error) - List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result []computepreview.VirtualMachineScaleSetVM, err error) - Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters computepreview.VirtualMachineScaleSetVM) (resp *http.Response, err error) + Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVM, err error) + GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVMInstanceView, err error) + List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result []compute.VirtualMachineScaleSetVM, err error) + Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters compute.VirtualMachineScaleSetVM) (resp *http.Response, err error) } // RoutesClient defines needed functions for azure network.RoutesClient @@ -161,18 +158,18 @@ type RouteTablesClient interface { // StorageAccountClient defines needed functions for azure storage.AccountsClient type StorageAccountClient interface { - Create(resourceGroupName string, accountName string, parameters storage.AccountCreateParameters, cancel <-chan struct{}) (<-chan storage.Account, <-chan error) - Delete(resourceGroupName string, accountName string) (result autorest.Response, err error) - ListKeys(resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) - ListByResourceGroup(resourceGroupName string) (result storage.AccountListResult, err error) - GetProperties(resourceGroupName string, accountName string) (result storage.Account, err error) + Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) (result *http.Response, err error) + Delete(ctx context.Context, resourceGroupName string, accountName string) (result autorest.Response, err error) + ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) + ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, err error) + GetProperties(ctx context.Context, resourceGroupName string, accountName string) (result storage.Account, err error) } -// DisksClient defines needed functions for azure disk.DisksClient +// DisksClient defines needed functions for azure compute.DisksClient type DisksClient interface { - CreateOrUpdate(resourceGroupName string, diskName string, diskParameter disk.Model, cancel <-chan struct{}) (<-chan disk.Model, <-chan error) - Delete(resourceGroupName string, diskName string, cancel <-chan struct{}) (<-chan disk.OperationStatusResponse, <-chan error) - Get(resourceGroupName string, diskName string) (result disk.Model, err error) + CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, diskParameter compute.Disk) (resp *http.Response, err error) + Delete(ctx context.Context, resourceGroupName string, diskName string) (resp *http.Response, err error) + Get(ctx context.Context, resourceGroupName string, diskName string) (result compute.Disk, err error) } // azClientConfig contains all essential information to create an Azure client. @@ -211,13 +208,11 @@ func newAzVirtualMachinesClient(config *azClientConfig) *azVirtualMachinesClient } } -func (az *azVirtualMachinesClient) CreateOrUpdate(resourceGroupName string, VMName string, parameters compute.VirtualMachine, cancel <-chan struct{}) (<-chan compute.VirtualMachine, <-chan error) { - /* Write rate limiting */ +func (az *azVirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachine) (resp *http.Response, err error) { + // /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { - errChan := createARMRateLimitErrChannel(true, "NSGCreateOrUpdate") - resultChan := make(chan compute.VirtualMachine, 1) - resultChan <- compute.VirtualMachine{} - return resultChan, errChan + err = createARMRateLimitErr(true, "VMCreateOrUpdate") + return } glog.V(10).Infof("azVirtualMachinesClient.CreateOrUpdate(%q, %q): start", resourceGroupName, VMName) @@ -225,16 +220,18 @@ func (az *azVirtualMachinesClient) CreateOrUpdate(resourceGroupName string, VMNa glog.V(10).Infof("azVirtualMachinesClient.CreateOrUpdate(%q, %q): end", resourceGroupName, VMName) }() - errChan := make(chan error, 1) mc := newMetricContext("vm", "create_or_update", resourceGroupName, az.client.SubscriptionID) - resultChan, proxyErrChan := az.client.CreateOrUpdate(resourceGroupName, VMName, parameters, cancel) - err := <-proxyErrChan + future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, VMName, parameters) + if err != nil { + return future.Response(), err + } + + err = future.WaitForCompletion(ctx, az.client.Client) mc.Observe(err) - errChan <- err - return resultChan, errChan + return future.Response(), err } -func (az *azVirtualMachinesClient) Get(resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) { +func (az *azVirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMGet") return @@ -246,12 +243,12 @@ func (az *azVirtualMachinesClient) Get(resourceGroupName string, VMName string, }() mc := newMetricContext("vm", "get", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.Get(resourceGroupName, VMName, expand) + result, err = az.client.Get(ctx, resourceGroupName, VMName, expand) mc.Observe(err) return } -func (az *azVirtualMachinesClient) List(resourceGroupName string) (result compute.VirtualMachineListResult, err error) { +func (az *azVirtualMachinesClient) List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachine, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMList") return @@ -263,26 +260,22 @@ func (az *azVirtualMachinesClient) List(resourceGroupName string) (result comput }() mc := newMetricContext("vm", "list", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.List(resourceGroupName) + iterator, err := az.client.ListComplete(ctx, resourceGroupName) mc.Observe(err) - return -} - -func (az *azVirtualMachinesClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineListResult) (result compute.VirtualMachineListResult, err error) { - if !az.rateLimiterReader.TryAccept() { - err = createARMRateLimitErr(false, "VMListNextResults") - return + if err != nil { + return nil, err } - glog.V(10).Infof("azVirtualMachinesClient.ListNextResults(%q): start", lastResults) - defer func() { - glog.V(10).Infof("azVirtualMachinesClient.ListNextResults(%q): end", lastResults) - }() + result = make([]compute.VirtualMachine, 0) + for ; iterator.NotDone(); err = iterator.Next() { + if err != nil { + return nil, err + } - mc := newMetricContext("vm", "list_next_results", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.ListNextResults(lastResults) - mc.Observe(err) - return + result = append(result, iterator.Value()) + } + + return result, nil } // azInterfacesClient implements InterfacesClient. @@ -941,13 +934,13 @@ func (az *azSecurityGroupsClient) List(resourceGroupName string) (SecurityGroupL // azVirtualMachineScaleSetsClient implements VirtualMachineScaleSetsClient. type azVirtualMachineScaleSetsClient struct { - client computepreview.VirtualMachineScaleSetsClient + client compute.VirtualMachineScaleSetsClient rateLimiterReader flowcontrol.RateLimiter rateLimiterWriter flowcontrol.RateLimiter } func newAzVirtualMachineScaleSetsClient(config *azClientConfig) *azVirtualMachineScaleSetsClient { - virtualMachineScaleSetsClient := computepreview.NewVirtualMachineScaleSetsClient(config.subscriptionID) + virtualMachineScaleSetsClient := compute.NewVirtualMachineScaleSetsClient(config.subscriptionID) virtualMachineScaleSetsClient.BaseURI = config.resourceManagerEndpoint virtualMachineScaleSetsClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken) virtualMachineScaleSetsClient.PollingDelay = 5 * time.Second @@ -960,7 +953,7 @@ func newAzVirtualMachineScaleSetsClient(config *azClientConfig) *azVirtualMachin } } -func (az *azVirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters computepreview.VirtualMachineScaleSet) (resp *http.Response, err error) { +func (az *azVirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet) (resp *http.Response, err error) { /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { err = createARMRateLimitErr(true, "VMSSCreateOrUpdate") @@ -984,7 +977,7 @@ func (az *azVirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, r return future.Response(), err } -func (az *azVirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result computepreview.VirtualMachineScaleSet, err error) { +func (az *azVirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result compute.VirtualMachineScaleSet, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMSSGet") return @@ -1001,7 +994,7 @@ func (az *azVirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGrou return } -func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGroupName string) (result []computepreview.VirtualMachineScaleSet, err error) { +func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachineScaleSet, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMSSList") return @@ -1019,7 +1012,7 @@ func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGro return nil, err } - result = make([]computepreview.VirtualMachineScaleSet, 0) + result = make([]compute.VirtualMachineScaleSet, 0) for ; iterator.NotDone(); err = iterator.Next() { if err != nil { return nil, err @@ -1031,7 +1024,7 @@ func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGro return result, nil } -func (az *azVirtualMachineScaleSetsClient) UpdateInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs computepreview.VirtualMachineScaleSetVMInstanceRequiredIDs) (resp *http.Response, err error) { +func (az *azVirtualMachineScaleSetsClient) UpdateInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs compute.VirtualMachineScaleSetVMInstanceRequiredIDs) (resp *http.Response, err error) { /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { err = createARMRateLimitErr(true, "VMSSUpdateInstances") @@ -1057,13 +1050,13 @@ func (az *azVirtualMachineScaleSetsClient) UpdateInstances(ctx context.Context, // azVirtualMachineScaleSetVMsClient implements VirtualMachineScaleSetVMsClient. type azVirtualMachineScaleSetVMsClient struct { - client computepreview.VirtualMachineScaleSetVMsClient + client compute.VirtualMachineScaleSetVMsClient rateLimiterReader flowcontrol.RateLimiter rateLimiterWriter flowcontrol.RateLimiter } func newAzVirtualMachineScaleSetVMsClient(config *azClientConfig) *azVirtualMachineScaleSetVMsClient { - virtualMachineScaleSetVMsClient := computepreview.NewVirtualMachineScaleSetVMsClient(config.subscriptionID) + virtualMachineScaleSetVMsClient := compute.NewVirtualMachineScaleSetVMsClient(config.subscriptionID) virtualMachineScaleSetVMsClient.BaseURI = config.resourceManagerEndpoint virtualMachineScaleSetVMsClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken) virtualMachineScaleSetVMsClient.PollingDelay = 5 * time.Second @@ -1076,7 +1069,7 @@ func newAzVirtualMachineScaleSetVMsClient(config *azClientConfig) *azVirtualMach } } -func (az *azVirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result computepreview.VirtualMachineScaleSetVM, err error) { +func (az *azVirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVM, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMSSGet") return @@ -1093,7 +1086,7 @@ func (az *azVirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGr return } -func (az *azVirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result computepreview.VirtualMachineScaleSetVMInstanceView, err error) { +func (az *azVirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVMInstanceView, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMSSGetInstanceView") return @@ -1110,7 +1103,7 @@ func (az *azVirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context return } -func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result []computepreview.VirtualMachineScaleSetVM, err error) { +func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result []compute.VirtualMachineScaleSetVM, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "VMSSList") return @@ -1128,7 +1121,7 @@ func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceG return nil, err } - result = make([]computepreview.VirtualMachineScaleSetVM, 0) + result = make([]compute.VirtualMachineScaleSetVM, 0) for ; iterator.NotDone(); err = iterator.Next() { if err != nil { return nil, err @@ -1140,7 +1133,7 @@ func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceG return result, nil } -func (az *azVirtualMachineScaleSetVMsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters computepreview.VirtualMachineScaleSetVM) (resp *http.Response, err error) { +func (az *azVirtualMachineScaleSetVMsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters compute.VirtualMachineScaleSetVM) (resp *http.Response, err error) { if !az.rateLimiterWriter.TryAccept() { err = createARMRateLimitErr(true, "VMSSUpdate") return @@ -1357,13 +1350,11 @@ func newAzStorageAccountClient(config *azClientConfig) *azStorageAccountClient { } } -func (az *azStorageAccountClient) Create(resourceGroupName string, accountName string, parameters storage.AccountCreateParameters, cancel <-chan struct{}) (<-chan storage.Account, <-chan error) { +func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) (result *http.Response, err error) { /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { - errChan := createARMRateLimitErrChannel(true, "StorageAccountCreate") - resultChan := make(chan storage.Account, 1) - resultChan <- storage.Account{} - return resultChan, errChan + err = createARMRateLimitErr(true, "StorageAccountCreate") + return } glog.V(10).Infof("azStorageAccountClient.Create(%q,%q): start", resourceGroupName, accountName) @@ -1371,16 +1362,18 @@ func (az *azStorageAccountClient) Create(resourceGroupName string, accountName s glog.V(10).Infof("azStorageAccountClient.Create(%q,%q): end", resourceGroupName, accountName) }() - errChan := make(chan error, 1) mc := newMetricContext("storage_account", "create", resourceGroupName, az.client.SubscriptionID) - resultChan, proxyErrChan := az.client.Create(resourceGroupName, accountName, parameters, cancel) - err := <-proxyErrChan + future, err := az.client.Create(ctx, resourceGroupName, accountName, parameters) + if err != nil { + return future.Response(), err + } + + err = future.WaitForCompletion(ctx, az.client.Client) mc.Observe(err) - errChan <- err - return resultChan, errChan + return future.Response(), err } -func (az *azStorageAccountClient) Delete(resourceGroupName string, accountName string) (result autorest.Response, err error) { +func (az *azStorageAccountClient) Delete(ctx context.Context, resourceGroupName string, accountName string) (result autorest.Response, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "DeleteStorageAccount") return @@ -1392,12 +1385,12 @@ func (az *azStorageAccountClient) Delete(resourceGroupName string, accountName s }() mc := newMetricContext("storage_account", "delete", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.Delete(resourceGroupName, accountName) + result, err = az.client.Delete(ctx, resourceGroupName, accountName) mc.Observe(err) return } -func (az *azStorageAccountClient) ListKeys(resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) { +func (az *azStorageAccountClient) ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "ListStorageAccountKeys") return @@ -1409,12 +1402,12 @@ func (az *azStorageAccountClient) ListKeys(resourceGroupName string, accountName }() mc := newMetricContext("storage_account", "list_keys", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.ListKeys(resourceGroupName, accountName) + result, err = az.client.ListKeys(ctx, resourceGroupName, accountName) mc.Observe(err) return } -func (az *azStorageAccountClient) ListByResourceGroup(resourceGroupName string) (result storage.AccountListResult, err error) { +func (az *azStorageAccountClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "ListStorageAccountsByResourceGroup") return @@ -1426,12 +1419,12 @@ func (az *azStorageAccountClient) ListByResourceGroup(resourceGroupName string) }() mc := newMetricContext("storage_account", "list_by_resource_group", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.ListByResourceGroup(resourceGroupName) + result, err = az.client.ListByResourceGroup(ctx, resourceGroupName) mc.Observe(err) return } -func (az *azStorageAccountClient) GetProperties(resourceGroupName string, accountName string) (result storage.Account, err error) { +func (az *azStorageAccountClient) GetProperties(ctx context.Context, resourceGroupName string, accountName string) (result storage.Account, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "GetStorageAccount/Properties") return @@ -1443,20 +1436,20 @@ func (az *azStorageAccountClient) GetProperties(resourceGroupName string, accoun }() mc := newMetricContext("storage_account", "get_properties", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.GetProperties(resourceGroupName, accountName) + result, err = az.client.GetProperties(ctx, resourceGroupName, accountName) mc.Observe(err) return } // azDisksClient implements DisksClient. type azDisksClient struct { - client disk.DisksClient + client compute.DisksClient rateLimiterReader flowcontrol.RateLimiter rateLimiterWriter flowcontrol.RateLimiter } func newAzDisksClient(config *azClientConfig) *azDisksClient { - disksClient := disk.NewDisksClientWithBaseURI(config.resourceManagerEndpoint, config.subscriptionID) + disksClient := compute.NewDisksClientWithBaseURI(config.resourceManagerEndpoint, config.subscriptionID) disksClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken) disksClient.PollingDelay = 5 * time.Second configureUserAgent(&disksClient.Client) @@ -1468,13 +1461,11 @@ func newAzDisksClient(config *azClientConfig) *azDisksClient { } } -func (az *azDisksClient) CreateOrUpdate(resourceGroupName string, diskName string, diskParameter disk.Model, cancel <-chan struct{}) (<-chan disk.Model, <-chan error) { +func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, diskParameter compute.Disk) (resp *http.Response, err error) { /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { - errChan := createARMRateLimitErrChannel(true, "DiskCreateOrUpdate") - resultChan := make(chan disk.Model, 1) - resultChan <- disk.Model{} - return resultChan, errChan + err = createARMRateLimitErr(true, "DiskCreateOrUpdate") + return } glog.V(10).Infof("azDisksClient.CreateOrUpdate(%q,%q): start", resourceGroupName, diskName) @@ -1482,22 +1473,23 @@ func (az *azDisksClient) CreateOrUpdate(resourceGroupName string, diskName strin glog.V(10).Infof("azDisksClient.CreateOrUpdate(%q,%q): end", resourceGroupName, diskName) }() - errChan := make(chan error, 1) mc := newMetricContext("disks", "create_or_update", resourceGroupName, az.client.SubscriptionID) - resultChan, proxyErrChan := az.client.CreateOrUpdate(resourceGroupName, diskName, diskParameter, cancel) - err := <-proxyErrChan + future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, diskName, diskParameter) mc.Observe(err) - errChan <- err - return resultChan, errChan + if err != nil { + return future.Response(), err + } + + err = future.WaitForCompletion(ctx, az.client.Client) + mc.Observe(err) + return future.Response(), err } -func (az *azDisksClient) Delete(resourceGroupName string, diskName string, cancel <-chan struct{}) (<-chan disk.OperationStatusResponse, <-chan error) { +func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) (resp *http.Response, err error) { /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { - errChan := createARMRateLimitErrChannel(true, "DiskDelete") - resultChan := make(chan disk.OperationStatusResponse, 1) - resultChan <- disk.OperationStatusResponse{} - return resultChan, errChan + err = createARMRateLimitErr(true, "DiskDelete") + return } glog.V(10).Infof("azDisksClient.Delete(%q,%q): start", resourceGroupName, diskName) @@ -1505,16 +1497,19 @@ func (az *azDisksClient) Delete(resourceGroupName string, diskName string, cance glog.V(10).Infof("azDisksClient.Delete(%q,%q): end", resourceGroupName, diskName) }() - errChan := make(chan error, 1) mc := newMetricContext("disks", "delete", resourceGroupName, az.client.SubscriptionID) - resultChan, proxyErrChan := az.client.Delete(resourceGroupName, diskName, cancel) - err := <-proxyErrChan + future, err := az.client.Delete(ctx, resourceGroupName, diskName) mc.Observe(err) - errChan <- err - return resultChan, errChan + if err != nil { + return future.Response(), err + } + + err = future.WaitForCompletion(ctx, az.client.Client) + mc.Observe(err) + return future.Response(), err } -func (az *azDisksClient) Get(resourceGroupName string, diskName string) (result disk.Model, err error) { +func (az *azDisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result compute.Disk, err error) { if !az.rateLimiterReader.TryAccept() { err = createARMRateLimitErr(false, "GetDisk") return @@ -1526,7 +1521,7 @@ func (az *azDisksClient) Get(resourceGroupName string, diskName string) (result }() mc := newMetricContext("disks", "get", resourceGroupName, az.client.SubscriptionID) - result, err = az.client.Get(resourceGroupName, diskName) + result, err = az.client.Get(ctx, resourceGroupName, diskName) mc.Observe(err) return }