// circuit mkproc /X1234/hola/charlie << EOF // { … } // EOF // TODO: Proc element disappears if command misspelled and error condition not obvious. func mkproc(x *cli.Context) { defer func() { if r := recover(); r != nil { fatalf("error, likely due to missing server or misspelled anchor: %v", r) } }() c := dial(x) args := x.Args() if len(args) != 1 { fatalf("mkproc needs an anchor argument") } w, _ := parseGlob(args[0]) buf, _ := ioutil.ReadAll(os.Stdin) var cmd client.Cmd if err := json.Unmarshal(buf, &cmd); err != nil { fatalf("command json not parsing: %v", err) } if x.Bool("scrub") { cmd.Scrub = true } p, err := c.Walk(w).MakeProc(cmd) if err != nil { fatalf("mkproc error: %s", err) } ps := p.Peek() if ps.Exit != nil { fatalf("%v", ps.Exit) } }
func mkdkr(x *cli.Context) { defer func() { if r := recover(); r != nil { fatalf("error, likely due to missing server or misspelled anchor: %v", r) } }() c := dial(x) args := x.Args() if len(args) != 1 { fatalf("mkdkr needs an anchor argument") } w, _ := parseGlob(args[0]) buf, _ := ioutil.ReadAll(os.Stdin) var run docker.Run if err := json.Unmarshal(buf, &run); err != nil { fatalf("command json not parsing: %v", err) } if x.Bool("scrub") { run.Scrub = true } _, err := c.Walk(w).MakeDocker(run) if err != nil { fatalf("mkdkr error: %s", err) } }
func server(c *cli.Context) { println("CIRCUIT 2014 gocircuit.org") var err error if c.Bool("docker") { cmd, err := docker.Init() if err != nil { log.Fatalf("cannot use docker: %v", err) } log.Printf("Enabling docker elements, using %s", cmd) } // parse arguments var tcpaddr = parseAddr(c) // server bind address var join n.Addr // join address of another circuit server if c.IsSet("join") { if join, err = n.ParseAddr(c.String("join")); err != nil { log.Fatalf("join address does not parse (%s)", err) } } var multicast = parseDiscover(c) // server instance working directory var varDir string if !c.IsSet("var") { varDir = path.Join(os.TempDir(), fmt.Sprintf("%s-%%W-P%04d", n.Scheme, os.Getpid())) } else { varDir = c.String("var") } // start circuit runtime addr := load(tcpaddr, varDir, readkey(c)) // tissue + locus kin, xkin, rip := tissue.NewKin() xlocus := locus.NewLocus(kin, rip) // joining switch { case join != nil: kin.ReJoin(join) case multicast != nil: log.Printf("Using UDP multicast discovery on address %s", multicast.String()) go assemble.NewAssembler(addr, multicast).AssembleServer( func(joinAddr n.Addr) { kin.ReJoin(joinAddr) }, ) default: log.Println("Singleton server.") } circuit.Listen(tissue.ServiceName, xkin) circuit.Listen(LocusName, xlocus) <-(chan int)(nil) }
// circuit ls /Q123/apps/charlie // circuit ls /... func ls(x *cli.Context) { defer func() { if r := recover(); r != nil { fatalf("error, likely due to missing server or misspelled anchor: %v", r) } }() c := dial(x) args := x.Args() if len(args) != 1 { println("ls needs a glob argument") os.Exit(1) } w, ellipses := parseGlob(args[0]) list(0, "/", c.Walk(w), ellipses, x.Bool("long"), x.Bool("depth")) }