diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD index d65a4af2a1f..d37f3e462df 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/BUILD @@ -54,10 +54,8 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", - "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", "//staging/src/k8s.io/cloud-provider/service/helpers:go_default_library", "//staging/src/k8s.io/cloud-provider/volume:go_default_library", @@ -66,17 +64,20 @@ go_library( "//staging/src/k8s.io/component-base/featuregate:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/auth:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/diskclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/interfaceclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/publicipclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routeclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmclient:go_default_library", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient:go_default_library", - "//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library", diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure.go index 9caece8c230..9f046960ebf 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure.go @@ -27,7 +27,6 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" @@ -39,21 +38,24 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" v1core "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/pkg/version" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog" "k8s.io/legacy-cloud-providers/azure/auth" azclients "k8s.io/legacy-cloud-providers/azure/clients" + "k8s.io/legacy-cloud-providers/azure/clients/diskclient" "k8s.io/legacy-cloud-providers/azure/clients/interfaceclient" "k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient" "k8s.io/legacy-cloud-providers/azure/clients/publicipclient" "k8s.io/legacy-cloud-providers/azure/clients/routeclient" "k8s.io/legacy-cloud-providers/azure/clients/routetableclient" "k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient" + "k8s.io/legacy-cloud-providers/azure/clients/snapshotclient" + "k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient" "k8s.io/legacy-cloud-providers/azure/clients/subnetclient" "k8s.io/legacy-cloud-providers/azure/clients/vmclient" + "k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient" "k8s.io/legacy-cloud-providers/azure/clients/vmssclient" "k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient" "k8s.io/legacy-cloud-providers/azure/retry" @@ -235,7 +237,7 @@ type Cloud struct { VirtualMachinesClient VirtualMachinesClient StorageAccountClient StorageAccountClient DisksClient DisksClient - SnapshotsClient *compute.SnapshotsClient + SnapshotsClient SnapshotsClient FileClient FileClient VirtualMachineScaleSetsClient VirtualMachineScaleSetsClient VirtualMachineScaleSetVMsClient VirtualMachineScaleSetVMsClient @@ -493,18 +495,16 @@ func (az *Cloud) InitializeCloudFromConfig(config *Config, fromSecret bool) erro az.VirtualMachinesClient = vmclient.New(azClientConfig.WithRateLimiter(config.VirtualMachineRateLimit)) az.PublicIPAddressesClient = publicipclient.New(azClientConfig.WithRateLimiter(config.PublicIPAddressRateLimit)) az.VirtualMachineScaleSetsClient = vmssclient.New(azClientConfig.WithRateLimiter(config.VirtualMachineScaleSetRateLimit)) + az.DisksClient = diskclient.New(azClientConfig.WithRateLimiter(config.DiskRateLimit)) + az.VirtualMachineSizesClient = vmsizeclient.New(azClientConfig.WithRateLimiter(config.VirtualMachineSizeRateLimit)) + az.SnapshotsClient = snapshotclient.New(azClientConfig.WithRateLimiter(config.SnapshotRateLimit)) + az.StorageAccountClient = storageaccountclient.New(azClientConfig.WithRateLimiter(config.StorageAccountRateLimit)) // Error "not an active Virtual Machine Scale Set VM" is not retriable for VMSS VM. vmssVMClientConfig := azClientConfig.WithRateLimiter(config.VirtualMachineScaleSetRateLimit) vmssVMClientConfig.Backoff = vmssVMClientConfig.Backoff.WithNonRetriableErrors([]string{vmssVMNotActiveErrorMessage}) az.VirtualMachineScaleSetVMsClient = vmssvmclient.New(vmssVMClientConfig) - // TODO(feiskyer): refactor the following clients to use armclient - az.DisksClient = newAzDisksClient(azClientConfig.WithRateLimiter(config.DiskRateLimit)) - az.SnapshotsClient = newSnapshotsClient(azClientConfig.WithRateLimiter(config.SnapshotRateLimit)) - az.StorageAccountClient = newAzStorageAccountClient(azClientConfig.WithRateLimiter(config.StorageAccountRateLimit)) - az.VirtualMachineSizesClient = newAzVirtualMachineSizesClient(azClientConfig.WithRateLimiter(config.VirtualMachineSizeRateLimit)) - // TODO(feiskyer): refactor azureFileClient to Interface. az.FileClient = &azureFileClient{env: *env} @@ -615,15 +615,6 @@ func (az *Cloud) ProviderName() string { return CloudProviderName } -// configureUserAgent configures the autorest client with a user agent that -// includes "kubernetes" and the full kubernetes git version string -// example: -// Azure-SDK-for-Go/7.0.1-beta arm-network/2016-09-01; kubernetes-cloudprovider/v1.7.0-alpha.2.711+a2fadef8170bb0-dirty; -func configureUserAgent(client *autorest.Client) { - k8sVersion := version.Get().GitVersion - client.UserAgent = fmt.Sprintf("%s; kubernetes-cloudprovider/%s", client.UserAgent, k8sVersion) -} - func initDiskControllers(az *Cloud) error { // Common controller contains the function // needed by both blob disk and managed disk controllers diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_blobDiskController.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_blobDiskController.go index 0fd742de916..9dc6c458af4 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_blobDiskController.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_blobDiskController.go @@ -443,16 +443,13 @@ func (c *BlobDiskController) getDiskCount(SAName string) (int, error) { func (c *BlobDiskController) getAllStorageAccounts() (map[string]*storageAccountState, error) { ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() - accountListResult, rerr := c.common.cloud.StorageAccountClient.ListByResourceGroup(ctx, c.common.resourceGroup) + accountList, rerr := c.common.cloud.StorageAccountClient.ListByResourceGroup(ctx, c.common.resourceGroup) if rerr != nil { return nil, rerr.Error() } - if accountListResult.Value == nil { - return nil, fmt.Errorf("azureDisk - empty accountListResult") - } accounts := make(map[string]*storageAccountState) - for _, v := range *accountListResult.Value { + for _, v := range accountList { if v.Name == nil || v.Sku == nil { klog.Info("azureDisk - accountListResult Name or Sku is nil") continue diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go index 87323dbc5be..cb5211a5399 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go @@ -20,18 +20,11 @@ package azure import ( "context" - "fmt" - "time" "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network" "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" - "github.com/Azure/go-autorest/autorest" - "k8s.io/client-go/util/flowcontrol" - "k8s.io/klog" - azclients "k8s.io/legacy-cloud-providers/azure/clients" - "k8s.io/legacy-cloud-providers/azure/metrics" "k8s.io/legacy-cloud-providers/azure/retry" ) @@ -41,15 +34,6 @@ const ( virtualMachineScaleSetsDeallocating = "Deallocating" ) -// Helpers for rate limiting error/error channel creation -func createRateLimitErr(isWrite bool, opName string) *retry.Error { - opType := "read" - if isWrite { - opType = "write" - } - return retry.GetRetriableError(fmt.Errorf("azure - cloud provider rate limited(%s) for operation:%s", opType, opName)) -} - // VirtualMachinesClient defines needed functions for azure compute.VirtualMachinesClient type VirtualMachinesClient interface { CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachine, source string) *retry.Error @@ -129,10 +113,18 @@ type StorageAccountClient interface { Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) *retry.Error Delete(ctx context.Context, resourceGroupName string, accountName string) *retry.Error ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, rerr *retry.Error) - ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, rerr *retry.Error) + ListByResourceGroup(ctx context.Context, resourceGroupName string) (result []storage.Account, rerr *retry.Error) GetProperties(ctx context.Context, resourceGroupName string, accountName string) (result storage.Account, rerr *retry.Error) } +// SnapshotsClient defines needed functions for azure compute.SnapshotsClient +type SnapshotsClient interface { + Get(ctx context.Context, resourceGroupName string, snapshotName string) (compute.Snapshot, *retry.Error) + Delete(ctx context.Context, resourceGroupName string, snapshotName string) *retry.Error + ListByResourceGroup(ctx context.Context, resourceGroupName string) ([]compute.Snapshot, *retry.Error) + CreateOrUpdate(ctx context.Context, resourceGroupName string, snapshotName string, snapshot compute.Snapshot) *retry.Error +} + // DisksClient defines needed functions for azure compute.DisksClient type DisksClient interface { CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, diskParameter compute.Disk) *retry.Error @@ -148,288 +140,3 @@ type VirtualMachineSizesClient interface { func getContextWithCancel() (context.Context, context.CancelFunc) { return context.WithCancel(context.Background()) } - -// azStorageAccountClient implements StorageAccountClient. -type azStorageAccountClient struct { - client storage.AccountsClient - rateLimiterReader flowcontrol.RateLimiter - rateLimiterWriter flowcontrol.RateLimiter -} - -func newAzStorageAccountClient(config *azclients.ClientConfig) *azStorageAccountClient { - storageAccountClient := storage.NewAccountsClientWithBaseURI(config.ResourceManagerEndpoint, config.SubscriptionID) - storageAccountClient.Authorizer = autorest.NewBearerAuthorizer(config.ServicePrincipalToken) - storageAccountClient.PollingDelay = 5 * time.Second - if config.ShouldOmitCloudProviderBackoff { - storageAccountClient.RetryAttempts = config.CloudProviderBackoffRetries - storageAccountClient.RetryDuration = time.Duration(config.CloudProviderBackoffDuration) * time.Second - } - configureUserAgent(&storageAccountClient.Client) - - klog.V(2).Infof("Azure StorageAccountClient (read ops) using rate limit config: QPS=%g, bucket=%d", - config.RateLimitConfig.CloudProviderRateLimitQPS, - config.RateLimitConfig.CloudProviderRateLimitBucket) - klog.V(2).Infof("Azure StorageAccountClient (write ops) using rate limit config: QPS=%g, bucket=%d", - config.RateLimitConfig.CloudProviderRateLimitQPSWrite, - config.RateLimitConfig.CloudProviderRateLimitBucketWrite) - rateLimiterReader, rateLimiterWriter := azclients.NewRateLimiter(config.RateLimitConfig) - return &azStorageAccountClient{ - client: storageAccountClient, - rateLimiterReader: rateLimiterReader, - rateLimiterWriter: rateLimiterWriter, - } -} - -func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) *retry.Error { - mc := metrics.NewMetricContext("storage_account", "create", resourceGroupName, az.client.SubscriptionID, "") - /* Write rate limiting */ - if !az.rateLimiterWriter.TryAccept() { - mc.RateLimitedCount() - return createRateLimitErr(true, "StorageAccountCreate") - } - - klog.V(10).Infof("azStorageAccountClient.Create(%q,%q): start", resourceGroupName, accountName) - defer func() { - klog.V(10).Infof("azStorageAccountClient.Create(%q,%q): end", resourceGroupName, accountName) - }() - - future, err := az.client.Create(ctx, resourceGroupName, accountName, parameters) - if err != nil { - return retry.GetError(future.Response(), err) - } - - err = future.WaitForCompletionRef(ctx, az.client.Client) - mc.Observe(err) - return retry.GetError(future.Response(), err) -} - -func (az *azStorageAccountClient) Delete(ctx context.Context, resourceGroupName string, accountName string) *retry.Error { - mc := metrics.NewMetricContext("storage_account", "delete", resourceGroupName, az.client.SubscriptionID, "") - if !az.rateLimiterReader.TryAccept() { - mc.RateLimitedCount() - return createRateLimitErr(false, "DeleteStorageAccount") - } - - klog.V(10).Infof("azStorageAccountClient.Delete(%q,%q): start", resourceGroupName, accountName) - defer func() { - klog.V(10).Infof("azStorageAccountClient.Delete(%q,%q): end", resourceGroupName, accountName) - }() - - result, err := az.client.Delete(ctx, resourceGroupName, accountName) - mc.Observe(err) - return retry.GetStatusNotFoundAndForbiddenIgnoredError(result.Response, err) -} - -func (az *azStorageAccountClient) ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, rerr *retry.Error) { - mc := metrics.NewMetricContext("storage_account", "list_keys", resourceGroupName, az.client.SubscriptionID, "") - if !az.rateLimiterReader.TryAccept() { - mc.RateLimitedCount() - rerr = createRateLimitErr(false, "ListStorageAccountKeys") - return - } - - klog.V(10).Infof("azStorageAccountClient.ListKeys(%q,%q): start", resourceGroupName, accountName) - defer func() { - klog.V(10).Infof("azStorageAccountClient.ListKeys(%q,%q): end", resourceGroupName, accountName) - }() - - var err error - result, err = az.client.ListKeys(ctx, resourceGroupName, accountName, storage.Kerb) - mc.Observe(err) - return result, retry.GetError(result.Response.Response, err) -} - -func (az *azStorageAccountClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, rerr *retry.Error) { - mc := metrics.NewMetricContext("storage_account", "list_by_resource_group", resourceGroupName, az.client.SubscriptionID, "") - if !az.rateLimiterReader.TryAccept() { - mc.RateLimitedCount() - rerr = createRateLimitErr(false, "ListStorageAccountsByResourceGroup") - return - } - - klog.V(10).Infof("azStorageAccountClient.ListByResourceGroup(%q): start", resourceGroupName) - defer func() { - klog.V(10).Infof("azStorageAccountClient.ListByResourceGroup(%q): end", resourceGroupName) - }() - - var err error - result, err = az.client.ListByResourceGroup(ctx, resourceGroupName) - mc.Observe(err) - return result, retry.GetError(result.Response.Response, err) -} - -func (az *azStorageAccountClient) GetProperties(ctx context.Context, resourceGroupName string, accountName string) (result storage.Account, rerr *retry.Error) { - mc := metrics.NewMetricContext("storage_account", "get_properties", resourceGroupName, az.client.SubscriptionID, "") - if !az.rateLimiterReader.TryAccept() { - mc.RateLimitedCount() - rerr = createRateLimitErr(false, "GetStorageAccount/Properties") - return - } - - klog.V(10).Infof("azStorageAccountClient.GetProperties(%q,%q): start", resourceGroupName, accountName) - defer func() { - klog.V(10).Infof("azStorageAccountClient.GetProperties(%q,%q): end", resourceGroupName, accountName) - }() - - var err error - result, err = az.client.GetProperties(ctx, resourceGroupName, accountName, "") - mc.Observe(err) - return result, retry.GetError(result.Response.Response, err) -} - -// azDisksClient implements DisksClient. -type azDisksClient struct { - client compute.DisksClient - rateLimiterReader flowcontrol.RateLimiter - rateLimiterWriter flowcontrol.RateLimiter -} - -func newAzDisksClient(config *azclients.ClientConfig) *azDisksClient { - disksClient := compute.NewDisksClientWithBaseURI(config.ResourceManagerEndpoint, config.SubscriptionID) - disksClient.Authorizer = autorest.NewBearerAuthorizer(config.ServicePrincipalToken) - disksClient.PollingDelay = 5 * time.Second - if config.ShouldOmitCloudProviderBackoff { - disksClient.RetryAttempts = config.CloudProviderBackoffRetries - disksClient.RetryDuration = time.Duration(config.CloudProviderBackoffDuration) * time.Second - } - configureUserAgent(&disksClient.Client) - - klog.V(2).Infof("Azure DisksClient (read ops) using rate limit config: QPS=%g, bucket=%d", - config.RateLimitConfig.CloudProviderRateLimitQPS, - config.RateLimitConfig.CloudProviderRateLimitBucket) - klog.V(2).Infof("Azure DisksClient (write ops) using rate limit config: QPS=%g, bucket=%d", - config.RateLimitConfig.CloudProviderRateLimitQPSWrite, - config.RateLimitConfig.CloudProviderRateLimitBucketWrite) - rateLimiterReader, rateLimiterWriter := azclients.NewRateLimiter(config.RateLimitConfig) - return &azDisksClient{ - client: disksClient, - rateLimiterReader: rateLimiterReader, - rateLimiterWriter: rateLimiterWriter, - } -} - -func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, diskParameter compute.Disk) *retry.Error { - mc := metrics.NewMetricContext("disks", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") - /* Write rate limiting */ - if !az.rateLimiterWriter.TryAccept() { - mc.RateLimitedCount() - return createRateLimitErr(true, "DiskCreateOrUpdate") - } - - klog.V(10).Infof("azDisksClient.CreateOrUpdate(%q,%q): start", resourceGroupName, diskName) - defer func() { - klog.V(10).Infof("azDisksClient.CreateOrUpdate(%q,%q): end", resourceGroupName, diskName) - }() - - future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, diskName, diskParameter) - if err != nil { - return retry.GetError(future.Response(), mc.Observe(err)) - } - - err = future.WaitForCompletionRef(ctx, az.client.Client) - return retry.GetError(future.Response(), mc.Observe(err)) -} - -func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) *retry.Error { - mc := metrics.NewMetricContext("disks", "delete", resourceGroupName, az.client.SubscriptionID, "") - /* Write rate limiting */ - if !az.rateLimiterWriter.TryAccept() { - mc.RateLimitedCount() - return createRateLimitErr(true, "DiskDelete") - } - - klog.V(10).Infof("azDisksClient.Delete(%q,%q): start", resourceGroupName, diskName) - defer func() { - klog.V(10).Infof("azDisksClient.Delete(%q,%q): end", resourceGroupName, diskName) - }() - - future, err := az.client.Delete(ctx, resourceGroupName, diskName) - if err != nil { - return retry.GetStatusNotFoundAndForbiddenIgnoredError(future.Response(), mc.Observe(err)) - } - err = future.WaitForCompletionRef(ctx, az.client.Client) - return retry.GetStatusNotFoundAndForbiddenIgnoredError(future.Response(), mc.Observe(err)) -} - -func (az *azDisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result compute.Disk, rerr *retry.Error) { - mc := metrics.NewMetricContext("disks", "get", resourceGroupName, az.client.SubscriptionID, "") - if !az.rateLimiterReader.TryAccept() { - mc.RateLimitedCount() - rerr = createRateLimitErr(false, "GetDisk") - return - } - - klog.V(10).Infof("azDisksClient.Get(%q,%q): start", resourceGroupName, diskName) - defer func() { - klog.V(10).Infof("azDisksClient.Get(%q,%q): end", resourceGroupName, diskName) - }() - - var err error - result, err = az.client.Get(ctx, resourceGroupName, diskName) - mc.Observe(err) - return result, retry.GetError(result.Response.Response, err) -} - -// TODO(feiskyer): refactor compute.SnapshotsClient to Interface. -func newSnapshotsClient(config *azclients.ClientConfig) *compute.SnapshotsClient { - snapshotsClient := compute.NewSnapshotsClientWithBaseURI(config.ResourceManagerEndpoint, config.SubscriptionID) - snapshotsClient.Authorizer = autorest.NewBearerAuthorizer(config.ServicePrincipalToken) - snapshotsClient.PollingDelay = 5 * time.Second - if config.ShouldOmitCloudProviderBackoff { - snapshotsClient.RetryAttempts = config.CloudProviderBackoffRetries - snapshotsClient.RetryDuration = time.Duration(config.CloudProviderBackoffDuration) * time.Second - } - configureUserAgent(&snapshotsClient.Client) - return &snapshotsClient -} - -// azVirtualMachineSizesClient implements VirtualMachineSizesClient. -type azVirtualMachineSizesClient struct { - client compute.VirtualMachineSizesClient - rateLimiterReader flowcontrol.RateLimiter - rateLimiterWriter flowcontrol.RateLimiter -} - -func newAzVirtualMachineSizesClient(config *azclients.ClientConfig) *azVirtualMachineSizesClient { - VirtualMachineSizesClient := compute.NewVirtualMachineSizesClient(config.SubscriptionID) - VirtualMachineSizesClient.BaseURI = config.ResourceManagerEndpoint - VirtualMachineSizesClient.Authorizer = autorest.NewBearerAuthorizer(config.ServicePrincipalToken) - VirtualMachineSizesClient.PollingDelay = 5 * time.Second - if config.ShouldOmitCloudProviderBackoff { - VirtualMachineSizesClient.RetryAttempts = config.CloudProviderBackoffRetries - VirtualMachineSizesClient.RetryDuration = time.Duration(config.CloudProviderBackoffDuration) * time.Second - } - configureUserAgent(&VirtualMachineSizesClient.Client) - - klog.V(2).Infof("Azure VirtualMachineSizesClient (read ops) using rate limit config: QPS=%g, bucket=%d", - config.RateLimitConfig.CloudProviderRateLimitQPS, - config.RateLimitConfig.CloudProviderRateLimitBucket) - klog.V(2).Infof("Azure VirtualMachineSizesClient (write ops) using rate limit config: QPS=%g, bucket=%d", - config.RateLimitConfig.CloudProviderRateLimitQPSWrite, - config.RateLimitConfig.CloudProviderRateLimitBucketWrite) - rateLimiterReader, rateLimiterWriter := azclients.NewRateLimiter(config.RateLimitConfig) - return &azVirtualMachineSizesClient{ - rateLimiterReader: rateLimiterReader, - rateLimiterWriter: rateLimiterWriter, - client: VirtualMachineSizesClient, - } -} - -func (az *azVirtualMachineSizesClient) List(ctx context.Context, location string) (result compute.VirtualMachineSizeListResult, rerr *retry.Error) { - mc := metrics.NewMetricContext("vmsizes", "list", "", az.client.SubscriptionID, "") - if !az.rateLimiterReader.TryAccept() { - mc.RateLimitedCount() - rerr = createRateLimitErr(false, "VMSizesList") - return - } - - klog.V(10).Infof("azVirtualMachineSizesClient.List(%q): start", location) - defer func() { - klog.V(10).Infof("azVirtualMachineSizesClient.List(%q): end", location) - }() - - var err error - result, err = az.client.List(ctx, location) - mc.Observe(err) - return result, retry.GetError(result.Response.Response, err) -} diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go index 95849cdec7f..7464d20408c 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_fakes.go @@ -772,7 +772,7 @@ type fakeStorageAccountClient struct { mutex *sync.Mutex FakeStore map[string]map[string]storage.Account Keys storage.AccountListKeysResult - Accounts storage.AccountListResult + Accounts []storage.Account Err error } @@ -825,7 +825,7 @@ func (fSAC *fakeStorageAccountClient) ListKeys(ctx context.Context, resourceGrou return fSAC.Keys, nil } -func (fSAC *fakeStorageAccountClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, err *retry.Error) { +func (fSAC *fakeStorageAccountClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result []storage.Account, err *retry.Error) { return fSAC.Accounts, nil } diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storage_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storage_test.go index 778e5441c81..631c4dab82a 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storage_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storage_test.go @@ -44,7 +44,7 @@ func TestCreateFileShare(t *testing.T) { acctKind string loc string gb int - accounts storage.AccountListResult + accounts []storage.Account keys storage.AccountListKeysResult err error @@ -77,10 +77,8 @@ func TestCreateFileShare(t *testing.T) { acctKind: kind, loc: location, gb: 10, - accounts: storage.AccountListResult{ - Value: &[]storage.Account{ - {Name: &name, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Kind: storage.Kind(kind), Location: &location}, - }, + accounts: []storage.Account{ + {Name: &name, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Kind: storage.Kind(kind), Location: &location}, }, keys: storage.AccountListKeysResult{ Keys: &[]storage.AccountKey{ @@ -97,10 +95,8 @@ func TestCreateFileShare(t *testing.T) { acctKind: kind, loc: location, gb: 10, - accounts: storage.AccountListResult{ - Value: &[]storage.Account{ - {Name: &bogus, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Location: &location}, - }, + accounts: []storage.Account{ + {Name: &bogus, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Location: &location}, }, expectErr: true, }, @@ -111,10 +107,8 @@ func TestCreateFileShare(t *testing.T) { acctKind: kind, loc: location, gb: 10, - accounts: storage.AccountListResult{ - Value: &[]storage.Account{ - {Name: &name, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Location: &bogus}, - }, + accounts: []storage.Account{ + {Name: &name, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Location: &bogus}, }, expectErr: true, }, diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storageaccount.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storageaccount.go index 5145b711f8e..c1abf1b26c1 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storageaccount.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_storageaccount.go @@ -40,12 +40,9 @@ func (az *Cloud) getStorageAccounts(matchingAccountType, matchingAccountKind, re if rerr != nil { return nil, rerr.Error() } - if result.Value == nil { - return nil, fmt.Errorf("unexpected error when listing storage accounts from resource group %s", resourceGroup) - } accounts := []accountWithLocation{} - for _, acct := range *result.Value { + for _, acct := range result { if acct.Name != nil && acct.Location != nil && acct.Sku != nil { storageType := string((*acct.Sku).Name) if matchingAccountType != "" && !strings.EqualFold(matchingAccountType, storageType) { diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/BUILD index 64ce9fa06f2..0e93d59499d 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/BUILD @@ -28,14 +28,18 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:all-srcs", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/diskclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/interfaceclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/publicipclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routeclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/routetableclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient:all-srcs", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient:all-srcs", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/subnetclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmclient:all-srcs", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssclient:all-srcs", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient:all-srcs", ], diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/BUILD index cb561aa3dcc..f495e83f632 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/BUILD @@ -16,9 +16,10 @@ go_library( "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library", - "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", + "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) @@ -31,7 +32,7 @@ go_test( "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient/mockarmclient:go_default_library", - "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", "//vendor/github.com/golang/mock/gomock:go_default_library", diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient/BUILD index 1af72524452..920a884ec31 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient/BUILD @@ -11,7 +11,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library", - "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/golang/mock/gomock:go_default_library", ], ) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient/BUILD index 3148f992bcd..710c4c9c85b 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient/BUILD @@ -19,6 +19,7 @@ go_library( "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", + "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/BUILD index eb4267faa2a..588fb5ad3a9 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/BUILD @@ -3,12 +3,12 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = [ - "azure_virtualmachinesizeclient.go", + "azure_vmsizeclient.go", "doc.go", "interface.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/clients/virtualmachinesizeclient", - importpath = "k8s.io/legacy-cloud-providers/azure/clients/virtualmachinesizeclient", + importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient", + importpath = "k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", @@ -16,25 +16,23 @@ go_library( "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library", - "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], ) go_test( name = "go_default_test", - srcs = ["azure_virtualmachinesizeclient_test.go"], + srcs = ["azure_vmsizeclient_test.go"], embed = [":go_default_library"], deps = [ "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient/mockarmclient:go_default_library", - "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", ], @@ -51,7 +49,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/virtualmachinesizeclient/mockvirtualmachinesizeclient:all-srcs", + "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient:all-srcs", ], tags = ["automanaged"], visibility = ["//visibility:public"], diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient/BUILD b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient/BUILD index ff5ae99e4e5..9256d86f420 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient/BUILD @@ -6,12 +6,12 @@ go_library( "doc.go", "interface.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/clients/virtualmachinesizeclient/mockvirtualmachinesizeclient", - importpath = "k8s.io/legacy-cloud-providers/azure/clients/virtualmachinesizeclient/mockvirtualmachinesizeclient", + importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient", + importpath = "k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient/mockvmsizeclient", visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library", - "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:go_default_library", + "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute:go_default_library", "//vendor/github.com/golang/mock/gomock:go_default_library", ], ) diff --git a/vendor/modules.txt b/vendor/modules.txt index 3b8f8bc950a..edfc37e579f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1838,14 +1838,18 @@ k8s.io/legacy-cloud-providers/azure k8s.io/legacy-cloud-providers/azure/auth k8s.io/legacy-cloud-providers/azure/clients k8s.io/legacy-cloud-providers/azure/clients/armclient +k8s.io/legacy-cloud-providers/azure/clients/diskclient k8s.io/legacy-cloud-providers/azure/clients/interfaceclient k8s.io/legacy-cloud-providers/azure/clients/loadbalancerclient k8s.io/legacy-cloud-providers/azure/clients/publicipclient k8s.io/legacy-cloud-providers/azure/clients/routeclient k8s.io/legacy-cloud-providers/azure/clients/routetableclient k8s.io/legacy-cloud-providers/azure/clients/securitygroupclient +k8s.io/legacy-cloud-providers/azure/clients/snapshotclient +k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient k8s.io/legacy-cloud-providers/azure/clients/subnetclient k8s.io/legacy-cloud-providers/azure/clients/vmclient +k8s.io/legacy-cloud-providers/azure/clients/vmsizeclient k8s.io/legacy-cloud-providers/azure/clients/vmssclient k8s.io/legacy-cloud-providers/azure/clients/vmssvmclient k8s.io/legacy-cloud-providers/azure/metrics