github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/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 Importer: &schema.ResourceImporter{ 20 State: resourceHerokuPipelineImport, 21 }, 22 23 Schema: map[string]*schema.Schema{ 24 "name": { 25 Type: schema.TypeString, 26 Required: true, 27 }, 28 }, 29 } 30 } 31 32 func resourceHerokuPipelineImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { 33 client := meta.(*heroku.Service) 34 35 p, err := client.PipelineInfo(context.TODO(), d.Id()) 36 if err != nil { 37 return nil, err 38 } 39 40 d.Set("name", p.Name) 41 42 return []*schema.ResourceData{d}, nil 43 } 44 45 func resourceHerokuPipelineCreate(d *schema.ResourceData, meta interface{}) error { 46 client := meta.(*heroku.Service) 47 48 opts := heroku.PipelineCreateOpts{ 49 Name: d.Get("name").(string), 50 } 51 52 log.Printf("[DEBUG] Pipeline create configuration: %#v", opts) 53 54 p, err := client.PipelineCreate(context.TODO(), opts) 55 if err != nil { 56 return fmt.Errorf("Error creating pipeline: %s", err) 57 } 58 59 d.SetId(p.ID) 60 d.Set("name", p.Name) 61 62 log.Printf("[INFO] Pipeline ID: %s", d.Id()) 63 64 return resourceHerokuPipelineUpdate(d, meta) 65 } 66 67 func resourceHerokuPipelineUpdate(d *schema.ResourceData, meta interface{}) error { 68 client := meta.(*heroku.Service) 69 70 if d.HasChange("name") { 71 name := d.Get("name").(string) 72 opts := heroku.PipelineUpdateOpts{ 73 Name: &name, 74 } 75 76 _, err := client.PipelineUpdate(context.TODO(), d.Id(), opts) 77 if err != nil { 78 return err 79 } 80 } 81 82 return resourceHerokuPipelineRead(d, meta) 83 } 84 85 func resourceHerokuPipelineDelete(d *schema.ResourceData, meta interface{}) error { 86 client := meta.(*heroku.Service) 87 88 log.Printf("[INFO] Deleting pipeline: %s", d.Id()) 89 90 _, err := client.PipelineDelete(context.TODO(), d.Id()) 91 if err != nil { 92 return fmt.Errorf("Error deleting pipeline: %s", err) 93 } 94 95 return nil 96 } 97 98 func resourceHerokuPipelineRead(d *schema.ResourceData, meta interface{}) error { 99 client := meta.(*heroku.Service) 100 101 p, err := client.PipelineInfo(context.TODO(), d.Id()) 102 if err != nil { 103 return fmt.Errorf("Error retrieving pipeline: %s", err) 104 } 105 106 d.Set("name", p.Name) 107 108 return nil 109 }