github.com/ggiamarchi/terraform@v0.3.7-0.20150607194748-ed2a66a46a71/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_data_disk":       resourceAzureDataDisk(),
    36  			"azure_instance":        resourceAzureInstance(),
    37  			"azure_security_group":  resourceAzureSecurityGroup(),
    38  			"azure_virtual_network": resourceAzureVirtualNetwork(),
    39  		},
    40  
    41  		ConfigureFunc: providerConfigure,
    42  	}
    43  }
    44  
    45  func providerConfigure(d *schema.ResourceData) (interface{}, error) {
    46  	settingsFile, err := homedir.Expand(d.Get("settings_file").(string))
    47  	if err != nil {
    48  		return nil, fmt.Errorf("Error expanding the settings file path: %s", err)
    49  	}
    50  
    51  	config := Config{
    52  		SettingsFile:   settingsFile,
    53  		SubscriptionID: d.Get("subscription_id").(string),
    54  		Certificate:    []byte(d.Get("certificate").(string)),
    55  	}
    56  
    57  	if config.SettingsFile != "" {
    58  		return config.NewClientFromSettingsFile()
    59  	}
    60  
    61  	if config.SubscriptionID != "" && len(config.Certificate) > 0 {
    62  		return config.NewClient()
    63  	}
    64  
    65  	return nil, fmt.Errorf(
    66  		"Insufficient configuration data. Please specify either a 'settings_file'\n" +
    67  			"or both a 'subscription_id' and 'certificate'.")
    68  }