Fix dryrun/show for ssh command

This commit is contained in:
Gregory Kurtzer
2022-06-07 20:34:26 -07:00
parent b4ef712166
commit 3eabf47fc6
2 changed files with 23 additions and 18 deletions

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"os"
"os/exec"
"strings"
"time"
"github.com/hpcng/warewulf/internal/pkg/batch"
@@ -58,24 +59,28 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
batchpool.Submit(func() {
wwlog.Printf(wwlog.DEBUG, "Sending command to node '%s': %s\n", nodename, command)
var stdout, stderr bytes.Buffer
cmd := exec.Command(SshPath, command...)
cmd.Stdin = os.Stdin
cmd.Stdout = &stdout
cmd.Stderr = &stderr
_ = cmd.Run()
if DryRun {
fmt.Printf("%s: %s %s\n", nodename, SshPath, strings.Join(command, " "))
} else {
scan_stdout := bufio.NewScanner(&stdout)
for scan_stdout.Scan() {
fmt.Printf("%s: %s\n", nodename, scan_stdout.Text())
wwlog.Printf(wwlog.DEBUG, "Sending command to node '%s': %s\n", nodename, command)
var stdout, stderr bytes.Buffer
cmd := exec.Command(SshPath, command...)
cmd.Stdin = os.Stdin
cmd.Stdout = &stdout
cmd.Stderr = &stderr
_ = cmd.Run()
scan_stdout := bufio.NewScanner(&stdout)
for scan_stdout.Scan() {
fmt.Printf("%s: %s\n", nodename, scan_stdout.Text())
}
scan_stderr := bufio.NewScanner(&stderr)
for scan_stderr.Scan() {
fmt.Fprintf(os.Stderr, "%s: %s\n", nodename, scan_stderr.Text())
}
}
scan_stderr := bufio.NewScanner(&stderr)
for scan_stderr.Scan() {
fmt.Fprintf(os.Stderr, "%s: %s\n", nodename, scan_stderr.Text())
}
//util.ExecInteractive(SshPath, command...)
time.Sleep(time.Duration(Sleep) * time.Second)

View File

@@ -12,14 +12,14 @@ var (
Long: "Easily ssh into nodes in parallel to run non-interactive commands\n",
RunE: CobraRunE,
}
Show bool
DryRun bool
FanOut int
Sleep int
SshPath string
)
func init() {
baseCmd.PersistentFlags().BoolVarP(&Show, "dryrun", "n", false, "Show commands to run")
baseCmd.PersistentFlags().BoolVarP(&DryRun, "dryrun", "n", false, "Show commands to run")
baseCmd.PersistentFlags().IntVarP(&FanOut, "fanout", "f", 32, "How many connections to run in parallel")
baseCmd.PersistentFlags().IntVarP(&Sleep, "sleep", "s", 0, "Seconds to sleep inbetween processes")
baseCmd.PersistentFlags().StringVar(&SshPath, "rsh", "/usr/bin/ssh", "Path to use for RSH/SSH command")