blob: 55122a12f06681392886727252ff79cefdf27ea6 [file] [log] [blame]
package cdncontainers
import (
"github.com/racker/perigee"
"github.com/rackspace/gophercloud"
)
// EnableOptsBuilder allows extensions to add additional parameters to the Enable
// request.
type EnableOptsBuilder interface {
ToCDNContainerEnableMap() (map[string]string, error)
}
// EnableOpts is a structure that holds options for enabling a CDN container.
type EnableOpts struct {
// CDNEnabled indicates whether or not the container is CDN enabled. Set to
// `true` to enable the container. Note that changing this setting from true
// to false will disable the container in the CDN but only after the TTL has
// expired.
CDNEnabled bool `h:"X-Cdn-Enabled"`
// TTL is the time-to-live for the container (in seconds).
TTL int `h:"X-Ttl"`
}
// ToCDNContainerEnableMap formats an EnableOpts into a map of headers.
func (opts EnableOpts) ToCDNContainerEnableMap() (map[string]string, error) {
h, err := gophercloud.BuildHeaders(opts)
if err != nil {
return nil, err
}
return h, nil
}
// Enable is a function that enables/disables a CDN container.
func Enable(c *gophercloud.ServiceClient, containerName string, opts EnableOptsBuilder) EnableResult {
var res EnableResult
h := c.Provider.AuthenticatedHeaders()
if opts != nil {
headers, err := opts.ToCDNContainerEnableMap()
if err != nil {
res.Err = err
return res
}
for k, v := range headers {
h[k] = v
}
}
resp, err := perigee.Request("PUT", enableURL(c, containerName), perigee.Options{
MoreHeaders: h,
OkCodes: []int{201, 202, 204},
})
res.Resp = &resp.HttpResponse
res.Err = err
return res
}