mirror of
				https://github.com/minio/minio.git
				synced 2025-10-31 08:11:19 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.7 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_MAXUSE: Maximum permitted usage of the cache in percentage (0-100).
 | |
| 
 | |
| EXAMPLES:
 | |
|   1. Start minio gateway server for NAS backend.
 | |
|      $ export MINIO_ACCESS_KEY=accesskey
 | |
|      $ export MINIO_SECRET_KEY=secretkey
 | |
|      $ {{.HelpName}} /shared/nasvol
 | |
| 
 | |
|   2. Start minio gateway server for NAS with edge caching enabled.
 | |
|      $ export MINIO_ACCESS_KEY=accesskey
 | |
|      $ export MINIO_SECRET_KEY=secretkey
 | |
|      $ export MINIO_CACHE_DRIVES="/mnt/drive1;/mnt/drive2;/mnt/drive3;/mnt/drive4"
 | |
|      $ export MINIO_CACHE_EXCLUDE="bucket1/*;*.png"
 | |
|      $ export MINIO_CACHE_EXPIRY=40
 | |
|      $ export MINIO_CACHE_MAXUSE=80
 | |
|      $ {{.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.Type = minio.Unknown
 | |
| 	return sinfo
 | |
| }
 | |
| 
 | |
| // nasObjects implements gateway for MinIO and S3 compatible object storage servers.
 | |
| type nasObjects struct {
 | |
| 	minio.ObjectLayer
 | |
| }
 |