Daemon logging to syslog (#152)

This commit is contained in:
Gregory Kurtzer
2021-09-30 23:40:16 -07:00
parent 384c4c0286
commit 238b61a682
5 changed files with 81 additions and 35 deletions

View File

@@ -5,6 +5,7 @@ warewulf:
secure: true
autobuild overlays: true
update interval: 60
syslog: false
dhcp:
enabled: true
range start: 192.168.200.50

View File

@@ -1,13 +1,20 @@
package start
import (
"github.com/hpcng/warewulf/internal/pkg/warewulfconf"
"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 {
conf, err := warewulfconf.New()
if err != nil {
return errors.Wrap(err, "Could not read Warewulf configuration file")
}
conf.Warewulf.Syslog = false
return errors.Wrap(warewulfd.RunServer(), "failed to start Warewulf server")
} else {
return errors.Wrap(warewulfd.DaemonStart(), "failed to start Warewulf server")

View File

@@ -10,43 +10,53 @@ import (
"gopkg.in/yaml.v2"
)
var singleton ControllerConf
func New() (ControllerConf, error) {
var ret ControllerConf
wwlog.Printf(wwlog.DEBUG, "Opening Warewulf configuration file: %s\n", ConfigFile)
data, err := ioutil.ReadFile(ConfigFile)
if err != nil {
fmt.Printf("error reading Warewulf configuration file\n")
return ret, err
if (ControllerConf{}) == singleton {
wwlog.Printf(wwlog.DEBUG, "Opening Warewulf configuration file: %s\n", ConfigFile)
data, err := ioutil.ReadFile(ConfigFile)
if err != nil {
fmt.Printf("error reading Warewulf configuration file\n")
return ret, err
}
wwlog.Printf(wwlog.DEBUG, "Unmarshaling the Warewulf configuration\n")
err = yaml.Unmarshal(data, &ret)
if err != nil {
return ret, err
}
if ret.Ipaddr == "" {
wwlog.Printf(wwlog.WARN, "IP address is not configured in warewulfd.conf\n")
}
if ret.Netmask == "" {
wwlog.Printf(wwlog.WARN, "Netmask is not configured in warewulfd.conf\n")
}
if ret.Network == "" {
mask := net.IPMask(net.ParseIP(ret.Netmask).To4())
size, _ := mask.Size()
sub := ipsubnet.SubnetCalculator(ret.Ipaddr, size)
ret.Network = sub.GetNetworkPortion()
}
if ret.Warewulf.Port == 0 {
ret.Warewulf.Port = 9873
}
wwlog.Printf(wwlog.DEBUG, "Returning warewulf config object\n")
singleton = ret
} else {
wwlog.Printf(wwlog.DEBUG, "Returning cached warewulf config object\n")
ret = singleton
}
wwlog.Printf(wwlog.DEBUG, "Unmarshaling the Warewulf configuration\n")
err = yaml.Unmarshal(data, &ret)
if err != nil {
return ret, err
}
if ret.Ipaddr == "" {
wwlog.Printf(wwlog.WARN, "IP address is not configured in warewulfd.conf\n")
}
if ret.Netmask == "" {
wwlog.Printf(wwlog.WARN, "Netmask is not configured in warewulfd.conf\n")
}
if ret.Network == "" {
mask := net.IPMask(net.ParseIP(ret.Netmask).To4())
size, _ := mask.Size()
sub := ipsubnet.SubnetCalculator(ret.Ipaddr, size)
ret.Network = sub.GetNetworkPortion()
}
if ret.Warewulf.Port == 0 {
ret.Warewulf.Port = 9873
}
wwlog.Printf(wwlog.DEBUG, "Returning node object\n")
return ret, nil
}

View File

@@ -24,6 +24,7 @@ type WarewulfConf struct {
Secure bool `yaml:"secure"`
UpdateInterval int `yaml:"update interval"`
AutobuildOverlays bool `yaml:"autobuild overlays"`
Syslog bool `yaml:"syslog"`
}
type DhcpConf struct {

View File

@@ -3,6 +3,8 @@ package warewulfd
import (
"fmt"
"io"
"log"
"log/syslog"
"net/http"
"os"
"strconv"
@@ -10,12 +12,37 @@ import (
"time"
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/warewulfconf"
"github.com/pkg/errors"
)
var logwriter syslog.Writer
var loginit bool
func daemonLogf(message string, a ...interface{}) {
prefix := fmt.Sprintf("[%s] ", time.Now().Format(time.UnixDate))
fmt.Printf(prefix+message, a...)
conf, err := warewulfconf.New()
if err != nil {
fmt.Printf("ERROR: Could not read Warewulf configuration file: %s\n", err)
return
}
if conf.Warewulf.Syslog == true {
if loginit == false {
logwriter, err := syslog.New(syslog.LOG_NOTICE, "warewulfd")
if err != nil {
return
}
log.SetOutput(logwriter)
loginit = true
}
log.SetFlags(0)
log.SetPrefix("")
log.Printf(message, a...)
} else {
prefix := fmt.Sprintf("[%s] ", time.Now().Format(time.UnixDate))
fmt.Printf(prefix+message, a...)
}
}
func getSanity(req *http.Request) (node.NodeInfo, error) {