From aa404dcb99ac0bb6f9df9ad5533bda968d0d4c54 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Tue, 29 Oct 2019 14:04:51 +0100 Subject: [PATCH] worker: move Job type to the jobqueue package The main purpose of this is to share the structs between the server and the client, and let the compiler ensure that our marshaling and unmarshaling matches. In the future we also want to make it easier to write unittests for this code. Signed-off-by: Tom Gundersen --- cmd/osbuild-worker/main.go | 14 ++++++-------- internal/jobqueue/api.go | 12 ++---------- {cmd/osbuild-worker => internal/jobqueue}/job.go | 13 ++++++++----- 3 files changed, 16 insertions(+), 23 deletions(-) rename {cmd/osbuild-worker => internal/jobqueue}/job.go (86%) diff --git a/cmd/osbuild-worker/main.go b/cmd/osbuild-worker/main.go index d84ab1492..ab05ab862 100644 --- a/cmd/osbuild-worker/main.go +++ b/cmd/osbuild-worker/main.go @@ -8,6 +8,8 @@ import ( "fmt" "net" "net/http" + + "github.com/osbuild/osbuild-composer/internal/jobqueue" ) type ComposerClient struct { @@ -25,7 +27,7 @@ func NewClient() *ComposerClient { return &ComposerClient{client} } -func (c *ComposerClient) AddJob() (*Job, error) { +func (c *ComposerClient) AddJob() (*jobqueue.Job, error) { type request struct { } @@ -41,7 +43,7 @@ func (c *ComposerClient) AddJob() (*Job, error) { return nil, errors.New("couldn't create job") } - job := &Job{} + job := &jobqueue.Job{} err = json.NewDecoder(response.Body).Decode(job) if err != nil { return nil, err @@ -50,13 +52,9 @@ func (c *ComposerClient) AddJob() (*Job, error) { return job, nil } -func (c *ComposerClient) UpdateJob(job *Job, status string) error { - type request struct { - Status string `json:"status"` - } - +func (c *ComposerClient) UpdateJob(job *jobqueue.Job, status string) error { var b bytes.Buffer - json.NewEncoder(&b).Encode(&request{status}) + json.NewEncoder(&b).Encode(&jobqueue.JobStatus{status}) req, err := http.NewRequest("PATCH", "http://localhost/job-queue/v1/jobs/"+job.ID.String(), &b) if err != nil { return err diff --git a/internal/jobqueue/api.go b/internal/jobqueue/api.go index 87489b0da..60c3d1aea 100644 --- a/internal/jobqueue/api.go +++ b/internal/jobqueue/api.go @@ -6,9 +6,7 @@ import ( "net" "net/http" - "github.com/osbuild/osbuild-composer/internal/pipeline" "github.com/osbuild/osbuild-composer/internal/store" - "github.com/osbuild/osbuild-composer/internal/target" "github.com/google/uuid" "github.com/julienschmidt/httprouter" @@ -77,11 +75,7 @@ func statusResponseError(writer http.ResponseWriter, code int, errors ...string) func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) { type requestBody struct { } - type replyBody struct { - ID uuid.UUID `json:"id"` - Pipeline *pipeline.Pipeline `json:"pipeline"` - Targets []*target.Target `json:"targets"` - } + type replyBody Job contentType := request.Header["Content-Type"] if len(contentType) != 1 || contentType[0] != "application/json" { @@ -103,9 +97,7 @@ func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request, } func (api *API) updateJobHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { - type requestBody struct { - Status string `json:"status"` - } + type requestBody JobStatus contentType := request.Header["Content-Type"] if len(contentType) != 1 || contentType[0] != "application/json" { diff --git a/cmd/osbuild-worker/job.go b/internal/jobqueue/job.go similarity index 86% rename from cmd/osbuild-worker/job.go rename to internal/jobqueue/job.go index 15757c6a4..4b3d53e5a 100644 --- a/cmd/osbuild-worker/job.go +++ b/internal/jobqueue/job.go @@ -1,4 +1,4 @@ -package main +package jobqueue import ( "encoding/json" @@ -6,15 +6,18 @@ import ( "os/exec" "github.com/google/uuid" - "github.com/osbuild/osbuild-composer/internal/pipeline" "github.com/osbuild/osbuild-composer/internal/target" ) type Job struct { - ID uuid.UUID `json:"id"` - Pipeline pipeline.Pipeline `json:"pipeline"` - Targets []target.Target `json:"targets"` + ID uuid.UUID `json:"id"` + Pipeline *pipeline.Pipeline `json:"pipeline"` + Targets []*target.Target `json:"targets"` +} + +type JobStatus struct { + Status string `json:"status"` } func (job *Job) Run() error {