debian-forge-composer/internal/manifest/vmdk.go
Tom Gundersen 9160319152 manifest/build: move out qemu-img
Let each pipeline that requires it pull in qemu-img.
2022-07-12 08:19:57 +01:00

49 lines
1.3 KiB
Go

package manifest
import (
"github.com/osbuild/osbuild-composer/internal/osbuild2"
)
// A VMDKPipeline turns a raw image file into vmdk image.
type VMDKPipeline struct {
BasePipeline
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(m *Manifest,
buildPipeline *BuildPipeline,
imgPipeline *LiveImgPipeline,
filename string) *VMDKPipeline {
p := &VMDKPipeline{
BasePipeline: NewBasePipeline(m, "vmdk", buildPipeline, nil),
imgPipeline: imgPipeline,
filename: filename,
}
if imgPipeline.BasePipeline.manifest != m {
panic("live image pipeline from different manifest")
}
buildPipeline.addDependent(p)
m.addPipeline(p)
return p
}
func (p *VMDKPipeline) serialize() osbuild2.Pipeline {
pipeline := p.BasePipeline.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
}
func (p *VMDKPipeline) getBuildPackages() []string {
return []string{"qemu-img"}
}