You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docker-net-dhcp/cmd/net-dhcp/main.go

75 lines
1.6 KiB
Go

package main
import (
"flag"
"os"
"os/signal"
"time"
log "github.com/sirupsen/logrus"
"golang.org/x/sys/unix"
"github.com/devplayer0/docker-net-dhcp/pkg/plugin"
)
var (
logLevel = flag.String("log", "", "log level")
logFile = flag.String("logfile", "", "log file")
bindSock = flag.String("sock", "/run/docker/plugins/net-dhcp.sock", "bind unix socket")
)
func main() {
flag.Parse()
if *logLevel == "" {
if *logLevel = os.Getenv("LOG_LEVEL"); *logLevel == "" {
*logLevel = "info"
}
}
level, err := log.ParseLevel(*logLevel)
if err != nil {
log.WithError(err).Fatal("Failed to parse log level")
}
log.SetLevel(level)
if *logFile != "" {
f, err := os.OpenFile(*logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.WithError(err).Fatal("Failed to open log file for writing")
}
defer f.Close()
log.StandardLogger().Out = f
}
awaitTimeout := 5 * time.Second
if t, ok := os.LookupEnv("AWAIT_TIMEOUT"); ok {
awaitTimeout, err = time.ParseDuration(t)
if err != nil {
log.WithError(err).Fatal("Failed to parse await timeout")
}
}
p, err := plugin.NewPlugin(awaitTimeout)
if err != nil {
log.WithError(err).Fatal("Failed to create plugin")
}
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, unix.SIGINT, unix.SIGTERM)
go func() {
log.Info("Starting server...")
if err := p.Listen(*bindSock); err != nil {
log.WithError(err).Fatal("Failed to start plugin")
}
}()
<-sigs
log.Info("Shutting down...")
if err := p.Close(); err != nil {
log.WithError(err).Fatal("Failed to stop plugin")
}
}