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 }