1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
package receivers
import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
// ReceiverType represents a valid type of receiver
type ReceiverType string
const (
WebhookReceiver ReceiverType = "webhook"
MessageReceiver ReceiverType = "message"
)
// CreateOptsBuilder allows extensions to add additional parameters to the
// Create request.
type CreateOptsBuilder interface {
ToReceiverCreateMap() (map[string]interface{}, error)
}
// CreatOpts represents options used to create a receiver.
type CreateOpts struct {
Name string `json:"name" required:"true"`
ClusterID string `json:"cluster_id,omitempty"`
Type ReceiverType `json:"type" required:"true"`
Action string `json:"action,omitempty"`
Actor map[string]interface{} `json:"actor,omitempty"`
Params map[string]interface{} `json:"params,omitempty"`
}
// ToReceiverCreateMap constructs a request body from CreateOpts.
func (opts CreateOpts) ToReceiverCreateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "receiver")
}
// Create requests the creation of a new receiver.
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToReceiverCreateMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Post(createURL(client), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200, 201, 202},
})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// UpdateOptsBuilder allows extensions to add additional parameters to the
// Update request.
type UpdateOptsBuilder interface {
ToReceiverUpdateMap() (map[string]interface{}, error)
}
// UpdateOpts represents options used to update a receiver.
type UpdateOpts struct {
Name string `json:"name,omitempty"`
Action string `json:"action,omitempty"`
Params map[string]interface{} `json:"params,omitempty"`
}
// ToReceiverUpdateMap constructs a request body from UpdateOpts.
func (opts UpdateOpts) ToReceiverUpdateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "receiver")
}
// Update requests the update of a receiver.
func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
b, err := opts.ToReceiverUpdateMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Patch(updateURL(client, id), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200, 201},
})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// Get retrieves details of a single receiver. Use Extract to convert its result into a Receiver.
func Get(client *gophercloud.ServiceClient, id string) (r GetResult) {
resp, err := client.Get(getURL(client, id), &r.Body, &gophercloud.RequestOpts{OkCodes: []int{200}})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// ListOptsBuilder allows extensions to add additional parameters to the
// List request.
type ListOptsBuilder interface {
ToReceiverListQuery() (string, error)
}
// ListOpts represents options used to list recievers.
type ListOpts struct {
Limit int `q:"limit"`
Marker string `q:"marker"`
Sort string `q:"sort"`
GlobalProject *bool `q:"global_project"`
Name string `q:"name"`
Type string `q:"type"`
ClusterID string `q:"cluster_id"`
Action string `q:"action"`
User string `q:"user"`
}
// ToReceiverListQuery formats a ListOpts into a query string.
func (opts ListOpts) ToReceiverListQuery() (string, error) {
q, err := gophercloud.BuildQueryString(opts)
return q.String(), err
}
// List instructs OpenStack to provide a list of cluster.
func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
url := listURL(client)
if opts != nil {
query, err := opts.ToReceiverListQuery()
if err != nil {
return pagination.Pager{Err: err}
}
url += query
}
return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
return ReceiverPage{pagination.LinkedPageBase{PageResult: r}}
})
}
// Delete deletes the specified receiver ID.
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
resp, err := client.Delete(deleteURL(client, id), nil)
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// Notify Notifies message type receiver
func Notify(client *gophercloud.ServiceClient, id string) (r NotifyResult) {
resp, err := client.Post(notifyURL(client, id), nil, nil, &gophercloud.RequestOpts{
OkCodes: []int{204},
})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
|