Merge pull request #1938 from anderbubble/wwctl-upgrade-kernel-args-already-list

Fix wwctl upgrade nodes to handle kernel argument lists
This commit is contained in:
Xu YANG
2025-08-01 10:07:22 +09:00
committed by GitHub
3 changed files with 78 additions and 4 deletions

View File

@@ -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

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"
`,
},
{