mirror of
https://github.com/minio/minio.git
synced 2025-01-11 23:13:23 -05:00
07a556a10b
This is to avoid making calls to backend and requiring gateways to allow permissions for ListBuckets() operation just for Liveness checks, we can avoid this and make our liveness checks to be more performant.
137 lines
4.2 KiB
Go
137 lines
4.2 KiB
Go
/*
|
|
* MinIO Cloud Storage, (C) 2018 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 nas
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/minio/cli"
|
|
minio "github.com/minio/minio/cmd"
|
|
"github.com/minio/minio/pkg/auth"
|
|
)
|
|
|
|
const (
|
|
nasBackend = "nas"
|
|
)
|
|
|
|
func init() {
|
|
const nasGatewayTemplate = `NAME:
|
|
{{.HelpName}} - {{.Usage}}
|
|
|
|
USAGE:
|
|
{{.HelpName}} {{if .VisibleFlags}}[FLAGS]{{end}} PATH
|
|
{{if .VisibleFlags}}
|
|
FLAGS:
|
|
{{range .VisibleFlags}}{{.}}
|
|
{{end}}{{end}}
|
|
PATH:
|
|
Path to NAS mount point.
|
|
|
|
ENVIRONMENT VARIABLES:
|
|
ACCESS:
|
|
MINIO_ACCESS_KEY: Username or access key of minimum 3 characters in length.
|
|
MINIO_SECRET_KEY: Password or secret key of minimum 8 characters in length.
|
|
|
|
BROWSER:
|
|
MINIO_BROWSER: To disable web browser access, set this value to "off".
|
|
|
|
DOMAIN:
|
|
MINIO_DOMAIN: To enable virtual-host-style requests, set this value to MinIO host domain name.
|
|
|
|
CACHE:
|
|
MINIO_CACHE_DRIVES: List of mounted drives or directories delimited by ";".
|
|
MINIO_CACHE_EXCLUDE: List of cache exclusion patterns delimited by ";".
|
|
MINIO_CACHE_EXPIRY: Cache expiry duration in days.
|
|
MINIO_CACHE_QUOTA: Maximum permitted usage of the cache in percentage (0-100).
|
|
|
|
EXAMPLES:
|
|
1. Start minio gateway server for NAS backend.
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_ACCESS_KEY{{.AssignmentOperator}}accesskey
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_SECRET_KEY{{.AssignmentOperator}}secretkey
|
|
{{.Prompt}} {{.HelpName}} /shared/nasvol
|
|
|
|
2. Start minio gateway server for NAS with edge caching enabled.
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_ACCESS_KEY{{.AssignmentOperator}}accesskey
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_SECRET_KEY{{.AssignmentOperator}}secretkey
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_DRIVES{{.AssignmentOperator}}"/mnt/drive1;/mnt/drive2;/mnt/drive3;/mnt/drive4"
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_EXCLUDE{{.AssignmentOperator}}"bucket1/*;*.png"
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_EXPIRY{{.AssignmentOperator}}40
|
|
{{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_QUOTA{{.AssignmentOperator}}80
|
|
{{.Prompt}} {{.HelpName}} /shared/nasvol
|
|
`
|
|
|
|
minio.RegisterGatewayCommand(cli.Command{
|
|
Name: nasBackend,
|
|
Usage: "Network-attached storage (NAS)",
|
|
Action: nasGatewayMain,
|
|
CustomHelpTemplate: nasGatewayTemplate,
|
|
HideHelpCommand: true,
|
|
})
|
|
}
|
|
|
|
// Handler for 'minio gateway nas' command line.
|
|
func nasGatewayMain(ctx *cli.Context) {
|
|
// Validate gateway arguments.
|
|
if !ctx.Args().Present() || ctx.Args().First() == "help" {
|
|
cli.ShowCommandHelpAndExit(ctx, nasBackend, 1)
|
|
}
|
|
|
|
minio.StartGateway(ctx, &NAS{ctx.Args().First()})
|
|
}
|
|
|
|
// NAS implements Gateway.
|
|
type NAS struct {
|
|
path string
|
|
}
|
|
|
|
// Name implements Gateway interface.
|
|
func (g *NAS) Name() string {
|
|
return nasBackend
|
|
}
|
|
|
|
// NewGatewayLayer returns nas gatewaylayer.
|
|
func (g *NAS) NewGatewayLayer(creds auth.Credentials) (minio.ObjectLayer, error) {
|
|
var err error
|
|
newObject, err := minio.NewFSObjectLayer(g.path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &nasObjects{newObject}, nil
|
|
}
|
|
|
|
// Production - nas gateway is production ready.
|
|
func (g *NAS) Production() bool {
|
|
return true
|
|
}
|
|
|
|
// IsListenBucketSupported returns whether listen bucket notification is applicable for this gateway.
|
|
func (n *nasObjects) IsListenBucketSupported() bool {
|
|
return false
|
|
}
|
|
|
|
func (n *nasObjects) StorageInfo(ctx context.Context) minio.StorageInfo {
|
|
sinfo := n.ObjectLayer.StorageInfo(ctx)
|
|
sinfo.Backend.GatewayOnline = sinfo.Backend.Type == minio.BackendFS
|
|
sinfo.Backend.Type = minio.BackendGateway
|
|
return sinfo
|
|
}
|
|
|
|
// nasObjects implements gateway for MinIO and S3 compatible object storage servers.
|
|
type nasObjects struct {
|
|
minio.ObjectLayer
|
|
}
|