// NewToolbox returns a tether.Extension that wraps the vsphere/toolbox service func NewToolbox() *Toolbox { in := toolbox.NewBackdoorChannelIn() out := toolbox.NewBackdoorChannelOut() service := toolbox.NewService(in, out) return &Toolbox{Service: service} }
// NewToolbox returns a tether.Extension that wraps the vsphere/toolbox service func NewToolbox() *Toolbox { in := toolbox.NewBackdoorChannelIn() out := toolbox.NewBackdoorChannelOut() service := toolbox.NewService(in, out) service.PrimaryIP = toolbox.DefaultIP return &Toolbox{Service: service} }
// This example can be run on a VM hosted by ESX, Fusion or Workstation func main() { flag.Parse() in := toolbox.NewBackdoorChannelIn() out := toolbox.NewBackdoorChannelOut() service := toolbox.NewService(in, out) // Trigger a command start, for example: // govc guest.start -vm vm-name kill SIGHUP service.VixCommand.ProcessStartCommand = func(r *toolbox.VixMsgStartProgramRequest) (int, error) { fmt.Fprintf(os.Stderr, "guest-command: %s %s\n", r.ProgramPath, r.Arguments) return -1, nil } if os.Getuid() == 0 { power := service.PowerCommand power.Halt.Handler = toolbox.Halt power.Reboot.Handler = toolbox.Reboot } err := service.Start() if err != nil { log.Fatal(err) } // handle the signals and gracefully shutdown the service sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) go func() { log.Printf("signal %s received", <-sig) service.Stop() }() service.Wait() }