diff --git a/src/cmd/moby/build.go b/src/cmd/moby/build.go index d8778e6d1..7bf2449d0 100644 --- a/src/cmd/moby/build.go +++ b/src/cmd/moby/build.go @@ -5,7 +5,9 @@ import ( "bytes" "errors" "io" + "io/ioutil" "log" + "path/filepath" "github.com/docker/moby/src/initrd" ) @@ -66,7 +68,30 @@ func containersInitrd(containers []*bytes.Buffer) (*bytes.Buffer, error) { return w, nil } -func build(m *Moby, name string) { +func build(name string, args []string) { + conf := "moby.yaml" + if len(args) > 0 { + conf = args[0] + } + + if name == "" { + name = filepath.Base(conf) + ext := filepath.Ext(conf) + if ext != "" { + name = name[:len(name)-len(ext)] + } + } + + config, err := ioutil.ReadFile(conf) + if err != nil { + log.Fatalf("Cannot open config file: %v", err) + } + + m, err := NewConfig(config) + if err != nil { + log.Fatalf("Invalid config: %v", err) + } + containers := []*bytes.Buffer{} // get kernel bzImage and initrd tarball from container diff --git a/src/cmd/moby/main.go b/src/cmd/moby/main.go index bcada2d9a..debb9fc64 100644 --- a/src/cmd/moby/main.go +++ b/src/cmd/moby/main.go @@ -6,9 +6,8 @@ import ( "fmt" "io" "io/ioutil" - "log" + "os" "os/exec" - "path/filepath" ) func dockerRun(args ...string) ([]byte, error) { @@ -96,37 +95,40 @@ func dockerRunInput(input io.Reader, args ...string) ([]byte, error) { return stdout, nil } -var ( - conf string - name string -) - func main() { - flag.StringVar(&name, "name", "", "Name to use for output files") - flag.Parse() - - conf = "moby.yaml" - if len(flag.Args()) > 0 { - conf = flag.Args()[0] + flag.Usage = func() { + fmt.Printf("USAGE: %s COMMAND\n\n", os.Args[0]) + fmt.Printf("Commands:\n") + fmt.Printf(" build Build a Moby image from a YAML file\n") + fmt.Printf(" help Print this message\n") + fmt.Printf("\n") + fmt.Printf("Run '%s COMMAND --help' for more information on the command\n", os.Args[0]) } - if name == "" { - name = filepath.Base(conf) - ext := filepath.Ext(conf) - if ext != "" { - name = name[:len(name)-len(ext)] - } + buildCmd := flag.NewFlagSet("build", flag.ExitOnError) + buildCmd.Usage = func() { + fmt.Printf("USAGE: %s build [options] [file.yaml]\n\n", os.Args[0]) + fmt.Printf("'file.yaml' defaults to 'moby.yaml' if not specified.\n\n") + fmt.Printf("Options:\n") + buildCmd.PrintDefaults() + } + buildName := buildCmd.String("name", "", "Name to use for output files") + + if len(os.Args) < 2 { + fmt.Printf("Please specify a command.\n\n") + flag.Usage() + os.Exit(1) } - config, err := ioutil.ReadFile(conf) - if err != nil { - log.Fatalf("Cannot open config file: %v", err) + switch os.Args[1] { + case "build": + buildCmd.Parse(os.Args[2:]) + build(*buildName, buildCmd.Args()) + case "help": + flag.Usage() + default: + fmt.Printf("%q is not valid command.\n\n", os.Args[1]) + flag.Usage() + os.Exit(1) } - - m, err := NewConfig(config) - if err != nil { - log.Fatalf("Invalid config: %v", err) - } - - build(m, name) }