76 lines
2.4 KiB
Go
76 lines
2.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var (
|
|
cfgFile string
|
|
baseURL string
|
|
username string
|
|
password string
|
|
createAppInstanceTimeout int // timeout in minutes
|
|
)
|
|
|
|
// rootCmd represents the base command when called without any subcommands
|
|
var rootCmd = &cobra.Command{
|
|
Use: "edge-connect",
|
|
Short: "A CLI tool for managing Edge Connect applications",
|
|
Long: `edge-connect is a command line interface for managing Edge Connect applications
|
|
and their instances. It provides functionality to create, show, list, and delete
|
|
applications and application instances.`,
|
|
}
|
|
|
|
// Execute adds all child commands to the root command and sets flags appropriately.
|
|
func Execute() {
|
|
if err := rootCmd.Execute(); err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
cobra.OnInitialize(initConfig)
|
|
|
|
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.edge-connect.yaml)")
|
|
rootCmd.PersistentFlags().StringVar(&baseURL, "base-url", "", "base URL for the Edge Connect API")
|
|
rootCmd.PersistentFlags().StringVar(&username, "username", "", "username for authentication")
|
|
rootCmd.PersistentFlags().StringVar(&password, "password", "", "password for authentication")
|
|
rootCmd.PersistentFlags().IntVar(&createAppInstanceTimeout, "create-app-instance-timeout", 10, "timeout in minutes for CreateAppInstance operations")
|
|
|
|
viper.BindPFlag("base_url", rootCmd.PersistentFlags().Lookup("base-url"))
|
|
viper.BindPFlag("username", rootCmd.PersistentFlags().Lookup("username"))
|
|
viper.BindPFlag("password", rootCmd.PersistentFlags().Lookup("password"))
|
|
viper.BindPFlag("create_app_instance_timeout", rootCmd.PersistentFlags().Lookup("create-app-instance-timeout"))
|
|
}
|
|
|
|
func initConfig() {
|
|
viper.AutomaticEnv()
|
|
viper.SetEnvPrefix("EDGE_CONNECT")
|
|
viper.BindEnv("base_url", "EDGE_CONNECT_BASE_URL")
|
|
viper.BindEnv("username", "EDGE_CONNECT_USERNAME")
|
|
viper.BindEnv("password", "EDGE_CONNECT_PASSWORD")
|
|
viper.BindEnv("create_app_instance_timeout", "EDGE_CONNECT_CREATE_APP_INSTANCE_TIMEOUT")
|
|
|
|
if cfgFile != "" {
|
|
viper.SetConfigFile(cfgFile)
|
|
} else {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
viper.AddConfigPath(home)
|
|
viper.SetConfigType("yaml")
|
|
viper.SetConfigName(".edge-connect")
|
|
}
|
|
|
|
if err := viper.ReadInConfig(); err == nil {
|
|
fmt.Println("Using config file:", viper.ConfigFileUsed())
|
|
}
|
|
}
|