mirror of
https://github.com/octoleo/restic.git
synced 2024-11-25 06:07:44 +00:00
gs: support other regions than us
This commit is contained in:
parent
658aa4c0f7
commit
ed5b2c2c9b
6
changelog/unreleased/pull-4226
Normal file
6
changelog/unreleased/pull-4226
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Enhancement: Allow to specify region where a bucket should get created in the gcs backend
|
||||||
|
|
||||||
|
Buckets used by the Google Cloud Storage backend would always get created in the "us" region.
|
||||||
|
It is now possible to specify the region, where a bucket should get created.
|
||||||
|
|
||||||
|
https://github.com/restic/restic/pull/4226
|
@ -613,6 +613,8 @@ The number of concurrent connections to the GCS service can be set with the
|
|||||||
``-o gs.connections=10`` switch. By default, at most five parallel connections are
|
``-o gs.connections=10`` switch. By default, at most five parallel connections are
|
||||||
established.
|
established.
|
||||||
|
|
||||||
|
The region, where a bucket should be created, can be specified with the ``-o gs.region=us`` switch. By default, the region is set to ``us``.
|
||||||
|
|
||||||
.. _service account: https://cloud.google.com/iam/docs/service-account-overview
|
.. _service account: https://cloud.google.com/iam/docs/service-account-overview
|
||||||
.. _create a service account key: https://cloud.google.com/iam/docs/keys-create-delete
|
.. _create a service account key: https://cloud.google.com/iam/docs/keys-create-delete
|
||||||
.. _default authentication material: https://cloud.google.com/docs/authentication#service-accounts
|
.. _default authentication material: https://cloud.google.com/docs/authentication#service-accounts
|
||||||
|
@ -16,13 +16,15 @@ type Config struct {
|
|||||||
Bucket string
|
Bucket string
|
||||||
Prefix string
|
Prefix string
|
||||||
|
|
||||||
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"`
|
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"`
|
||||||
|
Region string `option:"region" help:"region to create the bucket in (default: us)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConfig returns a new Config with the default values filled in.
|
// NewConfig returns a new Config with the default values filled in.
|
||||||
func NewConfig() Config {
|
func NewConfig() Config {
|
||||||
return Config{
|
return Config{
|
||||||
Connections: 5,
|
Connections: 5,
|
||||||
|
Region: "us",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,16 +10,19 @@ var configTests = []struct {
|
|||||||
Bucket: "bucketname",
|
Bucket: "bucketname",
|
||||||
Prefix: "",
|
Prefix: "",
|
||||||
Connections: 5,
|
Connections: 5,
|
||||||
|
Region: "us",
|
||||||
}},
|
}},
|
||||||
{"gs:bucketname:/prefix/directory", Config{
|
{"gs:bucketname:/prefix/directory", Config{
|
||||||
Bucket: "bucketname",
|
Bucket: "bucketname",
|
||||||
Prefix: "prefix/directory",
|
Prefix: "prefix/directory",
|
||||||
Connections: 5,
|
Connections: 5,
|
||||||
|
Region: "us",
|
||||||
}},
|
}},
|
||||||
{"gs:bucketname:/prefix/directory/", Config{
|
{"gs:bucketname:/prefix/directory/", Config{
|
||||||
Bucket: "bucketname",
|
Bucket: "bucketname",
|
||||||
Prefix: "prefix/directory",
|
Prefix: "prefix/directory",
|
||||||
Connections: 5,
|
Connections: 5,
|
||||||
|
Region: "us",
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ type Backend struct {
|
|||||||
projectID string
|
projectID string
|
||||||
connections uint
|
connections uint
|
||||||
bucketName string
|
bucketName string
|
||||||
|
region string
|
||||||
bucket *storage.BucketHandle
|
bucket *storage.BucketHandle
|
||||||
prefix string
|
prefix string
|
||||||
listMaxItems int
|
listMaxItems int
|
||||||
@ -102,6 +103,7 @@ func open(cfg Config, rt http.RoundTripper) (*Backend, error) {
|
|||||||
projectID: cfg.ProjectID,
|
projectID: cfg.ProjectID,
|
||||||
connections: cfg.Connections,
|
connections: cfg.Connections,
|
||||||
bucketName: cfg.Bucket,
|
bucketName: cfg.Bucket,
|
||||||
|
region: cfg.Region,
|
||||||
bucket: gcsClient.Bucket(cfg.Bucket),
|
bucket: gcsClient.Bucket(cfg.Bucket),
|
||||||
prefix: cfg.Prefix,
|
prefix: cfg.Prefix,
|
||||||
Layout: &layout.DefaultLayout{
|
Layout: &layout.DefaultLayout{
|
||||||
@ -142,8 +144,11 @@ func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (restic.Backe
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
|
bucketAttrs := &storage.BucketAttrs{
|
||||||
|
Location: cfg.Region,
|
||||||
|
}
|
||||||
// Bucket doesn't exist, try to create it.
|
// Bucket doesn't exist, try to create it.
|
||||||
if err := be.bucket.Create(ctx, be.projectID, nil); err != nil {
|
if err := be.bucket.Create(ctx, be.projectID, bucketAttrs); err != nil {
|
||||||
// Always an error, as the bucket definitely doesn't exist.
|
// Always an error, as the bucket definitely doesn't exist.
|
||||||
return nil, errors.Wrap(err, "service.Buckets.Insert")
|
return nil, errors.Wrap(err, "service.Buckets.Insert")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user