istio/cmd/app/cmd.go (54 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package app
import (
"context"
"fmt"
"os"
"os/signal"
"github.com/apache/servicecomb-service-center/istio/pkg/bootstrap"
"github.com/spf13/cobra"
"istio.io/pkg/log"
)
var inputArgs *bootstrap.Args
var loggingOptions = log.DefaultOptions()
// NewRootCommand creates servicecomb-service-center-istio service cli args
func NewRootCommand() *cobra.Command {
rootCmd := &cobra.Command{
Use: "servicecenter-to-istio",
Short: "sc2mesh",
Long: "sc2mesh synchronizes data from servicecomb service center to Istio",
Args: cobra.ExactArgs(0),
PreRunE: func(c *cobra.Command, args []string) error {
if err := log.Configure(loggingOptions); err != nil {
return err
}
return nil
},
RunE: func(c *cobra.Command, args []string) error {
// Create the stop channel for all of the servers.
// ctx, cancelFunc := context.WithCancel(context.Background())
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
// defer cancelFunc()
// Create the server for the servicecomb-service-center-istio service.
server, err := bootstrap.NewServer(inputArgs)
if err != nil {
return fmt.Errorf("failed to create servicecomb-service-center-istio service: %v", err)
}
// Start the server
if err := server.Start(ctx, inputArgs); err != nil {
return fmt.Errorf("failed to start servicecomb-service-center-istio service: %v", err)
}
waitSignal(ctx)
return nil
},
}
addFlags(rootCmd)
return rootCmd
}
// WaitSignal awaits for SIGINT or SIGTERM and closes the channel
func waitSignal(ctx context.Context) {
<-ctx.Done()
_ = log.Sync()
}
func addFlags(c *cobra.Command) {
inputArgs = &bootstrap.Args{}
// Process commandline args.
// sc-addr is the service center registry centre address
c.PersistentFlags().StringVar(&inputArgs.ServiceCenterAddr, "sc-addr", "localhost:30100",
"servicecomb service center host ip address")
// enable leader-election or not
c.PersistentFlags().BoolVar(&inputArgs.HA, "ha", false,
"enable k8s leader election or not for high avalibility")
// kubectl config file path, if not set, will use in cluster kube config
c.PersistentFlags().StringVar(&inputArgs.Kubeconfig, "kube-config", "", "service discovery kube config file")
// Attach the Istio logging options to the command.
loggingOptions.AttachCobraFlags(c)
}