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  }