2015-12-08 23:30:12 +01:00
|
|
|
package azurerm
|
|
|
|
|
|
|
|
import (
|
2016-01-06 23:07:15 +01:00
|
|
|
"fmt"
|
2015-12-09 02:25:05 +01:00
|
|
|
"log"
|
|
|
|
"net/http"
|
2015-12-08 23:30:12 +01:00
|
|
|
|
2016-01-19 11:11:37 +01:00
|
|
|
"github.com/Azure/azure-sdk-for-go/arm/cdn"
|
2015-12-08 23:30:12 +01:00
|
|
|
"github.com/Azure/azure-sdk-for-go/arm/compute"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/arm/network"
|
2016-01-08 21:06:09 +01:00
|
|
|
"github.com/Azure/azure-sdk-for-go/arm/resources/resources"
|
2015-12-08 23:30:12 +01:00
|
|
|
"github.com/Azure/azure-sdk-for-go/arm/scheduler"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/arm/storage"
|
2016-01-26 21:45:18 +01:00
|
|
|
mainStorage "github.com/Azure/azure-sdk-for-go/storage"
|
2016-06-01 22:17:21 +02:00
|
|
|
"github.com/Azure/go-autorest/autorest"
|
|
|
|
"github.com/Azure/go-autorest/autorest/azure"
|
2016-01-06 23:07:15 +01:00
|
|
|
"github.com/hashicorp/terraform/terraform"
|
2016-02-03 01:48:09 +01:00
|
|
|
riviera "github.com/jen20/riviera/azure"
|
2015-12-08 23:30:12 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
// ArmClient contains the handles to all the specific Azure Resource Manager
|
|
|
|
// resource classes' respective clients.
|
|
|
|
type ArmClient struct {
|
2016-02-03 01:48:09 +01:00
|
|
|
rivieraClient *riviera.Client
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
availSetClient compute.AvailabilitySetsClient
|
|
|
|
usageOpsClient compute.UsageOperationsClient
|
|
|
|
vmExtensionImageClient compute.VirtualMachineExtensionImagesClient
|
|
|
|
vmExtensionClient compute.VirtualMachineExtensionsClient
|
2016-06-11 00:37:14 +02:00
|
|
|
vmScaleSetClient compute.VirtualMachineScaleSetsClient
|
2015-12-08 23:30:12 +01:00
|
|
|
vmImageClient compute.VirtualMachineImagesClient
|
|
|
|
vmClient compute.VirtualMachinesClient
|
|
|
|
|
|
|
|
appGatewayClient network.ApplicationGatewaysClient
|
|
|
|
ifaceClient network.InterfacesClient
|
|
|
|
loadBalancerClient network.LoadBalancersClient
|
|
|
|
localNetConnClient network.LocalNetworkGatewaysClient
|
|
|
|
publicIPClient network.PublicIPAddressesClient
|
|
|
|
secGroupClient network.SecurityGroupsClient
|
|
|
|
secRuleClient network.SecurityRulesClient
|
|
|
|
subnetClient network.SubnetsClient
|
|
|
|
netUsageClient network.UsagesClient
|
|
|
|
vnetGatewayConnectionsClient network.VirtualNetworkGatewayConnectionsClient
|
|
|
|
vnetGatewayClient network.VirtualNetworkGatewaysClient
|
|
|
|
vnetClient network.VirtualNetworksClient
|
2016-01-10 02:35:58 +01:00
|
|
|
routeTablesClient network.RouteTablesClient
|
2016-01-10 16:02:48 +01:00
|
|
|
routesClient network.RoutesClient
|
2015-12-08 23:30:12 +01:00
|
|
|
|
2016-01-19 19:08:56 +01:00
|
|
|
cdnProfilesClient cdn.ProfilesClient
|
|
|
|
cdnEndpointsClient cdn.EndpointsClient
|
2016-01-19 11:11:37 +01:00
|
|
|
|
2016-01-05 22:43:52 +01:00
|
|
|
providers resources.ProvidersClient
|
2015-12-08 23:30:12 +01:00
|
|
|
resourceGroupClient resources.GroupsClient
|
|
|
|
tagsClient resources.TagsClient
|
|
|
|
|
|
|
|
jobsClient scheduler.JobsClient
|
|
|
|
jobsCollectionsClient scheduler.JobCollectionsClient
|
|
|
|
|
|
|
|
storageServiceClient storage.AccountsClient
|
|
|
|
storageUsageClient storage.UsageOperationsClient
|
2016-03-21 16:49:48 +01:00
|
|
|
|
|
|
|
deploymentsClient resources.DeploymentsClient
|
2015-12-08 23:30:12 +01:00
|
|
|
}
|
|
|
|
|
2015-12-09 02:25:05 +01:00
|
|
|
func withRequestLogging() autorest.SendDecorator {
|
|
|
|
return func(s autorest.Sender) autorest.Sender {
|
|
|
|
return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) {
|
2016-01-10 01:22:00 +01:00
|
|
|
log.Printf("[DEBUG] Sending Azure RM Request %q to %q\n", r.Method, r.URL)
|
2015-12-09 02:25:05 +01:00
|
|
|
resp, err := s.Do(r)
|
2016-01-18 17:32:39 +01:00
|
|
|
if resp != nil {
|
|
|
|
log.Printf("[DEBUG] Received Azure RM Request status code %s for %s\n", resp.Status, r.URL)
|
|
|
|
} else {
|
|
|
|
log.Printf("[DEBUG] Request to %s completed with no response", r.URL)
|
|
|
|
}
|
2015-12-09 02:25:05 +01:00
|
|
|
return resp, err
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-06 23:07:15 +01:00
|
|
|
func setUserAgent(client *autorest.Client) {
|
|
|
|
var version string
|
|
|
|
if terraform.VersionPrerelease != "" {
|
|
|
|
version = fmt.Sprintf("%s-%s", terraform.Version, terraform.VersionPrerelease)
|
|
|
|
} else {
|
|
|
|
version = terraform.Version
|
|
|
|
}
|
|
|
|
|
|
|
|
client.UserAgent = fmt.Sprintf("HashiCorp-Terraform-v%s", version)
|
|
|
|
}
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
// getArmClient is a helper method which returns a fully instantiated
|
|
|
|
// *ArmClient based on the Config's current settings.
|
|
|
|
func (c *Config) getArmClient() (*ArmClient, error) {
|
|
|
|
// client declarations:
|
|
|
|
client := ArmClient{}
|
|
|
|
|
2016-02-03 01:48:09 +01:00
|
|
|
rivieraClient, err := riviera.NewClient(&riviera.AzureResourceManagerCredentials{
|
|
|
|
ClientID: c.ClientID,
|
|
|
|
ClientSecret: c.ClientSecret,
|
|
|
|
TenantID: c.TenantID,
|
|
|
|
SubscriptionID: c.SubscriptionID,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Error creating Riviera client: %s", err)
|
|
|
|
}
|
|
|
|
|
2016-04-22 01:50:47 +02:00
|
|
|
// validate that the credentials are correct using Riviera. Note that this must be
|
|
|
|
// done _before_ using the Microsoft SDK, because Riviera handles errors. Using a
|
|
|
|
// namespace registration instead of a simple OAuth token refresh guarantees that
|
|
|
|
// service delegation is correct. This has the effect of registering Microsoft.Compute
|
|
|
|
// which is neccessary anyway.
|
|
|
|
if err := registerProviderWithSubscription("Microsoft.Compute", rivieraClient); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2016-02-03 01:48:09 +01:00
|
|
|
client.rivieraClient = rivieraClient
|
|
|
|
|
2016-06-01 22:17:21 +02:00
|
|
|
oauthConfig, err := azure.PublicCloud.OAuthConfigForTenant(c.TenantID)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// This is necessary because no-one thought about API usability. OAuthConfigForTenant
|
|
|
|
// returns a pointer, which can be nil. NewServicePrincipalToken does not take a pointer.
|
|
|
|
// Consequently we have to nil check this and do _something_ if it is nil, which should
|
|
|
|
// be either an invariant of OAuthConfigForTenant (guarantee the token is not nil if
|
|
|
|
// there is no error), or NewServicePrincipalToken should error out if the configuration
|
|
|
|
// is required and is nil. This is the worst of all worlds, however.
|
|
|
|
if oauthConfig == nil {
|
|
|
|
return nil, fmt.Errorf("Unable to configure OAuthConfig for tenant %s", c.TenantID)
|
|
|
|
}
|
|
|
|
|
|
|
|
spt, err := azure.NewServicePrincipalToken(*oauthConfig, c.ClientID, c.ClientSecret,
|
|
|
|
azure.PublicCloud.ResourceManagerEndpoint)
|
2016-04-22 01:50:47 +02:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
// NOTE: these declarations should be left separate for clarity should the
|
|
|
|
// clients be wished to be configured with custom Responders/PollingModess etc...
|
|
|
|
asc := compute.NewAvailabilitySetsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&asc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
asc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
asc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.availSetClient = asc
|
|
|
|
|
|
|
|
uoc := compute.NewUsageOperationsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&uoc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
uoc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
uoc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.usageOpsClient = uoc
|
|
|
|
|
|
|
|
vmeic := compute.NewVirtualMachineExtensionImagesClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vmeic.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vmeic.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vmeic.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vmExtensionImageClient = vmeic
|
|
|
|
|
|
|
|
vmec := compute.NewVirtualMachineExtensionsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vmec.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vmec.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vmec.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vmExtensionClient = vmec
|
|
|
|
|
|
|
|
vmic := compute.NewVirtualMachineImagesClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vmic.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vmic.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vmic.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vmImageClient = vmic
|
|
|
|
|
2016-06-11 00:37:14 +02:00
|
|
|
vmssc := compute.NewVirtualMachineScaleSetsClient(c.SubscriptionID)
|
|
|
|
setUserAgent(&vmssc.Client)
|
|
|
|
vmssc.Authorizer = spt
|
|
|
|
vmssc.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.vmScaleSetClient = vmssc
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
vmc := compute.NewVirtualMachinesClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vmc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vmc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vmc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vmClient = vmc
|
|
|
|
|
|
|
|
agc := network.NewApplicationGatewaysClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&agc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
agc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
agc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.appGatewayClient = agc
|
|
|
|
|
|
|
|
ifc := network.NewInterfacesClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&ifc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
ifc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
ifc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.ifaceClient = ifc
|
|
|
|
|
|
|
|
lbc := network.NewLoadBalancersClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&lbc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
lbc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
lbc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.loadBalancerClient = lbc
|
|
|
|
|
|
|
|
lgc := network.NewLocalNetworkGatewaysClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&lgc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
lgc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
lgc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.localNetConnClient = lgc
|
|
|
|
|
|
|
|
pipc := network.NewPublicIPAddressesClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&pipc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
pipc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
pipc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.publicIPClient = pipc
|
|
|
|
|
|
|
|
sgc := network.NewSecurityGroupsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&sgc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
sgc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
sgc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.secGroupClient = sgc
|
|
|
|
|
|
|
|
src := network.NewSecurityRulesClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&src.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
src.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
src.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.secRuleClient = src
|
|
|
|
|
|
|
|
snc := network.NewSubnetsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&snc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
snc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
snc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.subnetClient = snc
|
|
|
|
|
|
|
|
vgcc := network.NewVirtualNetworkGatewayConnectionsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vgcc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vgcc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vgcc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vnetGatewayConnectionsClient = vgcc
|
|
|
|
|
|
|
|
vgc := network.NewVirtualNetworkGatewaysClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vgc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vgc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vgc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vnetGatewayClient = vgc
|
|
|
|
|
|
|
|
vnc := network.NewVirtualNetworksClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&vnc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
vnc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
vnc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.vnetClient = vnc
|
|
|
|
|
2016-01-10 02:35:58 +01:00
|
|
|
rtc := network.NewRouteTablesClient(c.SubscriptionID)
|
|
|
|
setUserAgent(&rtc.Client)
|
|
|
|
rtc.Authorizer = spt
|
|
|
|
rtc.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.routeTablesClient = rtc
|
|
|
|
|
2016-01-10 16:02:48 +01:00
|
|
|
rc := network.NewRoutesClient(c.SubscriptionID)
|
|
|
|
setUserAgent(&rc.Client)
|
|
|
|
rc.Authorizer = spt
|
|
|
|
rc.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.routesClient = rc
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
rgc := resources.NewGroupsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&rgc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
rgc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
rgc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.resourceGroupClient = rgc
|
|
|
|
|
2016-01-05 22:43:52 +01:00
|
|
|
pc := resources.NewProvidersClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&pc.Client)
|
2016-01-05 22:43:52 +01:00
|
|
|
pc.Authorizer = spt
|
|
|
|
pc.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.providers = pc
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
tc := resources.NewTagsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&tc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
tc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
tc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.tagsClient = tc
|
|
|
|
|
|
|
|
jc := scheduler.NewJobsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&jc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
jc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
jc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.jobsClient = jc
|
|
|
|
|
|
|
|
jcc := scheduler.NewJobCollectionsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&jcc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
jcc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
jcc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.jobsCollectionsClient = jcc
|
|
|
|
|
|
|
|
ssc := storage.NewAccountsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&ssc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
ssc.Authorizer = spt
|
2016-06-01 22:17:21 +02:00
|
|
|
ssc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.storageServiceClient = ssc
|
|
|
|
|
|
|
|
suc := storage.NewUsageOperationsClient(c.SubscriptionID)
|
2016-01-06 23:07:15 +01:00
|
|
|
setUserAgent(&suc.Client)
|
2015-12-08 23:30:12 +01:00
|
|
|
suc.Authorizer = spt
|
2015-12-09 02:25:05 +01:00
|
|
|
suc.Sender = autorest.CreateSender(withRequestLogging())
|
2015-12-08 23:30:12 +01:00
|
|
|
client.storageUsageClient = suc
|
|
|
|
|
2016-01-19 11:11:37 +01:00
|
|
|
cpc := cdn.NewProfilesClient(c.SubscriptionID)
|
|
|
|
setUserAgent(&cpc.Client)
|
|
|
|
cpc.Authorizer = spt
|
|
|
|
cpc.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.cdnProfilesClient = cpc
|
|
|
|
|
2016-01-19 19:08:56 +01:00
|
|
|
cec := cdn.NewEndpointsClient(c.SubscriptionID)
|
|
|
|
setUserAgent(&cec.Client)
|
|
|
|
cec.Authorizer = spt
|
|
|
|
cec.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.cdnEndpointsClient = cec
|
|
|
|
|
2016-03-21 16:49:48 +01:00
|
|
|
dc := resources.NewDeploymentsClient(c.SubscriptionID)
|
|
|
|
setUserAgent(&dc.Client)
|
|
|
|
dc.Authorizer = spt
|
|
|
|
dc.Sender = autorest.CreateSender(withRequestLogging())
|
|
|
|
client.deploymentsClient = dc
|
|
|
|
|
2015-12-08 23:30:12 +01:00
|
|
|
return &client, nil
|
|
|
|
}
|
2016-01-26 21:45:18 +01:00
|
|
|
|
2016-05-25 00:01:26 +02:00
|
|
|
func (armClient *ArmClient) getKeyForStorageAccount(resourceGroupName, storageAccountName string) (string, bool, error) {
|
2016-01-26 21:45:18 +01:00
|
|
|
keys, err := armClient.storageServiceClient.ListKeys(resourceGroupName, storageAccountName)
|
2016-05-25 00:01:26 +02:00
|
|
|
if keys.StatusCode == http.StatusNotFound {
|
|
|
|
return "", false, nil
|
|
|
|
}
|
2016-01-26 21:45:18 +01:00
|
|
|
if err != nil {
|
2016-05-25 00:01:26 +02:00
|
|
|
// We assume this is a transient error rather than a 404 (which is caught above), so assume the
|
|
|
|
// account still exists.
|
|
|
|
return "", true, fmt.Errorf("Error retrieving keys for storage account %q: %s", storageAccountName, err)
|
2016-01-26 21:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if keys.Key1 == nil {
|
2016-05-25 00:01:26 +02:00
|
|
|
return "", false, fmt.Errorf("Nil key returned for storage account %q", storageAccountName)
|
2016-01-26 21:45:18 +01:00
|
|
|
}
|
|
|
|
|
2016-05-25 00:01:26 +02:00
|
|
|
return *keys.Key1, true, nil
|
2016-01-26 21:45:18 +01:00
|
|
|
}
|
|
|
|
|
2016-05-25 00:01:26 +02:00
|
|
|
func (armClient *ArmClient) getBlobStorageClientForStorageAccount(resourceGroupName, storageAccountName string) (*mainStorage.BlobStorageClient, bool, error) {
|
|
|
|
key, accountExists, err := armClient.getKeyForStorageAccount(resourceGroupName, storageAccountName)
|
2016-01-26 21:45:18 +01:00
|
|
|
if err != nil {
|
2016-05-25 00:01:26 +02:00
|
|
|
return nil, accountExists, err
|
|
|
|
}
|
|
|
|
if accountExists == false {
|
|
|
|
return nil, false, nil
|
2016-01-26 21:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
storageClient, err := mainStorage.NewBasicClient(storageAccountName, key)
|
|
|
|
if err != nil {
|
2016-05-25 00:01:26 +02:00
|
|
|
return nil, true, fmt.Errorf("Error creating storage client for storage account %q: %s", storageAccountName, err)
|
2016-01-26 21:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
blobClient := storageClient.GetBlobService()
|
2016-05-25 00:01:26 +02:00
|
|
|
return &blobClient, true, nil
|
2016-01-26 21:45:18 +01:00
|
|
|
}
|
2016-06-01 22:17:21 +02:00
|
|
|
|
2016-05-25 00:01:26 +02:00
|
|
|
func (armClient *ArmClient) getQueueServiceClientForStorageAccount(resourceGroupName, storageAccountName string) (*mainStorage.QueueServiceClient, bool, error) {
|
|
|
|
key, accountExists, err := armClient.getKeyForStorageAccount(resourceGroupName, storageAccountName)
|
2016-01-27 13:27:58 +01:00
|
|
|
if err != nil {
|
2016-05-25 00:01:26 +02:00
|
|
|
return nil, accountExists, err
|
|
|
|
}
|
|
|
|
if accountExists == false {
|
|
|
|
return nil, false, nil
|
2016-01-27 13:27:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
storageClient, err := mainStorage.NewBasicClient(storageAccountName, key)
|
|
|
|
if err != nil {
|
2016-05-25 00:01:26 +02:00
|
|
|
return nil, true, fmt.Errorf("Error creating storage client for storage account %q: %s", storageAccountName, err)
|
2016-01-27 13:27:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
queueClient := storageClient.GetQueueService()
|
2016-05-25 00:01:26 +02:00
|
|
|
return &queueClient, true, nil
|
2016-01-27 13:27:58 +01:00
|
|
|
}
|