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)
}
}