Skip to content

Commit

Permalink
mantle: Clean up firmware handling
Browse files Browse the repository at this point in the history
Prep for switching the default to UEFI on x86_64 in
coreos#3159

- Move the logic for default firmware into the constructor
- Fix various places that were overriding it with the empty string
- Return errors instead of panic on unknown firmware
  • Loading branch information
cgwalters committed Nov 15, 2022
1 parent 9e68cf2 commit cfd3195
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
4 changes: 3 additions & 1 deletion mantle/cmd/kola/qemuexec.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,9 @@ func runQemuExec(cmd *cobra.Command, args []string) error {
builder.AppendFirstbootKernelArgs = firstbootkargs
}
builder.AppendKernelArgs = strings.Join(kargs, " ")
builder.Firmware = kola.QEMUOptions.Firmware
if kola.QEMUOptions.Firmware != "" {
builder.Firmware = kola.QEMUOptions.Firmware
}
if kola.QEMUOptions.DiskImage != "" {
channel := "virtio"
if kola.QEMUOptions.Nvme {
Expand Down
4 changes: 3 additions & 1 deletion mantle/platform/machine/unprivqemu/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ func (qc *Cluster) NewMachineWithQemuOptions(userdata *conf.UserData, options pl
builder.ConfigFile = confPath
defer builder.Close()
builder.UUID = qm.id
builder.Firmware = qc.flight.opts.Firmware
if qc.flight.opts.Firmware != "" {
builder.Firmware = qc.flight.opts.Firmware
}
builder.Swtpm = qc.flight.opts.Swtpm
builder.Hostname = fmt.Sprintf("qemu%d", qc.BaseCluster.AllocateMachineSerial())
builder.ConsoleFile = qm.consolePath
Expand Down
21 changes: 17 additions & 4 deletions mantle/platform/qemu.go
Original file line number Diff line number Diff line change
Expand Up @@ -448,8 +448,17 @@ type QemuBuilder struct {

// NewQemuBuilder creates a new build for QEMU with default settings.
func NewQemuBuilder() *QemuBuilder {
var defaultFirmware string
switch coreosarch.CurrentRpmArch() {
case "x86_64":
defaultFirmware = "bios"
case "aarch64":
defaultFirmware = "uefi"
default:
defaultFirmware = ""
}
ret := QemuBuilder{
Firmware: "bios",
Firmware: defaultFirmware,
Swtpm: true,
Pdeathsig: true,
Argv: []string{},
Expand Down Expand Up @@ -1395,8 +1404,8 @@ func (builder *QemuBuilder) Exec() (*QemuInstance, error) {
argv = append(argv, "-smp", fmt.Sprintf("%d", builder.Processors))

switch builder.Firmware {
case "bios":
break
case "":
// Nothing to do, use qemu default
case "uefi":
if err := builder.setupUefi(false); err != nil {
return nil, err
Expand All @@ -1405,8 +1414,12 @@ func (builder *QemuBuilder) Exec() (*QemuInstance, error) {
if err := builder.setupUefi(true); err != nil {
return nil, err
}
case "bios":
if coreosarch.CurrentRpmArch() != "x86_64" {
return nil, fmt.Errorf("unknown firmware: %s", builder.Firmware)
}
default:
panic(fmt.Sprintf("Unknown firmware: %s", builder.Firmware))
return nil, fmt.Errorf("unknown firmware: %s", builder.Firmware)
}

// We always provide a random source
Expand Down

0 comments on commit cfd3195

Please sign in to comment.