mirror of
https://github.com/slackhq/nebula.git
synced 2025-01-11 11:58:11 +00:00
9af242dc47
These new helpers make the code a lot cleaner. I confirmed that the simple helpers like `atomic.Int64` don't add any extra overhead as they get inlined by the compiler. `atomic.Pointer` adds an extra method call as it no longer gets inlined, but we aren't using these on the hot path so it is probably okay.
78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/slackhq/nebula"
|
|
"github.com/slackhq/nebula/config"
|
|
"github.com/slackhq/nebula/util"
|
|
)
|
|
|
|
// A version string that can be set with
|
|
//
|
|
// -ldflags "-X main.Build=SOMEVERSION"
|
|
//
|
|
// at compile-time.
|
|
var Build string
|
|
|
|
func main() {
|
|
serviceFlag := flag.String("service", "", "Control the system service.")
|
|
configPath := flag.String("config", "", "Path to either a file or directory to load configuration from")
|
|
configTest := flag.Bool("test", false, "Test the config and print the end result. Non zero exit indicates a faulty config")
|
|
printVersion := flag.Bool("version", false, "Print version")
|
|
printUsage := flag.Bool("help", false, "Print command line usage")
|
|
|
|
flag.Parse()
|
|
|
|
if *printVersion {
|
|
fmt.Printf("Version: %s\n", Build)
|
|
os.Exit(0)
|
|
}
|
|
|
|
if *printUsage {
|
|
flag.Usage()
|
|
os.Exit(0)
|
|
}
|
|
|
|
if *serviceFlag != "" {
|
|
doService(configPath, configTest, Build, serviceFlag)
|
|
os.Exit(1)
|
|
}
|
|
|
|
if *configPath == "" {
|
|
fmt.Println("-config flag must be set")
|
|
flag.Usage()
|
|
os.Exit(1)
|
|
}
|
|
|
|
l := logrus.New()
|
|
l.Out = os.Stdout
|
|
|
|
c := config.NewC(l)
|
|
err := c.Load(*configPath)
|
|
if err != nil {
|
|
fmt.Printf("failed to load config: %s", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
ctrl, err := nebula.Main(c, *configTest, Build, l, nil)
|
|
|
|
switch v := err.(type) {
|
|
case util.ContextualError:
|
|
v.Log(l)
|
|
os.Exit(1)
|
|
case error:
|
|
l.WithError(err).Error("Failed to start")
|
|
os.Exit(1)
|
|
}
|
|
|
|
if !*configTest {
|
|
ctrl.Start()
|
|
ctrl.ShutdownBlock()
|
|
}
|
|
|
|
os.Exit(0)
|
|
}
|