store: merge the compose package into the store
The types exposed by the compose package are only used in the store API, so move them there where they belong. Making the ownership of the types clear, rather than having them live in a package for themselves, will make it clearer how the types can be modified in follow-up commits. Also remove the JSON annotations, as these types are no longer used for serialization. Signed-off-by: Tom Gundersen <teg@jklm.no>
This commit is contained in:
parent
571a21c3ac
commit
df7a0fec22
7 changed files with 44 additions and 52 deletions
99
internal/store/compose.go
Normal file
99
internal/store/compose.go
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
package store
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
||||
"github.com/osbuild/osbuild-composer/internal/common"
|
||||
"github.com/osbuild/osbuild-composer/internal/osbuild"
|
||||
"github.com/osbuild/osbuild-composer/internal/target"
|
||||
)
|
||||
|
||||
type StateTransitionError struct {
|
||||
message string
|
||||
}
|
||||
|
||||
func (ste *StateTransitionError) Error() string {
|
||||
return ste.message
|
||||
}
|
||||
|
||||
// ImageBuild represents a single image build inside a compose
|
||||
type ImageBuild struct {
|
||||
Id int
|
||||
ImageType common.ImageType
|
||||
Manifest *osbuild.Manifest
|
||||
Targets []*target.Target
|
||||
JobCreated time.Time
|
||||
JobStarted time.Time
|
||||
JobFinished time.Time
|
||||
Size uint64
|
||||
JobId uuid.UUID
|
||||
// Kept for backwards compatibility. Image builds which were done
|
||||
// before the move to the job queue use this to store whether they
|
||||
// finished successfully.
|
||||
QueueStatus common.ImageBuildState
|
||||
}
|
||||
|
||||
// DeepCopy creates a copy of the ImageBuild structure
|
||||
func (ib *ImageBuild) DeepCopy() ImageBuild {
|
||||
var newManifestPtr *osbuild.Manifest = nil
|
||||
if ib.Manifest != nil {
|
||||
manifestCopy := *ib.Manifest
|
||||
newManifestPtr = &manifestCopy
|
||||
}
|
||||
var newTargets []*target.Target
|
||||
for _, t := range ib.Targets {
|
||||
newTarget := *t
|
||||
newTargets = append(newTargets, &newTarget)
|
||||
}
|
||||
// Create new image build struct
|
||||
return ImageBuild{
|
||||
Id: ib.Id,
|
||||
QueueStatus: ib.QueueStatus,
|
||||
ImageType: ib.ImageType,
|
||||
Manifest: newManifestPtr,
|
||||
Targets: newTargets,
|
||||
JobCreated: ib.JobCreated,
|
||||
JobStarted: ib.JobStarted,
|
||||
JobFinished: ib.JobFinished,
|
||||
Size: ib.Size,
|
||||
JobId: ib.JobId,
|
||||
}
|
||||
}
|
||||
|
||||
func (ib *ImageBuild) GetLocalTargetOptions() *target.LocalTargetOptions {
|
||||
for _, t := range ib.Targets {
|
||||
switch options := t.Options.(type) {
|
||||
case *target.LocalTargetOptions:
|
||||
return options
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// A Compose represent the task of building a set of images from a single blueprint.
|
||||
// It contains all the information necessary to generate the inputs for the job, as
|
||||
// well as the job's state.
|
||||
type Compose struct {
|
||||
Blueprint *blueprint.Blueprint
|
||||
ImageBuilds []ImageBuild
|
||||
}
|
||||
|
||||
// DeepCopy creates a copy of the Compose structure
|
||||
func (c *Compose) DeepCopy() Compose {
|
||||
var newBpPtr *blueprint.Blueprint = nil
|
||||
if c.Blueprint != nil {
|
||||
bpCopy := *c.Blueprint
|
||||
newBpPtr = &bpCopy
|
||||
}
|
||||
newImageBuilds := []ImageBuild{}
|
||||
for _, ib := range c.ImageBuilds {
|
||||
newImageBuilds = append(newImageBuilds, ib.DeepCopy())
|
||||
}
|
||||
return Compose{
|
||||
Blueprint: newBpPtr,
|
||||
ImageBuilds: newImageBuilds,
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,6 @@ import (
|
|||
"github.com/google/uuid"
|
||||
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
||||
"github.com/osbuild/osbuild-composer/internal/common"
|
||||
"github.com/osbuild/osbuild-composer/internal/compose"
|
||||
"github.com/osbuild/osbuild-composer/internal/target"
|
||||
)
|
||||
|
||||
|
|
@ -50,10 +49,10 @@ func FixtureBase() *Store {
|
|||
s := New(nil)
|
||||
|
||||
s.blueprints[bName] = b
|
||||
s.composes = map[uuid.UUID]compose.Compose{
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000000"): compose.Compose{
|
||||
s.composes = map[uuid.UUID]Compose{
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000000"): Compose{
|
||||
Blueprint: &b,
|
||||
ImageBuilds: []compose.ImageBuild{
|
||||
ImageBuilds: []ImageBuild{
|
||||
{
|
||||
QueueStatus: common.IBWaiting,
|
||||
ImageType: common.Qcow2Generic,
|
||||
|
|
@ -62,9 +61,9 @@ func FixtureBase() *Store {
|
|||
},
|
||||
},
|
||||
},
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000001"): compose.Compose{
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000001"): Compose{
|
||||
Blueprint: &b,
|
||||
ImageBuilds: []compose.ImageBuild{
|
||||
ImageBuilds: []ImageBuild{
|
||||
{
|
||||
QueueStatus: common.IBRunning,
|
||||
ImageType: common.Qcow2Generic,
|
||||
|
|
@ -74,9 +73,9 @@ func FixtureBase() *Store {
|
|||
},
|
||||
},
|
||||
},
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000002"): compose.Compose{
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000002"): Compose{
|
||||
Blueprint: &b,
|
||||
ImageBuilds: []compose.ImageBuild{
|
||||
ImageBuilds: []ImageBuild{
|
||||
{
|
||||
QueueStatus: common.IBFinished,
|
||||
ImageType: common.Qcow2Generic,
|
||||
|
|
@ -87,9 +86,9 @@ func FixtureBase() *Store {
|
|||
},
|
||||
},
|
||||
},
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000003"): compose.Compose{
|
||||
uuid.MustParse("30000000-0000-0000-0000-000000000003"): Compose{
|
||||
Blueprint: &b,
|
||||
ImageBuilds: []compose.ImageBuild{
|
||||
ImageBuilds: []ImageBuild{
|
||||
{
|
||||
QueueStatus: common.IBFailed,
|
||||
ImageType: common.Qcow2Generic,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import (
|
|||
"github.com/google/uuid"
|
||||
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
||||
"github.com/osbuild/osbuild-composer/internal/common"
|
||||
"github.com/osbuild/osbuild-composer/internal/compose"
|
||||
"github.com/osbuild/osbuild-composer/internal/osbuild"
|
||||
"github.com/osbuild/osbuild-composer/internal/target"
|
||||
)
|
||||
|
|
@ -91,18 +90,18 @@ func newWorkspaceFromV0(workspaceStruct workspaceV0) map[string]blueprint.Bluepr
|
|||
return workspace
|
||||
}
|
||||
|
||||
func newComposesFromV0(composesStruct composesV0) map[uuid.UUID]compose.Compose {
|
||||
composes := make(map[uuid.UUID]compose.Compose)
|
||||
func newComposesFromV0(composesStruct composesV0) map[uuid.UUID]Compose {
|
||||
composes := make(map[uuid.UUID]Compose)
|
||||
|
||||
for composeID, composeStruct := range composesStruct {
|
||||
c := compose.Compose{
|
||||
c := Compose{
|
||||
Blueprint: composeStruct.Blueprint,
|
||||
}
|
||||
if len(composeStruct.ImageBuilds) == 0 {
|
||||
panic("the was a compose with zero image builds, that is forbidden")
|
||||
}
|
||||
for _, imgBuild := range composeStruct.ImageBuilds {
|
||||
ib := compose.ImageBuild{
|
||||
ib := ImageBuild{
|
||||
Id: imgBuild.ID,
|
||||
ImageType: imgBuild.ImageType,
|
||||
Manifest: imgBuild.Manifest,
|
||||
|
|
@ -229,7 +228,7 @@ func newStoreFromV0(storeStruct storeV0) *Store {
|
|||
return &store
|
||||
}
|
||||
|
||||
func newComposesV0(composes map[uuid.UUID]compose.Compose) composesV0 {
|
||||
func newComposesV0(composes map[uuid.UUID]Compose) composesV0 {
|
||||
composesStruct := make(composesV0)
|
||||
for composeID, compose := range composes {
|
||||
c := composeV0{
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/compose"
|
||||
"github.com/osbuild/osbuild-composer/internal/distro"
|
||||
"github.com/osbuild/osbuild-composer/internal/jsondb"
|
||||
"github.com/osbuild/osbuild-composer/internal/osbuild"
|
||||
|
|
@ -39,7 +38,7 @@ const StoreDBName = "state"
|
|||
type Store struct {
|
||||
blueprints map[string]blueprint.Blueprint
|
||||
workspace map[string]blueprint.Blueprint
|
||||
composes map[uuid.UUID]compose.Compose
|
||||
composes map[uuid.UUID]Compose
|
||||
sources map[string]SourceConfig
|
||||
blueprintsChanges map[string]map[string]blueprint.Change
|
||||
blueprintsCommits map[string][]string
|
||||
|
|
@ -319,7 +318,7 @@ func (s *Store) TagBlueprint(name string) error {
|
|||
})
|
||||
}
|
||||
|
||||
func (s *Store) GetCompose(id uuid.UUID) (compose.Compose, bool) {
|
||||
func (s *Store) GetCompose(id uuid.UUID) (Compose, bool) {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
|
||||
|
|
@ -329,11 +328,11 @@ func (s *Store) GetCompose(id uuid.UUID) (compose.Compose, bool) {
|
|||
|
||||
// GetAllComposes creates a deep copy of all composes present in this store
|
||||
// and returns them as a dictionary with compose UUIDs as keys
|
||||
func (s *Store) GetAllComposes() map[uuid.UUID]compose.Compose {
|
||||
func (s *Store) GetAllComposes() map[uuid.UUID]Compose {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
|
||||
composes := make(map[uuid.UUID]compose.Compose)
|
||||
composes := make(map[uuid.UUID]Compose)
|
||||
|
||||
for id, singleCompose := range s.composes {
|
||||
newCompose := singleCompose.DeepCopy()
|
||||
|
|
@ -415,9 +414,9 @@ func (s *Store) PushCompose(composeID uuid.UUID, manifest *osbuild.Manifest, ima
|
|||
|
||||
// FIXME: handle or comment this possible error
|
||||
_ = s.change(func() error {
|
||||
s.composes[composeID] = compose.Compose{
|
||||
s.composes[composeID] = Compose{
|
||||
Blueprint: bp,
|
||||
ImageBuilds: []compose.ImageBuild{
|
||||
ImageBuilds: []ImageBuild{
|
||||
{
|
||||
Manifest: manifest,
|
||||
ImageType: imageTypeCommon,
|
||||
|
|
@ -474,9 +473,9 @@ func (s *Store) PushTestCompose(composeID uuid.UUID, manifest *osbuild.Manifest,
|
|||
|
||||
// FIXME: handle or comment this possible error
|
||||
_ = s.change(func() error {
|
||||
s.composes[composeID] = compose.Compose{
|
||||
s.composes[composeID] = Compose{
|
||||
Blueprint: bp,
|
||||
ImageBuilds: []compose.ImageBuild{
|
||||
ImageBuilds: []ImageBuild{
|
||||
{
|
||||
QueueStatus: status,
|
||||
Manifest: manifest,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue