Skip to content

Commit d7a17a3

Browse files
committed
Separate stdout from stderr in Kubernetes helper
- Add separate method to only fetch stdout for cases in which structured output needs to parsed.
1 parent 4623423 commit d7a17a3

2 files changed

Lines changed: 33 additions & 10 deletions

File tree

benchmarks/record/record.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,14 @@ func getMetrics(res map[string]float64, url string, controllers ...string) {
241241
Eventually(func() error {
242242
pod := addRandomSuffix("curl")
243243
GinkgoWriter.Print("Fetching metrics from " + url + "\n")
244-
out, err := k.Run("run", "--rm", "--attach", "--quiet", "--restart=Never", pod, "--image=curlimages/curl", "--namespace", "cattle-fleet-system", "--command", "--", "curl", "-s", url)
244+
out, stderr, err := k.RunStdout("run", "--rm", "--attach", "--quiet", "--restart=Never", pod, "--image=curlimages/curl", "--namespace", "cattle-fleet-system", "--command", "--", "curl", "-s", url)
245245
if err != nil {
246-
GinkgoWriter.Printf("kubectl run failed: %v\nOutput:\n%s\n", err, out)
246+
GinkgoWriter.Printf("kubectl run failed: %v\nstdout:\n%s\nstderr:\n%s\n", err, out, stderr)
247247
return err
248248
}
249+
if stderr != "" {
250+
GinkgoWriter.Printf("kubectl run stderr:\n%s\n", stderr)
251+
}
249252

250253
mfs, err = parser.TextToMetricFamilies(bytes.NewBufferString(out))
251254
if err != nil {

e2e/testenv/kubectl/kubectl.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,30 +85,50 @@ func (c Command) Run(args ...string) (string, error) {
8585
}
8686

8787
GinkgoWriter.Printf("kubectl %s\n", strings.Join(args, " "))
88-
result, err := c.exec("kubectl", args...)
88+
stdout, stderr, err := c.exec("kubectl", args...)
89+
result := stdout + stderr
8990
if err != nil {
9091
GinkgoWriter.Printf("result:%s err:%s\n", result, err)
9192
}
9293

9394
return result, err
9495
}
9596

96-
func (c Command) exec(command string, args ...string) (string, error) {
97+
// RunStdout behaves like Run but returns stdout and stderr separately.
98+
func (c Command) RunStdout(args ...string) (stdout, stderr string, err error) {
99+
if c.cnt != "" {
100+
args = append([]string{"--context", c.cnt}, args...)
101+
}
102+
103+
if c.ns != "" {
104+
args = append([]string{"-n", c.ns}, args...)
105+
}
106+
107+
GinkgoWriter.Printf("kubectl %s\n", strings.Join(args, " "))
108+
stdout, stderr, err = c.exec("kubectl", args...)
109+
if err != nil {
110+
GinkgoWriter.Printf("stdout:%s stderr:%s err:%s\n", stdout, stderr, err)
111+
}
112+
113+
return stdout, stderr, err
114+
}
115+
116+
func (c Command) exec(command string, args ...string) (string, string, error) {
97117
cmd := exec.CommandContext(context.Background(), command, args...)
98118

99-
var b bytes.Buffer
119+
var outBuf, errBuf bytes.Buffer
100120
if c.stdout {
101-
cmd.Stdout = io.MultiWriter(os.Stdout, &b)
102-
cmd.Stderr = io.MultiWriter(os.Stderr, &b)
121+
cmd.Stdout = io.MultiWriter(os.Stdout, &outBuf)
122+
cmd.Stderr = io.MultiWriter(os.Stderr, &errBuf)
103123
} else {
104-
cmd.Stdout = &b
105-
cmd.Stderr = &b
124+
cmd.Stdout = &outBuf
125+
cmd.Stderr = &errBuf
106126
}
107127

108128
if c.dir != "" {
109129
cmd.Dir = c.dir
110130
}
111131

112132
err := cmd.Run()
113-
return b.String(), err
133+
return outBuf.String(), errBuf.String(), err
114134
}

0 commit comments

Comments
 (0)