|
Packit |
63bb0d |
// Package client - compose contains functions for the compose API
|
|
Packit |
63bb0d |
// Copyright (C) 2020 by Red Hat, Inc.
|
|
Packit |
63bb0d |
package client
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
import (
|
|
Packit |
63bb0d |
"encoding/json"
|
|
Packit |
63bb0d |
"io"
|
|
Packit |
63bb0d |
"net/http"
|
|
Packit |
63bb0d |
"net/url"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/weldr"
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// PostComposeV0 sends a JSON compose string to the API
|
|
Packit |
63bb0d |
// and returns an APIResponse
|
|
Packit |
63bb0d |
func PostComposeV0(socket *http.Client, compose string) (*APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := PostJSON(socket, "/api/v0/compose", compose)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return NewAPIResponse(body)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// NewComposeResponseV0 converts the response body to a status response
|
|
Packit |
63bb0d |
func NewComposeResponseV0(body []byte) (*weldr.ComposeResponseV0, error) {
|
|
Packit |
63bb0d |
var response weldr.ComposeResponseV0
|
|
Packit |
63bb0d |
err := json.Unmarshal(body, &response)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return &response, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// GetFinishedComposesV0 returns a list of the finished composes
|
|
Packit |
63bb0d |
func GetFinishedComposesV0(socket *http.Client) ([]weldr.ComposeEntryV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRaw(socket, "GET", "/api/v0/compose/finished")
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeEntryV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var finished weldr.ComposeFinishedResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &finished)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeEntryV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return finished.Finished, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// GetFailedComposesV0 returns a list of the failed composes
|
|
Packit |
63bb0d |
func GetFailedComposesV0(socket *http.Client) ([]weldr.ComposeEntryV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRaw(socket, "GET", "/api/v0/compose/failed")
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeEntryV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var failed weldr.ComposeFailedResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &failed)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeEntryV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return failed.Failed, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// GetComposeStatusV0 returns a list of composes matching the optional filter parameters
|
|
Packit |
63bb0d |
func GetComposeStatusV0(socket *http.Client, uuids, blueprint, status, composeType string) ([]weldr.ComposeEntryV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
// Build the query string
|
|
Packit |
63bb0d |
route := "/api/v0/compose/status/" + uuids
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
params := url.Values{}
|
|
Packit |
63bb0d |
if len(blueprint) > 0 {
|
|
Packit |
63bb0d |
params.Add("blueprint", blueprint)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
if len(status) > 0 {
|
|
Packit |
63bb0d |
params.Add("status", status)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
if len(composeType) > 0 {
|
|
Packit |
63bb0d |
params.Add("type", composeType)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
if len(params) > 0 {
|
|
Packit |
63bb0d |
route = route + "?" + params.Encode()
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
body, resp, err := GetRaw(socket, "GET", route)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeEntryV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var composes weldr.ComposeStatusResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &composes)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeEntryV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return composes.UUIDs, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// GetComposeTypesV0 returns a list of the failed composes
|
|
Packit |
63bb0d |
func GetComposesTypesV0(socket *http.Client) ([]weldr.ComposeTypeV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRaw(socket, "GET", "/api/v0/compose/types")
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeTypeV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var composeTypes weldr.ComposeTypesResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &composeTypes)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return []weldr.ComposeTypeV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return composeTypes.Types, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// DeleteComposeV0 deletes one or more composes based on their uuid
|
|
Packit |
63bb0d |
func DeleteComposeV0(socket *http.Client, uuids string) (weldr.DeleteComposeResponseV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := DeleteRaw(socket, "/api/v0/compose/delete/"+uuids)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return weldr.DeleteComposeResponseV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var deleteResponse weldr.DeleteComposeResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &deleteResponse)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return weldr.DeleteComposeResponseV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return deleteResponse, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// GetComposeInfoV0 returns detailed information about the selected compose
|
|
Packit |
63bb0d |
func GetComposeInfoV0(socket *http.Client, uuid string) (weldr.ComposeInfoResponseV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRaw(socket, "GET", "/api/v0/compose/info/"+uuid)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return weldr.ComposeInfoResponseV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var info weldr.ComposeInfoResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &info)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return weldr.ComposeInfoResponseV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return info, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// GetComposeQueueV0 returns the list of composes in the queue
|
|
Packit |
63bb0d |
func GetComposeQueueV0(socket *http.Client) (weldr.ComposeQueueResponseV0, *APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRaw(socket, "GET", "/api/v0/compose/queue")
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return weldr.ComposeQueueResponseV0{}, resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
var queue weldr.ComposeQueueResponseV0
|
|
Packit |
63bb0d |
err = json.Unmarshal(body, &queue)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
return weldr.ComposeQueueResponseV0{}, nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
return queue, nil, nil
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Test compose metadata for unknown uuid
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Test compose results for unknown uuid
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// WriteComposeImageV0 requests the image for a compose and writes it to an io.Writer
|
|
Packit |
63bb0d |
func WriteComposeImageV0(socket *http.Client, w io.Writer, uuid string) (*APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRawBody(socket, "GET", "/api/v0/compose/image/"+uuid)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
_, err = io.Copy(w, body)
|
|
Packit |
63bb0d |
body.Close()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// WriteComposeLogsV0 requests the logs for a compose and writes it to an io.Writer
|
|
Packit |
63bb0d |
func WriteComposeLogsV0(socket *http.Client, w io.Writer, uuid string) (*APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRawBody(socket, "GET", "/api/v0/compose/logs/"+uuid)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
_, err = io.Copy(w, body)
|
|
Packit |
63bb0d |
body.Close()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// WriteComposeLogV0 requests the log for a compose and writes it to an io.Writer
|
|
Packit |
63bb0d |
func WriteComposeLogV0(socket *http.Client, w io.Writer, uuid string) (*APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRawBody(socket, "GET", "/api/v0/compose/log/"+uuid)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
_, err = io.Copy(w, body)
|
|
Packit |
63bb0d |
body.Close()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// WriteComposeMetadataV0 requests the metadata for a compose and writes it to an io.Writer
|
|
Packit |
63bb0d |
func WriteComposeMetadataV0(socket *http.Client, w io.Writer, uuid string) (*APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRawBody(socket, "GET", "/api/v0/compose/metadata/"+uuid)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
_, err = io.Copy(w, body)
|
|
Packit |
63bb0d |
body.Close()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return nil, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// WriteComposeResultsV0 requests the results for a compose and writes it to an io.Writer
|
|
Packit |
63bb0d |
func WriteComposeResultsV0(socket *http.Client, w io.Writer, uuid string) (*APIResponse, error) {
|
|
Packit |
63bb0d |
body, resp, err := GetRawBody(socket, "GET", "/api/v0/compose/metadata/"+uuid)
|
|
Packit |
63bb0d |
if resp != nil || err != nil {
|
|
Packit |
63bb0d |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
_, err = io.Copy(w, body)
|
|
Packit |
63bb0d |
body.Close()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return nil, err
|
|
Packit |
63bb0d |
}
|