package generator import ( "fmt" configurator "github.com/OpenCHAMI/configurator/pkg" "github.com/OpenCHAMI/configurator/pkg/client" "github.com/OpenCHAMI/configurator/pkg/config" "github.com/OpenCHAMI/configurator/pkg/util" ) type DNSMasq struct{} func (g *DNSMasq) GetName() string { return "dnsmasq" } func (g *DNSMasq) GetVersion() string { return util.GitCommit() } func (g *DNSMasq) GetDescription() string { return fmt.Sprintf("Configurator generator plugin for '%s'.", g.GetName()) } func (g *DNSMasq) Generate(config *config.Config, params Params) (FileMap, error) { // make sure we have a valid config first if config == nil { return nil, fmt.Errorf("invalid config (config is nil)") } // set all the defaults for variables var ( smdClient = client.NewSmdClient(params.ClientOpts...) eths = []configurator.EthernetInterface{} err error = nil ) // if we have a client, try making the request for the ethernet interfaces eths, err = smdClient.FetchEthernetInterfaces(params.Verbose) 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 output := "# ========== DYNAMICALLY GENERATED BY OPENCHAMI CONFIGURATOR ==========\n" for _, eth := range eths { if eth.Type == "NodeBMC" { output += "dhcp-host=" + eth.MacAddress + "," + eth.ComponentId + "," + eth.IpAddresses[0].IpAddress + "\n" } else { output += "dhcp-host=" + eth.MacAddress + "," + eth.ComponentId + "," + eth.IpAddresses[0].IpAddress + "\n" } } output += "# =====================================================================" // apply template substitutions and return output as byte array return ApplyTemplates(Mappings{ "plugin_name": g.GetName(), "plugin_version": g.GetVersion(), "plugin_description": g.GetDescription(), "dhcp_hosts": output, }, params.Templates) }