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 (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -11,7 +10,6 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/common"
|
"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?
|
// FIXME: how to handle errors in defer?
|
||||||
defer os.RemoveAll(tmpStore)
|
defer os.RemoveAll(tmpStore)
|
||||||
|
|
||||||
cmd := exec.Command(
|
result, err := RunOSBuild(job.Manifest, tmpStore, os.Stderr)
|
||||||
"osbuild",
|
|
||||||
"--store", tmpStore,
|
|
||||||
"--json", "-",
|
|
||||||
)
|
|
||||||
cmd.Stderr = os.Stderr
|
|
||||||
|
|
||||||
stdin, err := cmd.StdinPipe()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error setting up stdin for osbuild: %v", err)
|
return nil, fmt.Errorf("osbuild error: %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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var r []error
|
var r []error
|
||||||
|
|
@ -159,10 +122,10 @@ func RunJob(job *jobqueue.Job, uploadFunc func(*jobqueue.Job, io.Reader) error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(r) > 0 {
|
if len(r) > 0 {
|
||||||
return &result, &TargetsError{r}
|
return result, &TargetsError{r}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
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