gs: support other regions than us
This commit is contained in:
parent
658aa4c0f7
commit
ed5b2c2c9b
5 changed files with 20 additions and 2 deletions
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
|
||||
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
|
||||
.. _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
|
||||
|
|
|
@ -16,13 +16,15 @@ type Config struct {
|
|||
Bucket 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.
|
||||
func NewConfig() Config {
|
||||
return Config{
|
||||
Connections: 5,
|
||||
Region: "us",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,16 +10,19 @@ var configTests = []struct {
|
|||
Bucket: "bucketname",
|
||||
Prefix: "",
|
||||
Connections: 5,
|
||||
Region: "us",
|
||||
}},
|
||||
{"gs:bucketname:/prefix/directory", Config{
|
||||
Bucket: "bucketname",
|
||||
Prefix: "prefix/directory",
|
||||
Connections: 5,
|
||||
Region: "us",
|
||||
}},
|
||||
{"gs:bucketname:/prefix/directory/", Config{
|
||||
Bucket: "bucketname",
|
||||
Prefix: "prefix/directory",
|
||||
Connections: 5,
|
||||
Region: "us",
|
||||
}},
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ type Backend struct {
|
|||
projectID string
|
||||
connections uint
|
||||
bucketName string
|
||||
region string
|
||||
bucket *storage.BucketHandle
|
||||
prefix string
|
||||
listMaxItems int
|
||||
|
@ -102,6 +103,7 @@ func open(cfg Config, rt http.RoundTripper) (*Backend, error) {
|
|||
projectID: cfg.ProjectID,
|
||||
connections: cfg.Connections,
|
||||
bucketName: cfg.Bucket,
|
||||
region: cfg.Region,
|
||||
bucket: gcsClient.Bucket(cfg.Bucket),
|
||||
prefix: cfg.Prefix,
|
||||
Layout: &layout.DefaultLayout{
|
||||
|
@ -142,8 +144,11 @@ func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (restic.Backe
|
|||
}
|
||||
|
||||
if !exists {
|
||||
bucketAttrs := &storage.BucketAttrs{
|
||||
Location: cfg.Region,
|
||||
}
|
||||
// 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.
|
||||
return nil, errors.Wrap(err, "service.Buckets.Insert")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue