blob: 4de89dd734cf6ec93105a8bc57ad68ae9aa37cef [file] [log] [blame]
// 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 cmd
import (
"fmt"
"github.com/apache/servicecomb-service-center/pkg/client/sc"
"github.com/apache/servicecomb-service-center/pkg/util"
"github.com/apache/servicecomb-service-center/scctl/pkg/version"
"github.com/spf13/cobra"
"os"
"time"
)
const (
ExitSuccess = iota
ExitError
)
var rootCmd = &cobra.Command{
Use: version.TOOL_NAME + " <command>",
Short: "The admin control command of service center",
}
var ScClientConfig sc.Config
func init() {
var timeout string
rootCmd.PersistentFlags().BoolP("verbose", "v", false, "make the operation more talkative")
rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
if v, _ := cmd.Flags().GetBool("verbose"); v {
if err := os.Setenv("DEBUG_MODE", "1"); err != nil {
StopAndExit(ExitError, err)
}
}
if d, err := time.ParseDuration(timeout); err == nil && d > 0 {
ScClientConfig.RequestTimeout = d
}
}
rootCmd.PersistentFlags().StringSliceVar(&ScClientConfig.Endpoints, "addr",
[]string{"http://" + util.GetEnvString("HOSTING_SERVER_IP", "127.0.0.1") + ":30100"},
"the http host and port of service center, can be overrode by env HOSTING_SERVER_IP.")
rootCmd.PersistentFlags().StringVar(&ScClientConfig.Token, "token", "",
"the auth token string to access service center.")
rootCmd.PersistentFlags().BoolVarP(&ScClientConfig.VerifyPeer, "peer", "p", false,
"verify service center certificates.")
rootCmd.PersistentFlags().StringVar(&ScClientConfig.CertFile, "cert", "",
"the certificate file path to access service center.")
rootCmd.PersistentFlags().StringVar(&ScClientConfig.CertKeyFile, "key", "",
"the key file path to access service center.")
rootCmd.PersistentFlags().StringVar(&ScClientConfig.CAFile, "ca", "",
"the CA file path to access service center.")
rootCmd.PersistentFlags().StringVar(&ScClientConfig.CertKeyPWDPath, "pass-file", "",
"the passphase file path to decrypt key file.")
rootCmd.PersistentFlags().StringVar(&ScClientConfig.CertKeyPWD, "pass", "",
"the passphase string to decrypt key file.")
rootCmd.PersistentFlags().StringVarP(&timeout, "timeout", "t", "10s",
"the maximum time allowed for the request.")
}
func RootCmd() *cobra.Command {
return rootCmd
}
func StopAndExit(code int, args ...interface{}) {
if len(args) == 0 {
os.Exit(code)
}
if code == ExitSuccess {
fmt.Fprintln(os.Stdout, args...)
} else {
fmt.Fprintln(os.Stderr, args...)
}
os.Exit(code)
}
func Run() {
RootCmd().SetUsageFunc(UsageFunc)
// Show usage in help command
RootCmd().SetHelpTemplate(`{{.UsageString}}`)
err := RootCmd().Execute()
if err != nil {
StopAndExit(ExitError, err)
}
StopAndExit(ExitSuccess)
}