Merge pull request #122 from gmkurtzer/log_timestamps
Adding timestamps to log output
This commit is contained in:
@@ -2,9 +2,10 @@ package reload
|
||||
|
||||
import (
|
||||
"github.com/hpcng/warewulf/internal/pkg/warewulfd"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
return warewulfd.DaemonReload()
|
||||
return errors.Wrap(warewulfd.DaemonReload(), "failed to reload Warewulf server")
|
||||
}
|
||||
|
||||
@@ -7,5 +7,9 @@ import (
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
return errors.Wrap(warewulfd.DaemonStop(), "failed to stop warewulf daemon")
|
||||
err := warewulfd.DaemonStop()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to stop Warewulf server")
|
||||
}
|
||||
return errors.Wrap(warewulfd.DaemonStart(), "failed to start Warewulf server")
|
||||
}
|
||||
|
||||
@@ -2,13 +2,14 @@ package start
|
||||
|
||||
import (
|
||||
"github.com/hpcng/warewulf/internal/pkg/warewulfd"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetForeground {
|
||||
return warewulfd.RunServer()
|
||||
return errors.Wrap(warewulfd.RunServer(), "failed to start Warewulf server")
|
||||
} else {
|
||||
return warewulfd.DaemonStart()
|
||||
return errors.Wrap(warewulfd.DaemonStart(), "failed to start Warewulf server")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,9 @@ package status
|
||||
|
||||
import (
|
||||
"github.com/hpcng/warewulf/internal/pkg/warewulfd"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
return errors.Wrap(warewulfd.DaemonStatus(), "failed to start daemon")
|
||||
return warewulfd.DaemonStatus()
|
||||
}
|
||||
|
||||
@@ -7,5 +7,5 @@ import (
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
return errors.Wrap(warewulfd.DaemonStop(), "failed to stop warewulf daemon")
|
||||
return errors.Wrap(warewulfd.DaemonStop(), "failed to stop Warewulf server")
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/container"
|
||||
@@ -11,7 +10,7 @@ func ContainerSend(w http.ResponseWriter, req *http.Request) {
|
||||
node, err := getSanity(req)
|
||||
if err != nil {
|
||||
w.WriteHeader(404)
|
||||
log.Panicln(err)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -20,13 +19,11 @@ func ContainerSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
err = sendFile(w, containerImage, node.Id.Get())
|
||||
if err != nil {
|
||||
log.Printf("ERROR1: %s\n", err)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
w.WriteHeader(503)
|
||||
} else {
|
||||
log.Printf("SEND: %15s: %s\n", node.Id.Get(), containerImage)
|
||||
}
|
||||
} else {
|
||||
w.WriteHeader(503)
|
||||
log.Printf("ERROR: No Container set for node %s\n", node.Id.Get())
|
||||
daemonLogf("WARNING: No Container set for node %s\n", node.Id.Get())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"syscall"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/util"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
@@ -24,7 +23,12 @@ func DaemonStart() error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to run server")
|
||||
}
|
||||
|
||||
} else {
|
||||
if util.IsFile(WAREWULFD_PIDFILE) {
|
||||
return errors.New("process is already running")
|
||||
}
|
||||
|
||||
os.Setenv("WAREWULFD_BACKGROUND", "1")
|
||||
|
||||
f, err := os.OpenFile(WAREWULFD_LOGFILE, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
||||
@@ -36,6 +40,7 @@ func DaemonStart() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer p.Close()
|
||||
|
||||
cmd := exec.Command(os.Args[0], "server", "start")
|
||||
cmd.Stdout = f
|
||||
@@ -48,7 +53,7 @@ func DaemonStart() error {
|
||||
|
||||
fmt.Fprintf(p, "%d", pid)
|
||||
|
||||
p.Close()
|
||||
fmt.Printf("Started Warewulf server at PID: %d\n", pid)
|
||||
|
||||
}
|
||||
|
||||
@@ -57,27 +62,24 @@ func DaemonStart() error {
|
||||
|
||||
func DaemonStatus() error {
|
||||
if !util.IsFile(WAREWULFD_PIDFILE) {
|
||||
wwlog.Printf(wwlog.INFO, "Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE)
|
||||
return nil
|
||||
return errors.New("Warewulf server is not running")
|
||||
}
|
||||
|
||||
dat, err := ioutil.ReadFile(WAREWULFD_PIDFILE)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrap(err, "could not read Warewulfd PID file")
|
||||
}
|
||||
|
||||
pid, _ := strconv.Atoi(string(dat))
|
||||
process, err := os.FindProcess(pid)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to find process: %s\n", err)
|
||||
return err
|
||||
return errors.Wrap(err, "failed to find running PID")
|
||||
} else {
|
||||
err := process.Signal(syscall.Signal(0))
|
||||
if err != nil {
|
||||
fmt.Printf("SIGCONT on pid %d returned: %v\n", pid, err)
|
||||
return err
|
||||
return errors.Wrap(err, "failed to send process SIGCONT")
|
||||
} else {
|
||||
fmt.Printf("Warewulf daemon is running at PID: %d\n", pid)
|
||||
fmt.Printf("Warewulf server is running at PID: %d\n", pid)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,26 +88,22 @@ func DaemonStatus() error {
|
||||
|
||||
func DaemonReload() error {
|
||||
if !util.IsFile(WAREWULFD_PIDFILE) {
|
||||
wwlog.Printf(wwlog.INFO, "Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE)
|
||||
return nil
|
||||
return errors.New("Warewulf server is not running")
|
||||
}
|
||||
|
||||
dat, err := ioutil.ReadFile(WAREWULFD_PIDFILE)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrap(err, "could not read Warewulfd PID file")
|
||||
}
|
||||
|
||||
pid, _ := strconv.Atoi(string(dat))
|
||||
process, err := os.FindProcess(pid)
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to find process: %s\n", err)
|
||||
return err
|
||||
return errors.Wrap(err, "failed to find running PID")
|
||||
} else {
|
||||
err := process.Signal(syscall.Signal(syscall.SIGHUP))
|
||||
if err != nil {
|
||||
fmt.Printf("SIGCONT on pid %d returned: %v\n", pid, err)
|
||||
return err
|
||||
return errors.Wrap(err, "failed to send process SIGHUP")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +112,7 @@ func DaemonReload() error {
|
||||
|
||||
func DaemonStop() error {
|
||||
if !util.IsFile(WAREWULFD_PIDFILE) {
|
||||
wwlog.Printf(wwlog.INFO, "Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE)
|
||||
fmt.Printf("Warewulf daemon process not running\n")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -123,20 +121,21 @@ func DaemonStop() error {
|
||||
return err
|
||||
}
|
||||
|
||||
_ = os.Remove(WAREWULFD_PIDFILE)
|
||||
|
||||
pid, _ := strconv.Atoi(string(dat))
|
||||
process, err := os.FindProcess(pid)
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to find process: %s\n", err)
|
||||
return errors.Wrap(err, "failed to find running PID")
|
||||
} else {
|
||||
err := process.Signal(syscall.Signal(15))
|
||||
if err != nil {
|
||||
fmt.Printf("SIGCONT on pid %d returned: %v\n", pid, err)
|
||||
return errors.Wrap(err, "failed to send process SIGTERM")
|
||||
} else {
|
||||
fmt.Printf("Terminated Warewulf process at PID: %d\n", pid)
|
||||
fmt.Printf("Terminated Warewulf server at PID: %d\n", pid)
|
||||
}
|
||||
}
|
||||
|
||||
os.Remove(WAREWULFD_PIDFILE)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package warewulfd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -33,7 +32,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
var unconfiguredNode bool
|
||||
|
||||
if url[2] == "" {
|
||||
log.Printf("ERROR: Bad iPXE request from %s\n", req.RemoteAddr)
|
||||
daemonLogf("ERROR: Bad iPXE request from %s\n", req.RemoteAddr)
|
||||
w.WriteHeader(404)
|
||||
return
|
||||
}
|
||||
@@ -42,13 +41,11 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
conf, err := warewulfconf.New()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
daemonLogf("ERROR: Could not open Warewulf configuration: %s\n", err)
|
||||
w.WriteHeader(503)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("IPXEREQ: %s\n", req.URL.Path)
|
||||
|
||||
nodeobj, err := GetNode(hwaddr)
|
||||
|
||||
if err != nil {
|
||||
@@ -57,44 +54,41 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
nodeDB, err := node.New()
|
||||
if err != nil {
|
||||
log.Printf("Could not read node configuration file: %s\n", err)
|
||||
daemonLogf("Could not read node configuration file: %s\n", err)
|
||||
w.WriteHeader(503)
|
||||
return
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "Node was not found, looking for discoverable nodes...\n")
|
||||
daemonLogf("IPXEREQ: %s (node not configured)\n", hwaddr)
|
||||
|
||||
n, netdev, err := nodeDB.FindDiscoverableNode()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.WARN, "No nodes are set as discoverable...\n")
|
||||
unconfiguredNode = true
|
||||
|
||||
} else {
|
||||
wwlog.Printf(wwlog.INFO, "Adding new configuration to discoverable node: %s\n", n.Id.Get())
|
||||
|
||||
n.NetDevs[netdev].Hwaddr.Set(hwaddr)
|
||||
n.Discoverable.SetB(false)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not add discovered configuration for node: %s\n", n.Id.Get())
|
||||
daemonLogf("IPXEREQ: %s (failed to set node configuration)\n", hwaddr)
|
||||
|
||||
unconfiguredNode = true
|
||||
} else {
|
||||
err := nodeDB.Persist()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not persist new node configuration while adding node: %s\n", n.Id.Get())
|
||||
daemonLogf("IPXEREQ: %s (failed to persist node configuration)\n", hwaddr)
|
||||
|
||||
unconfiguredNode = true
|
||||
} else {
|
||||
nodeobj = n
|
||||
wwlog.Printf(wwlog.INFO, "Building System Overlay:\n")
|
||||
_ = overlay.BuildSystemOverlay([]node.NodeInfo{n})
|
||||
wwlog.Printf(wwlog.INFO, "Building Runtime Overlay:\n")
|
||||
_ = overlay.BuildRuntimeOverlay([]node.NodeInfo{n})
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "Added node %s\n", nodeobj.Id.Get())
|
||||
daemonLogf("IPXEREQ: %s (node automatically configured)\n", hwaddr)
|
||||
|
||||
err := LoadNodeDB()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.WARN, "Could not reload database: %s\n", err)
|
||||
daemonLogf("Could not reload configuration: %s\n", err)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -103,11 +97,11 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
|
||||
if unconfiguredNode {
|
||||
log.Printf("UNCONFIGURED NODE: %15s\n", hwaddr)
|
||||
daemonLogf("IPXEREQ: %s (unknown/unconfigured node)\n", hwaddr)
|
||||
|
||||
tmpl, err := template.ParseFiles("/etc/warewulf/ipxe/unconfigured.ipxe")
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
daemonLogf("ERROR: Could not parse unconfigured node IPXE template: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -117,7 +111,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
err = tmpl.Execute(w, replace)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
daemonLogf("ERROR: Could not update unconfigured node IPXE template: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -125,8 +119,6 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
} else {
|
||||
|
||||
log.Printf("IPXE: %15s: %s\n", nodeobj.Id.Get(), req.URL.Path)
|
||||
|
||||
ipxeTemplate := fmt.Sprintf("/etc/warewulf/ipxe/%s.ipxe", nodeobj.Ipxe.Get())
|
||||
|
||||
tmpl, err := template.ParseFiles(ipxeTemplate)
|
||||
@@ -152,7 +144,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("SEND: %15s: %s\n", nodeobj.Id.Get(), ipxeTemplate)
|
||||
daemonLogf("SEND: %15s: %s\n", nodeobj.Id.Get(), ipxeTemplate)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/kernel"
|
||||
@@ -11,7 +10,7 @@ func KernelSend(w http.ResponseWriter, req *http.Request) {
|
||||
node, err := getSanity(req)
|
||||
if err != nil {
|
||||
w.WriteHeader(404)
|
||||
log.Println(err)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -20,13 +19,11 @@ func KernelSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
err := sendFile(w, fileName, node.Id.Get())
|
||||
if err != nil {
|
||||
log.Printf("ERROR: %s\n", err)
|
||||
} else {
|
||||
log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
w.WriteHeader(503)
|
||||
log.Printf("ERROR: No 'kernel version' set for node %s\n", node.Id.Get())
|
||||
daemonLogf("WARNING: No 'kernel version' set for node %s\n", node.Id.Get())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/kernel"
|
||||
@@ -12,7 +11,7 @@ func KmodsSend(w http.ResponseWriter, req *http.Request) {
|
||||
node, err := getSanity(req)
|
||||
if err != nil {
|
||||
w.WriteHeader(404)
|
||||
log.Println(err)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -21,13 +20,11 @@ func KmodsSend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
err := sendFile(w, fileName, node.Id.Get())
|
||||
if err != nil {
|
||||
log.Printf("ERROR: %s\n", err)
|
||||
} else {
|
||||
log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
w.WriteHeader(503)
|
||||
log.Printf("ERROR: No 'kernel version' set for node %s\n", node.Id.Get())
|
||||
daemonLogf("WARNING: No 'kernel version' set for node %s\n", node.Id.Get())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/node"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
|
||||
type nodeDB struct {
|
||||
@@ -21,7 +20,7 @@ var (
|
||||
func LoadNodeDB() error {
|
||||
TmpMap := make(map[string]node.NodeInfo)
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "Loading the node Database\n")
|
||||
daemonLogf("(re)Loading the node Database\n")
|
||||
|
||||
DB, err := node.New()
|
||||
if err != nil {
|
||||
@@ -35,8 +34,6 @@ func LoadNodeDB() error {
|
||||
|
||||
for _, n := range nodes {
|
||||
for _, netdev := range n.NetDevs {
|
||||
wwlog.Printf(wwlog.DEBUG, "Caching node entry: '%s' -> %s\n", netdev.Hwaddr.Get(), n.Id.Get())
|
||||
|
||||
TmpMap[netdev.Hwaddr.Get()] = n
|
||||
}
|
||||
}
|
||||
@@ -57,7 +54,6 @@ func GetNode(val string) (node.NodeInfo, error) {
|
||||
return db.NodeInfo[val], nil
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node not found in DB: %s\n", val)
|
||||
var empty node.NodeInfo
|
||||
return empty, errors.New("No node found")
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -15,14 +13,14 @@ import (
|
||||
func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) {
|
||||
conf, err := warewulfconf.New()
|
||||
if err != nil {
|
||||
log.Printf("Could not read Warewulf configuration file: %s\n", err)
|
||||
daemonLogf("ERROR: Could not read Warewulf configuration file: %s\n", err)
|
||||
w.WriteHeader(503)
|
||||
return
|
||||
}
|
||||
|
||||
nodes, err := node.New()
|
||||
if err != nil {
|
||||
log.Printf("Could not read node configuration file: %s\n", err)
|
||||
daemonLogf("%s | ERROR: Could not read node configuration file: %s\n", err)
|
||||
w.WriteHeader(503)
|
||||
return
|
||||
}
|
||||
@@ -30,19 +28,19 @@ func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) {
|
||||
remote := strings.Split(req.RemoteAddr, ":")
|
||||
port, err := strconv.Atoi(remote[1])
|
||||
if err != nil {
|
||||
log.Printf("Could not convert port to integer: %s\n", remote[1])
|
||||
daemonLogf("%s | ERROR: Could not convert port to integer: %s\n", remote[1])
|
||||
w.WriteHeader(503)
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: Could not load configuration file: %s\n", err)
|
||||
daemonLogf("%s | ERROR: Could not load configuration file: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
if conf.Warewulf.Secure {
|
||||
if port >= 1024 {
|
||||
log.Panicf("DENIED: Connection coming from non-privledged port: %s\n", req.RemoteAddr)
|
||||
daemonLogf("DENIED: Connection coming from non-privledged port: %s\n", req.RemoteAddr)
|
||||
w.WriteHeader(401)
|
||||
return
|
||||
}
|
||||
@@ -50,17 +48,17 @@ func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
node, err := nodes.FindByIpaddr(remote[0])
|
||||
if err != nil {
|
||||
fmt.Printf("Could not find node by IP address: %s\n", remote[0])
|
||||
daemonLogf("WARNING: Could not find node by IP address: %s\n", remote[0])
|
||||
w.WriteHeader(404)
|
||||
return
|
||||
}
|
||||
|
||||
if node.Id.Defined() {
|
||||
log.Printf("UNKNOWN: %15s: %s\n", remote[0], req.URL.Path)
|
||||
if !node.Id.Defined() {
|
||||
daemonLogf("REQ: %15s: %s (unknown/unconfigured node)\n", node.Id.Get(), req.URL.Path)
|
||||
w.WriteHeader(404)
|
||||
return
|
||||
} else {
|
||||
log.Printf("REQ: %15s: %s\n", node.Id.Get(), req.URL.Path)
|
||||
daemonLogf("REQ: %15s: %s\n", node.Id.Get(), req.URL.Path)
|
||||
}
|
||||
|
||||
if node.RuntimeOverlay.Defined() {
|
||||
@@ -68,12 +66,10 @@ func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
err := sendFile(w, fileName, node.Id.Get())
|
||||
if err != nil {
|
||||
log.Printf("ERROR: %s\n", err)
|
||||
} else {
|
||||
log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
}
|
||||
} else {
|
||||
w.WriteHeader(503)
|
||||
log.Printf("ERROR: No 'runtime system-overlay' set for node %s\n", node.Id.Get())
|
||||
daemonLogf("WARNING: No 'runtime system-overlay' set for node %s\n", node.Id.Get())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/config"
|
||||
@@ -11,7 +10,7 @@ func SystemOverlaySend(w http.ResponseWriter, req *http.Request) {
|
||||
node, err := getSanity(req)
|
||||
if err != nil {
|
||||
w.WriteHeader(404)
|
||||
log.Println(err)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -20,12 +19,10 @@ func SystemOverlaySend(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
err := sendFile(w, fileName, node.Id.Get())
|
||||
if err != nil {
|
||||
log.Printf("ERROR: %s\n", err)
|
||||
} else {
|
||||
log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName)
|
||||
daemonLogf("ERROR: %s\n", err)
|
||||
}
|
||||
} else {
|
||||
w.WriteHeader(503)
|
||||
log.Printf("ERROR: No 'system system-overlay' set for node %s\n", node.Id.Get())
|
||||
daemonLogf("WARNING: No 'system system-overlay' set for node %s\n", node.Id.Get())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,23 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/node"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func daemonLogf(message string, a ...interface{}) {
|
||||
prefix := fmt.Sprintf("[%s] ", time.Now().Format(time.UnixDate))
|
||||
fmt.Printf(prefix+message, a...)
|
||||
}
|
||||
|
||||
func getSanity(req *http.Request) (node.NodeInfo, error) {
|
||||
url := strings.Split(req.URL.Path, "/")
|
||||
|
||||
@@ -23,7 +29,7 @@ func getSanity(req *http.Request) (node.NodeInfo, error) {
|
||||
return ret, errors.New("Could not find node by HW address: " + req.URL.Path)
|
||||
}
|
||||
|
||||
log.Printf("REQ: %15s: %s\n", nodeobj.Id.Get(), req.URL.Path)
|
||||
daemonLogf("REQ: %15s: %s\n", nodeobj.Id.Get(), req.URL.Path)
|
||||
|
||||
return nodeobj, nil
|
||||
}
|
||||
@@ -58,5 +64,7 @@ func sendFile(w http.ResponseWriter, filename string, sendto string) error {
|
||||
return errors.Wrap(err, "failed to copy")
|
||||
}
|
||||
|
||||
daemonLogf("SEND: %15s: %s\n", sendto, filename)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package warewulfd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
|
||||
// TODO: https://github.com/danderson/netboot/blob/master/pixiecore/dhcp.go
|
||||
@@ -21,18 +20,16 @@ func RunServer() error {
|
||||
for range c {
|
||||
err := LoadNodeDB()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.WARN, "Could not load database: %s\n", err)
|
||||
fmt.Printf("ERROR: Could not load database: %s\n", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
err := LoadNodeDB()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.WARN, "Could not load database: %s\n", err)
|
||||
fmt.Printf("ERROR: Could not load database: %s\n", err)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Registering handlers for the web service\n")
|
||||
|
||||
http.HandleFunc("/ipxe/", IpxeSend)
|
||||
http.HandleFunc("/kernel/", KernelSend)
|
||||
http.HandleFunc("/kmods/", KmodsSend)
|
||||
@@ -40,11 +37,11 @@ func RunServer() error {
|
||||
http.HandleFunc("/overlay-system/", SystemOverlaySend)
|
||||
http.HandleFunc("/overlay-runtime", RuntimeOverlaySend)
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Starting HTTPD REST service\n")
|
||||
daemonLogf("Starting HTTPD REST service\n")
|
||||
|
||||
err = http.ListenAndServe(":9873", nil)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not start listening service: %s\n", err)
|
||||
fmt.Printf("ERROR: Could not start listening service: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user