From 88a89917222e12699470b1bdfc2ac4c80f605e60 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 19 Sep 2017 04:17:22 -0400 Subject: [PATCH] config bucket and region for s3 uploader this is to support cn-north-1 region as it can get s3 url programatically. also keeps support 'bucket_url' for backward compatiblity --- conf/defaults.ini | 3 ++- conf/sample.ini | 3 ++- docs/sources/installation/configuration.md | 6 +++++- pkg/components/imguploader/imguploader.go | 14 ++++++++++---- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/conf/defaults.ini b/conf/defaults.ini index f0156b70511..f46cfd28a8a 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -458,7 +458,8 @@ url = https://grafana.com provider = [external_image_storage.s3] -bucket_url = +bucket = +region = access_key = secret_key = diff --git a/conf/sample.ini b/conf/sample.ini index 80c7464f89c..8470d49109e 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -403,7 +403,8 @@ ;provider = [external_image_storage.s3] -;bucket_url = +;bucket = +;region = ;access_key = ;secret_key = diff --git a/docs/sources/installation/configuration.md b/docs/sources/installation/configuration.md index ae2541b4a7f..a4d080e212e 100644 --- a/docs/sources/installation/configuration.md +++ b/docs/sources/installation/configuration.md @@ -648,12 +648,16 @@ These options control how images should be made public so they can be shared on You can choose between (s3, webdav). If left empty Grafana will ignore the upload action. ## [external_image_storage.s3] +### bucket +Bucket name for S3. e.g. grafana.snapshot +### region +Region name for S3. e.g. 'us-east-1', 'cn-north-1', etc ### bucket_url +(for backward compatibility, only works when no bucket or region are configured) Bucket URL for S3. AWS region can be specified within URL or defaults to 'us-east-1', e.g. - http://grafana.s3.amazonaws.com/ - https://grafana.s3-ap-southeast-2.amazonaws.com/ -- https://grafana.s3-cn-north-1.amazonaws.com.cn ### access_key Access key. e.g. AAAAAAAAAAAAAAAAAAAA diff --git a/pkg/components/imguploader/imguploader.go b/pkg/components/imguploader/imguploader.go index 883ef8eefda..e00672121a0 100644 --- a/pkg/components/imguploader/imguploader.go +++ b/pkg/components/imguploader/imguploader.go @@ -27,15 +27,21 @@ func NewImageUploader() (ImageUploader, error) { return nil, err } + bucket := s3sec.Key("bucket").MustString("") + region := s3sec.Key("region").MustString("") bucketUrl := s3sec.Key("bucket_url").MustString("") accessKey := s3sec.Key("access_key").MustString("") secretKey := s3sec.Key("secret_key").MustString("") - info, err := getRegionAndBucketFromUrl(bucketUrl) - if err != nil { - return nil, err + if bucket == "" || region == "" { + info, err := getRegionAndBucketFromUrl(bucketUrl) + if err != nil { + return nil, err + } + bucket = info.bucket + region = info.region } - return NewS3Uploader(info.region, info.bucket, "public-read", accessKey, secretKey), nil + return NewS3Uploader(region, bucket, "public-read", accessKey, secretKey), nil case "webdav": webdavSec, err := setting.Cfg.GetSection("external_image_storage.webdav") if err != nil {