Stages are procedural and named after the tool they wrap, but pipelines are declarative and should be named after the kind of artefact they produce. This splits the qemu (the tool) pipeline into qcow2, vmdk, and vpc (the formats) pipelines. In theory we may have wanted to implemented through some shared helpers, but for now it seems trivial enough that it is not worth it.
36 lines
1 KiB
Go
36 lines
1 KiB
Go
package pipeline
|
|
|
|
import (
|
|
"github.com/osbuild/osbuild-composer/internal/osbuild2"
|
|
)
|
|
|
|
// A VMDKPipeline turns a raw image file into vmdk image.
|
|
type VMDKPipeline struct {
|
|
Pipeline
|
|
|
|
imgPipeline *LiveImgPipeline
|
|
filename string
|
|
}
|
|
|
|
// NewVMDKPipeline creates a new VMDK pipeline. imgPipeline is the pipeline producing the
|
|
// raw image. Filename is the name of the produced image.
|
|
func NewVMDKPipeline(buildPipeline *BuildPipeline, imgPipeline *LiveImgPipeline, filename string) VMDKPipeline {
|
|
return VMDKPipeline{
|
|
Pipeline: New("vmdk", buildPipeline, nil),
|
|
imgPipeline: imgPipeline,
|
|
filename: filename,
|
|
}
|
|
}
|
|
|
|
func (p VMDKPipeline) Serialize() osbuild2.Pipeline {
|
|
pipeline := p.Pipeline.Serialize()
|
|
|
|
pipeline.AddStage(osbuild2.NewQEMUStage(
|
|
osbuild2.NewQEMUStageOptions(p.filename, osbuild2.QEMUFormatVMDK, osbuild2.VMDKOptions{
|
|
Subformat: osbuild2.VMDKSubformatStreamOptimized,
|
|
}),
|
|
osbuild2.NewQemuStagePipelineFilesInputs(p.imgPipeline.Name(), p.imgPipeline.Filename()),
|
|
))
|
|
|
|
return pipeline
|
|
}
|