Files
clr-installer/tui/kernel_cmdline.go
T
Leandro Dorileo 3ed4c7ddfa kernel arguments: add "remove kernel arguments" support
We are relying on clr-boot-manager's cmdline-removal feature which
prevents a kernel argument to be added to the boot manager kernel
entry.

Signed-off-by: Leandro Dorileo <leandro.maciel.dorileo@intel.com>
2018-09-20 16:39:35 -07:00

137 lines
3.8 KiB
Go

// Copyright © 2018 Intel Corporation
//
// SPDX-License-Identifier: GPL-3.0-only
package tui
import (
"fmt"
"strings"
"github.com/VladimirMarkelov/clui"
)
// KernelCMDLine is the Page implementation for the kernel cmd line configuration page
type KernelCMDLine struct {
BasePage
addKernelArgEdit *clui.EditField
remKernelArgEdit *clui.EditField
}
const (
kernelArgsHelp = `Note: The boot manager tool will first include the "Add Extra Arguments"
items, then the "Remove Arguments" items are removed. The final
argument list contains the kernel bundle's configured arguments
and the ones configured by the user.`
)
// GetConfiguredValue Returns the string representation of currently value set
func (pp *KernelCMDLine) GetConfiguredValue() string {
result := ""
if pp.getModel().KernelArguments != nil {
values := []string{}
addKernelArgs := strings.Join(pp.getModel().KernelArguments.Add, " ")
remKernelArgs := strings.Join(pp.getModel().KernelArguments.Remove, " ")
if addKernelArgs != "" {
values = append(values, fmt.Sprintf("Add: %s", addKernelArgs))
}
if remKernelArgs != "" {
values = append(values, fmt.Sprintf("Remove: %s", remKernelArgs))
}
result = strings.Join(values, " | ")
}
if result == "" {
return "No kernel command line configuration defined"
}
return result
}
// Activate sets the kernel cmd line configuration with the current model's value
func (pp *KernelCMDLine) Activate() {
if pp.getModel().KernelArguments == nil {
return
}
addKernelArgs := strings.Join(pp.getModel().KernelArguments.Add, " ")
remKernelArgs := strings.Join(pp.getModel().KernelArguments.Remove, " ")
pp.addKernelArgEdit.SetTitle(addKernelArgs)
pp.remKernelArgEdit.SetTitle(remKernelArgs)
}
func newKernelCMDLine(tui *Tui) (Page, error) {
page := &KernelCMDLine{}
page.setupMenu(tui, TuiPageKernelCMDLine, "Kernel Command Line", NoButtons, TuiPageMenu)
clui.CreateLabel(page.content, 2, 2, "Add or Remove Extra Kernel Command Line Arguments",
Fixed)
helpLabel := clui.CreateLabel(page.content, 2, 5, kernelArgsHelp, Fixed)
helpLabel.SetMultiline(true)
frm := clui.CreateFrame(page.content, AutoSize, AutoSize, BorderNone, Fixed)
frm.SetPack(clui.Horizontal)
lblFrm := clui.CreateFrame(frm, 20, AutoSize, BorderNone, Fixed)
lblFrm.SetPack(clui.Vertical)
lblFrm.SetPaddings(1, 0)
newFieldLabel(lblFrm, "Add Extra Arguments:")
newFieldLabel(lblFrm, "Remove Arguments:")
fldFrm := clui.CreateFrame(frm, 30, AutoSize, BorderNone, Fixed)
fldFrm.SetPack(clui.Vertical)
iframe := clui.CreateFrame(fldFrm, 5, 2, BorderNone, Fixed)
iframe.SetPack(clui.Vertical)
page.addKernelArgEdit = clui.CreateEditField(iframe, 1, "", Fixed)
iframe = clui.CreateFrame(fldFrm, 5, 2, BorderNone, Fixed)
iframe.SetPack(clui.Vertical)
page.remKernelArgEdit = clui.CreateEditField(iframe, 1, "", Fixed)
btnFrm := clui.CreateFrame(fldFrm, 30, 1, BorderNone, Fixed)
btnFrm.SetPack(clui.Horizontal)
btnFrm.SetGaps(1, 1)
btnFrm.SetPaddings(2, 0)
cancelBtn := CreateSimpleButton(btnFrm, AutoSize, AutoSize, "Cancel", Fixed)
cancelBtn.OnClick(func(ev clui.Event) {
page.GotoPage(TuiPageMenu)
})
confirmBtn := CreateSimpleButton(btnFrm, AutoSize, AutoSize, "Confirm", Fixed)
confirmBtn.OnClick(func(ev clui.Event) {
addKernelArguments := page.addKernelArgEdit.Title()
remKernelArguments := page.remKernelArgEdit.Title()
if addKernelArguments != "" {
page.getModel().AddExtraKernelArguments(strings.Split(addKernelArguments, " "))
}
if remKernelArguments != "" {
page.getModel().RemoveKernelArguments(strings.Split(remKernelArguments, " "))
}
done := page.addKernelArgEdit.Title() != "" || page.remKernelArgEdit.Title() != ""
page.SetDone(done)
page.GotoPage(TuiPageMenu)
})
page.activated = page.addKernelArgEdit
return page, nil
}