Minor changes

This commit is contained in:
David Allen 2024-07-10 17:02:11 -06:00
parent e14a27cf84
commit 02406dec9f
No known key found for this signature in database
GPG key ID: 717C593FF60A2ACC
6 changed files with 41 additions and 43 deletions

View file

@ -12,7 +12,6 @@ import (
"github.com/OpenCHAMI/configurator/pkg/util"
"github.com/nikolalohinski/gonja/v2"
"github.com/nikolalohinski/gonja/v2/exec"
"github.com/sirupsen/logrus"
)
type Mappings map[string]any
@ -32,6 +31,7 @@ type Generator interface {
type Params struct {
Args []string
PluginPaths []string
Generators map[string]Generator
Target string
Verbose bool
}
@ -259,14 +259,14 @@ func ApplyTemplateFromFiles(mappings Mappings, paths ...string) (FileMap, error)
// Main function to generate a collection of files as a map with the path as the key and
// the contents of the file as the value. This function currently expects a list of plugin
// paths to load all plugins within a directory. Then, each plugin's generator.Generate()
// paths to load all plugins within a directory. Then, each plugin's generator.GenerateWithTarget()
// function is called for each target specified.
//
// This function is the corresponding implementation for the "generate" CLI subcommand.
// It is also call when running the configurator as a service with the "/generate" route.
//
// TODO: Separate loading plugins so we can load them once when running as a service.
func Generate(config *configurator.Config, params Params) (FileMap, error) {
func GenerateWithTarget(config *configurator.Config, params Params) (FileMap, error) {
// load generator plugins to generate configs or to print
var (
generators = make(map[string]Generator)
@ -278,12 +278,12 @@ func Generate(config *configurator.Config, params Params) (FileMap, error) {
)
)
// load all plugins from params
// load all plugins from supplied arguments
for _, path := range params.PluginPaths {
if params.Verbose {
fmt.Printf("loading plugins from '%s'\n", path)
}
gens, err := LoadPlugins(path)
plugins, err := LoadPlugins(path)
if err != nil {
fmt.Printf("failed to load plugins: %v\n", err)
err = nil
@ -291,9 +291,12 @@ func Generate(config *configurator.Config, params Params) (FileMap, error) {
}
// add loaded generator plugins to set
maps.Copy(generators, gens)
maps.Copy(generators, plugins)
}
// copy all generators supplied from arguments
maps.Copy(generators, params.Generators)
// show available targets then exit
if len(params.Args) == 0 && params.Target == "" {
for g := range generators {
@ -302,19 +305,14 @@ func Generate(config *configurator.Config, params Params) (FileMap, error) {
return nil, nil
}
if params.Target == "" {
logrus.Errorf("no target supplied (--target name)")
} else {
// run the generator plugin from target passed
gen := generators[params.Target]
if gen == nil {
return nil, fmt.Errorf("invalid generator target (%s)", params.Target)
}
return gen.Generate(
config,
WithTarget(gen.GetName()),
WithClient(client),
)
// run the generator plugin from target passed
gen := generators[params.Target]
if gen == nil {
return nil, fmt.Errorf("invalid generator target (%s)", params.Target)
}
return nil, fmt.Errorf("an unknown error has occurred")
return gen.Generate(
config,
WithTarget(gen.GetName()),
WithClient(client),
)
}

View file

@ -62,7 +62,7 @@ func (g *Conman) Generate(config *configurator.Config, opts ...util.Option) (gen
"plugin_description": g.GetDescription(),
"server_opts": "",
"global_opts": "",
}, target.Templates...)
}, target.TemplatePaths...)
}
var Generator Conman

View file

@ -58,7 +58,7 @@ func (g *DnsMasq) Generate(config *configurator.Config, opts ...util.Option) (ge
// print message if verbose param found
if verbose, ok := params["verbose"].(bool); ok {
if verbose {
fmt.Printf("template: \n%s\nethernet interfaces found: %v\n", strings.Join(target.Templates, "\n\t"), len(eths))
fmt.Printf("template: \n%s\nethernet interfaces found: %v\n", strings.Join(target.TemplatePaths, "\n\t"), len(eths))
}
}
@ -79,7 +79,7 @@ func (g *DnsMasq) Generate(config *configurator.Config, opts ...util.Option) (ge
"plugin_version": g.GetVersion(),
"plugin_description": g.GetDescription(),
"dhcp-hosts": output,
}, target.Templates...)
}, target.TemplatePaths...)
}
var Generator DnsMasq

View file

@ -5,9 +5,9 @@ import (
"maps"
"strings"
configurator "github.com/OpenCHAMI/configurator/internal"
"github.com/OpenCHAMI/configurator/internal/generator"
"github.com/OpenCHAMI/configurator/internal/util"
configurator "github.com/OpenCHAMI/configurator/pkg"
"github.com/OpenCHAMI/configurator/pkg/generator"
"github.com/OpenCHAMI/configurator/pkg/util"
)
type Warewulf struct{}
@ -30,7 +30,7 @@ func (g *Warewulf) Generate(config *configurator.Config, opts ...util.Option) (g
client = generator.GetClient(params)
targetKey = params["target"].(string)
target = config.Targets[targetKey]
outputs = make(generator.FileMap, len(target.FilePaths)+len(target.Templates))
outputs = make(generator.FileMap, len(target.FilePaths)+len(target.TemplatePaths))
)
// check if our client is included and is valid
@ -55,7 +55,7 @@ func (g *Warewulf) Generate(config *configurator.Config, opts ...util.Option) (g
// print message if verbose param found
if verbose, ok := params["verbose"].(bool); ok {
if verbose {
fmt.Printf("template: \n%s\n ethernet interfaces found: %v\n", strings.Join(target.Templates, "\n\t"), len(eths))
fmt.Printf("template: \n%s\n ethernet interfaces found: %v\n", strings.Join(target.TemplatePaths, "\n\t"), len(eths))
}
}
@ -78,7 +78,7 @@ func (g *Warewulf) Generate(config *configurator.Config, opts ...util.Option) (g
}
templates, err := generator.ApplyTemplateFromFiles(generator.Mappings{
"node_entries": nodeEntries,
}, target.Templates...)
}, target.TemplatePaths...)
if err != nil {
return nil, fmt.Errorf("failed to load templates: %v", err)
}