Files
charts/clustertool/pkg/helper/runcmd.go
2024-10-16 14:06:31 +02:00

54 lines
1.2 KiB
Go

package helper
import (
"bytes"
"io"
"os"
"os/exec"
"strings"
)
type filteredWriter struct {
writer io.Writer
filters []string
}
func (fw *filteredWriter) Write(p []byte) (n int, err error) {
lines := strings.Split(string(p), "\n")
var filteredLines []string
for _, line := range lines {
shouldFilter := false
for _, filter := range fw.filters {
if strings.Contains(line, filter) {
shouldFilter = true
break
}
}
if !shouldFilter {
filteredLines = append(filteredLines, line)
}
}
return fw.writer.Write([]byte(strings.Join(filteredLines, "\n")))
}
func RunCommand(commandSlice []string, silent bool) (string, error) {
filters := []string{"certificate signed by unknown authority", "bootstrap is not available yet"}
cmd := exec.Command(commandSlice[0], commandSlice[1:]...)
var stdoutBuf, stderrBuf bytes.Buffer
if silent {
cmd.Stdout = &stdoutBuf
cmd.Stderr = &stderrBuf
} else {
cmd.Stdout = io.MultiWriter(&stdoutBuf, &filteredWriter{writer: os.Stdout, filters: filters})
cmd.Stderr = io.MultiWriter(&stderrBuf, &filteredWriter{writer: os.Stderr, filters: filters})
}
err := cmd.Run()
if err != nil {
return stdoutBuf.String() + stderrBuf.String(), err
}
return stdoutBuf.String() + stderrBuf.String(), nil
}