mirror of
https://github.com/minio/minio.git
synced 2025-11-07 12:52:58 -05:00
mkdonut now creates a donut processing cli args
This commit is contained in:
1
cmd/mkdonut/.gitignore
vendored
Normal file
1
cmd/mkdonut/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
mkdonut
|
||||
@@ -17,22 +17,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
|
||||
"github.com/minio/minio/pkg/iodine"
|
||||
)
|
||||
|
||||
// IsUsable provides a comprehensive way of knowing if the provided mountPath is mounted and writable
|
||||
func IsUsable(mountPath string) (bool, error) {
|
||||
// isUsable provides a comprehensive way of knowing if the provided mountPath is mounted and writable
|
||||
func isUsable(mountPath string) (bool, error) {
|
||||
mntpoint, err := os.Stat(mountPath)
|
||||
if err != nil {
|
||||
return false, iodine.New(err, nil)
|
||||
}
|
||||
parent, err := os.Stat(filepath.Join(mountPath, ".."))
|
||||
parent, err := os.Stat("/")
|
||||
if err != nil {
|
||||
return false, iodine.New(err, nil)
|
||||
}
|
||||
@@ -40,7 +39,7 @@ func IsUsable(mountPath string) (bool, error) {
|
||||
parentSt := parent.Sys().(*syscall.Stat_t)
|
||||
|
||||
if mntpointSt.Dev == parentSt.Dev {
|
||||
return false, iodine.New(errors.New("not mounted"), nil)
|
||||
return false, iodine.New(fmt.Errorf("Not mounted %s", mountPath), nil)
|
||||
}
|
||||
testFile, err := ioutil.TempFile(mountPath, "writetest-")
|
||||
if err != nil {
|
||||
|
||||
@@ -20,12 +20,14 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/dustin/go-humanize"
|
||||
"github.com/minio/cli"
|
||||
"github.com/minio/minio/pkg/donut"
|
||||
"github.com/minio/minio/pkg/iodine"
|
||||
)
|
||||
|
||||
@@ -72,6 +74,50 @@ func getSystemData() map[string]string {
|
||||
}
|
||||
}
|
||||
|
||||
func runMkdonut(c *cli.Context) {
|
||||
if !c.Args().Present() || c.Args().First() == "help" {
|
||||
cli.ShowAppHelp(c)
|
||||
os.Exit(1)
|
||||
}
|
||||
donutName := c.Args().First()
|
||||
if c.Args().First() != "" {
|
||||
if !donut.IsValidDonut(donutName) {
|
||||
Fatalf("Invalid donutname %s\n", donutName)
|
||||
}
|
||||
}
|
||||
var disks []string
|
||||
for _, disk := range c.Args().Tail() {
|
||||
if _, err := isUsable(disk); err != nil {
|
||||
Fatalln(err)
|
||||
}
|
||||
disks = append(disks, disk)
|
||||
}
|
||||
for _, disk := range disks {
|
||||
if err := os.MkdirAll(filepath.Join(disk, donutName), 0700); err != nil {
|
||||
Fatalln(err)
|
||||
}
|
||||
}
|
||||
|
||||
hostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
Fatalln(err)
|
||||
}
|
||||
donutConfig := &donut.Config{}
|
||||
donutConfig.Version = "0.0.1"
|
||||
donutConfig.DonutName = donutName
|
||||
donutConfig.NodeDiskMap = make(map[string][]string)
|
||||
// keep it in exact order as it was specified, do not try to sort disks
|
||||
donutConfig.NodeDiskMap[hostname] = disks
|
||||
// default cache is unlimited
|
||||
donutConfig.MaxSize = 0
|
||||
|
||||
if err := donut.SaveConfig(donutConfig); err != nil {
|
||||
Fatalln(err)
|
||||
}
|
||||
|
||||
Infoln("Success!")
|
||||
}
|
||||
|
||||
func main() {
|
||||
// set up iodine
|
||||
iodine.SetGlobalState("mkdonut.version", Version)
|
||||
@@ -82,7 +128,8 @@ func main() {
|
||||
|
||||
// set up app
|
||||
app := cli.NewApp()
|
||||
app.Name = "minio"
|
||||
app.Action = runMkdonut
|
||||
app.Name = "mkdonut"
|
||||
app.Version = Version
|
||||
app.Compiled = getVersion()
|
||||
app.Author = "Minio.io"
|
||||
|
||||
Reference in New Issue
Block a user