Files
warewulf/internal/pkg/configure/hostfile.go
Jonathon Anderson c244adc7f6 Performance improvements for overlay build
Rendering overlay templates requires fetching and populating / merging all
other nodes, because overlay templates have access to all cluster node info.
This was previously being done for each template render, but is not being done
once for each render operation and re-used for each template render.

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
2024-12-25 08:48:14 -07:00

57 lines
1.2 KiB
Go

package configure
import (
"fmt"
"os"
"path"
"github.com/warewulf/warewulf/internal/pkg/node"
"github.com/warewulf/warewulf/internal/pkg/overlay"
"github.com/warewulf/warewulf/internal/pkg/util"
)
/*
Creates '/etc/hosts' from the host template.
*/
func Hostfile() (err error) {
overlay_ := overlay.GetOverlay("host")
hostTemplate := path.Join(overlay_.Rootfs(), "/etc/hosts.ww")
if !(util.IsFile(hostTemplate)) {
return fmt.Errorf("'the overlay template '/etc/hosts.ww' does not exists in 'host' overlay")
}
var allNodes []node.Node
if nodeDB, err := node.New(); err != nil {
return err
} else {
allNodes, err = nodeDB.FindAllNodes()
if err != nil {
return err
}
}
hostname, _ := os.Hostname()
tstruct, err := overlay.InitStruct(overlay_.Name(), node.NewNode(hostname), allNodes)
if err != nil {
return err
}
buffer, backupFile, writeFile, err := overlay.RenderTemplateFile(
hostTemplate,
tstruct)
if err != nil {
return
}
info, err := os.Stat(hostTemplate)
if err != nil {
return
}
if writeFile {
err = overlay.CarefulWriteBuffer("/etc/hosts", buffer, backupFile, info.Mode())
if err != nil {
return fmt.Errorf("could not write file from template: %w", err)
}
}
return
}