2020-02-25 15:30:01 +08:00
package shell
import (
"context"
"flag"
"fmt"
"io"
"os"
"time"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
)
func init ( ) {
Commands = append ( Commands , & commandBucketCreate { } )
}
type commandBucketCreate struct {
}
func ( c * commandBucketCreate ) Name ( ) string {
return "bucket.create"
}
func ( c * commandBucketCreate ) Help ( ) string {
return ` create a bucket with a given name
Example :
bucket . create - name < bucket_name > - replication 001
`
}
func ( c * commandBucketCreate ) Do ( args [ ] string , commandEnv * CommandEnv , writer io . Writer ) ( err error ) {
bucketCommand := flag . NewFlagSet ( c . Name ( ) , flag . ContinueOnError )
bucketName := bucketCommand . String ( "name" , "" , "bucket name" )
2020-12-23 09:34:44 +08:00
replication := bucketCommand . String ( "replication" , "" , "replication setting for the bucket, if not set it will honor the setting defined by the filer or master" )
2020-02-25 15:30:01 +08:00
if err = bucketCommand . Parse ( args ) ; err != nil {
return nil
}
if * bucketName == "" {
return fmt . Errorf ( "empty bucket name" )
}
2020-03-24 12:26:15 +08:00
err = commandEnv . WithFilerClient ( func ( client filer_pb . SeaweedFilerClient ) error {
2020-02-25 15:30:01 +08:00
2020-02-26 13:50:12 +08:00
resp , err := client . GetFilerConfiguration ( context . Background ( ) , & filer_pb . GetFilerConfigurationRequest { } )
2020-02-25 15:30:01 +08:00
if err != nil {
2020-03-24 12:26:15 +08:00
return fmt . Errorf ( "get filer configuration: %v" , err )
2020-02-25 15:30:01 +08:00
}
filerBucketsPath := resp . DirBuckets
println ( "create bucket under" , filerBucketsPath )
entry := & filer_pb . Entry {
Name : * bucketName ,
IsDirectory : true ,
Attributes : & filer_pb . FuseAttributes {
Mtime : time . Now ( ) . Unix ( ) ,
Crtime : time . Now ( ) . Unix ( ) ,
FileMode : uint32 ( 0777 | os . ModeDir ) ,
Collection : * bucketName ,
Replication : * replication ,
} ,
}
2020-02-26 13:50:12 +08:00
if err := filer_pb . CreateEntry ( client , & filer_pb . CreateEntryRequest {
2020-02-25 15:30:01 +08:00
Directory : filerBucketsPath ,
Entry : entry ,
} ) ; err != nil {
return err
}
println ( "created bucket" , * bucketName )
return nil
} )
return err
}