Update ipxe and grub configuration for clarity #1156

Also:

- Defined a menu for iPXE
- Support a IPXEMenuEntry tag to select the boot method
- Merge iPXE dracut support into default.ipxe (use IPXEMenuEntry=dracut)

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2025-02-12 11:43:43 -07:00
parent 34e8aa7402
commit fb9f269fc5
8 changed files with 358 additions and 244 deletions

View File

@@ -226,7 +226,31 @@ func (legacy *Node) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded *n
if upgraded.Ipmi.Write == "" && legacy.IpmiWrite != "" {
warnError(upgraded.Ipmi.Write.Set(legacy.IpmiWrite))
}
upgraded.Ipxe = legacy.Ipxe
if legacy.Keys != nil {
for key, value := range legacy.Keys {
upgraded.Tags[key] = value
}
}
if legacy.Tags != nil {
for key, value := range legacy.Tags {
upgraded.Tags[key] = value
}
}
for _, tag := range legacy.TagsDel {
delete(upgraded.Tags, tag)
}
if legacy.Ipxe == "dracut" {
if _, ok := upgraded.Tags["IPXEMenuEntry"]; !ok {
wwlog.Info("Replacing ipxe template 'dracut' with 'default' and setting tag 'IPXEMenuEntry=dracut'")
upgraded.Ipxe = "default"
upgraded.Tags["IPXEMenuEntry"] = "dracut"
} else {
wwlog.Warn("Found ipxe template 'dracut' but tag 'IPXEMenuEntry' is already set; ignoring")
upgraded.Ipxe = legacy.Ipxe
}
} else {
upgraded.Ipxe = legacy.Ipxe
}
if legacy.Kernel != nil {
upgraded.Kernel = legacy.Kernel.Upgrade(upgraded.ImageName)
} else {
@@ -237,11 +261,6 @@ func (legacy *Node) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded *n
}
upgraded.Kernel = inlineKernel.Upgrade(upgraded.ImageName)
}
if legacy.Keys != nil {
for key, value := range legacy.Keys {
upgraded.Tags[key] = value
}
}
if legacy.NetDevs != nil {
for name, netDev := range legacy.NetDevs {
upgraded.NetDevs[name] = netDev.Upgrade(false)
@@ -313,14 +332,6 @@ func (legacy *Node) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded *n
genericSplitOverlays)
}
}
if legacy.Tags != nil {
for key, value := range legacy.Tags {
upgraded.Tags[key] = value
}
}
for _, tag := range legacy.TagsDel {
delete(upgraded.Tags, tag)
}
return
}
@@ -427,7 +438,31 @@ func (legacy *Profile) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded
if upgraded.Ipmi.Write == "" && legacy.IpmiWrite != "" {
warnError(upgraded.Ipmi.Write.Set(legacy.IpmiWrite))
}
upgraded.Ipxe = legacy.Ipxe
if legacy.Keys != nil {
for key, value := range legacy.Keys {
upgraded.Tags[key] = value
}
}
if legacy.Tags != nil {
for key, value := range legacy.Tags {
upgraded.Tags[key] = value
}
}
for _, tag := range legacy.TagsDel {
delete(upgraded.Tags, tag)
}
if legacy.Ipxe == "dracut" {
if _, ok := upgraded.Tags["IPXEMenuEntry"]; !ok {
wwlog.Info("Replacing ipxe template 'dracut' with 'default' and setting tag 'IPXEMenuEntry=dracut'")
upgraded.Ipxe = "default"
upgraded.Tags["IPXEMenuEntry"] = "dracut"
} else {
wwlog.Warn("Found ipxe template 'dracut' but tag 'IPXEMenuEntry' is already set; ignoring")
upgraded.Ipxe = legacy.Ipxe
}
} else {
upgraded.Ipxe = legacy.Ipxe
}
if legacy.Kernel != nil {
upgraded.Kernel = legacy.Kernel.Upgrade(upgraded.ImageName)
} else {
@@ -438,11 +473,6 @@ func (legacy *Profile) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded
}
upgraded.Kernel = inlineKernel.Upgrade(upgraded.ImageName)
}
if legacy.Keys != nil {
for key, value := range legacy.Keys {
upgraded.Tags[key] = value
}
}
if legacy.NetDevs != nil {
for name, netDev := range legacy.NetDevs {
upgraded.NetDevs[name] = netDev.Upgrade(addDefaults)
@@ -503,14 +533,6 @@ func (legacy *Profile) Upgrade(addDefaults bool, replaceOverlays bool) (upgraded
genericSplitOverlays)
}
}
if legacy.Tags != nil {
for key, value := range legacy.Tags {
upgraded.Tags[key] = value
}
}
for _, tag := range legacy.TagsDel {
delete(upgraded.Tags, tag)
}
if legacy.Resources != nil {
for key, value := range legacy.Resources {
upgraded.Resources[key] = value

View File

@@ -852,6 +852,29 @@ nfs:
mount: true
- path: /var
mount: false
`,
},
{
name: "Replace dracut template with IPXEMenuEntry",
legacyYaml: `
nodeprofiles:
default:
ipxe template: dracut
nodes:
n1:
ipxe template: dracut
`,
upgradedYaml: `
nodeprofiles:
default:
ipxe template: default
tags:
IPXEMenuEntry: dracut
nodes:
n1:
ipxe template: default
tags:
IPXEMenuEntry: dracut
`,
},
}