mirror of
https://github.com/minio/minio.git
synced 2025-08-02 03:54:30 -04:00
gateway: Support for custom endpoint. (#4086)
This commit is contained in:
parent
de204a0a52
commit
c5249c35d3
@ -123,9 +123,11 @@ func azureToObjectError(err error, params ...string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inits azure blob storage client and returns AzureObjects.
|
// Inits azure blob storage client and returns AzureObjects.
|
||||||
func newAzureLayer(account, key string) (GatewayLayer, error) {
|
func newAzureLayer(endPoint string, account, key string, secure bool) (GatewayLayer, error) {
|
||||||
useHTTPS := true
|
if endPoint == "" {
|
||||||
c, err := storage.NewClient(account, key, storage.DefaultBaseURL, globalAzureAPIVersion, useHTTPS)
|
endPoint = storage.DefaultBaseURL
|
||||||
|
}
|
||||||
|
c, err := storage.NewClient(account, key, endPoint, globalAzureAPIVersion, secure)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return AzureObjects{}, err
|
return AzureObjects{}, err
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,9 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/minio/cli"
|
"github.com/minio/cli"
|
||||||
@ -83,11 +85,11 @@ func mustGetGatewayCredsFromEnv() (accessKey, secretKey string) {
|
|||||||
//
|
//
|
||||||
// - Azure Blob Storage.
|
// - Azure Blob Storage.
|
||||||
// - Add your favorite backend here.
|
// - Add your favorite backend here.
|
||||||
func newGatewayLayer(backendType, accessKey, secretKey string) (GatewayLayer, error) {
|
func newGatewayLayer(backendType, endPoint, accessKey, secretKey string, secure bool) (GatewayLayer, error) {
|
||||||
if gatewayBackend(backendType) != azureBackend {
|
if gatewayBackend(backendType) != azureBackend {
|
||||||
return nil, fmt.Errorf("Unrecognized backend type %s", backendType)
|
return nil, fmt.Errorf("Unrecognized backend type %s", backendType)
|
||||||
}
|
}
|
||||||
return newAzureLayer(accessKey, secretKey)
|
return newAzureLayer(endPoint, accessKey, secretKey, secure)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize a new gateway config.
|
// Initialize a new gateway config.
|
||||||
@ -117,6 +119,28 @@ func newGatewayConfig(accessKey, secretKey, region string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return endpoint.
|
||||||
|
func parseGatewayEndpoint(arg string) (endPoint string, secure bool, err error) {
|
||||||
|
schemeSpecified := len(strings.Split(arg, "://")) > 1
|
||||||
|
if !schemeSpecified {
|
||||||
|
// Default connection will be "secure".
|
||||||
|
arg = "https://" + arg
|
||||||
|
}
|
||||||
|
u, err := url.Parse(arg)
|
||||||
|
if err != nil {
|
||||||
|
return "", false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch u.Scheme {
|
||||||
|
case "http":
|
||||||
|
return u.Host, false, nil
|
||||||
|
case "https":
|
||||||
|
return u.Host, true, nil
|
||||||
|
default:
|
||||||
|
return "", false, fmt.Errorf("Unrecognized scheme %s", u.Scheme)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handler for 'minio gateway'.
|
// Handler for 'minio gateway'.
|
||||||
func gatewayMain(ctx *cli.Context) {
|
func gatewayMain(ctx *cli.Context) {
|
||||||
if !ctx.Args().Present() || ctx.Args().First() == "help" {
|
if !ctx.Args().Present() || ctx.Args().First() == "help" {
|
||||||
@ -142,10 +166,15 @@ func gatewayMain(ctx *cli.Context) {
|
|||||||
// First argument is selected backend type.
|
// First argument is selected backend type.
|
||||||
backendType := ctx.Args().First()
|
backendType := ctx.Args().First()
|
||||||
|
|
||||||
|
// Second argument is endpoint. If no endpoint is specified then the
|
||||||
|
// gateway implementation should use a default setting.
|
||||||
|
endPoint, secure, err := parseGatewayEndpoint(ctx.Args().Get(1))
|
||||||
|
fatalIf(err, "Unable to parse endpoint")
|
||||||
|
|
||||||
// Create certs path for SSL configuration.
|
// Create certs path for SSL configuration.
|
||||||
fatalIf(createConfigDir(), "Unable to create configuration directory")
|
fatalIf(createConfigDir(), "Unable to create configuration directory")
|
||||||
|
|
||||||
newObject, err := newGatewayLayer(backendType, accessKey, secretKey)
|
newObject, err := newGatewayLayer(backendType, endPoint, accessKey, secretKey, secure)
|
||||||
fatalIf(err, "Unable to initialize gateway layer")
|
fatalIf(err, "Unable to initialize gateway layer")
|
||||||
|
|
||||||
initNSLock(false) // Enable local namespace lock.
|
initNSLock(false) // Enable local namespace lock.
|
||||||
|
50
cmd/gateway-main_test.go
Normal file
50
cmd/gateway-main_test.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Minio Cloud Storage, (C) 2017 Minio, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
// Test parseGatewayEndpoint
|
||||||
|
func TestParseGatewayEndpoint(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
arg string
|
||||||
|
endPoint string
|
||||||
|
secure bool
|
||||||
|
errReturned bool
|
||||||
|
}{
|
||||||
|
{"http://127.0.0.1:9000", "127.0.0.1:9000", false, false},
|
||||||
|
{"https://127.0.0.1:9000", "127.0.0.1:9000", true, false},
|
||||||
|
{"http://play.minio.io:9000", "play.minio.io:9000", false, false},
|
||||||
|
{"https://play.minio.io:9000", "play.minio.io:9000", true, false},
|
||||||
|
{"ftp://127.0.0.1:9000", "", false, true},
|
||||||
|
{"ftp://play.minio.io:9000", "", false, true},
|
||||||
|
{"play.minio.io:9000", "play.minio.io:9000", true, false},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, test := range testCases {
|
||||||
|
endPoint, secure, err := parseGatewayEndpoint(test.arg)
|
||||||
|
errReturned := err != nil
|
||||||
|
|
||||||
|
if endPoint != test.endPoint ||
|
||||||
|
secure != test.secure ||
|
||||||
|
errReturned != test.errReturned {
|
||||||
|
t.Errorf("Test %d: expected %s,%t,%t got %s,%t,%t",
|
||||||
|
i+1, test.endPoint, test.secure, test.errReturned,
|
||||||
|
endPoint, secure, errReturned)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user