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