| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | package mainimport (	"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 stringfunc 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)}
 |