From e4e7de4ad23fa021f81a5bef59069debf7894eba Mon Sep 17 00:00:00 2001 From: Simone Gotti Date: Tue, 7 May 2019 23:23:58 +0200 Subject: [PATCH] runservice/gateway: return run on run action --- internal/services/gateway/action/run.go | 20 +++++++++---------- internal/services/gateway/api/run.go | 7 ++++++- internal/services/gateway/webhook.go | 4 ++-- .../runservice/scheduler/api/client.go | 8 +++++--- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/internal/services/gateway/action/run.go b/internal/services/gateway/action/run.go index 884795e..a439032 100644 --- a/internal/services/gateway/action/run.go +++ b/internal/services/gateway/action/run.go @@ -115,17 +115,17 @@ type RunActionsRequest struct { FromStart bool } -func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) error { +func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (*rsapi.RunResponse, error) { runResp, resp, err := h.runserviceClient.GetRun(ctx, req.RunID, nil) if err != nil { - return ErrFromRemote(resp, err) + return nil, ErrFromRemote(resp, err) } canGetRun, err := h.CanDoRunActions(ctx, runResp.RunConfig.Group) if err != nil { - return errors.Wrapf(err, "failed to determine permissions") + return nil, errors.Wrapf(err, "failed to determine permissions") } if !canGetRun { - return util.NewErrForbidden(errors.Errorf("user not authorized")) + return nil, util.NewErrForbidden(errors.Errorf("user not authorized")) } switch req.ActionType { @@ -135,9 +135,9 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) e FromStart: req.FromStart, } - resp, err := h.runserviceClient.CreateRun(ctx, rsreq) + runResp, resp, err = h.runserviceClient.CreateRun(ctx, rsreq) if err != nil { - return ErrFromRemote(resp, err) + return nil, ErrFromRemote(resp, err) } case RunActionTypeStop: @@ -145,16 +145,16 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) e ActionType: rsapi.RunActionTypeStop, } - resp, err := h.runserviceClient.RunActions(ctx, req.RunID, rsreq) + resp, err = h.runserviceClient.RunActions(ctx, req.RunID, rsreq) if err != nil { - return ErrFromRemote(resp, err) + return nil, ErrFromRemote(resp, err) } default: - return util.NewErrBadRequest(errors.Errorf("wrong run action type %q", req.ActionType)) + return nil, util.NewErrBadRequest(errors.Errorf("wrong run action type %q", req.ActionType)) } - return nil + return runResp, nil } type RunTaskActionType string diff --git a/internal/services/gateway/api/run.go b/internal/services/gateway/api/run.go index 0b8d0af..7fc99ff 100644 --- a/internal/services/gateway/api/run.go +++ b/internal/services/gateway/api/run.go @@ -407,11 +407,16 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { FromStart: req.FromStart, } - err := h.ah.RunAction(ctx, areq) + runResp, err := h.ah.RunAction(ctx, areq) if httpError(w, err) { h.log.Errorf("err: %+v", err) return } + + res := createRunResponse(runResp.Run, runResp.RunConfig) + if err := httpResponse(w, http.StatusOK, res); err != nil { + h.log.Errorf("err: %+v", err) + } } type RunTaskActionsRequest struct { diff --git a/internal/services/gateway/webhook.go b/internal/services/gateway/webhook.go index 138a8c1..bec1240 100644 --- a/internal/services/gateway/webhook.go +++ b/internal/services/gateway/webhook.go @@ -370,7 +370,7 @@ func (h *webhooksHandler) createRuns(ctx context.Context, filename string, confi Annotations: annotations, } - if _, err := h.runserviceClient.CreateRun(ctx, createRunReq); err != nil { + if _, _, err := h.runserviceClient.CreateRun(ctx, createRunReq); err != nil { log.Errorf("failed to create run: %+v", err) return err } @@ -391,7 +391,7 @@ func (h *webhooksHandler) createRuns(ctx context.Context, filename string, confi Annotations: annotations, } - if _, err := h.runserviceClient.CreateRun(ctx, createRunReq); err != nil { + if _, _, err := h.runserviceClient.CreateRun(ctx, createRunReq); err != nil { log.Errorf("failed to create run: %+v", err) return err } diff --git a/internal/services/runservice/scheduler/api/client.go b/internal/services/runservice/scheduler/api/client.go index 3651187..070fdd2 100644 --- a/internal/services/runservice/scheduler/api/client.go +++ b/internal/services/runservice/scheduler/api/client.go @@ -214,13 +214,15 @@ func (c *Client) GetGroupFirstQueuedRuns(ctx context.Context, group string, chan return c.GetRuns(ctx, []string{"queued"}, []string{group}, false, changeGroups, "", 1, true) } -func (c *Client) CreateRun(ctx context.Context, req *RunCreateRequest) (*http.Response, error) { +func (c *Client) CreateRun(ctx context.Context, req *RunCreateRequest) (*RunResponse, *http.Response, error) { reqj, err := json.Marshal(req) if err != nil { - return nil, err + return nil, nil, err } - return c.getResponse(ctx, "POST", "/runs", nil, -1, jsonContent, bytes.NewReader(reqj)) + res := new(RunResponse) + resp, err := c.getParsedResponse(ctx, "POST", "/runs", nil, jsonContent, bytes.NewReader(reqj), res) + return res, resp, err } func (c *Client) RunActions(ctx context.Context, runID string, req *RunActionsRequest) (*http.Response, error) {