package internal import ( "bytes" "fmt" log "github.com/sirupsen/logrus" "os/exec" "strings" ) // runOciCli execute binary formatted like this `{ociCli} {ociVerb} {ociOpt} {registry:port/image} {args}` func runOciCli(ociCli string, ociVerb string, ociCliOpt string, registry Registry, image Image, args ...string) (string, error) { if reg := registry.String(); reg != "" { args = append([]string{fmt.Sprintf("%s/%s", registry.String(), image.String())}, args...) } else { args = append([]string{image.String()}, args...) } if ociCliOpt != "" { args = append(strings.Split(ociCliOpt, " "), args...) } return runCli(ociCli, ociVerb, args...) } // runCli execute binary formatted like this `{bin} {verb} {args}` func runCli(binary string, verb string, args ...string) (string, error) { if verb != "" { args = append(strings.Split(verb, " "), args...) } log.Infof(" %s %s\n", binary, strings.Join(args, " ")) cmd := exec.Command(binary, args...) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err := cmd.Run() if err != nil { log.Warnf("Executing binary with argument : `%s %s`\n", binary, strings.Join(args, " ")) return stderr.String(), err } return out.String(), nil }