func RegisterDriver(d drivers.Driver) { if os.Getenv(localbinary.PluginEnvKey) != localbinary.PluginEnvVal { fmt.Fprintln(os.Stderr, `This is a Docker Machine plugin binary. Plugin binaries are not intended to be invoked directly. Please use this plugin through the main 'docker-machine' binary.`) os.Exit(1) } libmachine.SetDebug(true) rpcd := new(rpcdriver.RpcServerDriver) rpcd.ActualDriver = d rpcd.CloseCh = make(chan bool) rpc.Register(rpcd) rpc.HandleHTTP() listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { fmt.Fprintf(os.Stderr, "Error loading RPC server: %s\n", err) os.Exit(1) } defer listener.Close() fmt.Println(listener.Addr()) go http.Serve(listener, nil) <-rpcd.CloseCh }
func main() { libmachine.SetDebug(true) log.SetOutWriter(os.Stdout) log.SetErrWriter(os.Stderr) // returns the familiar store at $HOME/.docker/machine store := libmachine.GetDefaultStore() // over-ride this for now (don't want to muck with my default store) store.Path = "/tmp/automatic" hostName := "myfunhost" // Set some options on the provider... driver := virtualbox.NewDriver(hostName, "/tmp/automatic") driver.CPU = 2 driver.Memory = 2048 h, err := store.NewHost(driver) if err != nil { log.Fatal(err) } h.HostOptions.EngineOptions.StorageDriver = "overlay" if err := libmachine.Create(store, h); err != nil { log.Fatal(err) } out, err := h.RunSSHCommand("df -h") if err != nil { log.Fatal(err) } fmt.Printf("Results of your disk space query:\n%s\n", out) fmt.Println("Powering down machine now...") if err := h.Stop(); err != nil { log.Fatal(err) } }
func RegisterDriver(d drivers.Driver) { if os.Getenv(localbinary.PluginEnvKey) != localbinary.PluginEnvVal { fmt.Fprintf(os.Stderr, `This is a Docker Machine plugin binary. Plugin binaries are not intended to be invoked directly. Please use this plugin through the main 'docker-machine' binary. (API version: %d) `, version.APIVersion) os.Exit(1) } libmachine.SetDebug(true) rpcd := rpcdriver.NewRPCServerDriver(d) rpc.RegisterName(rpcdriver.RPCServiceNameV0, rpcd) rpc.RegisterName(rpcdriver.RPCServiceNameV1, rpcd) rpc.HandleHTTP() listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { fmt.Fprintf(os.Stderr, "Error loading RPC server: %s\n", err) os.Exit(1) } defer listener.Close() fmt.Println(listener.Addr()) go http.Serve(listener, nil) for { select { case <-rpcd.CloseCh: os.Exit(0) case <-rpcd.HeartbeatCh: continue case <-time.After(heartbeatTimeout): os.Exit(1) } } }