diff --git a/internal/generator/plugins/dhcpd/dhcpd.go b/internal/generator/plugins/dhcpd/dhcpd.go new file mode 100644 index 0000000..edd09bb --- /dev/null +++ b/internal/generator/plugins/dhcpd/dhcpd.go @@ -0,0 +1,65 @@ +package main + +import ( + "fmt" + + configurator "github.com/OpenCHAMI/configurator/internal" + "github.com/OpenCHAMI/configurator/internal/generator" + "github.com/OpenCHAMI/configurator/internal/util" +) + +type Dhcpd struct{} + +func (g *Dhcpd) GetName() string { + return "dhcpd" +} + +func (g *Dhcpd) Generate(config *configurator.Config, opts ...util.Option) (generator.Files, error) { + var ( + params = generator.GetParams(opts...) + client = generator.GetClient(params) + targetKey = params["target"].(string) + target = config.Targets[targetKey] + compute_nodes = "" + eths []configurator.EthernetInterface = nil + err error = nil + ) + + // + if client != nil { + eths, err = client.FetchEthernetInterfaces(opts...) + if err != nil { + return nil, fmt.Errorf("failed to fetch ethernet interfaces with client: %v", err) + } + } + + // check if we have the required params first + if eths == nil { + return nil, fmt.Errorf("invalid ethernet interfaces (variable is nil)") + } + if len(eths) <= 0 { + return nil, fmt.Errorf("no ethernet interfaces found") + } + + // format output to write to config file + compute_nodes = "# ========== DYNAMICALLY GENERATED BY OPENCHAMI CONFIGURATOR ==========\n" + for _, eth := range eths { + if len(eth.IpAddresses) == 0 { + continue + } + compute_nodes += fmt.Sprintf("host %s { hardware ethernet %s; fixed-address %s} ", eth.ComponentId, eth.MacAddress, eth.IpAddresses[0]) + } + compute_nodes += "# =====================================================================" + + if verbose, ok := params["verbose"].(bool); ok { + if verbose { + fmt.Printf("") + } + } + return generator.ApplyTemplates(generator.Mappings{ + "compute_nodes": compute_nodes, + "node_entries": "", + }, target.Templates...) +} + +var Generator Dhcpd diff --git a/internal/generator/plugins/hostfile/hostfile.go b/internal/generator/plugins/hostfile/hostfile.go new file mode 100644 index 0000000..ae3fba3 --- /dev/null +++ b/internal/generator/plugins/hostfile/hostfile.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + + configurator "github.com/OpenCHAMI/configurator/internal" + "github.com/OpenCHAMI/configurator/internal/util" +) + +type Hostfile struct{} + +func (g *Hostfile) GetName() string { + return "hostfile" +} + +func (g *Hostfile) Generate(config *configurator.Config, opts ...util.Option) (map[string][]byte, error) { + return nil, fmt.Errorf("plugin does not implement generation function") +} + +var Generator Hostfile diff --git a/internal/generator/plugins/hostfile/hostfile_test.go b/internal/generator/plugins/hostfile/hostfile_test.go new file mode 100644 index 0000000..06ab7d0 --- /dev/null +++ b/internal/generator/plugins/hostfile/hostfile_test.go @@ -0,0 +1 @@ +package main