Skip to content

Commit

Permalink
Implement Aliyun OSS gateway support
Browse files Browse the repository at this point in the history
  • Loading branch information
timonwong committed Oct 28, 2017
1 parent 203ac8e commit 2ce9e88
Show file tree
Hide file tree
Showing 24 changed files with 7,112 additions and 4 deletions.
46 changes: 42 additions & 4 deletions cmd/gateway-main.go
Expand Up @@ -31,7 +31,49 @@ import (
miniohttp "github.com/minio/minio/pkg/http"
)

const ossGatewayTemplate = `NAME:
{{.HelpName}} - {{.Usage}}
USAGE:
{{.HelpName}} {{if .VisibleFlags}}[FLAGS]{{end}} [ENDPOINT]
{{if .VisibleFlags}}
FLAGS:
{{range .VisibleFlags}}{{.}}
{{end}}{{end}}
ENDPOINT:
OSS server endpoint. Default ENDPOINT is https://oss.aliyuncs.com
ENVIRONMENT VARIABLES:
ACCESS:
MINIO_ACCESS_KEY: Username or access key of OSS storage.
MINIO_SECRET_KEY: Password or secret key of OSS storage.
BROWSER:
MINIO_BROWSER: To disable web browser access, set this value to "off".
EXAMPLES:
1. Start minio gateway server for Aliyun OSS backend.
$ export MINIO_ACCESS_KEY=accesskey
$ export MINIO_SECRET_KEY=secretkey
$ {{.HelpName}}
2. Start minio gateway server for Aliyun OSS backend on custom endpoint.
$ export MINIO_ACCESS_KEY=Q3AM3UQ867SPQQA43P2F
$ export MINIO_SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
$ {{.HelpName}} https://oss.example.com
`

var (
ossBackendCmd = cli.Command{
Name: "oss",
Usage: "Aliyun OSS.",
Action: ossGatewayMain,
CustomHelpTemplate: ossGatewayTemplate,
Flags: append(serverFlags, globalFlags...),
HideHelpCommand: true,
}

gatewayCmd = cli.Command{
Name: "gateway",
Usage: "Start object storage gateway.",
Expand Down Expand Up @@ -166,10 +208,6 @@ func startGateway(ctx *cli.Context, gw Gateway) {

initNSLock(false) // Enable local namespace lock.

if ctx.Args().First() == "help" {
cli.ShowCommandHelpAndExit(ctx, gatewayName, 1)
}

newObject, err := gw.NewGatewayLayer()
fatalIf(err, "Unable to initialize gateway layer")

Expand Down
37 changes: 37 additions & 0 deletions cmd/gateway-oss-anonymous.go
@@ -0,0 +1,37 @@
package cmd

import (
"io"

"github.com/minio/minio/pkg/hash"
)

// AnonPutObject creates a new object anonymously with the incoming data,
func (l *ossObjects) AnonPutObject(bucket, object string, data *hash.Reader, metadata map[string]string) (objInfo ObjectInfo, err error) {
return ossPutObject(l.anonClient, bucket, object, data, metadata)
}

// AnonGetObject - Get object anonymously
func (l *ossObjects) AnonGetObject(bucket, key string, startOffset, length int64, writer io.Writer) error {
return ossGetObject(l.anonClient, bucket, key, startOffset, length, writer)
}

// AnonGetObjectInfo - Get object info anonymously
func (l *ossObjects) AnonGetObjectInfo(bucket, object string) (objInfo ObjectInfo, err error) {
return ossGetObjectInfo(l.anonClient, bucket, object)
}

// AnonListObjects lists objects anonymously.
func (l *ossObjects) AnonListObjects(bucket, prefix, marker, delimiter string, maxKeys int) (loi ListObjectsInfo, err error) {
return ossListObjects(l.anonClient, bucket, prefix, marker, delimiter, maxKeys)
}

// AnonListObjectsV2 lists objects in V2 mode, anonymously.
func (l *ossObjects) AnonListObjectsV2(bucket, prefix, continuationToken, delimiter string, maxKeys int, fetchOwner bool, startAfter string) (loi ListObjectsV2Info, err error) {
return ossListObjectsV2(l.anonClient, bucket, prefix, continuationToken, delimiter, maxKeys, fetchOwner, startAfter)
}

// AnonGetBucketInfo gets bucket metadata anonymously.
func (l *ossObjects) AnonGetBucketInfo(bucket string) (bi BucketInfo, err error) {
return ossGeBucketInfo(l.anonClient, bucket)
}

0 comments on commit 2ce9e88

Please sign in to comment.