mirror of
				https://github.com/minio/minio.git
				synced 2025-10-31 00:01:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) 2015-2021 MinIO, Inc.
 | |
| //
 | |
| // This file is part of MinIO Object Storage stack
 | |
| //
 | |
| // This program is free software: you can redistribute it and/or modify
 | |
| // it under the terms of the GNU Affero General Public License as published by
 | |
| // the Free Software Foundation, either version 3 of the License, or
 | |
| // (at your option) any later version.
 | |
| //
 | |
| // This program is distributed in the hope that it will be useful
 | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| // GNU Affero General Public License for more details.
 | |
| //
 | |
| // You should have received a copy of the GNU Affero General Public License
 | |
| // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| package nas
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/minio/cli"
 | |
| 	minio "github.com/minio/minio/cmd"
 | |
| 	"github.com/minio/minio/pkg/auth"
 | |
| 	"github.com/minio/minio/pkg/madmin"
 | |
| )
 | |
| 
 | |
| 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
 | |
| 
 | |
| EXAMPLES:
 | |
|   1. Start minio gateway server for NAS backend
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_USER{{.AssignmentOperator}}accesskey
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_PASSWORD{{.AssignmentOperator}}secretkey
 | |
|      {{.Prompt}} {{.HelpName}} /shared/nasvol
 | |
| 
 | |
|   2. Start minio gateway server for NAS with edge caching enabled
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_USER{{.AssignmentOperator}}accesskey
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_PASSWORD{{.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_QUOTA{{.AssignmentOperator}}90
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_AFTER{{.AssignmentOperator}}3
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_WATERMARK_LOW{{.AssignmentOperator}}75
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_WATERMARK_HIGH{{.AssignmentOperator}}85
 | |
|      {{.Prompt}} {{.HelpName}} /shared/nasvol
 | |
| `
 | |
| 
 | |
| 	minio.RegisterGatewayCommand(cli.Command{
 | |
| 		Name:               minio.NASBackendGateway,
 | |
| 		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, minio.NASBackendGateway, 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 minio.NASBackendGateway
 | |
| }
 | |
| 
 | |
| // 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
 | |
| }
 | |
| 
 | |
| // IsListenSupported returns whether listen bucket notification is applicable for this gateway.
 | |
| func (n *nasObjects) IsListenSupported() bool {
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| func (n *nasObjects) StorageInfo(ctx context.Context) (si minio.StorageInfo, _ []error) {
 | |
| 	si, errs := n.ObjectLayer.StorageInfo(ctx)
 | |
| 	si.Backend.GatewayOnline = si.Backend.Type == madmin.FS
 | |
| 	si.Backend.Type = madmin.Gateway
 | |
| 	return si, errs
 | |
| }
 | |
| 
 | |
| // nasObjects implements gateway for MinIO and S3 compatible object storage servers.
 | |
| type nasObjects struct {
 | |
| 	minio.ObjectLayer
 | |
| }
 | |
| 
 | |
| func (n *nasObjects) IsTaggingSupported() bool {
 | |
| 	return true
 | |
| }
 |