worker: run osbuild
This commit is contained in:
parent
5df6874b94
commit
87bcd7f9d3
2 changed files with 82 additions and 10 deletions
79
cmd/osbuild-worker/job.go
Normal file
79
cmd/osbuild-worker/job.go
Normal 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
|
||||
}
|
||||
|
|
@ -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")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue