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
This commit is contained in:
William 2017-09-19 04:17:22 -04:00
parent 37962216ed
commit 88a8991722
4 changed files with 19 additions and 7 deletions

View File

@ -458,7 +458,8 @@ url = https://grafana.com
provider = provider =
[external_image_storage.s3] [external_image_storage.s3]
bucket_url = bucket =
region =
access_key = access_key =
secret_key = secret_key =

View File

@ -403,7 +403,8 @@
;provider = ;provider =
[external_image_storage.s3] [external_image_storage.s3]
;bucket_url = ;bucket =
;region =
;access_key = ;access_key =
;secret_key = ;secret_key =

View File

@ -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. You can choose between (s3, webdav). If left empty Grafana will ignore the upload action.
## [external_image_storage.s3] ## [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 ### 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. Bucket URL for S3. AWS region can be specified within URL or defaults to 'us-east-1', e.g.
- http://grafana.s3.amazonaws.com/ - http://grafana.s3.amazonaws.com/
- https://grafana.s3-ap-southeast-2.amazonaws.com/ - https://grafana.s3-ap-southeast-2.amazonaws.com/
- https://grafana.s3-cn-north-1.amazonaws.com.cn
### access_key ### access_key
Access key. e.g. AAAAAAAAAAAAAAAAAAAA Access key. e.g. AAAAAAAAAAAAAAAAAAAA

View File

@ -27,15 +27,21 @@ func NewImageUploader() (ImageUploader, error) {
return nil, err return nil, err
} }
bucket := s3sec.Key("bucket").MustString("")
region := s3sec.Key("region").MustString("")
bucketUrl := s3sec.Key("bucket_url").MustString("") bucketUrl := s3sec.Key("bucket_url").MustString("")
accessKey := s3sec.Key("access_key").MustString("") accessKey := s3sec.Key("access_key").MustString("")
secretKey := s3sec.Key("secret_key").MustString("") secretKey := s3sec.Key("secret_key").MustString("")
if bucket == "" || region == "" {
info, err := getRegionAndBucketFromUrl(bucketUrl) info, err := getRegionAndBucketFromUrl(bucketUrl)
if err != nil { if err != nil {
return nil, err 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": case "webdav":
webdavSec, err := setting.Cfg.GetSection("external_image_storage.webdav") webdavSec, err := setting.Cfg.GetSection("external_image_storage.webdav")
if err != nil { if err != nil {