Refactor environment variable expansion in PrepareCommands and update tests

Signed-off-by: yxxhero <aiopsclub@163.com>
(cherry picked from commit 2d49f0cb4a)
pull/31646/head
yxxhero 10 months ago committed by Matt Farina
parent a156195c35
commit 77f97a169e
No known key found for this signature in database
GPG Key ID: 92C44A3D421FF7F9

@ -82,15 +82,16 @@ func PrepareCommands(cmds []PlatformCommand, expandArgs bool, extraArgs []string
if len(cmdParts) == 0 || cmdParts[0] == "" { if len(cmdParts) == 0 || cmdParts[0] == "" {
return "", nil, fmt.Errorf("no plugin command is applicable") return "", nil, fmt.Errorf("no plugin command is applicable")
} }
envMappingFunc := func(key string) string {
main := os.Expand(cmdParts[0], func(key string) string {
return env[key] return env[key]
}) }
main := os.Expand(cmdParts[0], envMappingFunc)
baseArgs := []string{} baseArgs := []string{}
if len(cmdParts) > 1 { if len(cmdParts) > 1 {
for _, cmdPart := range cmdParts[1:] { for _, cmdPart := range cmdParts[1:] {
if expandArgs { if expandArgs {
baseArgs = append(baseArgs, os.ExpandEnv(cmdPart)) baseArgs = append(baseArgs, os.Expand(cmdPart, envMappingFunc))
} else { } else {
baseArgs = append(baseArgs, cmdPart) baseArgs = append(baseArgs, cmdPart)
} }
@ -99,7 +100,7 @@ func PrepareCommands(cmds []PlatformCommand, expandArgs bool, extraArgs []string
for _, arg := range args { for _, arg := range args {
if expandArgs { if expandArgs {
baseArgs = append(baseArgs, os.ExpandEnv(arg)) baseArgs = append(baseArgs, os.Expand(arg, envMappingFunc))
} else { } else {
baseArgs = append(baseArgs, arg) baseArgs = append(baseArgs, arg)
} }

@ -16,6 +16,7 @@ limitations under the License.
package plugin package plugin
import ( import (
"os"
"reflect" "reflect"
"runtime" "runtime"
"testing" "testing"
@ -224,16 +225,18 @@ func TestPrepareCommandsNoCommands(t *testing.T) {
} }
func TestPrepareCommandsExpand(t *testing.T) { func TestPrepareCommandsExpand(t *testing.T) {
t.Setenv("TEST", "test") t.Setenv("TESTX", "testx")
cmdMain := "sh" cmdMain := "sh"
cmdArgs := []string{"-c", "echo \"${TEST}\""} cmdArgs := []string{"-c", "echo \"${TESTX}${TESTY}\""}
cmds := []PlatformCommand{ cmds := []PlatformCommand{
{OperatingSystem: "", Architecture: "", Command: cmdMain, Args: cmdArgs}, {OperatingSystem: "", Architecture: "", Command: cmdMain, Args: cmdArgs},
} }
expectedArgs := []string{"-c", "echo \"test\""} expectedArgs := []string{"-c", "echo \"testxtesty\""}
env := parseEnv(os.Environ())
env["TESTY"] = "testy"
env := map[string]string{}
cmd, args, err := PrepareCommands(cmds, true, []string{}, env) cmd, args, err := PrepareCommands(cmds, true, []string{}, env)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -253,8 +256,8 @@ func TestPrepareCommandsNoExpand(t *testing.T) {
cmds := []PlatformCommand{ cmds := []PlatformCommand{
{OperatingSystem: "", Architecture: "", Command: cmdMain, Args: cmdArgs}, {OperatingSystem: "", Architecture: "", Command: cmdMain, Args: cmdArgs},
} }
env := parseEnv(os.Environ())
env := map[string]string{}
cmd, args, err := PrepareCommands(cmds, false, []string{}, env) cmd, args, err := PrepareCommands(cmds, false, []string{}, env)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)

Loading…
Cancel
Save