瀏覽代碼

[GCS] Support for gcs path

saady 8 年之前
父節點
當前提交
767b460ff1

+ 1 - 0
conf/defaults.ini

@@ -495,3 +495,4 @@ public_url =
 [external_image_storage.gcs]
 [external_image_storage.gcs]
 key_file =
 key_file =
 bucket =
 bucket =
+path =

+ 1 - 0
conf/sample.ini

@@ -438,3 +438,4 @@ log_queries =
 [external_image_storage.gcs]
 [external_image_storage.gcs]
 ;key_file =
 ;key_file =
 ;bucket =
 ;bucket =
+;path =

+ 3 - 0
docs/sources/installation/configuration.md

@@ -778,6 +778,9 @@ Service Account should have "Storage Object Writer" role.
 ### bucket name
 ### bucket name
 Bucket Name on Google Cloud Storage.
 Bucket Name on Google Cloud Storage.
 
 
+### path
+Optional extra path inside bucket
+
 ## [alerting]
 ## [alerting]
 
 
 ### enabled
 ### enabled

+ 6 - 2
pkg/components/imguploader/gcsuploader.go

@@ -6,6 +6,7 @@ import (
 	"io/ioutil"
 	"io/ioutil"
 	"net/http"
 	"net/http"
 	"os"
 	"os"
+	"path"
 
 
 	"github.com/grafana/grafana/pkg/log"
 	"github.com/grafana/grafana/pkg/log"
 	"github.com/grafana/grafana/pkg/util"
 	"github.com/grafana/grafana/pkg/util"
@@ -20,19 +21,22 @@ const (
 type GCSUploader struct {
 type GCSUploader struct {
 	keyFile string
 	keyFile string
 	bucket  string
 	bucket  string
+	path    string
 	log     log.Logger
 	log     log.Logger
 }
 }
 
 
-func NewGCSUploader(keyFile, bucket string) *GCSUploader {
+func NewGCSUploader(keyFile, bucket, path string) *GCSUploader {
 	return &GCSUploader{
 	return &GCSUploader{
 		keyFile: keyFile,
 		keyFile: keyFile,
 		bucket:  bucket,
 		bucket:  bucket,
+		path:    path,
 		log:     log.New("gcsuploader"),
 		log:     log.New("gcsuploader"),
 	}
 	}
 }
 }
 
 
 func (u *GCSUploader) Upload(ctx context.Context, imageDiskPath string) (string, error) {
 func (u *GCSUploader) Upload(ctx context.Context, imageDiskPath string) (string, error) {
-	key := util.GetRandomString(20) + ".png"
+	fileName := util.GetRandomString(20) + ".png"
+	key := path.Join(u.path, fileName)
 
 
 	u.log.Debug("Opening key file ", u.keyFile)
 	u.log.Debug("Opening key file ", u.keyFile)
 	data, err := ioutil.ReadFile(u.keyFile)
 	data, err := ioutil.ReadFile(u.keyFile)

+ 2 - 1
pkg/components/imguploader/imguploader.go

@@ -73,8 +73,9 @@ func NewImageUploader() (ImageUploader, error) {
 
 
 		keyFile := gcssec.Key("key_file").MustString("")
 		keyFile := gcssec.Key("key_file").MustString("")
 		bucketName := gcssec.Key("bucket").MustString("")
 		bucketName := gcssec.Key("bucket").MustString("")
+		path := gcssec.Key("path").MustString("")
 
 
-		return NewGCSUploader(keyFile, bucketName), nil
+		return NewGCSUploader(keyFile, bucketName, path), nil
 	}
 	}
 
 
 	return NopImageUploader{}, nil
 	return NopImageUploader{}, nil