projects/aws/bottlerocket-bootstrap/pkg/etcdadm/phases.go (29 lines of code) (raw):
package etcdadm
import (
"fmt"
"os/exec"
"github.com/pkg/errors"
)
func runPhases(command string, phases, flags []string, args ...string) error {
for _, phase := range phases {
fmt.Printf("Running etcdadm %s %s phase\n", command, phase)
cmd := exec.Command(etcdadmBinary, buildPhaseCmd(command, phase, args...).addFlags(flags...)...)
out, err := cmd.CombinedOutput()
fmt.Printf("Phase command output:\n--------\n%s\n--------\n", string(out))
if err != nil {
return errors.Wrapf(err, "error running etcdadm phase '%s %s', out:\n %s", command, phase, string(out))
}
}
return nil
}
type etcdadmCommand []string
func buildPhaseCmd(command, phase string, args ...string) etcdadmCommand {
cmd := make(etcdadmCommand, 0, len(args)+3)
cmd = append(cmd, command, "phase", phase)
cmd = append(cmd, args...)
return cmd
}
func (e etcdadmCommand) addFlags(flags ...string) etcdadmCommand {
e = append(e, flags...)
return e
}