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  }