cloudapi: support multiple upload statuses in ComposeStatus
Add the new upload_statuses under the image_status in the result of the ComposeStatus object. The first status is also included in the old top-level 'upload_status' property for backwards compatibility. Tests are updated to match the new results.
This commit is contained in:
parent
ba2240b578
commit
5a93166f6b
2 changed files with 64 additions and 30 deletions
|
|
@ -434,18 +434,26 @@ func (h *apiHandlers) getComposeStatusImpl(ctx echo.Context, id string) error {
|
|||
return HTTPError(ErrorGettingBuildDependencyStatus)
|
||||
}
|
||||
|
||||
var us *UploadStatus
|
||||
var uploadStatuses *[]UploadStatus
|
||||
var us0 *UploadStatus
|
||||
if result.TargetResults != nil {
|
||||
// Only single upload target is allowed, therefore only a single upload target result is allowed as well
|
||||
if len(result.TargetResults) != 1 {
|
||||
return HTTPError(ErrorSeveralUploadTargets)
|
||||
statuses := make([]UploadStatus, len(result.TargetResults))
|
||||
for idx := range result.TargetResults {
|
||||
tr := result.TargetResults[idx]
|
||||
us, err := targetResultToUploadStatus(tr)
|
||||
if err != nil {
|
||||
return HTTPError(ErrorUnknownUploadTarget)
|
||||
}
|
||||
us.Status = uploadStatusFromJobStatus(jobInfo.JobStatus, result.JobError)
|
||||
statuses[idx] = *us
|
||||
}
|
||||
tr := result.TargetResults[0]
|
||||
us, err = targetResultToUploadStatus(tr)
|
||||
if err != nil {
|
||||
return HTTPError(ErrorUnknownUploadTarget)
|
||||
|
||||
if len(statuses) > 0 {
|
||||
// make sure uploadStatuses remains nil if the array is empty but not nill
|
||||
uploadStatuses = &statuses
|
||||
// get first upload status if there's at least one
|
||||
us0 = &statuses[0]
|
||||
}
|
||||
us.Status = uploadStatusFromJobStatus(jobInfo.JobStatus, result.JobError)
|
||||
}
|
||||
|
||||
return ctx.JSON(http.StatusOK, ComposeStatus{
|
||||
|
|
@ -456,9 +464,10 @@ func (h *apiHandlers) getComposeStatusImpl(ctx echo.Context, id string) error {
|
|||
},
|
||||
Status: composeStatusFromOSBuildJobStatus(jobInfo.JobStatus, &result),
|
||||
ImageStatus: ImageStatus{
|
||||
Status: imageStatusFromOSBuildJobStatus(jobInfo.JobStatus, &result),
|
||||
Error: composeStatusErrorFromJobError(jobError),
|
||||
UploadStatus: us,
|
||||
Status: imageStatusFromOSBuildJobStatus(jobInfo.JobStatus, &result),
|
||||
Error: composeStatusErrorFromJobError(jobError),
|
||||
UploadStatus: us0, // add the first upload status to the old top-level field
|
||||
UploadStatuses: uploadStatuses,
|
||||
},
|
||||
})
|
||||
} else if jobType == worker.JobTypeKojiFinalize {
|
||||
|
|
@ -488,28 +497,37 @@ func (h *apiHandlers) getComposeStatusImpl(ctx echo.Context, id string) error {
|
|||
return HTTPError(ErrorGettingBuildDependencyStatus)
|
||||
}
|
||||
|
||||
var us *UploadStatus
|
||||
// Only a single upload target in addition to Koji is allowed.
|
||||
// Koji target is always added to osbuild jobs for Koji compose
|
||||
// by the enqueueKojiCompose() function.
|
||||
if len(buildJobResult.TargetResults) > 2 {
|
||||
return HTTPError(ErrorSeveralUploadTargets)
|
||||
}
|
||||
for _, tr := range buildJobResult.TargetResults {
|
||||
if tr.Name != target.TargetNameKoji {
|
||||
us, err = targetResultToUploadStatus(tr)
|
||||
if err != nil {
|
||||
return HTTPError(ErrorUnknownUploadTarget)
|
||||
var uploadStatuses *[]UploadStatus
|
||||
var us0 *UploadStatus
|
||||
if buildJobResult.TargetResults != nil {
|
||||
// can't set the array size because koji targets wont be counted
|
||||
statuses := make([]UploadStatus, 0, len(buildJobResult.TargetResults))
|
||||
for idx := range buildJobResult.TargetResults {
|
||||
tr := buildJobResult.TargetResults[idx]
|
||||
if tr.Name != target.TargetNameKoji {
|
||||
us, err := targetResultToUploadStatus(tr)
|
||||
if err != nil {
|
||||
return HTTPError(ErrorUnknownUploadTarget)
|
||||
}
|
||||
us.Status = uploadStatusFromJobStatus(buildInfo.JobStatus, result.JobError)
|
||||
statuses = append(statuses, *us)
|
||||
}
|
||||
us.Status = uploadStatusFromJobStatus(buildInfo.JobStatus, result.JobError)
|
||||
}
|
||||
|
||||
if len(statuses) > 0 {
|
||||
// make sure uploadStatuses remains nil if the array is empty but not nill
|
||||
uploadStatuses = &statuses
|
||||
// get first upload status if there's at least one
|
||||
us0 = &statuses[0]
|
||||
}
|
||||
}
|
||||
|
||||
buildJobResults = append(buildJobResults, buildJobResult)
|
||||
buildJobStatuses = append(buildJobStatuses, ImageStatus{
|
||||
Status: imageStatusFromKojiJobStatus(buildInfo.JobStatus, &initResult, &buildJobResult),
|
||||
Error: composeStatusErrorFromJobError(buildJobError),
|
||||
UploadStatus: us,
|
||||
Status: imageStatusFromKojiJobStatus(buildInfo.JobStatus, &initResult, &buildJobResult),
|
||||
Error: composeStatusErrorFromJobError(buildJobError),
|
||||
UploadStatus: us0, // add the first upload status to the old top-level field
|
||||
UploadStatuses: uploadStatuses,
|
||||
})
|
||||
}
|
||||
response := ComposeStatus{
|
||||
|
|
|
|||
|
|
@ -887,7 +887,15 @@ func TestComposeTargetErrors(t *testing.T) {
|
|||
},
|
||||
"status": "failure",
|
||||
"type": "aws"
|
||||
}
|
||||
},
|
||||
"upload_statuses": [{
|
||||
"options": {
|
||||
"ami": "",
|
||||
"region": ""
|
||||
},
|
||||
"status": "failure",
|
||||
"type": "aws"
|
||||
}]
|
||||
},
|
||||
"status": "failure"
|
||||
}`, jobId, jobId))
|
||||
|
|
@ -1291,7 +1299,15 @@ func TestImageFromCompose(t *testing.T) {
|
|||
"ami": "ami-abc123",
|
||||
"region": "eu-central-1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"upload_statuses": [{
|
||||
"type": "aws",
|
||||
"status": "success",
|
||||
"options": {
|
||||
"ami": "ami-abc123",
|
||||
"region": "eu-central-1"
|
||||
}
|
||||
}]
|
||||
}
|
||||
}`, jobId, jobId))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue