17170: Use exec() to eliminate intermediate arvados-client process.
authorTom Clegg <tom@curii.com>
Thu, 14 Jan 2021 21:16:20 +0000 (16:16 -0500)
committerTom Clegg <tom@curii.com>
Thu, 14 Jan 2021 21:19:33 +0000 (16:19 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

cmd/arvados-client/container_gateway.go

index 40f40291f2c11b468b63960b8958bf3fd28f06c5..a63089d17dbcd3673d4cf40319ae8143e8add96f 100644 (file)
@@ -58,26 +58,19 @@ Options:
                return 2
        }
        sshargs = append([]string{
+               "ssh",
                "-o", "ProxyCommand " + selfbin + " connect-ssh -detach-keys=" + shellescape(*detachKeys) + " " + shellescape(target),
                "-o", "StrictHostKeyChecking no",
                target},
                sshargs...)
-       cmd := exec.Command("ssh", sshargs...)
-       cmd.Stdin = stdin
-       cmd.Stdout = stdout
-       cmd.Stderr = stderr
-       err = cmd.Run()
-       if err == nil {
-               return 0
-       } else if exiterr, ok := err.(*exec.ExitError); !ok {
-               fmt.Fprintln(stderr, err)
-               return 1
-       } else if status, ok := exiterr.Sys().(syscall.WaitStatus); !ok {
+       sshbin, err := exec.LookPath("ssh")
+       if err != nil {
                fmt.Fprintln(stderr, err)
                return 1
-       } else {
-               return status.ExitStatus()
        }
+       err = syscall.Exec(sshbin, sshargs, os.Environ())
+       fmt.Fprintf(stderr, "exec(%q) failed: %s\n", sshbin, err)
+       return 1
 }
 
 // connectSSHCommand connects stdin/stdout to a container's gateway