github.com/hobbeswalsh/terraform@v0.3.7-0.20150619183303-ad17cf55a0fa/builtin/providers/azure/provider.go (about)

     1  package azure
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/terraform/helper/schema"
     7  	"github.com/hashicorp/terraform/terraform"
     8  	"github.com/mitchellh/go-homedir"
     9  )
    10  
    11  // Provider returns a terraform.ResourceProvider.
    12  func Provider() terraform.ResourceProvider {
    13  	return &schema.Provider{
    14  		Schema: map[string]*schema.Schema{
    15  			"settings_file": &schema.Schema{
    16  				Type:        schema.TypeString,
    17  				Optional:    true,
    18  				DefaultFunc: schema.EnvDefaultFunc("AZURE_SETTINGS_FILE", nil),
    19  			},
    20  
    21  			"subscription_id": &schema.Schema{
    22  				Type:        schema.TypeString,
    23  				Optional:    true,
    24  				DefaultFunc: schema.EnvDefaultFunc("AZURE_SUBSCRIPTION_ID", ""),
    25  			},
    26  
    27  			"certificate": &schema.Schema{
    28  				Type:        schema.TypeString,
    29  				Optional:    true,
    30  				DefaultFunc: schema.EnvDefaultFunc("AZURE_CERTIFICATE", ""),
    31  			},
    32  		},
    33  
    34  		ResourcesMap: map[string]*schema.Resource{
    35  			"azure_instance":                 resourceAzureInstance(),
    36  			"azure_data_disk":                resourceAzureDataDisk(),
    37  			"azure_sql_database_server":      resourceAzureSqlDatabaseServer(),
    38  			"azure_sql_database_service":     resourceAzureSqlDatabaseService(),
    39  			"azure_hosted_service":           resourceAzureHostedService(),
    40  			"azure_storage_service":          resourceAzureStorageService(),
    41  			"azure_storage_container":        resourceAzureStorageContainer(),
    42  			"azure_storage_blob":             resourceAzureStorageBlob(),
    43  			"azure_storage_queue":            resourceAzureStorageQueue(),
    44  			"azure_virtual_network":          resourceAzureVirtualNetwork(),
    45  			"azure_dns_server":               resourceAzureDnsServer(),
    46  			"azure_local_network_connection": resourceAzureLocalNetworkConnection(),
    47  			"azure_security_group":           resourceAzureSecurityGroup(),
    48  			"azure_security_group_rule":      resourceAzureSecurityGroupRule(),
    49  		},
    50  
    51  		ConfigureFunc: providerConfigure,
    52  	}
    53  }
    54  
    55  func providerConfigure(d *schema.ResourceData) (interface{}, error) {
    56  	settingsFile, err := homedir.Expand(d.Get("settings_file").(string))
    57  	if err != nil {
    58  		return nil, fmt.Errorf("Error expanding the settings file path: %s", err)
    59  	}
    60  
    61  	config := Config{
    62  		SettingsFile:   settingsFile,
    63  		SubscriptionID: d.Get("subscription_id").(string),
    64  		Certificate:    []byte(d.Get("certificate").(string)),
    65  	}
    66  
    67  	if config.SettingsFile != "" {
    68  		return config.NewClientFromSettingsFile()
    69  	}
    70  
    71  	if config.SubscriptionID != "" && len(config.Certificate) > 0 {
    72  		return config.NewClient()
    73  	}
    74  
    75  	return nil, fmt.Errorf(
    76  		"Insufficient configuration data. Please specify either a 'settings_file'\n" +
    77  			"or both a 'subscription_id' and 'certificate'.")
    78  }