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