worker: move running osbuild into separate function

Setting up a command to run is quite involved. Separate that from the
logic of running it.
This commit is contained in:
Lars Karlitski 2020-04-04 12:22:45 +02:00 committed by Tom Gundersen
parent ada058f2c3
commit 2435163fc9
2 changed files with 59 additions and 41 deletions

View file

@ -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() {

View file

@ -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
}