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  }