github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/pagerduty/resource_pagerduty_addon.go (about) 1 package pagerduty 2 3 import ( 4 "log" 5 6 "github.com/PagerDuty/go-pagerduty" 7 "github.com/hashicorp/terraform/helper/schema" 8 ) 9 10 func resourcePagerDutyAddon() *schema.Resource { 11 return &schema.Resource{ 12 Create: resourcePagerDutyAddonCreate, 13 Read: resourcePagerDutyAddonRead, 14 Update: resourcePagerDutyAddonUpdate, 15 Delete: resourcePagerDutyAddonDelete, 16 Importer: &schema.ResourceImporter{ 17 State: schema.ImportStatePassthrough, 18 }, 19 Schema: map[string]*schema.Schema{ 20 "name": { 21 Type: schema.TypeString, 22 Required: true, 23 }, 24 "src": { 25 Type: schema.TypeString, 26 Required: true, 27 }, 28 }, 29 } 30 } 31 32 func buildAddonStruct(d *schema.ResourceData) *pagerduty.Addon { 33 addon := pagerduty.Addon{ 34 Name: d.Get("name").(string), 35 Src: d.Get("src").(string), 36 APIObject: pagerduty.APIObject{ 37 Type: "full_page_addon", 38 }, 39 } 40 41 return &addon 42 } 43 44 func resourcePagerDutyAddonCreate(d *schema.ResourceData, meta interface{}) error { 45 client := meta.(*pagerduty.Client) 46 47 addon := buildAddonStruct(d) 48 49 log.Printf("[INFO] Creating PagerDuty add-on %s", addon.Name) 50 51 addon, err := client.InstallAddon(*addon) 52 if err != nil { 53 return err 54 } 55 56 d.SetId(addon.ID) 57 58 return resourcePagerDutyAddonRead(d, meta) 59 } 60 61 func resourcePagerDutyAddonRead(d *schema.ResourceData, meta interface{}) error { 62 client := meta.(*pagerduty.Client) 63 64 log.Printf("[INFO] Reading PagerDuty add-on %s", d.Id()) 65 66 addon, err := client.GetAddon(d.Id()) 67 if err != nil { 68 if isNotFound(err) { 69 d.SetId("") 70 return nil 71 } 72 return err 73 } 74 75 d.Set("name", addon.Name) 76 d.Set("src", addon.Src) 77 78 return nil 79 } 80 81 func resourcePagerDutyAddonUpdate(d *schema.ResourceData, meta interface{}) error { 82 client := meta.(*pagerduty.Client) 83 84 addon := buildAddonStruct(d) 85 86 log.Printf("[INFO] Updating PagerDuty add-on %s", d.Id()) 87 88 if _, err := client.UpdateAddon(d.Id(), *addon); err != nil { 89 return err 90 } 91 92 return nil 93 } 94 95 func resourcePagerDutyAddonDelete(d *schema.ResourceData, meta interface{}) error { 96 client := meta.(*pagerduty.Client) 97 98 log.Printf("[INFO] Deleting PagerDuty add-on %s", d.Id()) 99 100 if err := client.DeleteAddon(d.Id()); err != nil { 101 return err 102 } 103 104 d.SetId("") 105 106 return nil 107 }