wwctl upgrade nodes --replace-overlays avoids applying overlays multiple times
- Closes: #1823 Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
@@ -28,6 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Fix processing of UNDEF and UNSET during `wwctl <node|profile> set`. #1837
|
||||
- Actually cause grub to sleep and reboot when log messages indiacte. #1838
|
||||
- Fixed issue with importing new nodes from yaml. #1842
|
||||
- `wwctl upgrade nodes --replace-overlays` avoids applying overlays multiple times. #1823
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@@ -329,18 +329,10 @@ func (legacy *Node) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded *n
|
||||
}
|
||||
}
|
||||
if replaceOverlays {
|
||||
if indexOf(upgraded.SystemOverlay, "wwinit") != -1 {
|
||||
upgraded.SystemOverlay = replaceSliceElement(
|
||||
upgraded.SystemOverlay,
|
||||
indexOf(upgraded.SystemOverlay, "wwinit"),
|
||||
wwinitSplitOverlays)
|
||||
}
|
||||
if indexOf(upgraded.RuntimeOverlay, "generic") != -1 {
|
||||
upgraded.RuntimeOverlay = replaceSliceElement(
|
||||
upgraded.RuntimeOverlay,
|
||||
indexOf(upgraded.RuntimeOverlay, "generic"),
|
||||
genericSplitOverlays)
|
||||
}
|
||||
upgraded.SystemOverlay = replaceOverlay(
|
||||
upgraded.SystemOverlay, "wwinit", wwinitSplitOverlays)
|
||||
upgraded.RuntimeOverlay = replaceOverlay(
|
||||
upgraded.RuntimeOverlay, "generic", genericSplitOverlays)
|
||||
}
|
||||
if legacy.Resources != nil {
|
||||
for key, value := range legacy.Resources {
|
||||
@@ -535,18 +527,10 @@ func (legacy *Profile) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded
|
||||
}
|
||||
}
|
||||
if replaceOverlays {
|
||||
if indexOf(upgraded.SystemOverlay, "wwinit") != -1 {
|
||||
upgraded.SystemOverlay = replaceSliceElement(
|
||||
upgraded.SystemOverlay,
|
||||
indexOf(upgraded.SystemOverlay, "wwinit"),
|
||||
wwinitSplitOverlays)
|
||||
}
|
||||
if indexOf(upgraded.RuntimeOverlay, "generic") != -1 {
|
||||
upgraded.RuntimeOverlay = replaceSliceElement(
|
||||
upgraded.RuntimeOverlay,
|
||||
indexOf(upgraded.RuntimeOverlay, "generic"),
|
||||
genericSplitOverlays)
|
||||
}
|
||||
upgraded.SystemOverlay = replaceOverlay(
|
||||
upgraded.SystemOverlay, "wwinit", wwinitSplitOverlays)
|
||||
upgraded.RuntimeOverlay = replaceOverlay(
|
||||
upgraded.RuntimeOverlay, "generic", genericSplitOverlays)
|
||||
}
|
||||
if legacy.Resources != nil {
|
||||
for key, value := range legacy.Resources {
|
||||
|
||||
@@ -676,7 +676,7 @@ nodes:
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "replace overlays conflicts",
|
||||
name: "replace overlays",
|
||||
addDefaults: false,
|
||||
replaceOverlays: true,
|
||||
legacyYaml: `
|
||||
@@ -736,6 +736,99 @@ nodes:
|
||||
- debian.interfaces
|
||||
- wicked
|
||||
- ignition
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "replace overlays again",
|
||||
addDefaults: false,
|
||||
replaceOverlays: true,
|
||||
legacyYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
runtime overlay:
|
||||
- hosts
|
||||
- ssh.authorized_keys
|
||||
- syncuser
|
||||
system overlay:
|
||||
- wwinit
|
||||
- wwclient
|
||||
- fstab
|
||||
- hostname
|
||||
- ssh.host_keys
|
||||
- issue
|
||||
- resolv
|
||||
- udev.netname
|
||||
- systemd.netname
|
||||
- ifcfg
|
||||
- NetworkManager
|
||||
- debian.interfaces
|
||||
- wicked
|
||||
- ignition
|
||||
nodes:
|
||||
n1:
|
||||
runtime overlay:
|
||||
- hosts
|
||||
- ssh.authorized_keys
|
||||
- syncuser
|
||||
system overlay:
|
||||
- wwinit
|
||||
- wwclient
|
||||
- fstab
|
||||
- hostname
|
||||
- ssh.host_keys
|
||||
- issue
|
||||
- resolv
|
||||
- udev.netname
|
||||
- systemd.netname
|
||||
- ifcfg
|
||||
- NetworkManager
|
||||
- debian.interfaces
|
||||
- wicked
|
||||
- ignition
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
runtime overlay:
|
||||
- hosts
|
||||
- ssh.authorized_keys
|
||||
- syncuser
|
||||
system overlay:
|
||||
- wwinit
|
||||
- wwclient
|
||||
- fstab
|
||||
- hostname
|
||||
- ssh.host_keys
|
||||
- issue
|
||||
- resolv
|
||||
- udev.netname
|
||||
- systemd.netname
|
||||
- ifcfg
|
||||
- NetworkManager
|
||||
- debian.interfaces
|
||||
- wicked
|
||||
- ignition
|
||||
nodes:
|
||||
n1:
|
||||
runtime overlay:
|
||||
- hosts
|
||||
- ssh.authorized_keys
|
||||
- syncuser
|
||||
system overlay:
|
||||
- wwinit
|
||||
- wwclient
|
||||
- fstab
|
||||
- hostname
|
||||
- ssh.host_keys
|
||||
- issue
|
||||
- resolv
|
||||
- udev.netname
|
||||
- systemd.netname
|
||||
- ifcfg
|
||||
- NetworkManager
|
||||
- debian.interfaces
|
||||
- wicked
|
||||
- ignition
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
||||
@@ -15,3 +15,26 @@ func replaceSliceElement[T any](original []T, index int, replacement []T) []T {
|
||||
}
|
||||
return append(original[:index], append(replacement, original[index+1:]...)...)
|
||||
}
|
||||
|
||||
func replaceOverlay(originals []string, toReplace string, replacements []string) []string {
|
||||
if indexOf(originals, toReplace) == -1 {
|
||||
return originals
|
||||
}
|
||||
|
||||
lookup := make(map[string]bool)
|
||||
for _, v := range originals {
|
||||
lookup[v] = true
|
||||
}
|
||||
|
||||
var newReplacements []string
|
||||
for _, v := range replacements {
|
||||
if !lookup[v] || v == toReplace {
|
||||
newReplacements = append(newReplacements, v)
|
||||
}
|
||||
}
|
||||
|
||||
return replaceSliceElement(
|
||||
originals,
|
||||
indexOf(originals, toReplace),
|
||||
newReplacements)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user