Swift: Add storage_policy

This commit is contained in:
Ruben Vandamme 2018-08-04 22:09:17 +02:00 committed by Nick Craig-Wood
parent f7c0b2407d
commit 578f56bba7
2 changed files with 45 additions and 17 deletions

View file

@ -120,6 +120,20 @@ func init() {
Help: "Admin", Help: "Admin",
Value: "admin", Value: "admin",
}}, }},
}, {
Name: "storage_policy",
Help: "The storage policy to use when creating a new container",
Default: "",
Examples: []fs.OptionExample{{
Help: "Default",
Value: "",
}, {
Help: "OVH Public Cloud Storage",
Value: "pcs",
}, {
Help: "OVH Public Cloud Archive",
Value: "pca",
}},
}, { }, {
Name: "chunk_size", Name: "chunk_size",
Help: "Above this size files will be chunked into a _segments container.", Help: "Above this size files will be chunked into a _segments container.",
@ -131,21 +145,22 @@ func init() {
// Options defines the configuration for this backend // Options defines the configuration for this backend
type Options struct { type Options struct {
EnvAuth bool `config:"env_auth"` EnvAuth bool `config:"env_auth"`
User string `config:"user"` User string `config:"user"`
Key string `config:"key"` Key string `config:"key"`
Auth string `config:"auth"` Auth string `config:"auth"`
UserID string `config:"user_id"` UserID string `config:"user_id"`
Domain string `config:"domain"` Domain string `config:"domain"`
Tenant string `config:"tenant"` Tenant string `config:"tenant"`
TenantID string `config:"tenant_id"` TenantID string `config:"tenant_id"`
TenantDomain string `config:"tenant_domain"` TenantDomain string `config:"tenant_domain"`
Region string `config:"region"` Region string `config:"region"`
StorageURL string `config:"storage_url"` StorageURL string `config:"storage_url"`
AuthToken string `config:"auth_token"` AuthToken string `config:"auth_token"`
AuthVersion int `config:"auth_version"` AuthVersion int `config:"auth_version"`
EndpointType string `config:"endpoint_type"` StoragePolicy string `config:"storage_policy"`
ChunkSize fs.SizeSuffix `config:"chunk_size"` EndpointType string `config:"endpoint_type"`
ChunkSize fs.SizeSuffix `config:"chunk_size"`
} }
// Fs represents a remote swift server // Fs represents a remote swift server
@ -583,7 +598,11 @@ func (f *Fs) Mkdir(dir string) error {
_, _, err = f.c.Container(f.container) _, _, err = f.c.Container(f.container)
} }
if err == swift.ContainerNotFound { if err == swift.ContainerNotFound {
err = f.c.ContainerCreate(f.container, nil) headers := swift.Headers{}
if f.opt.StoragePolicy != "" {
headers["X-Storage-Policy"] = f.opt.StoragePolicy
}
err = f.c.ContainerCreate(f.container, headers)
} }
if err == nil { if err == nil {
f.containerOK = true f.containerOK = true
@ -880,7 +899,11 @@ func (o *Object) updateChunks(in0 io.Reader, headers swift.Headers, size int64,
var err error var err error
_, _, err = o.fs.c.Container(o.fs.segmentsContainer) _, _, err = o.fs.c.Container(o.fs.segmentsContainer)
if err == swift.ContainerNotFound { if err == swift.ContainerNotFound {
err = o.fs.c.ContainerCreate(o.fs.segmentsContainer, nil) headers := swift.Headers{}
if o.fs.opt.StoragePolicy != "" {
headers["X-Storage-Policy"] = o.fs.opt.StoragePolicy
}
err = o.fs.c.ContainerCreate(o.fs.segmentsContainer, headers)
} }
if err != nil { if err != nil {
return "", err return "", err

View file

@ -266,6 +266,11 @@ files whose local modtime is newer than the time it was last uploaded.
Here are the command line options specific to this cloud storage Here are the command line options specific to this cloud storage
system. system.
#### --swift-storage-policy=STRING ####
Apply the specified storage policy when creating a new container. The policy
cannot be changed afterwards. The allowed configuration values and their
meaning depend on your Swift storage provider.
#### --swift-chunk-size=SIZE #### #### --swift-chunk-size=SIZE ####
Above this size files will be chunked into a _segments container. The Above this size files will be chunked into a _segments container. The