github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/heroku/resource_heroku_pipeline.go (about)

     1  package heroku
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  
     8  	"github.com/cyberdelia/heroku-go/v3"
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  func resourceHerokuPipeline() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceHerokuPipelineCreate,
    15  		Update: resourceHerokuPipelineUpdate,
    16  		Read:   resourceHerokuPipelineRead,
    17  		Delete: resourceHerokuPipelineDelete,
    18  
    19  		Schema: map[string]*schema.Schema{
    20  			"name": {
    21  				Type:     schema.TypeString,
    22  				Required: true,
    23  			},
    24  		},
    25  	}
    26  }
    27  
    28  func resourceHerokuPipelineCreate(d *schema.ResourceData, meta interface{}) error {
    29  	client := meta.(*heroku.Service)
    30  
    31  	opts := heroku.PipelineCreateOpts{
    32  		Name: d.Get("name").(string),
    33  	}
    34  
    35  	log.Printf("[DEBUG] Pipeline create configuration: %#v", opts)
    36  
    37  	p, err := client.PipelineCreate(context.TODO(), opts)
    38  	if err != nil {
    39  		return fmt.Errorf("Error creating pipeline: %s", err)
    40  	}
    41  
    42  	d.SetId(p.ID)
    43  	d.Set("name", p.Name)
    44  
    45  	log.Printf("[INFO] Pipeline ID: %s", d.Id())
    46  
    47  	return resourceHerokuPipelineUpdate(d, meta)
    48  }
    49  
    50  func resourceHerokuPipelineUpdate(d *schema.ResourceData, meta interface{}) error {
    51  	client := meta.(*heroku.Service)
    52  
    53  	if d.HasChange("name") {
    54  		name := d.Get("name").(string)
    55  		opts := heroku.PipelineUpdateOpts{
    56  			Name: &name,
    57  		}
    58  
    59  		_, err := client.PipelineUpdate(context.TODO(), d.Id(), opts)
    60  		if err != nil {
    61  			return err
    62  		}
    63  	}
    64  
    65  	return resourceHerokuPipelineRead(d, meta)
    66  }
    67  
    68  func resourceHerokuPipelineDelete(d *schema.ResourceData, meta interface{}) error {
    69  	client := meta.(*heroku.Service)
    70  
    71  	log.Printf("[INFO] Deleting pipeline: %s", d.Id())
    72  
    73  	_, err := client.PipelineDelete(context.TODO(), d.Id())
    74  	if err != nil {
    75  		return fmt.Errorf("Error deleting pipeline: %s", err)
    76  	}
    77  
    78  	return nil
    79  }
    80  
    81  func resourceHerokuPipelineRead(d *schema.ResourceData, meta interface{}) error {
    82  	client := meta.(*heroku.Service)
    83  
    84  	p, err := client.PipelineInfo(context.TODO(), d.Id())
    85  	if err != nil {
    86  		return fmt.Errorf("Error retrieving pipeline: %s", err)
    87  	}
    88  
    89  	d.Set("name", p.Name)
    90  
    91  	return nil
    92  }