2020-02-25 07:30:01 +00:00
package shell
import (
"context"
"flag"
"fmt"
"io"
"os"
"time"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
)
func init ( ) {
2020-12-23 01:40:55 +00:00
Commands = append ( Commands , & commandS3BucketCreate { } )
2020-02-25 07:30:01 +00:00
}
2020-12-23 01:40:55 +00:00
type commandS3BucketCreate struct {
2020-02-25 07:30:01 +00:00
}
2020-12-23 01:40:55 +00:00
func ( c * commandS3BucketCreate ) Name ( ) string {
return "s3.bucket.create"
2020-02-25 07:30:01 +00:00
}
2020-12-23 01:40:55 +00:00
func ( c * commandS3BucketCreate ) Help ( ) string {
2020-02-25 07:30:01 +00:00
return ` create a bucket with a given name
Example :
2020-12-23 01:40:55 +00:00
s3 . bucket . create - name < bucket_name > - replication 001
2020-02-25 07:30:01 +00:00
`
}
2020-12-23 01:40:55 +00:00
func ( c * commandS3BucketCreate ) Do ( args [ ] string , commandEnv * CommandEnv , writer io . Writer ) ( err error ) {
2020-02-25 07:30:01 +00:00
bucketCommand := flag . NewFlagSet ( c . Name ( ) , flag . ContinueOnError )
bucketName := bucketCommand . String ( "name" , "" , "bucket name" )
2020-12-23 01:34:44 +00: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 07:30:01 +00:00
if err = bucketCommand . Parse ( args ) ; err != nil {
return nil
}
if * bucketName == "" {
return fmt . Errorf ( "empty bucket name" )
}
2020-03-24 04:26:15 +00:00
err = commandEnv . WithFilerClient ( func ( client filer_pb . SeaweedFilerClient ) error {
2020-02-25 07:30:01 +00:00
2020-02-26 05:50:12 +00:00
resp , err := client . GetFilerConfiguration ( context . Background ( ) , & filer_pb . GetFilerConfigurationRequest { } )
2020-02-25 07:30:01 +00:00
if err != nil {
2020-03-24 04:26:15 +00:00
return fmt . Errorf ( "get filer configuration: %v" , err )
2020-02-25 07:30:01 +00: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 05:50:12 +00:00
if err := filer_pb . CreateEntry ( client , & filer_pb . CreateEntryRequest {
2020-02-25 07:30:01 +00:00
Directory : filerBucketsPath ,
Entry : entry ,
} ) ; err != nil {
return err
}
println ( "created bucket" , * bucketName )
return nil
} )
return err
}