From 2435163fc94de40d5cf5b6c7bf1e73e15089eaa0 Mon Sep 17 00:00:00 2001 From: Lars Karlitski Date: Sat, 4 Apr 2020 12:22:45 +0200 Subject: [PATCH] worker: move running osbuild into separate function Setting up a command to run is quite involved. Separate that from the logic of running it. --- cmd/osbuild-worker/main.go | 45 +++------------------------- cmd/osbuild-worker/osbuild.go | 55 +++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 41 deletions(-) create mode 100644 cmd/osbuild-worker/osbuild.go diff --git a/cmd/osbuild-worker/main.go b/cmd/osbuild-worker/main.go index 7f5097bd0..dd8ddf93f 100644 --- a/cmd/osbuild-worker/main.go +++ b/cmd/osbuild-worker/main.go @@ -3,7 +3,6 @@ package main import ( "crypto/tls" "crypto/x509" - "encoding/json" "errors" "flag" "fmt" @@ -11,7 +10,6 @@ import ( "io/ioutil" "log" "os" - "os/exec" "path" "github.com/osbuild/osbuild-composer/internal/common" @@ -71,44 +69,9 @@ func RunJob(job *jobqueue.Job, uploadFunc func(*jobqueue.Job, io.Reader) error) // FIXME: how to handle errors in defer? defer os.RemoveAll(tmpStore) - cmd := exec.Command( - "osbuild", - "--store", tmpStore, - "--json", "-", - ) - cmd.Stderr = os.Stderr - - stdin, err := cmd.StdinPipe() + result, err := RunOSBuild(job.Manifest, tmpStore, os.Stderr) if err != nil { - return nil, fmt.Errorf("error setting up stdin for osbuild: %v", err) - } - - stdout, err := cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("error setting up stdout for osbuild: %v", err) - } - - err = cmd.Start() - if err != nil { - return nil, fmt.Errorf("error starting osbuild: %v", err) - } - - err = json.NewEncoder(stdin).Encode(job.Manifest) - if err != nil { - return nil, fmt.Errorf("error encoding osbuild pipeline: %v", err) - } - // FIXME: handle or comment this possible error - _ = stdin.Close() - - var result common.ComposeResult - err = json.NewDecoder(stdout).Decode(&result) - if err != nil { - return nil, fmt.Errorf("error decoding osbuild output: %#v", err) - } - - err = cmd.Wait() - if err != nil { - return &result, err + return nil, fmt.Errorf("osbuild error: %v", err) } var r []error @@ -159,10 +122,10 @@ func RunJob(job *jobqueue.Job, uploadFunc func(*jobqueue.Job, io.Reader) error) } if len(r) > 0 { - return &result, &TargetsError{r} + return result, &TargetsError{r} } - return &result, nil + return result, nil } func main() { diff --git a/cmd/osbuild-worker/osbuild.go b/cmd/osbuild-worker/osbuild.go new file mode 100644 index 000000000..7cb032951 --- /dev/null +++ b/cmd/osbuild-worker/osbuild.go @@ -0,0 +1,55 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "os/exec" + + "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/osbuild" +) + +func RunOSBuild(manifest *osbuild.Manifest, store string, errorWriter io.Writer) (*common.ComposeResult, error) { + cmd := exec.Command( + "osbuild", + "--store", store, + "--json", "-", + ) + cmd.Stderr = errorWriter + + stdin, err := cmd.StdinPipe() + if err != nil { + return nil, fmt.Errorf("error setting up stdin for osbuild: %v", err) + } + + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, fmt.Errorf("error setting up stdout for osbuild: %v", err) + } + + err = cmd.Start() + if err != nil { + return nil, fmt.Errorf("error starting osbuild: %v", err) + } + + err = json.NewEncoder(stdin).Encode(manifest) + if err != nil { + return nil, fmt.Errorf("error encoding osbuild pipeline: %v", err) + } + // FIXME: handle or comment this possible error + _ = stdin.Close() + + var result common.ComposeResult + err = json.NewDecoder(stdout).Decode(&result) + if err != nil { + return nil, fmt.Errorf("error decoding osbuild output: %#v", err) + } + + err = cmd.Wait() + if err != nil { + return &result, err + } + + return &result, nil +}