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