Merge branch 'feature/config-ports' into 'main'

Ajouter et implémenter bases de config cobra/viper dans config/
This commit is contained in:
Victor Lacasse-Beaudoin 2023-09-15 16:16:22 -04:00
commit 09e2a155e4
3 changed files with 55 additions and 1 deletions

View file

@ -5,7 +5,9 @@ package cmd
import ( import (
"fmt" "fmt"
"log"
"git.agecem.com/agecem/bottin-ag/config"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -14,7 +16,13 @@ var apiCmd = &cobra.Command{
Use: "api", Use: "api",
Short: "Start the API server", Short: "Start the API server",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
fmt.Println("api called") cfg, err := config.GetConfig()
if err != nil {
log.Fatal(err)
}
fmt.Println("api called with api-port", cfg.API.Port)
fmt.Println("api called with web-port", cfg.Web.Port)
}, },
} }

View file

@ -5,8 +5,10 @@ package cmd
import ( import (
"fmt" "fmt"
"log"
"os" "os"
"git.agecem.com/agecem/bottin-ag/config"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/viper" "github.com/spf13/viper"
) )
@ -30,6 +32,10 @@ func init() {
cobra.OnInitialize(initConfig) cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.bottin-ag.yaml)") rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.bottin-ag.yaml)")
if err := config.RegisterFlags(rootCmd); err != nil {
log.Fatal(err)
}
} }
// initConfig reads in config file and ENV variables if set. // initConfig reads in config file and ENV variables if set.

View file

@ -0,0 +1,40 @@
package config
import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
type Config struct {
API APIConfig
Web WebConfig
}
type APIConfig struct {
Port int
}
type WebConfig struct {
Port int
}
func GetConfig() (cfg Config, err error) {
return cfg, viper.Unmarshal(&cfg)
}
// RegisterFlags adds persistent flags necessary to the application to the specified *cobra.Command
func RegisterFlags(cmd *cobra.Command) error {
// api.port ; --api-port
cmd.PersistentFlags().Int("api-port", 3182, "API server port")
if err := viper.BindPFlag("api.port", cmd.PersistentFlags().Lookup("api-port")); err != nil {
return err
}
// web.port ; --web-port
cmd.PersistentFlags().Int("web-port", 3183, "Webserver port")
if err := viper.BindPFlag("web.port", cmd.PersistentFlags().Lookup("web-port")); err != nil {
return err
}
return nil
}