Refactor kernel args as a slice

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2025-01-21 04:00:22 -07:00
parent 60991141e1
commit 51f61f93c4
14 changed files with 79 additions and 39 deletions

View File

@@ -71,8 +71,8 @@ type IpmiConf struct {
}
type KernelConf struct {
Version string `yaml:"version,omitempty" lopt:"kernelversion" comment:"Set kernel version" json:"version,omitempty"`
Args string `yaml:"args,omitempty" lopt:"kernelargs" sopt:"A" comment:"Set kernel arguments" json:"args,omitempty"`
Version string `yaml:"version,omitempty" lopt:"kernelversion" comment:"Set kernel version" json:"version,omitempty"`
Args []string `yaml:"args,omitempty" lopt:"kernelargs" sopt:"A" comment:"Set kernel arguments" json:"args,omitempty"`
}
type NetDev struct {

View File

@@ -30,7 +30,8 @@ nodes:
nodes:
n1:
kernel:
args: n1 args`,
args:
- n1 args`,
node: "n1",
field: "Kernel.Args",
value: "n1 args",

View File

@@ -284,7 +284,8 @@ nodeprofiles:
nodes:
n1:
kernel:
args: n1 args`,
args:
- n1 args`,
node: "n1",
field: "Kernel.Args",
source: "",
@@ -299,7 +300,8 @@ nodes:
nodeprofiles:
p1:
kernel:
args: p1 args`,
args:
- p1 args`,
node: "n1",
field: "Kernel.Args",
source: "p1",
@@ -315,52 +317,59 @@ nodes:
nodeprofiles:
p1:
kernel:
args: p1 args
args:
- p1 args
p2:
kernel:
args: p2 args`,
args:
- p2 args`,
node: "n1",
field: "Kernel.Args",
source: "p2",
value: "p2 args",
source: "p1,p2",
value: "p1 args,p2 args",
},
"node kernel args supersedes profile kernel args": {
nodesConf: `
nodes:
n1:
kernel:
args: n1 args
args:
- n1 args
profiles:
- p1
nodeprofiles:
p1:
kernel:
args: p1 args`,
args:
- p1 args`,
node: "n1",
field: "Kernel.Args",
source: "SUPERSEDED",
value: "n1 args",
source: "p1,n1",
value: "p1 args,n1 args",
},
"node kernel args supersedes multiple profile kernel args": {
nodesConf: `
nodes:
n1:
kernel:
args: n1 args
args:
- n1 args
profiles:
- p1
- p2
nodeprofiles:
p1:
kernel:
args: p1 args
args:
- p1 args
p2:
kernel:
args: p2 args`,
args:
- p2 args`,
node: "n1",
field: "Kernel.Args",
source: "SUPERSEDED",
value: "n1 args",
source: "p1,p2,n1",
value: "p1 args,p2 args,n1 args",
},
"node tag": {
nodesConf: `
@@ -971,7 +980,8 @@ nodes:
- default
kernel:
version: v1.0.0
args: kernel-args`,
args:
- kernel-args`,
node: "node1",
kernel: nil,
},

View File

@@ -49,7 +49,7 @@ func Test_Node_Expand_Flatten(t *testing.T) {
assert.Equal(t, map[string]string{}, node.Tags)
assert.Equal(t, map[string]string{}, node.Ipmi.Tags)
assert.Equal(t, "", node.Kernel.Version)
assert.Equal(t, "", node.Kernel.Args)
assert.Len(t, node.Kernel.Args, 0)
assert.Equal(t, map[string]*NetDev{}, node.NetDevs)
})
@@ -75,7 +75,7 @@ func Test_Profile_Expand_Flatten(t *testing.T) {
assert.Equal(t, map[string]string{}, profile.Tags)
assert.Equal(t, map[string]string{}, profile.Ipmi.Tags)
assert.Equal(t, "", profile.Kernel.Version)
assert.Equal(t, "", profile.Kernel.Args)
assert.Len(t, profile.Kernel.Args, 0)
assert.Equal(t, map[string]*NetDev{}, profile.NetDevs)
})

View File

@@ -216,7 +216,7 @@ T3
"/var/lib/warewulf/overlays/o1/rootfs/node.txt.ww": `
IPMI user:{{ .Ipmi.UserName}}
Kernel Version:{{.Kernel.Version}}
Kernel Args:{{.Kernel.Args}}
Kernel Args:{{.Kernel.Args | join " "}}
NetDevs:{{.NetDevs}}
Tags:{{.Tags}}
`,

View File

@@ -81,8 +81,8 @@ func (this *NodesYaml) Upgrade(addDefaults bool, replaceOverlays bool, warewulfc
defaultProfile.RuntimeOverlay = append(
defaultProfile.RuntimeOverlay, genericSplitOverlays...)
}
if defaultProfile.Kernel.Args == "" {
defaultProfile.Kernel.Args = "quiet crashkernel=no vga=791 net.naming-scheme=v238"
if len(defaultProfile.Kernel.Args) < 1 {
defaultProfile.Kernel.Args = []string{"quiet", "crashkernel=no", "vga=791", "net.naming-scheme=v238"}
}
if defaultProfile.Init == "" {
defaultProfile.Init = "/sbin/init"
@@ -526,14 +526,23 @@ func (this *IpmiConf) Upgrade() (upgraded *node.IpmiConf) {
}
type KernelConf struct {
Args string `yaml:"args,omitempty"`
Override string `yaml:"override,omitempty"`
Version string `yaml:"version,omitempty"`
Args interface{} `yaml:"args,omitempty"`
Override string `yaml:"override,omitempty"`
Version string `yaml:"version,omitempty"`
}
func (this *KernelConf) Upgrade(imageName string) (upgraded *node.KernelConf) {
upgraded = new(node.KernelConf)
upgraded.Args = this.Args
switch args := this.Args.(type) {
case []string:
upgraded.Args = args
case string:
if args != "" {
upgraded.Args = strings.Fields(args)
}
default:
wwlog.Warn("unable to parse Kernel.Args: %v", this.Args)
}
kernels := kernel.FindKernels(imageName)
wwlog.Debug("referencing kernels: %v (imageName: %v)", kernels, imageName)
if this.Override != "" {

View File

@@ -243,12 +243,14 @@ nodeprofiles:
default:
kernel:
version: "2.6"
args: quiet
args:
- quiet
nodes:
n1:
kernel:
version: "2.6"
args: quiet
args:
- quiet
`,
},
{
@@ -543,7 +545,11 @@ nodeprofiles:
- wicked
- ignition
kernel:
args: quiet crashkernel=no vga=791 net.naming-scheme=v238
args:
- quiet
- crashkernel=no
- vga=791
- net.naming-scheme=v238
init: /sbin/init
root: initramfs
nodes:
@@ -606,7 +612,11 @@ nodeprofiles:
- systemd.netname
- NetworkManager
kernel:
args: quiet crashkernel=no vga=791 net.naming-scheme=v238
args:
- quiet
- crashkernel=no
- vga=791
- net.naming-scheme=v238
init: /sbin/init
root: initramfs
nodes:

View File

@@ -107,7 +107,7 @@ func ProvisionSend(w http.ResponseWriter, req *http.Request) {
Hostname: remoteNode.Id(),
Hwaddr: rinfo.hwaddr,
ImageName: remoteNode.ImageName,
KernelArgs: remoteNode.Kernel.Args,
KernelArgs: strings.Join(remoteNode.Kernel.Args, " "),
KernelVersion: remoteNode.Kernel.Version,
NetDevs: remoteNode.NetDevs,
Tags: remoteNode.Tags}
@@ -177,7 +177,7 @@ func ProvisionSend(w http.ResponseWriter, req *http.Request) {
kernelArgs := ""
kernelVersion := ""
if remoteNode.Kernel != nil {
kernelArgs = remoteNode.Kernel.Args
kernelArgs = strings.Join(remoteNode.Kernel.Args, " ")
kernelVersion = remoteNode.Kernel.Version
}
tmpl_data = &templateVars{