github.com/jonasi/terraform@v0.6.10-0.20160125170522-e865c342cc1f/builtin/providers/azurerm/config.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "log" 6 "net/http" 7 "time" 8 9 "github.com/Azure/azure-sdk-for-go/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest" 10 "github.com/Azure/azure-sdk-for-go/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest/azure" 11 "github.com/Azure/azure-sdk-for-go/arm/cdn" 12 "github.com/Azure/azure-sdk-for-go/arm/compute" 13 "github.com/Azure/azure-sdk-for-go/arm/network" 14 "github.com/Azure/azure-sdk-for-go/arm/resources/resources" 15 "github.com/Azure/azure-sdk-for-go/arm/scheduler" 16 "github.com/Azure/azure-sdk-for-go/arm/storage" 17 "github.com/hashicorp/terraform/terraform" 18 ) 19 20 // ArmClient contains the handles to all the specific Azure Resource Manager 21 // resource classes' respective clients. 22 type ArmClient struct { 23 availSetClient compute.AvailabilitySetsClient 24 usageOpsClient compute.UsageOperationsClient 25 vmExtensionImageClient compute.VirtualMachineExtensionImagesClient 26 vmExtensionClient compute.VirtualMachineExtensionsClient 27 vmImageClient compute.VirtualMachineImagesClient 28 vmClient compute.VirtualMachinesClient 29 30 appGatewayClient network.ApplicationGatewaysClient 31 ifaceClient network.InterfacesClient 32 loadBalancerClient network.LoadBalancersClient 33 localNetConnClient network.LocalNetworkGatewaysClient 34 publicIPClient network.PublicIPAddressesClient 35 secGroupClient network.SecurityGroupsClient 36 secRuleClient network.SecurityRulesClient 37 subnetClient network.SubnetsClient 38 netUsageClient network.UsagesClient 39 vnetGatewayConnectionsClient network.VirtualNetworkGatewayConnectionsClient 40 vnetGatewayClient network.VirtualNetworkGatewaysClient 41 vnetClient network.VirtualNetworksClient 42 routeTablesClient network.RouteTablesClient 43 routesClient network.RoutesClient 44 45 cdnProfilesClient cdn.ProfilesClient 46 cdnEndpointsClient cdn.EndpointsClient 47 48 providers resources.ProvidersClient 49 resourceGroupClient resources.GroupsClient 50 tagsClient resources.TagsClient 51 52 jobsClient scheduler.JobsClient 53 jobsCollectionsClient scheduler.JobCollectionsClient 54 55 storageServiceClient storage.AccountsClient 56 storageUsageClient storage.UsageOperationsClient 57 } 58 59 func withRequestLogging() autorest.SendDecorator { 60 return func(s autorest.Sender) autorest.Sender { 61 return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { 62 log.Printf("[DEBUG] Sending Azure RM Request %q to %q\n", r.Method, r.URL) 63 resp, err := s.Do(r) 64 if resp != nil { 65 log.Printf("[DEBUG] Received Azure RM Request status code %s for %s\n", resp.Status, r.URL) 66 } else { 67 log.Printf("[DEBUG] Request to %s completed with no response", r.URL) 68 } 69 return resp, err 70 }) 71 } 72 } 73 74 func withPollWatcher() autorest.SendDecorator { 75 return func(s autorest.Sender) autorest.Sender { 76 return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { 77 fmt.Printf("[DEBUG] Sending Azure RM Request %q to %q\n", r.Method, r.URL) 78 resp, err := s.Do(r) 79 fmt.Printf("[DEBUG] Received Azure RM Request status code %s for %s\n", resp.Status, r.URL) 80 if autorest.ResponseRequiresPolling(resp) { 81 fmt.Printf("[DEBUG] Azure RM request will poll %s after %d seconds\n", 82 autorest.GetPollingLocation(resp), 83 int(autorest.GetPollingDelay(resp, time.Duration(0))/time.Second)) 84 } 85 return resp, err 86 }) 87 } 88 } 89 90 func setUserAgent(client *autorest.Client) { 91 var version string 92 if terraform.VersionPrerelease != "" { 93 version = fmt.Sprintf("%s-%s", terraform.Version, terraform.VersionPrerelease) 94 } else { 95 version = terraform.Version 96 } 97 98 client.UserAgent = fmt.Sprintf("HashiCorp-Terraform-v%s", version) 99 } 100 101 // getArmClient is a helper method which returns a fully instantiated 102 // *ArmClient based on the Config's current settings. 103 func (c *Config) getArmClient() (*ArmClient, error) { 104 spt, err := azure.NewServicePrincipalToken(c.ClientID, c.ClientSecret, c.TenantID, azure.AzureResourceManagerScope) 105 if err != nil { 106 return nil, err 107 } 108 109 // client declarations: 110 client := ArmClient{} 111 112 // NOTE: these declarations should be left separate for clarity should the 113 // clients be wished to be configured with custom Responders/PollingModess etc... 114 asc := compute.NewAvailabilitySetsClient(c.SubscriptionID) 115 setUserAgent(&asc.Client) 116 asc.Authorizer = spt 117 asc.Sender = autorest.CreateSender(withRequestLogging()) 118 client.availSetClient = asc 119 120 uoc := compute.NewUsageOperationsClient(c.SubscriptionID) 121 setUserAgent(&uoc.Client) 122 uoc.Authorizer = spt 123 uoc.Sender = autorest.CreateSender(withRequestLogging()) 124 client.usageOpsClient = uoc 125 126 vmeic := compute.NewVirtualMachineExtensionImagesClient(c.SubscriptionID) 127 setUserAgent(&vmeic.Client) 128 vmeic.Authorizer = spt 129 vmeic.Sender = autorest.CreateSender(withRequestLogging()) 130 client.vmExtensionImageClient = vmeic 131 132 vmec := compute.NewVirtualMachineExtensionsClient(c.SubscriptionID) 133 setUserAgent(&vmec.Client) 134 vmec.Authorizer = spt 135 vmec.Sender = autorest.CreateSender(withRequestLogging()) 136 client.vmExtensionClient = vmec 137 138 vmic := compute.NewVirtualMachineImagesClient(c.SubscriptionID) 139 setUserAgent(&vmic.Client) 140 vmic.Authorizer = spt 141 vmic.Sender = autorest.CreateSender(withRequestLogging()) 142 client.vmImageClient = vmic 143 144 vmc := compute.NewVirtualMachinesClient(c.SubscriptionID) 145 setUserAgent(&vmc.Client) 146 vmc.Authorizer = spt 147 vmc.Sender = autorest.CreateSender(withRequestLogging()) 148 client.vmClient = vmc 149 150 agc := network.NewApplicationGatewaysClient(c.SubscriptionID) 151 setUserAgent(&agc.Client) 152 agc.Authorizer = spt 153 agc.Sender = autorest.CreateSender(withRequestLogging()) 154 client.appGatewayClient = agc 155 156 ifc := network.NewInterfacesClient(c.SubscriptionID) 157 setUserAgent(&ifc.Client) 158 ifc.Authorizer = spt 159 ifc.Sender = autorest.CreateSender(withRequestLogging()) 160 client.ifaceClient = ifc 161 162 lbc := network.NewLoadBalancersClient(c.SubscriptionID) 163 setUserAgent(&lbc.Client) 164 lbc.Authorizer = spt 165 lbc.Sender = autorest.CreateSender(withRequestLogging()) 166 client.loadBalancerClient = lbc 167 168 lgc := network.NewLocalNetworkGatewaysClient(c.SubscriptionID) 169 setUserAgent(&lgc.Client) 170 lgc.Authorizer = spt 171 lgc.Sender = autorest.CreateSender(withRequestLogging()) 172 client.localNetConnClient = lgc 173 174 pipc := network.NewPublicIPAddressesClient(c.SubscriptionID) 175 setUserAgent(&pipc.Client) 176 pipc.Authorizer = spt 177 pipc.Sender = autorest.CreateSender(withRequestLogging()) 178 client.publicIPClient = pipc 179 180 sgc := network.NewSecurityGroupsClient(c.SubscriptionID) 181 setUserAgent(&sgc.Client) 182 sgc.Authorizer = spt 183 sgc.Sender = autorest.CreateSender(withRequestLogging()) 184 client.secGroupClient = sgc 185 186 src := network.NewSecurityRulesClient(c.SubscriptionID) 187 setUserAgent(&src.Client) 188 src.Authorizer = spt 189 src.Sender = autorest.CreateSender(withRequestLogging()) 190 client.secRuleClient = src 191 192 snc := network.NewSubnetsClient(c.SubscriptionID) 193 setUserAgent(&snc.Client) 194 snc.Authorizer = spt 195 snc.Sender = autorest.CreateSender(withRequestLogging()) 196 client.subnetClient = snc 197 198 vgcc := network.NewVirtualNetworkGatewayConnectionsClient(c.SubscriptionID) 199 setUserAgent(&vgcc.Client) 200 vgcc.Authorizer = spt 201 vgcc.Sender = autorest.CreateSender(withRequestLogging()) 202 client.vnetGatewayConnectionsClient = vgcc 203 204 vgc := network.NewVirtualNetworkGatewaysClient(c.SubscriptionID) 205 setUserAgent(&vgc.Client) 206 vgc.Authorizer = spt 207 vgc.Sender = autorest.CreateSender(withRequestLogging()) 208 client.vnetGatewayClient = vgc 209 210 vnc := network.NewVirtualNetworksClient(c.SubscriptionID) 211 setUserAgent(&vnc.Client) 212 vnc.Authorizer = spt 213 vnc.Sender = autorest.CreateSender(withRequestLogging()) 214 client.vnetClient = vnc 215 216 rtc := network.NewRouteTablesClient(c.SubscriptionID) 217 setUserAgent(&rtc.Client) 218 rtc.Authorizer = spt 219 rtc.Sender = autorest.CreateSender(withRequestLogging()) 220 client.routeTablesClient = rtc 221 222 rc := network.NewRoutesClient(c.SubscriptionID) 223 setUserAgent(&rc.Client) 224 rc.Authorizer = spt 225 rc.Sender = autorest.CreateSender(withRequestLogging()) 226 client.routesClient = rc 227 228 rgc := resources.NewGroupsClient(c.SubscriptionID) 229 setUserAgent(&rgc.Client) 230 rgc.Authorizer = spt 231 rgc.Sender = autorest.CreateSender(withRequestLogging()) 232 client.resourceGroupClient = rgc 233 234 pc := resources.NewProvidersClient(c.SubscriptionID) 235 setUserAgent(&pc.Client) 236 pc.Authorizer = spt 237 pc.Sender = autorest.CreateSender(withRequestLogging()) 238 client.providers = pc 239 240 tc := resources.NewTagsClient(c.SubscriptionID) 241 setUserAgent(&tc.Client) 242 tc.Authorizer = spt 243 tc.Sender = autorest.CreateSender(withRequestLogging()) 244 client.tagsClient = tc 245 246 jc := scheduler.NewJobsClient(c.SubscriptionID) 247 setUserAgent(&jc.Client) 248 jc.Authorizer = spt 249 jc.Sender = autorest.CreateSender(withRequestLogging()) 250 client.jobsClient = jc 251 252 jcc := scheduler.NewJobCollectionsClient(c.SubscriptionID) 253 setUserAgent(&jcc.Client) 254 jcc.Authorizer = spt 255 jcc.Sender = autorest.CreateSender(withRequestLogging()) 256 client.jobsCollectionsClient = jcc 257 258 ssc := storage.NewAccountsClient(c.SubscriptionID) 259 setUserAgent(&ssc.Client) 260 ssc.Authorizer = spt 261 ssc.Sender = autorest.CreateSender(withRequestLogging(), withPollWatcher()) 262 client.storageServiceClient = ssc 263 264 suc := storage.NewUsageOperationsClient(c.SubscriptionID) 265 setUserAgent(&suc.Client) 266 suc.Authorizer = spt 267 suc.Sender = autorest.CreateSender(withRequestLogging()) 268 client.storageUsageClient = suc 269 270 cpc := cdn.NewProfilesClient(c.SubscriptionID) 271 setUserAgent(&cpc.Client) 272 cpc.Authorizer = spt 273 cpc.Sender = autorest.CreateSender(withRequestLogging()) 274 client.cdnProfilesClient = cpc 275 276 cec := cdn.NewEndpointsClient(c.SubscriptionID) 277 setUserAgent(&cec.Client) 278 cec.Authorizer = spt 279 cec.Sender = autorest.CreateSender(withRequestLogging()) 280 client.cdnEndpointsClient = cec 281 282 return &client, nil 283 }