github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/heroku/provider.go (about) 1 package heroku 2 3 import ( 4 "fmt" 5 "log" 6 "strings" 7 8 "github.com/hashicorp/terraform/helper/schema" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 // Provider returns a terraform.ResourceProvider. 13 func Provider() terraform.ResourceProvider { 14 return &schema.Provider{ 15 Schema: map[string]*schema.Schema{ 16 "email": &schema.Schema{ 17 Type: schema.TypeString, 18 Optional: true, 19 DefaultFunc: schema.EnvDefaultFunc("HEROKU_EMAIL", nil), 20 }, 21 22 "api_key": &schema.Schema{ 23 Type: schema.TypeString, 24 Optional: true, 25 DefaultFunc: schema.EnvDefaultFunc("HEROKU_API_KEY", nil), 26 }, 27 }, 28 29 ResourcesMap: map[string]*schema.Resource{ 30 "heroku_addon": resourceHerokuAddon(), 31 "heroku_app": resourceHerokuApp(), 32 "heroku_app_feature": resourceHerokuAppFeature(), 33 "heroku_cert": resourceHerokuCert(), 34 "heroku_domain": resourceHerokuDomain(), 35 "heroku_drain": resourceHerokuDrain(), 36 "heroku_pipeline": resourceHerokuPipeline(), 37 "heroku_pipeline_coupling": resourceHerokuPipelineCoupling(), 38 "heroku_space": resourceHerokuSpace(), 39 }, 40 41 ConfigureFunc: providerConfigure, 42 } 43 } 44 45 func providerConfigure(d *schema.ResourceData) (interface{}, error) { 46 config := Config{ 47 Email: d.Get("email").(string), 48 APIKey: d.Get("api_key").(string), 49 } 50 51 log.Println("[INFO] Initializing Heroku client") 52 return config.Client() 53 } 54 55 func buildCompositeID(a, b string) string { 56 return fmt.Sprintf("%s:%s", a, b) 57 } 58 59 func parseCompositeID(id string) (string, string) { 60 parts := strings.SplitN(id, ":", 2) 61 return parts[0], parts[1] 62 }