Reimplemented and formatted 'inspect' subcommand

This commit is contained in:
David Allen 2024-07-29 19:14:43 -06:00
parent 082afd8737
commit bf5f18a6a1
Signed by: towk
GPG key ID: 793B2924A49B3A3F

View file

@ -2,17 +2,18 @@ package cmd
import ( import (
"fmt" "fmt"
"maps" "io/fs"
"path/filepath"
"strings" "strings"
"github.com/OpenCHAMI/configurator/pkg/generator" "github.com/OpenCHAMI/configurator/pkg/generator"
"github.com/rodaine/table"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var ( var (
byTarget bool byTarget bool
pluginDirs []string
generators map[string]generator.Generator
) )
var inspectCmd = &cobra.Command{ var inspectCmd = &cobra.Command{
@ -20,46 +21,44 @@ var inspectCmd = &cobra.Command{
Short: "Inspect generator plugin information", Short: "Inspect generator plugin information",
Long: "The 'inspect' sub-command takes a list of directories and prints all found plugin information.", Long: "The 'inspect' sub-command takes a list of directories and prints all found plugin information.",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
// set up table formatter
table.DefaultHeaderFormatter = func(format string, vals ...interface{}) string {
return strings.ToUpper(fmt.Sprintf(format, vals...))
}
// TODO: remove duplicate args from CLI
// load specific plugins from positional args // load specific plugins from positional args
generators = make(map[string]generator.Generator) var generators = make(map[string]generator.Generator)
for _, path := range args { for _, path := range args {
err := filepath.Walk(path, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
gen, err := generator.LoadPlugin(path) gen, err := generator.LoadPlugin(path)
if err != nil { if err != nil {
fmt.Printf("failed to load plugin at path '%s': %v\n", path, err) return err
continue
}
// path is directory, so no plugin is loaded, but no error was returned
if gen == nil {
continue
}
generators[path] = gen
} }
generators[gen.GetName()] = gen
return nil
})
// load plugins and print all plugin details
if len(pluginDirs) > 0 {
} else {
for _, pluginDir := range config.PluginDirs {
gens, err := generator.LoadPlugins(pluginDir)
if err != nil { if err != nil {
fmt.Printf("failed to load plugin: %v\n", err) log.Error().Err(err).Msg("failed to walk directory")
continue continue
} }
maps.Copy(generators, gens)
}
} }
// print all generator information // print all generator plugin information found
if len(generators) > 0 { tbl := table.New("Name", "Version", "Description")
o := ""
for _, g := range generators { for _, g := range generators {
o += fmt.Sprintf("- Name: %s\n", g.GetName()) tbl.AddRow(g.GetName(), g.GetVersion(), g.GetDescription())
o += fmt.Sprintf(" Version: %s\n", g.GetVersion())
o += fmt.Sprintf(" Description: %s\n", g.GetDescription())
o += "\n"
} }
o = strings.TrimRight(o, "\n") if len(generators) > 0 {
fmt.Printf("%s", o) tbl.Print()
} }
}, },
} }