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:
parent
ada058f2c3
commit
2435163fc9
2 changed files with 59 additions and 41 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
55
cmd/osbuild-worker/osbuild.go
Normal file
55
cmd/osbuild-worker/osbuild.go
Normal 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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue