12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package main
- import (
- "fmt"
- "github.com/dotcloud/docker/engine"
- "github.com/dotcloud/docker/engine/spawn"
- "log"
- "os"
- "os/exec"
- "strings"
- )
- func main() {
- fmt.Printf("[%d] MAIN\n", os.Getpid())
- spawn.Init(&Worker{})
- fmt.Printf("[%d parent] spawning\n", os.Getpid())
- eng, err := spawn.Spawn()
- if err != nil {
- log.Fatal(err)
- }
- fmt.Printf("[parent] spawned\n")
- job := eng.Job(os.Args[1], os.Args[2:]...)
- job.Stdout.Add(os.Stdout)
- job.Stderr.Add(os.Stderr)
- job.Run()
- // FIXME: use the job's status code
- os.Exit(0)
- }
- type Worker struct {
- }
- func (w *Worker) Install(eng *engine.Engine) error {
- eng.Register("exec", w.Exec)
- eng.Register("cd", w.Cd)
- eng.Register("echo", w.Echo)
- return nil
- }
- func (w *Worker) Exec(job *engine.Job) engine.Status {
- fmt.Printf("--> %v\n", job.Args)
- cmd := exec.Command(job.Args[0], job.Args[1:]...)
- cmd.Stdout = job.Stdout
- cmd.Stderr = os.Stderr
- if err := cmd.Run(); err != nil {
- return job.Errorf("%v\n", err)
- }
- return engine.StatusOK
- }
- func (w *Worker) Cd(job *engine.Job) engine.Status {
- if err := os.Chdir(job.Args[0]); err != nil {
- return job.Errorf("%v\n", err)
- }
- return engine.StatusOK
- }
- func (w *Worker) Echo(job *engine.Job) engine.Status {
- fmt.Fprintf(job.Stdout, "%s\n", strings.Join(job.Args, " "))
- return engine.StatusOK
- }
|