worker: require workers to declare job types they accept

For now, workers must send `[ "osbuild" ]`.
This commit is contained in:
Lars Karlitski 2020-09-20 17:40:18 +02:00 committed by Tom Gundersen
parent d3c99b8e93
commit ba6a480e32
5 changed files with 21 additions and 4 deletions

View file

@ -16,7 +16,9 @@ type Error struct {
}
// RequestJobJSONBody defines parameters for RequestJob.
type RequestJobJSONBody map[string]interface{}
type RequestJobJSONBody struct {
Types []string `json:"types"`
}
// UpdateJobJSONBody defines parameters for UpdateJob.
type UpdateJobJSONBody struct {

View file

@ -83,6 +83,15 @@ paths:
schema:
type: object
additionalProperties: false
properties:
types:
type: array
items:
type: string
enum:
- osbuild
required:
- types
description: ''
description: Requests a job. This operation blocks until a job is available.
parameters: []

View file

@ -82,7 +82,9 @@ func (c *Client) RequestJob() (Job, error) {
}
var buf bytes.Buffer
err = json.NewEncoder(&buf).Encode(api.RequestJobJSONRequestBody{})
err = json.NewEncoder(&buf).Encode(api.RequestJobJSONRequestBody{
Types: []string{"osbuild"},
})
if err != nil {
panic(err)
}

View file

@ -252,12 +252,16 @@ func (h *apiHandlers) GetStatus(ctx echo.Context) error {
}
func (h *apiHandlers) RequestJob(ctx echo.Context) error {
var body struct{}
var body api.RequestJobJSONRequestBody
err := ctx.Bind(&body)
if err != nil {
return err
}
if len(body.Types) != 1 || body.Types[0] != "osbuild" {
return echo.NewHTTPError(http.StatusBadRequest, "invalid job types")
}
token, jobId, jobArgs, err := h.server.RequestJob(ctx.Request().Context())
if err != nil {
return err

View file

@ -67,7 +67,7 @@ func TestCreate(t *testing.T) {
_, err = server.Enqueue(manifest, nil)
require.NoError(t, err)
test.TestRoute(t, server, false, "POST", "/jobs", `{}`, http.StatusCreated,
test.TestRoute(t, server, false, "POST", "/jobs", `{"types":["osbuild"]}`, http.StatusCreated,
`{"type":"osbuild","args":{"manifest":{"pipeline":{},"sources":{}}}}`, "id", "location", "artifact_location")
}