github.com/andrewrynhard/terraform@v0.9.5-0.20170502003928-8d286b83eae4/builtin/providers/heroku/resource_heroku_app_feature.go (about) 1 package heroku 2 3 import ( 4 "context" 5 "log" 6 7 heroku "github.com/cyberdelia/heroku-go/v3" 8 "github.com/hashicorp/terraform/helper/schema" 9 ) 10 11 func resourceHerokuAppFeature() *schema.Resource { 12 return &schema.Resource{ 13 Create: resourceHerokuAppFeatureCreate, 14 Update: resourceHerokuAppFeatureUpdate, 15 Read: resourceHerokuAppFeatureRead, 16 Delete: resourceHerokuAppFeatureDelete, 17 18 Schema: map[string]*schema.Schema{ 19 "app": { 20 Type: schema.TypeString, 21 Required: true, 22 ForceNew: true, 23 }, 24 25 "name": { 26 Type: schema.TypeString, 27 Required: true, 28 ForceNew: true, 29 }, 30 31 "enabled": { 32 Type: schema.TypeBool, 33 Optional: true, 34 Default: true, 35 }, 36 }, 37 } 38 } 39 40 func resourceHerokuAppFeatureRead(d *schema.ResourceData, meta interface{}) error { 41 client := meta.(*heroku.Service) 42 43 app, id := parseCompositeID(d.Id()) 44 45 feature, err := client.AppFeatureInfo(context.TODO(), app, id) 46 if err != nil { 47 return err 48 } 49 50 d.Set("app", app) 51 d.Set("name", feature.Name) 52 d.Set("enabled", feature.Enabled) 53 54 return nil 55 } 56 57 func resourceHerokuAppFeatureCreate(d *schema.ResourceData, meta interface{}) error { 58 client := meta.(*heroku.Service) 59 60 app := d.Get("app").(string) 61 featureName := d.Get("name").(string) 62 enabled := d.Get("enabled").(bool) 63 64 opts := heroku.AppFeatureUpdateOpts{Enabled: enabled} 65 66 log.Printf("[DEBUG] Feature set configuration: %#v, %#v", featureName, opts) 67 68 feature, err := client.AppFeatureUpdate(context.TODO(), app, featureName, opts) 69 if err != nil { 70 return err 71 } 72 73 d.SetId(buildCompositeID(app, feature.ID)) 74 75 return resourceHerokuAppFeatureRead(d, meta) 76 } 77 78 func resourceHerokuAppFeatureUpdate(d *schema.ResourceData, meta interface{}) error { 79 if d.HasChange("enabled") { 80 return resourceHerokuAppFeatureCreate(d, meta) 81 } 82 83 return resourceHerokuAppFeatureRead(d, meta) 84 } 85 86 func resourceHerokuAppFeatureDelete(d *schema.ResourceData, meta interface{}) error { 87 client := meta.(*heroku.Service) 88 89 app, id := parseCompositeID(d.Id()) 90 featureName := d.Get("name").(string) 91 92 log.Printf("[INFO] Deleting app feature %s (%s) for app %s", featureName, id, app) 93 opts := heroku.AppFeatureUpdateOpts{Enabled: false} 94 _, err := client.AppFeatureUpdate(context.TODO(), app, id, opts) 95 if err != nil { 96 return err 97 } 98 99 d.SetId("") 100 return nil 101 }