agent: Fix script quoting on windows (#1875)
This patch fixes the quoting for executing scripts on windows and splits the platform dependent code. Fixes #1875
This commit is contained in:
parent
298fd43530
commit
ea6d610dee
|
@ -17,6 +17,7 @@ BUG FIXES:
|
||||||
* agent: Clean up temporary files during disk write errors when persisting services and checks. [GH-3207]
|
* agent: Clean up temporary files during disk write errors when persisting services and checks. [GH-3207]
|
||||||
* agent: Fixed an issue where dns and client bind address templates were not being parsed via the go-sockaddr library. [GH-3322]
|
* agent: Fixed an issue where dns and client bind address templates were not being parsed via the go-sockaddr library. [GH-3322]
|
||||||
* agent: Fixed status code on all KV store operations that fail due to an ACL issue. They now return a 403 status code, rather than a 404. [GH-2637]
|
* agent: Fixed status code on all KV store operations that fail due to an ACL issue. They now return a 403 status code, rather than a 404. [GH-2637]
|
||||||
|
* agent: Fixed quoting issues in script health check on windows. [GH-1875]
|
||||||
|
|
||||||
## 0.9.0 (July 20, 2017)
|
## 0.9.0 (July 20, 2017)
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"os/user"
|
"os/user"
|
||||||
"runtime"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -45,23 +43,6 @@ func aeScale(interval time.Duration, n int) time.Duration {
|
||||||
return time.Duration(multiplier) * interval
|
return time.Duration(multiplier) * interval
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExecScript returns a command to execute a script
|
|
||||||
func ExecScript(script string) (*exec.Cmd, error) {
|
|
||||||
var shell, flag string
|
|
||||||
if runtime.GOOS == "windows" {
|
|
||||||
shell = "cmd"
|
|
||||||
flag = "/C"
|
|
||||||
} else {
|
|
||||||
shell = "/bin/sh"
|
|
||||||
flag = "-c"
|
|
||||||
}
|
|
||||||
if other := os.Getenv("SHELL"); other != "" {
|
|
||||||
shell = other
|
|
||||||
}
|
|
||||||
cmd := exec.Command(shell, flag, script)
|
|
||||||
return cmd, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// decodeMsgPack is used to decode a MsgPack encoded object
|
// decodeMsgPack is used to decode a MsgPack encoded object
|
||||||
func decodeMsgPack(buf []byte, out interface{}) error {
|
func decodeMsgPack(buf []byte, out interface{}) error {
|
||||||
return codec.NewDecoder(bytes.NewReader(buf), msgpackHandle).Decode(out)
|
return codec.NewDecoder(bytes.NewReader(buf), msgpackHandle).Decode(out)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package agent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// ExecScript returns a command to execute a script
|
||||||
|
func ExecScript(script string) (*exec.Cmd, error) {
|
||||||
|
shell := "/bin/sh"
|
||||||
|
if other := os.Getenv("SHELL"); other != "" {
|
||||||
|
shell = other
|
||||||
|
}
|
||||||
|
return exec.Command(shell, "-c", script), nil
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
// +build windows
|
||||||
|
|
||||||
|
package agent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ExecScript returns a command to execute a script
|
||||||
|
func ExecScript(script string) (*exec.Cmd, error) {
|
||||||
|
shell := "cmd"
|
||||||
|
if other := os.Getenv("SHELL"); other != "" {
|
||||||
|
shell = other
|
||||||
|
}
|
||||||
|
script = "\"" + script + "\"";
|
||||||
|
cmd := exec.Command(shell, "/C", script)
|
||||||
|
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||||
|
CmdLine: strings.Join(cmd.Args, " "),
|
||||||
|
}
|
||||||
|
return cmd, nil
|
||||||
|
}
|
Loading…
Reference in New Issue