github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/gitlab/resource_gitlab_project_hook.go (about) 1 package gitlab 2 3 import ( 4 "fmt" 5 "log" 6 "strconv" 7 8 "github.com/hashicorp/terraform/helper/schema" 9 gitlab "github.com/xanzy/go-gitlab" 10 ) 11 12 func resourceGitlabProjectHook() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceGitlabProjectHookCreate, 15 Read: resourceGitlabProjectHookRead, 16 Update: resourceGitlabProjectHookUpdate, 17 Delete: resourceGitlabProjectHookDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "project": { 21 Type: schema.TypeString, 22 Required: true, 23 }, 24 "url": { 25 Type: schema.TypeString, 26 Required: true, 27 }, 28 "token": { 29 Type: schema.TypeString, 30 Optional: true, 31 Sensitive: true, 32 }, 33 "push_events": { 34 Type: schema.TypeBool, 35 Optional: true, 36 Default: true, 37 }, 38 "issues_events": { 39 Type: schema.TypeBool, 40 Optional: true, 41 Default: false, 42 }, 43 "merge_requests_events": { 44 Type: schema.TypeBool, 45 Optional: true, 46 Default: false, 47 }, 48 "tag_push_events": { 49 Type: schema.TypeBool, 50 Optional: true, 51 Default: false, 52 }, 53 "note_events": { 54 Type: schema.TypeBool, 55 Optional: true, 56 Default: false, 57 }, 58 "build_events": { 59 Type: schema.TypeBool, 60 Optional: true, 61 Default: false, 62 }, 63 "pipeline_events": { 64 Type: schema.TypeBool, 65 Optional: true, 66 Default: false, 67 }, 68 "wiki_page_events": { 69 Type: schema.TypeBool, 70 Optional: true, 71 Default: false, 72 }, 73 "enable_ssl_verification": { 74 Type: schema.TypeBool, 75 Optional: true, 76 Default: true, 77 }, 78 }, 79 } 80 } 81 82 func resourceGitlabProjectHookCreate(d *schema.ResourceData, meta interface{}) error { 83 client := meta.(*gitlab.Client) 84 project := d.Get("project").(string) 85 options := &gitlab.AddProjectHookOptions{ 86 URL: gitlab.String(d.Get("url").(string)), 87 PushEvents: gitlab.Bool(d.Get("push_events").(bool)), 88 IssuesEvents: gitlab.Bool(d.Get("issues_events").(bool)), 89 MergeRequestsEvents: gitlab.Bool(d.Get("merge_requests_events").(bool)), 90 TagPushEvents: gitlab.Bool(d.Get("tag_push_events").(bool)), 91 NoteEvents: gitlab.Bool(d.Get("note_events").(bool)), 92 BuildEvents: gitlab.Bool(d.Get("build_events").(bool)), 93 PipelineEvents: gitlab.Bool(d.Get("pipeline_events").(bool)), 94 WikiPageEvents: gitlab.Bool(d.Get("wiki_page_events").(bool)), 95 EnableSSLVerification: gitlab.Bool(d.Get("enable_ssl_verification").(bool)), 96 } 97 98 if v, ok := d.GetOk("token"); ok { 99 options.Token = gitlab.String(v.(string)) 100 } 101 102 log.Printf("[DEBUG] create gitlab project hook %q", options.URL) 103 104 hook, _, err := client.Projects.AddProjectHook(project, options) 105 if err != nil { 106 return err 107 } 108 109 d.SetId(fmt.Sprintf("%d", hook.ID)) 110 111 return resourceGitlabProjectHookRead(d, meta) 112 } 113 114 func resourceGitlabProjectHookRead(d *schema.ResourceData, meta interface{}) error { 115 client := meta.(*gitlab.Client) 116 project := d.Get("project").(string) 117 hookId, err := strconv.Atoi(d.Id()) 118 if err != nil { 119 return err 120 } 121 log.Printf("[DEBUG] read gitlab project hook %s/%d", project, hookId) 122 123 hook, response, err := client.Projects.GetProjectHook(project, hookId) 124 if err != nil { 125 if response.StatusCode == 404 { 126 log.Printf("[WARN] removing project hook %d from state because it no longer exists in gitlab", hookId) 127 d.SetId("") 128 return nil 129 } 130 131 return err 132 } 133 134 d.Set("url", hook.URL) 135 d.Set("push_events", hook.PushEvents) 136 d.Set("issues_events", hook.IssuesEvents) 137 d.Set("merge_requests_events", hook.MergeRequestsEvents) 138 d.Set("tag_push_events", hook.TagPushEvents) 139 d.Set("note_events", hook.NoteEvents) 140 d.Set("build_events", hook.BuildEvents) 141 d.Set("pipeline_events", hook.PipelineEvents) 142 d.Set("wiki_page_events", hook.WikiPageEvents) 143 d.Set("enable_ssl_verification", hook.EnableSSLVerification) 144 return nil 145 } 146 147 func resourceGitlabProjectHookUpdate(d *schema.ResourceData, meta interface{}) error { 148 client := meta.(*gitlab.Client) 149 project := d.Get("project").(string) 150 hookId, err := strconv.Atoi(d.Id()) 151 if err != nil { 152 return err 153 } 154 options := &gitlab.EditProjectHookOptions{ 155 URL: gitlab.String(d.Get("url").(string)), 156 PushEvents: gitlab.Bool(d.Get("push_events").(bool)), 157 IssuesEvents: gitlab.Bool(d.Get("issues_events").(bool)), 158 MergeRequestsEvents: gitlab.Bool(d.Get("merge_requests_events").(bool)), 159 TagPushEvents: gitlab.Bool(d.Get("tag_push_events").(bool)), 160 NoteEvents: gitlab.Bool(d.Get("note_events").(bool)), 161 BuildEvents: gitlab.Bool(d.Get("build_events").(bool)), 162 PipelineEvents: gitlab.Bool(d.Get("pipeline_events").(bool)), 163 WikiPageEvents: gitlab.Bool(d.Get("wiki_page_events").(bool)), 164 EnableSSLVerification: gitlab.Bool(d.Get("enable_ssl_verification").(bool)), 165 } 166 167 if d.HasChange("token") { 168 options.Token = gitlab.String(d.Get("token").(string)) 169 } 170 171 log.Printf("[DEBUG] update gitlab project hook %s", d.Id()) 172 173 _, _, err = client.Projects.EditProjectHook(project, hookId, options) 174 if err != nil { 175 return err 176 } 177 178 return resourceGitlabProjectHookRead(d, meta) 179 } 180 181 func resourceGitlabProjectHookDelete(d *schema.ResourceData, meta interface{}) error { 182 client := meta.(*gitlab.Client) 183 project := d.Get("project").(string) 184 hookId, err := strconv.Atoi(d.Id()) 185 if err != nil { 186 return err 187 } 188 log.Printf("[DEBUG] Delete gitlab project hook %s", d.Id()) 189 190 _, err = client.Projects.DeleteProjectHook(project, hookId) 191 return err 192 }