func main()

in src/go/configmanager/main/server.go [38:96]


func main() {
	flag.Parse()
	opts := flags.EnvoyConfigOptionsFromFlags()

	// Create context that allows cancellation.
	// Allows shutting down downstream servers gracefully.
	ctx, cancel := context.WithCancel(context.Background())

	var mf *metadata.MetadataFetcher
	if !opts.NonGCP {
		glog.Info("running on GCP, initializing metadata fetcher")
		mf = metadata.NewMetadataFetcher(opts.CommonOptions)
	}

	m, err := configmanager.NewConfigManager(mf, opts)
	if err != nil {
		glog.Exitf("fail to initialize config manager: %v", err)
	}
	server := xds.NewServer(ctx, m.Cache(), nil)
	grpcServer := grpc.NewServer()
	lis, err := net.Listen("unix", opts.AdsNamedPipe)
	if err != nil {
		glog.Exitf("Server failed to listen: %v", err)
	}

	// Register Envoy discovery services.
	discoverygrpc.RegisterAggregatedDiscoveryServiceServer(grpcServer, server)

	glog.Infof("config manager server is running at %s .......\n", lis.Addr())

	// Handle signals gracefully
	signalChan := make(chan os.Signal, 1)
	signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

	go func() {
		sig := <-signalChan
		glog.Warningf("Server got signal %v, stopping", sig)
		cancel()
		grpcServer.Stop()
	}()

	if opts.ServiceAccountKey != "" {
		// Setup token agent server
		r := tokengenerator.MakeTokenAgentHandler(opts.ServiceAccountKey)
		go func() {
			err := http.ListenAndServe(fmt.Sprintf(":%v", opts.TokenAgentPort), r)

			if err != nil {
				glog.Errorf("token agent fail to serve: %v", err)
			}

		}()

	}

	if err := grpcServer.Serve(lis); err != nil {
		glog.Exitf("Server fail to serve: %v", err)
	}
}