Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions mantle/cmd/kola/qemuexec.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ func runQemuExec(cmd *cobra.Command, args []string) error {
}
config = *newconfig
}
builder, err := platform.NewBuilderFromParsed(config, kola.Options.IgnitionVersion == "v2")
if err != nil {
return errors.Wrapf(err, "creating qemu builder")
builder := platform.NewBuilder()
if err := builder.SetConfig(config, kola.Options.IgnitionVersion == "v2"); err != nil {
return errors.Wrapf(err, "rendering config")
}
builder.ForceConfigInjection = forceConfigInjection
if len(knetargs) > 0 {
Expand Down
3 changes: 2 additions & 1 deletion mantle/platform/machine/unprivqemu/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ func (qc *Cluster) NewMachineWithOptions(userdata *conf.UserData, options platfo
consolePath: filepath.Join(dir, "console.txt"),
}

builder := platform.NewBuilder(confPath, false)
builder := platform.NewBuilder()
builder.ConfigFile = confPath
defer builder.Close()
builder.Uuid = qm.id
builder.Firmware = qc.flight.opts.Firmware
Expand Down
2 changes: 1 addition & 1 deletion mantle/platform/metal.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ func setupMetalImage(builddir, metalimg, destdir string) (string, error) {
}

func newQemuBuilder(firmware string, console bool) *QemuBuilder {
builder := NewBuilder("", false)
builder := NewBuilder()
builder.Firmware = firmware
builder.AddDisk(&Disk{
Size: "12G", // Arbitrary
Expand Down
46 changes: 22 additions & 24 deletions mantle/platform/qemu.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,10 @@ func (inst *QemuInstance) Destroy() {

// QemuBuilder is a configurator that can then create a qemu instance
type QemuBuilder struct {
// Config is a path to Ignition configuration
Config string
// ConfigFile is a path to Ignition configuration
ConfigFile string
// ForceConfigInjection is useful for booting `metal` images directly
ForceConfigInjection bool

Memory int
Processors int
Expand All @@ -160,8 +162,6 @@ type QemuBuilder struct {
// IgnitionNetworkKargs are written to /boot/ignition
IgnitionNetworkKargs string

ForceConfigInjection bool

Hostname string

InheritConsole bool
Expand All @@ -176,47 +176,45 @@ type QemuBuilder struct {
fds []*os.File
}

func NewBuilder(config string, forceIgnInjection bool) *QemuBuilder {
func NewBuilder() *QemuBuilder {
ret := QemuBuilder{
Config: config,
ForceConfigInjection: forceIgnInjection,
Firmware: "bios",
Swtpm: true,
Pdeathsig: true,
Argv: []string{},
Firmware: "bios",
Swtpm: true,
Pdeathsig: true,
Argv: []string{},
}
return &ret
}

func NewBuilderFromParsed(config v3types.Config, convSpec2 bool) (*QemuBuilder, error) {
func (builder *QemuBuilder) SetConfig(config v3types.Config, convSpec2 bool) error {
var configBuf []byte
var err error
if convSpec2 {
ignc2, err := ignconverter.Translate3to2(config)
if err != nil {
return nil, err
return err
}
configBuf, err = json.Marshal(ignc2)
if err != nil {
return nil, err
return err
}
} else {
configBuf, err = json.Marshal(config)
if err != nil {
return nil, err
return err
}
}
tmpf, err := ioutil.TempFile("", "mantle-qemu-ign")
if err != nil {
return nil, err
return err
}
if _, err := tmpf.Write(configBuf); err != nil {
return nil, err
return err
}

builder := NewBuilder(tmpf.Name(), false)
builder.ConfigFile = tmpf.Name()
builder.cleanupConfig = true
return builder, nil
return nil
}

// AddFd appends a file descriptor that will be passed to qemu,
Expand Down Expand Up @@ -510,9 +508,9 @@ func (builder *QemuBuilder) addDiskImpl(disk *Disk, primary bool) error {
if primary {
// If the board doesn't support -fw_cfg or we were explicitly
// requested, inject via libguestfs on the primary disk.
requiresInjection := builder.Config != "" && (builder.ForceConfigInjection || !builder.supportsFwCfg())
requiresInjection := builder.ConfigFile != "" && (builder.ForceConfigInjection || !builder.supportsFwCfg())
if requiresInjection || builder.IgnitionNetworkKargs != "" || builder.AppendKernelArguments != "" {
if err = setupPreboot(builder.Config, builder.IgnitionNetworkKargs, builder.AppendKernelArguments,
if err = setupPreboot(builder.ConfigFile, builder.IgnitionNetworkKargs, builder.AppendKernelArguments,
dstFileName, disk.SectorSize); err != nil {
return errors.Wrapf(err, "ignition injection with guestfs failed")
}
Expand Down Expand Up @@ -695,9 +693,9 @@ func (builder *QemuBuilder) Exec() (*QemuInstance, error) {
argv = append(argv, "-nographic")

// Handle Ignition
if builder.Config != "" {
if builder.ConfigFile != "" {
if builder.supportsFwCfg() {
builder.Append("-fw_cfg", "name=opt/com.coreos/config,file="+builder.Config)
builder.Append("-fw_cfg", "name=opt/com.coreos/config,file="+builder.ConfigFile)
} else if !builder.primaryDiskAdded {
// Otherwise, we should have handled it in builder.AddPrimaryDisk
panic("Ignition specified but no primary disk")
Expand Down Expand Up @@ -760,7 +758,7 @@ func (builder *QemuBuilder) Exec() (*QemuInstance, error) {
}

if builder.cleanupConfig {
inst.tmpConfig = builder.Config
inst.tmpConfig = builder.ConfigFile
}

if err = inst.qemu.Start(); err != nil {
Expand Down