Files
kubevela/pkg/server/main/startAPIServer.go
2020-09-26 21:43:32 +08:00

52 lines
1.2 KiB
Go

package main
import (
"context"
"io"
"os"
"os/signal"
"syscall"
"time"
"github.com/oam-dev/kubevela/pkg/oam"
"github.com/oam-dev/kubevela/pkg/server"
"github.com/oam-dev/kubevela/pkg/server/util"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
)
// main will only start up API server
func main() {
var development = true
// setup logging
var w io.Writer = os.Stdout
ctrl.SetLogger(zap.New(func(o *zap.Options) {
o.Development = development
o.DestWritter = w
}))
apiServer := server.APIServer{}
kubeClient, err := oam.InitKubeClient()
if err != nil {
ctrl.Log.Error(err, "failed to init an Kubernetes client")
os.Exit(1)
}
errCh := make(chan error, 1)
apiServer.Launch(kubeClient, util.DefaultAPIServerPort, "", errCh)
err = <-errCh
if err != nil {
ctrl.Log.Error(err, "failed to launch API server")
}
// handle signal: SIGTERM(15)
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGTERM)
<-sc
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
if err := apiServer.Shutdown(ctx); err != nil {
ctrl.Log.Error(err, "failed to shut down API server")
}
}