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 }