Blame internal/store/compose.go

Packit 63bb0d
package store
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"time"
Packit 63bb0d
Packit 63bb0d
	"github.com/google/uuid"
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/distro"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/target"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type StateTransitionError struct {
Packit 63bb0d
	message string
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (ste *StateTransitionError) Error() string {
Packit 63bb0d
	return ste.message
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ImageBuild represents a single image build inside a compose
Packit 63bb0d
type ImageBuild struct {
Packit 63bb0d
	ID          int
Packit 63bb0d
	ImageType   distro.ImageType
Packit 63bb0d
	Manifest    distro.Manifest
Packit 63bb0d
	Targets     []*target.Target
Packit 63bb0d
	JobCreated  time.Time
Packit 63bb0d
	JobStarted  time.Time
Packit 63bb0d
	JobFinished time.Time
Packit 63bb0d
	Size        uint64
Packit 63bb0d
	JobID       uuid.UUID
Packit 63bb0d
	// Kept for backwards compatibility. Image builds which were done
Packit 63bb0d
	// before the move to the job queue use this to store whether they
Packit 63bb0d
	// finished successfully.
Packit 63bb0d
	QueueStatus common.ImageBuildState
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// DeepCopy creates a copy of the ImageBuild structure
Packit 63bb0d
func (ib *ImageBuild) DeepCopy() ImageBuild {
Packit 63bb0d
	var newTargets []*target.Target
Packit 63bb0d
	for _, t := range ib.Targets {
Packit 63bb0d
		newTarget := *t
Packit 63bb0d
		newTargets = append(newTargets, &newTarget)
Packit 63bb0d
	}
Packit 63bb0d
	// Create new image build struct
Packit 63bb0d
	return ImageBuild{
Packit 63bb0d
		ID:          ib.ID,
Packit 63bb0d
		QueueStatus: ib.QueueStatus,
Packit 63bb0d
		ImageType:   ib.ImageType,
Packit 63bb0d
		Manifest:    ib.Manifest,
Packit 63bb0d
		Targets:     newTargets,
Packit 63bb0d
		JobCreated:  ib.JobCreated,
Packit 63bb0d
		JobStarted:  ib.JobStarted,
Packit 63bb0d
		JobFinished: ib.JobFinished,
Packit 63bb0d
		Size:        ib.Size,
Packit 63bb0d
		JobID:       ib.JobID,
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (ib *ImageBuild) GetLocalTargetOptions() *target.LocalTargetOptions {
Packit 63bb0d
	for _, t := range ib.Targets {
Packit 63bb0d
		switch options := t.Options.(type) {
Packit 63bb0d
		case *target.LocalTargetOptions:
Packit 63bb0d
			return options
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return nil
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// A Compose represent the task of building a set of images from a single blueprint.
Packit 63bb0d
// It contains all the information necessary to generate the inputs for the job, as
Packit 63bb0d
// well as the job's state.
Packit 63bb0d
type Compose struct {
Packit 63bb0d
	Blueprint  *blueprint.Blueprint
Packit 63bb0d
	ImageBuild ImageBuild
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// DeepCopy creates a copy of the Compose structure
Packit 63bb0d
func (c *Compose) DeepCopy() Compose {
Packit 63bb0d
	var newBpPtr *blueprint.Blueprint = nil
Packit 63bb0d
	if c.Blueprint != nil {
Packit 63bb0d
		bpCopy := *c.Blueprint
Packit 63bb0d
		newBpPtr = &bpCopy
Packit 63bb0d
	}
Packit 63bb0d
	return Compose{
Packit 63bb0d
		Blueprint:  newBpPtr,
Packit 63bb0d
		ImageBuild: c.ImageBuild.DeepCopy(),
Packit 63bb0d
	}
Packit 63bb0d
}