From 4b44de6688923c847b6caa7f1213d69f72be228a Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Wed, 9 Jul 2025 11:35:00 -0600 Subject: [PATCH] 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 --- CHANGELOG.md | 3 +- internal/pkg/upgrade/node.go | 11 ++++- internal/pkg/upgrade/node_test.go | 68 +++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd0657d5..8f5aac3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,13 +18,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Restore default idempotency of `PUT /api/nodes/{id}` - `DELETE /api/overlays/{name}?force=true` can delete overlays that are in use - `warewulfd` overlay autobuild rebuilds overlays after node discovery. #1468 -### Fixed - - Improved netplan support. #1873 ### Fixed - Fixed a bug when cloning an overlay to site when parent is missing +- Fixed `wwctl upgrade nodes` to properly handle kernel argument lists. #1938 ## v4.6.2, 2025-07-09 diff --git a/internal/pkg/upgrade/node.go b/internal/pkg/upgrade/node.go index 4bdab94f..53cd419c 100644 --- a/internal/pkg/upgrade/node.go +++ b/internal/pkg/upgrade/node.go @@ -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) diff --git a/internal/pkg/upgrade/node_test.go b/internal/pkg/upgrade/node_test.go index 5f476b10..4ed513ba 100644 --- a/internal/pkg/upgrade/node_test.go +++ b/internal/pkg/upgrade/node_test.go @@ -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" `, }, {