Browse Source

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
William 8 years ago
parent
commit
88a8991722

+ 2 - 1
conf/defaults.ini

@@ -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 =
 
 

+ 2 - 1
conf/sample.ini

@@ -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 =
 
 

+ 5 - 1
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.
 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

+ 10 - 4
pkg/components/imguploader/imguploader.go

@@ -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("")
-		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":
 	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 {