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