package cmd import ( "fmt" "os" "github.com/spf13/cobra" "github.com/spf13/viper" ) var ( cfgFile string baseURL string username string password string debug bool apiVersion string ) // 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().StringVar(&apiVersion, "api-version", "v2", "API version to use (v1 or v2)") rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "enable debug logging") if err := viper.BindPFlag("base_url", rootCmd.PersistentFlags().Lookup("base-url")); err != nil { panic(err) } if err := viper.BindPFlag("username", rootCmd.PersistentFlags().Lookup("username")); err != nil { panic(err) } if err := viper.BindPFlag("password", rootCmd.PersistentFlags().Lookup("password")); err != nil { panic(err) } if err := viper.BindPFlag("api_version", rootCmd.PersistentFlags().Lookup("api-version")); err != nil { panic(err) } } func initConfig() { viper.AutomaticEnv() viper.SetEnvPrefix("EDGE_CONNECT") if err := viper.BindEnv("base_url", "EDGE_CONNECT_BASE_URL"); err != nil { panic(err) } if err := viper.BindEnv("username", "EDGE_CONNECT_USERNAME"); err != nil { panic(err) } if err := viper.BindEnv("password", "EDGE_CONNECT_PASSWORD"); err != nil { panic(err) } if err := viper.BindEnv("api_version", "EDGE_CONNECT_API_VERSION"); err != nil { panic(err) } 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()) } }