backend/internal/cli/cli.go
package cli
import (
"context"
"kd/backend/config"
"kd/backend/logwrap"
"os"
"path"
"github.com/spf13/cobra"
)
type cli struct {
debug bool
conf config.Config
logger *logwrap.LogWrap
}
func (c *cli) init() error {
kubeConfigPath, ok := os.LookupEnv("KUBECONFIG")
if !ok {
homeDir, err := os.UserHomeDir()
if err != nil {
return err
}
kubeConfigPath = path.Join(homeDir, ".kube", "config.yaml")
}
configOpts := []config.OptFunc{
config.WithDebug(c.debug),
}
conf, err := config.NewConfig(kubeConfigPath, configOpts...)
if err != nil {
return err
}
c.conf = conf
logger := logwrap.New("logger", os.Stdout, true)
logger.SetLevel(logwrap.INFO)
if c.debug {
logger.SetLevel(logwrap.DEBUG)
}
c.logger = logger
return nil
}
func Execute() {
cli := &cli{}
rootCmd := buildRootCmd(cli)
if err := rootCmd.ExecuteContext(context.TODO()); err != nil {
os.Exit(1)
}
}
func buildRootCmd(cli *cli) *cobra.Command {
rootCmd := &cobra.Command{
Use: "kt",
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
return cli.init()
},
}
rootCmd.AddCommand(clusterCmd(cli))
return rootCmd
}