Removes the use of init() to initialize the variable. - Closes: #1596 - See also: #1569 Signed-off-by: Jonathon Anderson <janderson@ciq.com>
102 lines
2.1 KiB
Go
102 lines
2.1 KiB
Go
package warewulfd
|
|
|
|
import (
|
|
"bufio"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/warewulf/warewulf/internal/pkg/config"
|
|
"github.com/warewulf/warewulf/internal/pkg/node"
|
|
"github.com/warewulf/warewulf/internal/pkg/overlay"
|
|
"github.com/warewulf/warewulf/internal/pkg/util"
|
|
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
|
)
|
|
|
|
func sendFile(
|
|
w http.ResponseWriter,
|
|
req *http.Request,
|
|
filename string,
|
|
sendto string) error {
|
|
|
|
fd, err := os.Open(filename)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return err
|
|
}
|
|
defer fd.Close()
|
|
|
|
stat, err := fd.Stat()
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return err
|
|
}
|
|
|
|
http.ServeContent(
|
|
w,
|
|
req,
|
|
filename,
|
|
stat.ModTime(),
|
|
fd)
|
|
|
|
wwlog.Info("send %s -> %s", filename, sendto)
|
|
req.Body.Close()
|
|
return nil
|
|
}
|
|
|
|
func getOverlayFile(n node.Node, context string, stage_overlays []string, autobuild bool) (stage_file string, err error) {
|
|
|
|
stage_file = overlay.OverlayImage(n.Id(), context, stage_overlays)
|
|
err = nil
|
|
build := !util.IsFile(stage_file)
|
|
wwlog.Verbose("stage file: %s", stage_file)
|
|
if !build && autobuild {
|
|
build = util.PathIsNewer(stage_file, config.Get().Paths.NodesConf())
|
|
|
|
for _, overlayname := range stage_overlays {
|
|
build = build || util.PathIsNewer(stage_file, overlay.OverlaySourceDir(overlayname))
|
|
}
|
|
}
|
|
|
|
if build {
|
|
if len(stage_overlays) > 0 {
|
|
err = overlay.BuildSpecificOverlays([]node.Node{n}, stage_overlays)
|
|
} else {
|
|
err = overlay.BuildAllOverlays([]node.Node{n})
|
|
}
|
|
if err != nil {
|
|
wwlog.Error("Failed to build overlay: %s, %s, %s\n%s",
|
|
n.Id(), stage_overlays, stage_file, err)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
var arpFile string
|
|
|
|
func init() {
|
|
arpFile = "/proc/net/arp"
|
|
}
|
|
|
|
/*
|
|
returns the mac address if it has an entry in the arp cache
|
|
*/
|
|
func ArpFind(ip string) (mac string) {
|
|
arpCache, err := os.Open(arpFile)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer arpCache.Close()
|
|
|
|
scanner := bufio.NewScanner(arpCache)
|
|
scanner.Scan()
|
|
for scanner.Scan() {
|
|
fields := strings.Fields(scanner.Text())
|
|
if strings.EqualFold(fields[0], ip) {
|
|
return fields[3]
|
|
}
|
|
}
|
|
return
|
|
}
|