mirror of
https://github.com/davidallendj/configurator.git
synced 2025-12-20 03:27:02 -07:00
Reimplemented and formatted 'inspect' subcommand
This commit is contained in:
parent
082afd8737
commit
bf5f18a6a1
1 changed files with 35 additions and 36 deletions
|
|
@ -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()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue