Blame internal/client/compose.go

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
}