worker: run osbuild

This commit is contained in:
Lars Karlitski 2019-09-27 17:42:52 +02:00
parent 5df6874b94
commit 87bcd7f9d3
2 changed files with 82 additions and 10 deletions

79
cmd/osbuild-worker/job.go Normal file
View file

@ -0,0 +1,79 @@
package main
import (
"encoding/json"
"os"
"os/exec"
"github.com/google/uuid"
"osbuild-composer/internal/pipeline"
"osbuild-composer/internal/target"
)
type Job struct {
ID uuid.UUID
Pipeline pipeline.Pipeline
Targets []target.Target
}
func (job *Job) Run() error {
cmd := exec.Command("osbuild", "--store", "/var/cache/osbuild-composer/store", "--json", "-")
cmd.Stderr = os.Stderr
stdin, err := cmd.StdinPipe()
if err != nil {
return err
}
stdout, err := cmd.StdoutPipe()
if err != nil {
return err
}
err = cmd.Start()
if err != nil {
return err
}
err = json.NewEncoder(stdin).Encode(job.Pipeline)
if err != nil {
return err
}
stdin.Close()
var result struct {
TreeID string `json:"tree_id"`
OutputID string `json:"output_id"`
}
err = json.NewDecoder(stdout).Decode(&result)
if err != nil {
return err
}
err = cmd.Wait()
if err != nil {
return err
}
for _, target := range job.Targets {
if target.Name != "org.osbuild.local" {
panic("foo")
}
err = os.MkdirAll(target.Options.Location, 0755)
if err != nil {
panic(err)
}
cp := exec.Command("cp", "-a", "-L", "/var/cache/osbuild-composer/store/refs/" + result.OutputID, target.Options.Location)
cp.Stderr = os.Stderr
cp.Stdout = os.Stdout
err = cp.Run()
if err != nil {
panic(err)
}
}
return nil
}

View file

@ -8,7 +8,6 @@ import (
"fmt"
"net"
"net/http"
"time"
"github.com/google/uuid"
@ -20,12 +19,6 @@ type ComposerClient struct {
client *http.Client
}
type Job struct {
ID uuid.UUID
Pipeline pipeline.Pipeline
Target target.Target
}
func NewClient() *ComposerClient {
client := &http.Client{
Transport: &http.Transport{
@ -43,7 +36,7 @@ func (c *ComposerClient) AddJob() (*Job, error) {
}
type reply struct {
Pipeline *pipeline.Pipeline `json:"pipeline"`
Target *target.Target `json:"target"`
Targets *[]target.Target `json:"targets"`
}
job := &Job{
@ -64,7 +57,7 @@ func (c *ComposerClient) AddJob() (*Job, error) {
err = json.NewDecoder(response.Body).Decode(&reply{
Pipeline: &job.Pipeline,
Target: &job.Target,
Targets: &job.Targets,
})
if err != nil {
return nil, err
@ -110,7 +103,7 @@ func main() {
}
fmt.Printf("Running job %s\n", job.ID.String())
time.Sleep(15 * time.Second)
job.Run()
client.UpdateJob(job, "finished")
}