Initial commit.
This commit is contained in:
70
cmd/economize/main.go
Normal file
70
cmd/economize/main.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"code.humancabbage.net/sam/economize/pkg/economize"
|
||||
)
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "economize",
|
||||
Short: "Control the economy server",
|
||||
}
|
||||
|
||||
var upCmd = &cobra.Command{
|
||||
Use: "up",
|
||||
Short: "Bring economy server up",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return economize.Up(context.Background(), cfg)
|
||||
},
|
||||
}
|
||||
|
||||
var downCmd = &cobra.Command{
|
||||
Use: "down",
|
||||
Short: "Bring economy server down safely",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return economize.Down(context.Background(), cfg)
|
||||
},
|
||||
}
|
||||
|
||||
var cfgFilePath string
|
||||
var cfg economize.Config
|
||||
|
||||
func init() {
|
||||
cobra.OnInitialize(initConfig)
|
||||
rootCmd.PersistentFlags().StringVarP(&cfg.Host, "host", "H", "", "IPMI host")
|
||||
rootCmd.PersistentFlags().StringVarP(&cfg.Host, "cfg", "c", "./economize.yaml", "config file")
|
||||
rootCmd.PersistentFlags().StringVarP(&cfg.Credentials.Username, "username", "u", "", "IPMI admin username")
|
||||
rootCmd.PersistentFlags().StringVarP(&cfg.Credentials.Password, "password", "p", "", "IPMI admin password")
|
||||
cobra.CheckErr(viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host")))
|
||||
cobra.CheckErr(viper.BindPFlag("username", rootCmd.PersistentFlags().Lookup("username")))
|
||||
cobra.CheckErr(viper.BindPFlag("password", rootCmd.PersistentFlags().Lookup("password")))
|
||||
|
||||
rootCmd.AddCommand(upCmd)
|
||||
rootCmd.AddCommand(downCmd)
|
||||
}
|
||||
|
||||
func initConfig() {
|
||||
if cfgFilePath != "" {
|
||||
viper.SetConfigFile(cfgFilePath)
|
||||
} else {
|
||||
viper.SetConfigFile("economize.yaml")
|
||||
}
|
||||
viper.AutomaticEnv()
|
||||
if err := viper.ReadInConfig(); err != nil {
|
||||
cobra.CheckErr(err)
|
||||
}
|
||||
|
||||
cfg.Host = viper.GetString("host")
|
||||
cfg.Credentials.Username = viper.GetString("credentials.username")
|
||||
cfg.Credentials.Password = viper.GetString("credentials.password")
|
||||
}
|
||||
|
||||
func main() {
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user