github.com/pbthorste/terraform@v0.8.6-0.20170127005045-deb56bd93da2/builtin/providers/azurerm/config.go (about) 1 package azurerm 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "net/http" 8 "net/http/httputil" 9 10 "github.com/Azure/azure-sdk-for-go/arm/cdn" 11 "github.com/Azure/azure-sdk-for-go/arm/compute" 12 "github.com/Azure/azure-sdk-for-go/arm/containerregistry" 13 "github.com/Azure/azure-sdk-for-go/arm/eventhub" 14 "github.com/Azure/azure-sdk-for-go/arm/keyvault" 15 "github.com/Azure/azure-sdk-for-go/arm/network" 16 "github.com/Azure/azure-sdk-for-go/arm/redis" 17 "github.com/Azure/azure-sdk-for-go/arm/resources/resources" 18 "github.com/Azure/azure-sdk-for-go/arm/scheduler" 19 "github.com/Azure/azure-sdk-for-go/arm/servicebus" 20 "github.com/Azure/azure-sdk-for-go/arm/storage" 21 "github.com/Azure/azure-sdk-for-go/arm/trafficmanager" 22 mainStorage "github.com/Azure/azure-sdk-for-go/storage" 23 "github.com/Azure/go-autorest/autorest" 24 "github.com/Azure/go-autorest/autorest/azure" 25 "github.com/hashicorp/terraform/terraform" 26 riviera "github.com/jen20/riviera/azure" 27 ) 28 29 // ArmClient contains the handles to all the specific Azure Resource Manager 30 // resource classes' respective clients. 31 type ArmClient struct { 32 clientId string 33 tenantId string 34 subscriptionId string 35 environment azure.Environment 36 37 StopContext context.Context 38 39 rivieraClient *riviera.Client 40 41 availSetClient compute.AvailabilitySetsClient 42 usageOpsClient compute.UsageOperationsClient 43 vmExtensionImageClient compute.VirtualMachineExtensionImagesClient 44 vmExtensionClient compute.VirtualMachineExtensionsClient 45 vmScaleSetClient compute.VirtualMachineScaleSetsClient 46 vmImageClient compute.VirtualMachineImagesClient 47 vmClient compute.VirtualMachinesClient 48 49 appGatewayClient network.ApplicationGatewaysClient 50 ifaceClient network.InterfacesClient 51 loadBalancerClient network.LoadBalancersClient 52 localNetConnClient network.LocalNetworkGatewaysClient 53 publicIPClient network.PublicIPAddressesClient 54 secGroupClient network.SecurityGroupsClient 55 secRuleClient network.SecurityRulesClient 56 subnetClient network.SubnetsClient 57 netUsageClient network.UsagesClient 58 vnetGatewayConnectionsClient network.VirtualNetworkGatewayConnectionsClient 59 vnetGatewayClient network.VirtualNetworkGatewaysClient 60 vnetClient network.VirtualNetworksClient 61 vnetPeeringsClient network.VirtualNetworkPeeringsClient 62 routeTablesClient network.RouteTablesClient 63 routesClient network.RoutesClient 64 65 cdnProfilesClient cdn.ProfilesClient 66 cdnEndpointsClient cdn.EndpointsClient 67 68 containerRegistryClient containerregistry.RegistriesClient 69 70 eventHubClient eventhub.EventHubsClient 71 eventHubConsumerGroupClient eventhub.ConsumerGroupsClient 72 eventHubNamespacesClient eventhub.NamespacesClient 73 74 providers resources.ProvidersClient 75 resourceGroupClient resources.GroupsClient 76 tagsClient resources.TagsClient 77 resourceFindClient resources.Client 78 79 jobsClient scheduler.JobsClient 80 jobsCollectionsClient scheduler.JobCollectionsClient 81 82 storageServiceClient storage.AccountsClient 83 storageUsageClient storage.UsageOperationsClient 84 85 deploymentsClient resources.DeploymentsClient 86 87 redisClient redis.Client 88 89 trafficManagerProfilesClient trafficmanager.ProfilesClient 90 trafficManagerEndpointsClient trafficmanager.EndpointsClient 91 92 serviceBusNamespacesClient servicebus.NamespacesClient 93 serviceBusTopicsClient servicebus.TopicsClient 94 serviceBusSubscriptionsClient servicebus.SubscriptionsClient 95 96 keyVaultClient keyvault.VaultsClient 97 } 98 99 func withRequestLogging() autorest.SendDecorator { 100 return func(s autorest.Sender) autorest.Sender { 101 return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { 102 // dump request to wire format 103 if dump, err := httputil.DumpRequestOut(r, true); err == nil { 104 log.Printf("[DEBUG] AzureRM Request: \n%s\n", dump) 105 } else { 106 // fallback to basic message 107 log.Printf("[DEBUG] AzureRM Request: %s to %s\n", r.Method, r.URL) 108 } 109 110 resp, err := s.Do(r) 111 if resp != nil { 112 // dump response to wire format 113 if dump, err := httputil.DumpResponse(resp, true); err == nil { 114 log.Printf("[DEBUG] AzureRM Response for %s: \n%s\n", r.URL, dump) 115 } else { 116 // fallback to basic message 117 log.Printf("[DEBUG] AzureRM Response: %s for %s\n", resp.Status, r.URL) 118 } 119 } else { 120 log.Printf("[DEBUG] Request to %s completed with no response", r.URL) 121 } 122 return resp, err 123 }) 124 } 125 } 126 127 func setUserAgent(client *autorest.Client) { 128 version := terraform.VersionString() 129 client.UserAgent = fmt.Sprintf("HashiCorp-Terraform-v%s", version) 130 } 131 132 // getArmClient is a helper method which returns a fully instantiated 133 // *ArmClient based on the Config's current settings. 134 func (c *Config) getArmClient() (*ArmClient, error) { 135 // detect cloud from environment 136 env, envErr := azure.EnvironmentFromName(c.Environment) 137 if envErr != nil { 138 // try again with wrapped value to support readable values like german instead of AZUREGERMANCLOUD 139 wrapped := fmt.Sprintf("AZURE%sCLOUD", c.Environment) 140 var innerErr error 141 if env, innerErr = azure.EnvironmentFromName(wrapped); innerErr != nil { 142 return nil, envErr 143 } 144 } 145 146 // client declarations: 147 client := ArmClient{ 148 clientId: c.ClientID, 149 tenantId: c.TenantID, 150 subscriptionId: c.SubscriptionID, 151 environment: env, 152 } 153 154 rivieraClient, err := riviera.NewClient(&riviera.AzureResourceManagerCredentials{ 155 ClientID: c.ClientID, 156 ClientSecret: c.ClientSecret, 157 TenantID: c.TenantID, 158 SubscriptionID: c.SubscriptionID, 159 ResourceManagerEndpoint: env.ResourceManagerEndpoint, 160 ActiveDirectoryEndpoint: env.ActiveDirectoryEndpoint, 161 }) 162 if err != nil { 163 return nil, fmt.Errorf("Error creating Riviera client: %s", err) 164 } 165 client.rivieraClient = rivieraClient 166 167 oauthConfig, err := env.OAuthConfigForTenant(c.TenantID) 168 if err != nil { 169 return nil, err 170 } 171 172 // OAuthConfigForTenant returns a pointer, which can be nil. 173 if oauthConfig == nil { 174 return nil, fmt.Errorf("Unable to configure OAuthConfig for tenant %s", c.TenantID) 175 } 176 177 spt, err := azure.NewServicePrincipalToken(*oauthConfig, c.ClientID, c.ClientSecret, env.ResourceManagerEndpoint) 178 if err != nil { 179 return nil, err 180 } 181 182 endpoint := env.ResourceManagerEndpoint 183 184 // NOTE: these declarations should be left separate for clarity should the 185 // clients be wished to be configured with custom Responders/PollingModess etc... 186 asc := compute.NewAvailabilitySetsClientWithBaseURI(endpoint, c.SubscriptionID) 187 setUserAgent(&asc.Client) 188 asc.Authorizer = spt 189 asc.Sender = autorest.CreateSender(withRequestLogging()) 190 client.availSetClient = asc 191 192 uoc := compute.NewUsageOperationsClientWithBaseURI(endpoint, c.SubscriptionID) 193 setUserAgent(&uoc.Client) 194 uoc.Authorizer = spt 195 uoc.Sender = autorest.CreateSender(withRequestLogging()) 196 client.usageOpsClient = uoc 197 198 vmeic := compute.NewVirtualMachineExtensionImagesClientWithBaseURI(endpoint, c.SubscriptionID) 199 setUserAgent(&vmeic.Client) 200 vmeic.Authorizer = spt 201 vmeic.Sender = autorest.CreateSender(withRequestLogging()) 202 client.vmExtensionImageClient = vmeic 203 204 vmec := compute.NewVirtualMachineExtensionsClientWithBaseURI(endpoint, c.SubscriptionID) 205 setUserAgent(&vmec.Client) 206 vmec.Authorizer = spt 207 vmec.Sender = autorest.CreateSender(withRequestLogging()) 208 client.vmExtensionClient = vmec 209 210 vmic := compute.NewVirtualMachineImagesClientWithBaseURI(endpoint, c.SubscriptionID) 211 setUserAgent(&vmic.Client) 212 vmic.Authorizer = spt 213 vmic.Sender = autorest.CreateSender(withRequestLogging()) 214 client.vmImageClient = vmic 215 216 vmssc := compute.NewVirtualMachineScaleSetsClientWithBaseURI(endpoint, c.SubscriptionID) 217 setUserAgent(&vmssc.Client) 218 vmssc.Authorizer = spt 219 vmssc.Sender = autorest.CreateSender(withRequestLogging()) 220 client.vmScaleSetClient = vmssc 221 222 vmc := compute.NewVirtualMachinesClientWithBaseURI(endpoint, c.SubscriptionID) 223 setUserAgent(&vmc.Client) 224 vmc.Authorizer = spt 225 vmc.Sender = autorest.CreateSender(withRequestLogging()) 226 client.vmClient = vmc 227 228 agc := network.NewApplicationGatewaysClientWithBaseURI(endpoint, c.SubscriptionID) 229 setUserAgent(&agc.Client) 230 agc.Authorizer = spt 231 agc.Sender = autorest.CreateSender(withRequestLogging()) 232 client.appGatewayClient = agc 233 234 crc := containerregistry.NewRegistriesClientWithBaseURI(endpoint, c.SubscriptionID) 235 setUserAgent(&crc.Client) 236 crc.Authorizer = spt 237 crc.Sender = autorest.CreateSender(withRequestLogging()) 238 client.containerRegistryClient = crc 239 240 ehc := eventhub.NewEventHubsClientWithBaseURI(endpoint, c.SubscriptionID) 241 setUserAgent(&ehc.Client) 242 ehc.Authorizer = spt 243 ehc.Sender = autorest.CreateSender(withRequestLogging()) 244 client.eventHubClient = ehc 245 246 chcgc := eventhub.NewConsumerGroupsClientWithBaseURI(endpoint, c.SubscriptionID) 247 setUserAgent(&chcgc.Client) 248 chcgc.Authorizer = spt 249 chcgc.Sender = autorest.CreateSender(withRequestLogging()) 250 client.eventHubConsumerGroupClient = chcgc 251 252 ehnc := eventhub.NewNamespacesClientWithBaseURI(endpoint, c.SubscriptionID) 253 setUserAgent(&ehnc.Client) 254 ehnc.Authorizer = spt 255 ehnc.Sender = autorest.CreateSender(withRequestLogging()) 256 client.eventHubNamespacesClient = ehnc 257 258 ifc := network.NewInterfacesClientWithBaseURI(endpoint, c.SubscriptionID) 259 setUserAgent(&ifc.Client) 260 ifc.Authorizer = spt 261 ifc.Sender = autorest.CreateSender(withRequestLogging()) 262 client.ifaceClient = ifc 263 264 lbc := network.NewLoadBalancersClientWithBaseURI(endpoint, c.SubscriptionID) 265 setUserAgent(&lbc.Client) 266 lbc.Authorizer = spt 267 lbc.Sender = autorest.CreateSender(withRequestLogging()) 268 client.loadBalancerClient = lbc 269 270 lgc := network.NewLocalNetworkGatewaysClientWithBaseURI(endpoint, c.SubscriptionID) 271 setUserAgent(&lgc.Client) 272 lgc.Authorizer = spt 273 lgc.Sender = autorest.CreateSender(withRequestLogging()) 274 client.localNetConnClient = lgc 275 276 pipc := network.NewPublicIPAddressesClientWithBaseURI(endpoint, c.SubscriptionID) 277 setUserAgent(&pipc.Client) 278 pipc.Authorizer = spt 279 pipc.Sender = autorest.CreateSender(withRequestLogging()) 280 client.publicIPClient = pipc 281 282 sgc := network.NewSecurityGroupsClientWithBaseURI(endpoint, c.SubscriptionID) 283 setUserAgent(&sgc.Client) 284 sgc.Authorizer = spt 285 sgc.Sender = autorest.CreateSender(withRequestLogging()) 286 client.secGroupClient = sgc 287 288 src := network.NewSecurityRulesClientWithBaseURI(endpoint, c.SubscriptionID) 289 setUserAgent(&src.Client) 290 src.Authorizer = spt 291 src.Sender = autorest.CreateSender(withRequestLogging()) 292 client.secRuleClient = src 293 294 snc := network.NewSubnetsClientWithBaseURI(endpoint, c.SubscriptionID) 295 setUserAgent(&snc.Client) 296 snc.Authorizer = spt 297 snc.Sender = autorest.CreateSender(withRequestLogging()) 298 client.subnetClient = snc 299 300 vgcc := network.NewVirtualNetworkGatewayConnectionsClientWithBaseURI(endpoint, c.SubscriptionID) 301 setUserAgent(&vgcc.Client) 302 vgcc.Authorizer = spt 303 vgcc.Sender = autorest.CreateSender(withRequestLogging()) 304 client.vnetGatewayConnectionsClient = vgcc 305 306 vgc := network.NewVirtualNetworkGatewaysClientWithBaseURI(endpoint, c.SubscriptionID) 307 setUserAgent(&vgc.Client) 308 vgc.Authorizer = spt 309 vgc.Sender = autorest.CreateSender(withRequestLogging()) 310 client.vnetGatewayClient = vgc 311 312 vnc := network.NewVirtualNetworksClientWithBaseURI(endpoint, c.SubscriptionID) 313 setUserAgent(&vnc.Client) 314 vnc.Authorizer = spt 315 vnc.Sender = autorest.CreateSender(withRequestLogging()) 316 client.vnetClient = vnc 317 318 vnpc := network.NewVirtualNetworkPeeringsClientWithBaseURI(endpoint, c.SubscriptionID) 319 setUserAgent(&vnpc.Client) 320 vnpc.Authorizer = spt 321 vnpc.Sender = autorest.CreateSender(withRequestLogging()) 322 client.vnetPeeringsClient = vnpc 323 324 rtc := network.NewRouteTablesClientWithBaseURI(endpoint, c.SubscriptionID) 325 setUserAgent(&rtc.Client) 326 rtc.Authorizer = spt 327 rtc.Sender = autorest.CreateSender(withRequestLogging()) 328 client.routeTablesClient = rtc 329 330 rc := network.NewRoutesClientWithBaseURI(endpoint, c.SubscriptionID) 331 setUserAgent(&rc.Client) 332 rc.Authorizer = spt 333 rc.Sender = autorest.CreateSender(withRequestLogging()) 334 client.routesClient = rc 335 336 rgc := resources.NewGroupsClientWithBaseURI(endpoint, c.SubscriptionID) 337 setUserAgent(&rgc.Client) 338 rgc.Authorizer = spt 339 rgc.Sender = autorest.CreateSender(withRequestLogging()) 340 client.resourceGroupClient = rgc 341 342 pc := resources.NewProvidersClientWithBaseURI(endpoint, c.SubscriptionID) 343 setUserAgent(&pc.Client) 344 pc.Authorizer = spt 345 pc.Sender = autorest.CreateSender(withRequestLogging()) 346 client.providers = pc 347 348 tc := resources.NewTagsClientWithBaseURI(endpoint, c.SubscriptionID) 349 setUserAgent(&tc.Client) 350 tc.Authorizer = spt 351 tc.Sender = autorest.CreateSender(withRequestLogging()) 352 client.tagsClient = tc 353 354 rf := resources.NewClientWithBaseURI(endpoint, c.SubscriptionID) 355 setUserAgent(&rf.Client) 356 rf.Authorizer = spt 357 rf.Sender = autorest.CreateSender(withRequestLogging()) 358 client.resourceFindClient = rf 359 360 jc := scheduler.NewJobsClientWithBaseURI(endpoint, c.SubscriptionID) 361 setUserAgent(&jc.Client) 362 jc.Authorizer = spt 363 jc.Sender = autorest.CreateSender(withRequestLogging()) 364 client.jobsClient = jc 365 366 jcc := scheduler.NewJobCollectionsClientWithBaseURI(endpoint, c.SubscriptionID) 367 setUserAgent(&jcc.Client) 368 jcc.Authorizer = spt 369 jcc.Sender = autorest.CreateSender(withRequestLogging()) 370 client.jobsCollectionsClient = jcc 371 372 ssc := storage.NewAccountsClientWithBaseURI(endpoint, c.SubscriptionID) 373 setUserAgent(&ssc.Client) 374 ssc.Authorizer = spt 375 ssc.Sender = autorest.CreateSender(withRequestLogging()) 376 client.storageServiceClient = ssc 377 378 suc := storage.NewUsageOperationsClientWithBaseURI(endpoint, c.SubscriptionID) 379 setUserAgent(&suc.Client) 380 suc.Authorizer = spt 381 suc.Sender = autorest.CreateSender(withRequestLogging()) 382 client.storageUsageClient = suc 383 384 cpc := cdn.NewProfilesClientWithBaseURI(endpoint, c.SubscriptionID) 385 setUserAgent(&cpc.Client) 386 cpc.Authorizer = spt 387 cpc.Sender = autorest.CreateSender(withRequestLogging()) 388 client.cdnProfilesClient = cpc 389 390 cec := cdn.NewEndpointsClientWithBaseURI(endpoint, c.SubscriptionID) 391 setUserAgent(&cec.Client) 392 cec.Authorizer = spt 393 cec.Sender = autorest.CreateSender(withRequestLogging()) 394 client.cdnEndpointsClient = cec 395 396 dc := resources.NewDeploymentsClientWithBaseURI(endpoint, c.SubscriptionID) 397 setUserAgent(&dc.Client) 398 dc.Authorizer = spt 399 dc.Sender = autorest.CreateSender(withRequestLogging()) 400 client.deploymentsClient = dc 401 402 tmpc := trafficmanager.NewProfilesClientWithBaseURI(endpoint, c.SubscriptionID) 403 setUserAgent(&tmpc.Client) 404 tmpc.Authorizer = spt 405 tmpc.Sender = autorest.CreateSender(withRequestLogging()) 406 client.trafficManagerProfilesClient = tmpc 407 408 tmec := trafficmanager.NewEndpointsClientWithBaseURI(endpoint, c.SubscriptionID) 409 setUserAgent(&tmec.Client) 410 tmec.Authorizer = spt 411 tmec.Sender = autorest.CreateSender(withRequestLogging()) 412 client.trafficManagerEndpointsClient = tmec 413 414 rdc := redis.NewClientWithBaseURI(endpoint, c.SubscriptionID) 415 setUserAgent(&rdc.Client) 416 rdc.Authorizer = spt 417 rdc.Sender = autorest.CreateSender(withRequestLogging()) 418 client.redisClient = rdc 419 420 sbnc := servicebus.NewNamespacesClientWithBaseURI(endpoint, c.SubscriptionID) 421 setUserAgent(&sbnc.Client) 422 sbnc.Authorizer = spt 423 sbnc.Sender = autorest.CreateSender(withRequestLogging()) 424 client.serviceBusNamespacesClient = sbnc 425 426 sbtc := servicebus.NewTopicsClientWithBaseURI(endpoint, c.SubscriptionID) 427 setUserAgent(&sbtc.Client) 428 sbtc.Authorizer = spt 429 sbtc.Sender = autorest.CreateSender(withRequestLogging()) 430 client.serviceBusTopicsClient = sbtc 431 432 sbsc := servicebus.NewSubscriptionsClientWithBaseURI(endpoint, c.SubscriptionID) 433 setUserAgent(&sbsc.Client) 434 sbsc.Authorizer = spt 435 sbsc.Sender = autorest.CreateSender(withRequestLogging()) 436 client.serviceBusSubscriptionsClient = sbsc 437 438 kvc := keyvault.NewVaultsClientWithBaseURI(endpoint, c.SubscriptionID) 439 setUserAgent(&kvc.Client) 440 kvc.Authorizer = spt 441 kvc.Sender = autorest.CreateSender(withRequestLogging()) 442 client.keyVaultClient = kvc 443 444 return &client, nil 445 } 446 447 func (armClient *ArmClient) getKeyForStorageAccount(resourceGroupName, storageAccountName string) (string, bool, error) { 448 accountKeys, err := armClient.storageServiceClient.ListKeys(resourceGroupName, storageAccountName) 449 if accountKeys.StatusCode == http.StatusNotFound { 450 return "", false, nil 451 } 452 if err != nil { 453 // We assume this is a transient error rather than a 404 (which is caught above), so assume the 454 // account still exists. 455 return "", true, fmt.Errorf("Error retrieving keys for storage account %q: %s", storageAccountName, err) 456 } 457 458 if accountKeys.Keys == nil { 459 return "", false, fmt.Errorf("Nil key returned for storage account %q", storageAccountName) 460 } 461 462 keys := *accountKeys.Keys 463 return *keys[0].Value, true, nil 464 } 465 466 func (armClient *ArmClient) getBlobStorageClientForStorageAccount(resourceGroupName, storageAccountName string) (*mainStorage.BlobStorageClient, bool, error) { 467 key, accountExists, err := armClient.getKeyForStorageAccount(resourceGroupName, storageAccountName) 468 if err != nil { 469 return nil, accountExists, err 470 } 471 if accountExists == false { 472 return nil, false, nil 473 } 474 475 storageClient, err := mainStorage.NewClient(storageAccountName, key, armClient.environment.StorageEndpointSuffix, 476 mainStorage.DefaultAPIVersion, true) 477 if err != nil { 478 return nil, true, fmt.Errorf("Error creating storage client for storage account %q: %s", storageAccountName, err) 479 } 480 481 blobClient := storageClient.GetBlobService() 482 return &blobClient, true, nil 483 } 484 485 func (armClient *ArmClient) getFileServiceClientForStorageAccount(resourceGroupName, storageAccountName string) (*mainStorage.FileServiceClient, bool, error) { 486 key, accountExists, err := armClient.getKeyForStorageAccount(resourceGroupName, storageAccountName) 487 if err != nil { 488 return nil, accountExists, err 489 } 490 if accountExists == false { 491 return nil, false, nil 492 } 493 494 storageClient, err := mainStorage.NewClient(storageAccountName, key, armClient.environment.StorageEndpointSuffix, 495 mainStorage.DefaultAPIVersion, true) 496 if err != nil { 497 return nil, true, fmt.Errorf("Error creating storage client for storage account %q: %s", storageAccountName, err) 498 } 499 500 fileClient := storageClient.GetFileService() 501 return &fileClient, true, nil 502 } 503 504 func (armClient *ArmClient) getTableServiceClientForStorageAccount(resourceGroupName, storageAccountName string) (*mainStorage.TableServiceClient, bool, error) { 505 key, accountExists, err := armClient.getKeyForStorageAccount(resourceGroupName, storageAccountName) 506 if err != nil { 507 return nil, accountExists, err 508 } 509 if accountExists == false { 510 return nil, false, nil 511 } 512 513 storageClient, err := mainStorage.NewClient(storageAccountName, key, armClient.environment.StorageEndpointSuffix, 514 mainStorage.DefaultAPIVersion, true) 515 if err != nil { 516 return nil, true, fmt.Errorf("Error creating storage client for storage account %q: %s", storageAccountName, err) 517 } 518 519 tableClient := storageClient.GetTableService() 520 return &tableClient, true, nil 521 } 522 523 func (armClient *ArmClient) getQueueServiceClientForStorageAccount(resourceGroupName, storageAccountName string) (*mainStorage.QueueServiceClient, bool, error) { 524 key, accountExists, err := armClient.getKeyForStorageAccount(resourceGroupName, storageAccountName) 525 if err != nil { 526 return nil, accountExists, err 527 } 528 if accountExists == false { 529 return nil, false, nil 530 } 531 532 storageClient, err := mainStorage.NewClient(storageAccountName, key, armClient.environment.StorageEndpointSuffix, 533 mainStorage.DefaultAPIVersion, true) 534 if err != nil { 535 return nil, true, fmt.Errorf("Error creating storage client for storage account %q: %s", storageAccountName, err) 536 } 537 538 queueClient := storageClient.GetQueueService() 539 return &queueClient, true, nil 540 }