github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/installerShell.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 terminalclient "github.com/Cloud-Foundations/Dominator/lib/net/terminal/client" 10 "github.com/Cloud-Foundations/Dominator/lib/srpc" 11 ) 12 13 func installerShellSubcommand(args []string, logger log.DebugLogger) error { 14 err := installerShell(args[0], logger) 15 if err != nil { 16 return fmt.Errorf("Error talking to installer shell: %s", err) 17 } 18 return nil 19 } 20 21 func installerShell(hostname string, logger log.DebugLogger) error { 22 var client *srpc.Client 23 fmt.Fprintf(os.Stderr, "trying to connect") 24 for ; ; time.Sleep(time.Second * 5) { 25 var err error 26 client, err = srpc.DialHTTP("tcp", fmt.Sprintf("%s:%d", 27 hostname, *installerPortNum), time.Second*15) 28 if err == nil { 29 break 30 } 31 fmt.Fprintf(os.Stderr, ".") 32 } 33 defer client.Close() 34 conn, err := client.Call("Installer.Shell") 35 if err != nil { 36 return err 37 } 38 defer conn.Close() 39 fmt.Fprintf(os.Stderr, " connected...\n") 40 if err := terminalclient.StartTerminal(conn); err != nil { 41 return err 42 } 43 fmt.Fprint(os.Stderr, "\r") 44 return nil 45 }