blob: 0567833204c7b21ad3f94a9d56bc69af053d4ef0 [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.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.Header = resp.HttpResponse.Header
res.Err = err
return res
}