package main import ( "flag" "fmt" "os" "github.com/sirupsen/logrus" "github.com/slackhq/nebula" "github.com/slackhq/nebula/config" ) // 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 nebula.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) }