weldr: use compose status for targets as well
Workers don't report status for the osbuild run and the upload targets separately. Before the move to the jobqueue, we explicitly set the status of all targets when a compose finished. When I removed that, the image status broke. Set the status from what's returned by api.getComposeStatus() to restore the original behavior. Fixes #702
This commit is contained in:
parent
a48565e06e
commit
347d69b734
4 changed files with 21 additions and 6 deletions
|
|
@ -1967,7 +1967,7 @@ func (api *API) composeInfoHandler(writer http.ResponseWriter, request *http.Req
|
|||
reply.ImageSize = compose.ImageBuild.Size
|
||||
|
||||
if isRequestVersionAtLeast(params, 1) {
|
||||
reply.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets)
|
||||
reply.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets, composeStatus.State)
|
||||
}
|
||||
|
||||
err = json.NewEncoder(writer).Encode(reply)
|
||||
|
|
|
|||
|
|
@ -751,7 +751,7 @@ func TestComposeFinished(t *testing.T) {
|
|||
ExpectedJSON string
|
||||
}{
|
||||
{rpmmd_mock.BaseFixture, "GET", "/api/v0/compose/finished", ``, http.StatusOK, `{"finished":[{"id":"30000000-0000-0000-0000-000000000002","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FINISHED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140}]}`},
|
||||
{rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/finished", ``, http.StatusOK, `{"finished":[{"id":"30000000-0000-0000-0000-000000000002","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FINISHED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"WAITING","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`},
|
||||
{rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/finished", ``, http.StatusOK, `{"finished":[{"id":"30000000-0000-0000-0000-000000000002","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FINISHED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"FINISHED","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`},
|
||||
{rpmmd_mock.NoComposesFixture, "GET", "/api/v0/compose/finished", ``, http.StatusOK, `{"finished":[]}`},
|
||||
}
|
||||
|
||||
|
|
@ -775,7 +775,7 @@ func TestComposeFailed(t *testing.T) {
|
|||
ExpectedJSON string
|
||||
}{
|
||||
{rpmmd_mock.BaseFixture, "GET", "/api/v0/compose/failed", ``, http.StatusOK, `{"failed":[{"id":"30000000-0000-0000-0000-000000000003","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FAILED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140}]}`},
|
||||
{rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/failed", ``, http.StatusOK, `{"failed":[{"id":"30000000-0000-0000-0000-000000000003","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FAILED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"WAITING","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`},
|
||||
{rpmmd_mock.BaseFixture, "GET", "/api/v1/compose/failed", ``, http.StatusOK, `{"failed":[{"id":"30000000-0000-0000-0000-000000000003","blueprint":"test","version":"0.0.0","compose_type":"qcow2","image_size":0,"queue_status":"FAILED","job_created":1574857140,"job_started":1574857140,"job_finished":1574857140,"uploads":[{"uuid":"10000000-0000-0000-0000-000000000000","status":"FAILED","provider_name":"aws","image_name":"awsimage","creation_time":1574857140,"settings":{"region":"frankfurt","accessKeyID":"accesskey","secretAccessKey":"secretkey","bucket":"clay","key":"imagekey"}}]}]}`},
|
||||
{rpmmd_mock.NoComposesFixture, "GET", "/api/v0/compose/failed", ``, http.StatusOK, `{"failed":[]}`},
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ func composeToComposeEntry(id uuid.UUID, compose store.Compose, status *composeS
|
|||
composeEntry.ComposeType = compose.ImageBuild.ImageType.Name()
|
||||
|
||||
if includeUploads {
|
||||
composeEntry.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets)
|
||||
composeEntry.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets, status.State)
|
||||
}
|
||||
|
||||
switch status.State {
|
||||
|
|
|
|||
|
|
@ -83,16 +83,31 @@ func (u *uploadRequest) UnmarshalJSON(data []byte) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func targetsToUploadResponses(targets []*target.Target) []uploadResponse {
|
||||
// Converts a `Target` to a serializable `uploadResponse`.
|
||||
//
|
||||
// This ignore the status in `targets`, because that's never set correctly.
|
||||
// Instead, it sets each target's status to the ImageBuildState equivalent of
|
||||
// `state`.
|
||||
func targetsToUploadResponses(targets []*target.Target, state common.ComposeState) []uploadResponse {
|
||||
var uploads []uploadResponse
|
||||
for _, t := range targets {
|
||||
upload := uploadResponse{
|
||||
UUID: t.Uuid,
|
||||
Status: t.Status,
|
||||
ImageName: t.ImageName,
|
||||
CreationTime: float64(t.Created.UnixNano()) / 1000000000,
|
||||
}
|
||||
|
||||
switch state {
|
||||
case common.CWaiting:
|
||||
upload.Status = common.IBWaiting
|
||||
case common.CRunning:
|
||||
upload.Status = common.IBRunning
|
||||
case common.CFinished:
|
||||
upload.Status = common.IBFinished
|
||||
case common.CFailed:
|
||||
upload.Status = common.IBFailed
|
||||
}
|
||||
|
||||
switch options := t.Options.(type) {
|
||||
case *target.AWSTargetOptions:
|
||||
upload.ProviderName = "aws"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue