memnarch/hosts/hosts.go

46 lines
No EOL
977 B
Go

package hosts
import (
"errors"
"fmt"
"os"
"os/exec"
"path/filepath"
)
// a host is a name and an address
// memnarch expects an SSH private key to connect to Addr to exist at MEMNARCH_HOSTS/Name
type Host struct {
Name string
Addr string
}
type RemoteMachine interface {
Run(...string) error
}
func (self *Host) Run(cmdArgs ...string) error {
// make sure keyfile exists
keysDir := os.Getenv("MEMNARCH_HOSTS")
keyfile := filepath.Join(keysDir, self.Name)
info, err := os.Stat(keyfile)
if (err != nil) {
return err
}
if (info.IsDir()) {
return errors.New("supposed keyfile is actually a directory")
}
// ssh in
completeArgs := append([]string{"-i", keyfile, "memnarch@"+self.Addr}, cmdArgs...)
sshCmd := exec.Command("ssh", completeArgs...)
output, err := sshCmd.CombinedOutput()
// TODO: log the metadata
fmt.Println(output)
// if error, return it
if err != nil {
return err
}
// otherwise...
return nil
}