Commit 50d82155 by Torkel Ödegaard

Merge branch 'master' of https://github.com/williamjoy/grafana into williamjoy-master

parents 2ed75323 88a89917
...@@ -476,7 +476,8 @@ sampler_param = 1 ...@@ -476,7 +476,8 @@ sampler_param = 1
provider = provider =
[external_image_storage.s3] [external_image_storage.s3]
bucket_url = bucket =
region =
access_key = access_key =
secret_key = secret_key =
......
...@@ -422,7 +422,8 @@ ...@@ -422,7 +422,8 @@
;provider = ;provider =
[external_image_storage.s3] [external_image_storage.s3]
;bucket_url = ;bucket =
;region =
;access_key = ;access_key =
;secret_key = ;secret_key =
......
...@@ -651,12 +651,16 @@ These options control how images should be made public so they can be shared on ...@@ -651,12 +651,16 @@ These options control how images should be made public so they can be shared on
You can choose between (s3, webdav, gcs). If left empty Grafana will ignore the upload action. You can choose between (s3, webdav, gcs). 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
......
...@@ -28,15 +28,21 @@ func NewImageUploader() (ImageUploader, error) { ...@@ -28,15 +28,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 {
......
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
"github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds" "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
"github.com/aws/aws-sdk-go/aws/ec2metadata" "github.com/aws/aws-sdk-go/aws/ec2metadata"
"github.com/aws/aws-sdk-go/aws/endpoints"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3"
"github.com/grafana/grafana/pkg/log" "github.com/grafana/grafana/pkg/log"
...@@ -54,8 +55,10 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string, ...@@ -54,8 +55,10 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string,
Credentials: creds, Credentials: creds,
} }
s3_endpoint, _ := endpoints.DefaultResolver().EndpointFor("s3", u.region)
key := util.GetRandomString(20) + ".png" key := util.GetRandomString(20) + ".png"
log.Debug("Uploading image to s3", "bucket = ", u.bucket, ", key = ", key) image_url := s3_endpoint.URL + "/" + u.bucket + "/" + key
log.Debug("Uploading image to s3", "url = ", image_url)
file, err := os.Open(imageDiskPath) file, err := os.Open(imageDiskPath)
if err != nil { if err != nil {
...@@ -78,10 +81,5 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string, ...@@ -78,10 +81,5 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string,
if err != nil { if err != nil {
return "", err return "", err
} }
return image_url, nil
if u.region == "us-east-1" {
return "https://" + u.bucket + ".s3.amazonaws.com/" + key, nil
} else {
return "https://" + u.bucket + ".s3-" + u.region + ".amazonaws.com/" + key, nil
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment