Blame internal/client/compose.go

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