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  }