github.com/gophercloud/gophercloud@v1.11.0/openstack/clustering/v1/webhooks/requests.go (about) 1 package webhooks 2 3 import ( 4 "fmt" 5 "net/url" 6 7 "github.com/gophercloud/gophercloud" 8 ) 9 10 // TriggerOpts represents options used for triggering an action 11 type TriggerOpts struct { 12 V string `q:"V" required:"true"` 13 Params map[string]string 14 } 15 16 // TriggerOptsBuilder Query string builder interface for webhooks 17 type TriggerOptsBuilder interface { 18 ToWebhookTriggerQuery() (string, error) 19 } 20 21 // Query string builder for webhooks 22 func (opts TriggerOpts) ToWebhookTriggerQuery() (string, error) { 23 q, err := gophercloud.BuildQueryString(opts) 24 params := q.Query() 25 26 for k, v := range opts.Params { 27 params.Add(k, v) 28 } 29 30 q = &url.URL{RawQuery: params.Encode()} 31 return q.String(), err 32 } 33 34 // Trigger an action represented by a webhook. 35 func Trigger(client *gophercloud.ServiceClient, id string, opts TriggerOptsBuilder) (r TriggerResult) { 36 url := triggerURL(client, id) 37 if opts != nil { 38 query, err := opts.ToWebhookTriggerQuery() 39 if err != nil { 40 r.Err = err 41 return 42 } 43 url += query 44 } else { 45 r.Err = fmt.Errorf("Must contain V for TriggerOpt") 46 return 47 } 48 49 resp, err := client.Post(url, nil, &r.Body, &gophercloud.RequestOpts{ 50 OkCodes: []int{200, 201, 202}, 51 }) 52 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 53 return 54 }