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.
75 lines
1.6 KiB
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")
|
|
}
|
|
}
|