Fix wwctl upgrade nodes to handle kernel argument lists

`wwctl upgrade nodes` could convert legacy kernel argument formats to
the new list format, but then wasn't properly parsing the new list
format for repeat runs.

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2025-07-09 11:35:00 -06:00
parent c7c6e78087
commit 4b44de6688
3 changed files with 78 additions and 4 deletions

View File

@@ -588,8 +588,15 @@ type KernelConf struct {
func (legacy *KernelConf) Upgrade(imageName string) (upgraded *node.KernelConf) {
upgraded = new(node.KernelConf)
switch args := legacy.Args.(type) {
case []string:
upgraded.Args = args
case []interface{}:
for _, arg := range args {
switch arg.(type) {
case map[string]interface{}, []interface{}, map[interface{}]interface{}:
wwlog.Warn("unable to parse Kernel.Args: non-scalar value %v", arg)
default:
upgraded.Args = append(upgraded.Args, fmt.Sprintf("%v", arg))
}
}
case string:
if args != "" {
upgraded.Args = strings.Fields(args)

View File

@@ -251,6 +251,74 @@ nodes:
version: "2.6"
args:
- quiet
`,
},
{
name: "Kernel args as string",
addDefaults: false,
replaceOverlays: false,
legacyYaml: `
nodeprofiles:
default:
kernel:
version: "2.6"
args: quiet
nodes:
n1:
kernel:
version: "2.6"
args: quiet
`,
upgradedYaml: `
nodeprofiles:
default:
kernel:
version: "2.6"
args:
- quiet
nodes:
n1:
kernel:
version: "2.6"
args:
- quiet
`,
},
{
name: "Kernel args as list",
addDefaults: false,
replaceOverlays: false,
legacyYaml: `
nodeprofiles:
default:
kernel:
version: "2.6"
args:
- quiet
- 1
nodes:
n1:
kernel:
version: "2.6"
args:
- quiet
- 2
`,
upgradedYaml: `
nodeprofiles:
default:
kernel:
version: "2.6"
args:
- quiet
- "1"
nodes:
n1:
kernel:
version: "2.6"
args:
- quiet
- "2"
`,
},
{