// Copyright © 2016 David Anderson // // Licensed 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" "os" "github.com/spf13/cobra" "github.com/spf13/viper" ) var cfgFile string // This represents the base command when called without any subcommands var RootCmd = &cobra.Command{ Use: "pixiecore", Short: "All-in-one network booting", Long: `Pixiecore is a tool to make network booting easy.`, // Uncomment the following line if your bare application // has an action associated with it: // Run: func(cmd *cobra.Command, args []string) { }, } // Execute adds all child commands to the root command sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. 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") } func initConfig() { if cfgFile != "" { // enable ability to specify config file via flag viper.SetConfigFile(cfgFile) if err := viper.ReadInConfig(); err != nil { fmt.Printf("Error reading configuration file %q: %s\n", viper.ConfigFileUsed(), err) os.Exit(1) } fmt.Println("Using config file:", viper.ConfigFileUsed()) } viper.SetEnvPrefix("pixiecore") viper.AutomaticEnv() // read in environment variables that match } func fatalf(msg string, args ...interface{}) { fmt.Printf(msg+"\n", args...) os.Exit(1) } func todo(msg string, args ...interface{}) { fatalf("TODO: "+msg, args...) }