diff --git a/test/e2e/util.go b/test/e2e/util.go index cb714030f85..3fe82d3f3a7 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -858,9 +858,26 @@ func kubectlCmd(args ...string) *exec.Cmd { return cmd } -func runKubectl(args ...string) string { +// kubectlBuilder is used to build, custimize and execute a kubectl Command. +// Add more functions to customize the builder as needed. +type kubectlBuilder struct { + cmd *exec.Cmd +} + +func newKubectlCommand(args ...string) *kubectlBuilder { + b := new(kubectlBuilder) + b.cmd = kubectlCmd(args...) + return b +} + +func (b kubectlBuilder) withStdinData(data string) *kubectlBuilder { + b.cmd.Stdin = strings.NewReader(data) + return &b +} + +func (b kubectlBuilder) exec() string { var stdout, stderr bytes.Buffer - cmd := kubectlCmd(args...) + cmd := b.cmd cmd.Stdout, cmd.Stderr = &stdout, &stderr Logf("Running '%s %s'", cmd.Path, strings.Join(cmd.Args, " ")) @@ -873,6 +890,11 @@ func runKubectl(args ...string) string { return strings.TrimSpace(stdout.String()) } +// runKubectl is a convenience wrapper over kubectlBuilder +func runKubectl(args ...string) string { + return newKubectlCommand(args...).exec() +} + func startCmdAndStreamOutput(cmd *exec.Cmd) (stdout, stderr io.ReadCloser, err error) { stdout, err = cmd.StdoutPipe() if err != nil {