|
Packit |
63bb0d |
// Package weldr - json contains Exported API request/response structures
|
|
Packit |
63bb0d |
// Copyright (C) 2020 by Red Hat, Inc.
|
|
Packit |
63bb0d |
package weldr
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
import (
|
|
Packit |
63bb0d |
"github.com/google/uuid"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/common"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/store"
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// StatusV0 is the response to /api/status from a v0+ server
|
|
Packit |
63bb0d |
type StatusV0 struct {
|
|
Packit |
63bb0d |
API string `json:"api"`
|
|
Packit |
63bb0d |
DBSupported bool `json:"db_supported"`
|
|
Packit |
63bb0d |
DBVersion string `json:"db_version"`
|
|
Packit |
63bb0d |
SchemaVersion string `json:"schema_version"`
|
|
Packit |
63bb0d |
Backend string `json:"backend"`
|
|
Packit |
63bb0d |
Build string `json:"build"`
|
|
Packit |
63bb0d |
Messages []string `json:"messages"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// BlueprintsListV0 is the response to /blueprints/list request
|
|
Packit |
63bb0d |
type BlueprintsListV0 struct {
|
|
Packit |
63bb0d |
Total uint `json:"total"`
|
|
Packit |
63bb0d |
Offset uint `json:"offset"`
|
|
Packit |
63bb0d |
Limit uint `json:"limit"`
|
|
Packit |
63bb0d |
Blueprints []string `json:"blueprints"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// ResponseError holds the API response error details
|
|
Packit |
63bb0d |
type ResponseError struct {
|
|
Packit |
63bb0d |
Code int `json:"code,omitempty"`
|
|
Packit |
63bb0d |
ID string `json:"id"`
|
|
Packit |
63bb0d |
Msg string `json:"msg"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// BlueprintsInfoV0 is the response to /blueprints/info?format=json request
|
|
Packit |
63bb0d |
type BlueprintsInfoV0 struct {
|
|
Packit |
63bb0d |
Blueprints []blueprint.Blueprint `json:"blueprints"`
|
|
Packit |
63bb0d |
Changes []infoChange `json:"changes"`
|
|
Packit |
63bb0d |
Errors []ResponseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type infoChange struct {
|
|
Packit |
63bb0d |
Changed bool `json:"changed"`
|
|
Packit |
63bb0d |
Name string `json:"name"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// BlueprintsChangesV0 is the response to /blueprints/changes/ request
|
|
Packit |
63bb0d |
type BlueprintsChangesV0 struct {
|
|
Packit |
63bb0d |
BlueprintsChanges []bpChange `json:"blueprints"`
|
|
Packit |
63bb0d |
Errors []ResponseError `json:"errors"`
|
|
Packit |
63bb0d |
Limit uint `json:"limit"`
|
|
Packit |
63bb0d |
Offset uint `json:"offset"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type bpChange struct {
|
|
Packit |
63bb0d |
Changes []blueprint.Change `json:"changes"`
|
|
Packit |
63bb0d |
Name string `json:"name"`
|
|
Packit |
63bb0d |
Total int `json:"total"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// BlueprintsDepsolveV0 is the response to /blueprints/depsolve/ request
|
|
Packit |
63bb0d |
type BlueprintsDepsolveV0 struct {
|
|
Packit |
63bb0d |
Blueprints []depsolveEntry `json:"blueprints"`
|
|
Packit |
63bb0d |
Errors []ResponseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type depsolveEntry struct {
|
|
Packit |
63bb0d |
Blueprint blueprint.Blueprint `json:"blueprint"`
|
|
Packit |
63bb0d |
Dependencies []rpmmd.PackageSpec `json:"dependencies"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// BlueprintsFreezeV0 is the response to /blueprints/freeze/ request
|
|
Packit |
63bb0d |
type BlueprintsFreezeV0 struct {
|
|
Packit |
63bb0d |
Blueprints []blueprintFrozen `json:"blueprints"`
|
|
Packit |
63bb0d |
Errors []ResponseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type blueprintFrozen struct {
|
|
Packit |
63bb0d |
Blueprint blueprint.Blueprint `json:"blueprint"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceListV0 is the response to /source/list request
|
|
Packit |
63bb0d |
type SourceListV0 struct {
|
|
Packit |
63bb0d |
Sources []string `json:"sources"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceListV1 is the response to /source/list request
|
|
Packit |
63bb0d |
type SourceListV1 struct {
|
|
Packit |
63bb0d |
Sources []string `json:"sources"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceInfoV0 is the response to a /source/info request
|
|
Packit |
63bb0d |
type SourceInfoV0 struct {
|
|
Packit |
63bb0d |
Sources map[string]SourceConfigV0 `json:"sources"`
|
|
Packit |
63bb0d |
Errors []ResponseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceConfig returns a SourceConfig struct populated with the supported variables
|
|
Packit |
63bb0d |
func (s *SourceInfoV0) SourceConfig(sourceName string) (ssc store.SourceConfig, ok bool) {
|
|
Packit |
63bb0d |
si, ok := s.Sources[sourceName]
|
|
Packit |
63bb0d |
if !ok {
|
|
Packit |
63bb0d |
return ssc, false
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return si.SourceConfig(), true
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceConfig interface defines the common functions needed to query the SourceConfigV0/V1 structs
|
|
Packit |
63bb0d |
type SourceConfig interface {
|
|
Packit |
63bb0d |
GetKey() string
|
|
Packit |
63bb0d |
GetName() string
|
|
Packit |
63bb0d |
GetType() string
|
|
Packit |
63bb0d |
SourceConfig() store.SourceConfig
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// NewSourceConfigV0 converts a store.SourceConfig to a SourceConfigV0
|
|
Packit |
63bb0d |
// The store does not support proxy and gpgkey_urls
|
|
Packit |
63bb0d |
func NewSourceConfigV0(s store.SourceConfig) SourceConfigV0 {
|
|
Packit |
63bb0d |
var sc SourceConfigV0
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
sc.Name = s.Name
|
|
Packit |
63bb0d |
sc.Type = s.Type
|
|
Packit |
63bb0d |
sc.URL = s.URL
|
|
Packit |
63bb0d |
sc.CheckGPG = s.CheckGPG
|
|
Packit |
63bb0d |
sc.CheckSSL = s.CheckSSL
|
|
Packit |
63bb0d |
sc.System = s.System
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return sc
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceConfigV0 holds the source repository information
|
|
Packit |
63bb0d |
type SourceConfigV0 struct {
|
|
Packit |
63bb0d |
Name string `json:"name" toml:"name"`
|
|
Packit |
63bb0d |
Type string `json:"type" toml:"type"`
|
|
Packit |
63bb0d |
URL string `json:"url" toml:"url"`
|
|
Packit |
63bb0d |
CheckGPG bool `json:"check_gpg" toml:"check_gpg"`
|
|
Packit |
63bb0d |
CheckSSL bool `json:"check_ssl" toml:"check_ssl"`
|
|
Packit |
63bb0d |
System bool `json:"system" toml:"system"`
|
|
Packit |
63bb0d |
Proxy string `json:"proxy,omitempty" toml:"proxy,omitempty"`
|
|
Packit |
63bb0d |
GPGUrls []string `json:"gpgkey_urls,omitempty" toml:"gpgkey_urls,omitempty"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Key return the key, .Name in this case
|
|
Packit |
63bb0d |
func (s SourceConfigV0) GetKey() string {
|
|
Packit |
63bb0d |
return s.Name
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Name return the .Name field
|
|
Packit |
63bb0d |
func (s SourceConfigV0) GetName() string {
|
|
Packit |
63bb0d |
return s.Name
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Type return the .Type field
|
|
Packit |
63bb0d |
func (s SourceConfigV0) GetType() string {
|
|
Packit |
63bb0d |
return s.Type
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceConfig returns a SourceConfig struct populated with the supported variables
|
|
Packit |
63bb0d |
// The store does not support proxy and gpgkey_urls
|
|
Packit |
63bb0d |
func (s SourceConfigV0) SourceConfig() (ssc store.SourceConfig) {
|
|
Packit |
63bb0d |
ssc.Name = s.Name
|
|
Packit |
63bb0d |
ssc.Type = s.Type
|
|
Packit |
63bb0d |
ssc.URL = s.URL
|
|
Packit |
63bb0d |
ssc.CheckGPG = s.CheckGPG
|
|
Packit |
63bb0d |
ssc.CheckSSL = s.CheckSSL
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return ssc
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceInfoResponseV0
|
|
Packit |
63bb0d |
type SourceInfoResponseV0 struct {
|
|
Packit |
63bb0d |
Sources map[string]SourceConfigV0 `json:"sources"`
|
|
Packit |
63bb0d |
Errors []responseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// NewSourceConfigV1 converts a store.SourceConfig to a SourceConfigV1
|
|
Packit |
63bb0d |
// The store does not support proxy and gpgkey_urls
|
|
Packit |
63bb0d |
func NewSourceConfigV1(id string, s store.SourceConfig) SourceConfigV1 {
|
|
Packit |
63bb0d |
var sc SourceConfigV1
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
sc.ID = id
|
|
Packit |
63bb0d |
sc.Name = s.Name
|
|
Packit |
63bb0d |
sc.Type = s.Type
|
|
Packit |
63bb0d |
sc.URL = s.URL
|
|
Packit |
63bb0d |
sc.CheckGPG = s.CheckGPG
|
|
Packit |
63bb0d |
sc.CheckSSL = s.CheckSSL
|
|
Packit |
63bb0d |
sc.System = s.System
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return sc
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceConfigV1 holds the source repository information
|
|
Packit |
63bb0d |
type SourceConfigV1 struct {
|
|
Packit |
63bb0d |
ID string `json:"id" toml:"id"`
|
|
Packit |
63bb0d |
Name string `json:"name" toml:"name"`
|
|
Packit |
63bb0d |
Type string `json:"type" toml:"type"`
|
|
Packit |
63bb0d |
URL string `json:"url" toml:"url"`
|
|
Packit |
63bb0d |
CheckGPG bool `json:"check_gpg" toml:"check_gpg"`
|
|
Packit |
63bb0d |
CheckSSL bool `json:"check_ssl" toml:"check_ssl"`
|
|
Packit |
63bb0d |
System bool `json:"system" toml:"system"`
|
|
Packit |
63bb0d |
Proxy string `json:"proxy,omitempty" toml:"proxy,omitempty"`
|
|
Packit |
63bb0d |
GPGUrls []string `json:"gpgkey_urls,omitempty" toml:"gpgkey_urls,omitempty"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Key returns the key, .ID in this case
|
|
Packit |
63bb0d |
func (s SourceConfigV1) GetKey() string {
|
|
Packit |
63bb0d |
return s.ID
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Name return the .Name field
|
|
Packit |
63bb0d |
func (s SourceConfigV1) GetName() string {
|
|
Packit |
63bb0d |
return s.Name
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Type return the .Type field
|
|
Packit |
63bb0d |
func (s SourceConfigV1) GetType() string {
|
|
Packit |
63bb0d |
return s.Type
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceConfig returns a SourceConfig struct populated with the supported variables
|
|
Packit |
63bb0d |
// The store does not support proxy and gpgkey_urls
|
|
Packit |
63bb0d |
func (s SourceConfigV1) SourceConfig() (ssc store.SourceConfig) {
|
|
Packit |
63bb0d |
ssc.Name = s.Name
|
|
Packit |
63bb0d |
ssc.Type = s.Type
|
|
Packit |
63bb0d |
ssc.URL = s.URL
|
|
Packit |
63bb0d |
ssc.CheckGPG = s.CheckGPG
|
|
Packit |
63bb0d |
ssc.CheckSSL = s.CheckSSL
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return ssc
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// SourceInfoResponseV1
|
|
Packit |
63bb0d |
type SourceInfoResponseV1 struct {
|
|
Packit |
63bb0d |
Sources map[string]SourceConfigV1 `json:"sources"`
|
|
Packit |
63bb0d |
Errors []responseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// ProjectsListV0 is the response to /projects/list request
|
|
Packit |
63bb0d |
type ProjectsListV0 struct {
|
|
Packit |
63bb0d |
Total uint `json:"total"`
|
|
Packit |
63bb0d |
Offset uint `json:"offset"`
|
|
Packit |
63bb0d |
Limit uint `json:"limit"`
|
|
Packit |
63bb0d |
Projects []rpmmd.PackageInfo `json:"projects"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// ProjectsInfoV0 is the response to /projects/info request
|
|
Packit |
63bb0d |
type ProjectsInfoV0 struct {
|
|
Packit |
63bb0d |
Projects []rpmmd.PackageInfo `json:"projects"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// ProjectsDependenciesV0 is the response to /projects/depsolve request
|
|
Packit |
63bb0d |
type ProjectsDependenciesV0 struct {
|
|
Packit |
63bb0d |
Projects []rpmmd.PackageSpec `json:"projects"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ModuleName struct {
|
|
Packit |
63bb0d |
Name string `json:"name"`
|
|
Packit |
63bb0d |
GroupType string `json:"group_type"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ModulesListV0 struct {
|
|
Packit |
63bb0d |
Total uint `json:"total"`
|
|
Packit |
63bb0d |
Offset uint `json:"offset"`
|
|
Packit |
63bb0d |
Limit uint `json:"limit"`
|
|
Packit |
63bb0d |
Modules []ModuleName `json:"modules"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// ModulesInfoV0 is the response to /modules/info request
|
|
Packit |
63bb0d |
type ModulesInfoV0 struct {
|
|
Packit |
63bb0d |
Modules []rpmmd.PackageInfo `json:"modules"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ComposeRequestV0 struct {
|
|
Packit |
63bb0d |
BlueprintName string `json:"blueprint_name"`
|
|
Packit |
63bb0d |
ComposeType string `json:"compose_type"`
|
|
Packit |
63bb0d |
Branch string `json:"branch"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type ComposeResponseV0 struct {
|
|
Packit |
63bb0d |
BuildID uuid.UUID `json:"build_id"`
|
|
Packit |
63bb0d |
Status bool `json:"status"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// This is similar to weldr.ComposeEntry but different because internally the image types are capitalized
|
|
Packit |
63bb0d |
type ComposeEntryV0 struct {
|
|
Packit |
63bb0d |
ID uuid.UUID `json:"id"`
|
|
Packit |
63bb0d |
Blueprint string `json:"blueprint"`
|
|
Packit |
63bb0d |
Version string `json:"version"`
|
|
Packit |
63bb0d |
ComposeType string `json:"compose_type"`
|
|
Packit |
63bb0d |
ImageSize uint64 `json:"image_size"` // This is user-provided image size, not actual file size
|
|
Packit |
63bb0d |
QueueStatus common.ImageBuildState `json:"queue_status"`
|
|
Packit |
63bb0d |
JobCreated float64 `json:"job_created"`
|
|
Packit |
63bb0d |
JobStarted float64 `json:"job_started,omitempty"`
|
|
Packit |
63bb0d |
JobFinished float64 `json:"job_finished,omitempty"`
|
|
Packit |
63bb0d |
Uploads []uploadResponse `json:"uploads,omitempty"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ComposeFinishedResponseV0 struct {
|
|
Packit |
63bb0d |
Finished []ComposeEntryV0 `json:"finished"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type ComposeFailedResponseV0 struct {
|
|
Packit |
63bb0d |
Failed []ComposeEntryV0 `json:"failed"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
type ComposeStatusResponseV0 struct {
|
|
Packit |
63bb0d |
UUIDs []ComposeEntryV0 `json:"uuids"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ComposeTypeV0 struct {
|
|
Packit |
63bb0d |
Name string `json:"name"`
|
|
Packit |
63bb0d |
Enabled bool `json:"enabled"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ComposeTypesResponseV0 struct {
|
|
Packit |
63bb0d |
Types []ComposeTypeV0 `json:"types"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type DeleteComposeStatusV0 struct {
|
|
Packit |
63bb0d |
UUID uuid.UUID `json:"uuid"`
|
|
Packit |
63bb0d |
Status bool `json:"status"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type DeleteComposeResponseV0 struct {
|
|
Packit |
63bb0d |
UUIDs []DeleteComposeStatusV0 `json:"uuids"`
|
|
Packit |
63bb0d |
Errors []ResponseError `json:"errors"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type CancelComposeStatusV0 struct {
|
|
Packit |
63bb0d |
UUID uuid.UUID `json:"uuid"`
|
|
Packit |
63bb0d |
Status bool `json:"status"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// NOTE: This does not include the lorax-composer specific 'config' field
|
|
Packit |
63bb0d |
type ComposeInfoResponseV0 struct {
|
|
Packit |
63bb0d |
ID uuid.UUID `json:"id"`
|
|
Packit |
63bb0d |
Blueprint *blueprint.Blueprint `json:"blueprint"` // blueprint not frozen!
|
|
Packit |
63bb0d |
Commit string `json:"commit"` // empty for now
|
|
Packit |
63bb0d |
Deps struct {
|
|
Packit |
63bb0d |
Packages []rpmmd.Package `json:"packages"`
|
|
Packit |
63bb0d |
} `json:"deps"`
|
|
Packit |
63bb0d |
ComposeType string `json:"compose_type"`
|
|
Packit |
63bb0d |
QueueStatus string `json:"queue_status"`
|
|
Packit |
63bb0d |
ImageSize uint64 `json:"image_size"`
|
|
Packit |
63bb0d |
Uploads []uploadResponse `json:"uploads,omitempty"`
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
type ComposeQueueResponseV0 struct {
|
|
Packit |
63bb0d |
New []ComposeEntryV0 `json:"new"`
|
|
Packit |
63bb0d |
Run []ComposeEntryV0 `json:"run"`
|
|
Packit |
63bb0d |
}
|