Fininshed with node discovery and service refactoring

This commit is contained in:
Gregory Kurtzer
2020-12-13 20:20:03 -08:00
parent f1706a4a0e
commit 5c23ef9f94
10 changed files with 85 additions and 19 deletions

View File

@@ -74,6 +74,9 @@ func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
n.SystemOverlay.Set(node.SystemOverlay)
n.RuntimeOverlay.Set(node.RuntimeOverlay)
n.Discoverable.SetB(node.Discoverable)
n.Disabled.SetB(node.Disabled)
for devname, netdev := range node.NetDevs {
if _, ok := n.NetDevs[devname]; !ok {
var netdev NetDevEntry
@@ -112,6 +115,9 @@ func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
n.SystemOverlay.SetAlt(self.NodeProfiles[p].SystemOverlay, pstring)
n.RuntimeOverlay.SetAlt(self.NodeProfiles[p].RuntimeOverlay, pstring)
n.Disabled.SetAltB(self.NodeProfiles[p].Disabled, pstring)
n.Discoverable.SetAltB(self.NodeProfiles[p].Discoverable, pstring)
for devname, netdev := range self.NodeProfiles[p].NetDevs {
if _, ok := n.NetDevs[devname]; !ok {
var netdev NetDevEntry
@@ -155,6 +161,9 @@ func (self *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
p.RuntimeOverlay.Set(profile.RuntimeOverlay)
p.SystemOverlay.Set(profile.SystemOverlay)
p.Disabled.SetB(profile.Disabled)
p.Discoverable.SetB(profile.Discoverable)
for devname, netdev := range profile.NetDevs {
if _, ok := p.NetDevs[devname]; !ok {
var netdev NetDevEntry
@@ -190,17 +199,18 @@ func (self *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
return ret, nil
}
func (self *nodeYaml) FindUnconfiguredNode() (NodeInfo, string, error) {
func (self *nodeYaml) FindDiscoverableNode() (NodeInfo, string, error) {
var ret NodeInfo
nodes, _ := self.FindAllNodes()
for _, node := range nodes {
if node.Discoverable.GetB() == false {
continue
}
for netdev, dev := range node.NetDevs {
if dev.Hwaddr.Defined() == false && dev.Ipaddr.Defined() == true {
if dev.Type.Defined() == false || dev.Type.Get() == "ethernet" {
return node, netdev, nil
}
if dev.Hwaddr.Defined() == false {
return node, netdev, nil
}
}
}

View File

@@ -1,6 +1,7 @@
package node
import (
"fmt"
"github.com/hpcng/warewulf/internal/pkg/util"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"os"
@@ -30,6 +31,7 @@ type NodeConf struct {
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
SystemOverlay string `yaml:"system overlay files,omitempty"`
Init string `yaml:"init,omitempty"`
Discoverable bool `yaml:"discoverable,omitempty"`
Profiles []string `yaml:"profiles,omitempty"`
NetDevs map[string]*NetDevs `yaml:"network devices,omitempty"`
}
@@ -71,6 +73,8 @@ type NodeInfo struct {
IpmiPassword Entry
RuntimeOverlay Entry
SystemOverlay Entry
Discoverable Entry
Disabled Entry
Init Entry //TODO: Finish adding this...
Profiles []string
GroupProfiles []string
@@ -89,7 +93,20 @@ type NetDevEntry struct {
func init() {
//TODO: Check to make sure nodes.conf is found
if util.IsFile(ConfigFile) == false {
wwlog.Printf(wwlog.ERROR, "Configuration file not found: %s\n", ConfigFile)
os.Exit(1)
c, err := os.OpenFile(ConfigFile, os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
wwlog.Printf(wwlog.ERROR, "Could not create new configuration file: %s\n", err)
os.Exit(1)
}
fmt.Fprintf(c, "nodeprofiles:\n")
fmt.Fprintf(c, " default:\n")
fmt.Fprintf(c, " comment: This profile is automatically included for each node\n")
fmt.Fprintf(c, " kernel args: crashkernel=no quiet\n")
fmt.Fprintf(c, "nodes: {}\n")
c.Close()
wwlog.Printf(wwlog.INFO, "Created default node configuration\n")
}
}

View File

@@ -41,8 +41,10 @@ func (self *Entry) SetAlt(val string, from string) {
}
func (self *Entry) SetAltB(val bool, from string) {
self.altbool = val
self.from = from
if val == true {
self.altbool = val
self.from = from
}
return
}
@@ -106,6 +108,13 @@ func (self *Entry) Print() string {
return "--"
}
func (self *Entry) PrintB() bool {
if self.from == "" {
return self.bool
}
return self.altbool
}
func (self *Entry) Source() string {
if self.value != "" && self.altvalue != "" {
return "SUPERSEDED"

View File

@@ -66,6 +66,10 @@ func (self *nodeYaml) NodeUpdate(node NodeInfo) error {
self.Nodes[nodeID].IpmiPassword = node.IpmiPassword.GetReal()
self.Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetReal()
self.Nodes[nodeID].SystemOverlay = node.SystemOverlay.GetReal()
self.Nodes[nodeID].Disabled = node.Disabled.GetRealB()
self.Nodes[nodeID].Discoverable = node.Discoverable.GetRealB()
self.Nodes[nodeID].Profiles = node.Profiles
self.Nodes[nodeID].NetDevs = make(map[string]*NetDevs)
@@ -138,6 +142,10 @@ func (self *nodeYaml) ProfileUpdate(profile NodeInfo) error {
self.NodeProfiles[profileID].IpmiPassword = profile.IpmiPassword.GetReal()
self.NodeProfiles[profileID].RuntimeOverlay = profile.RuntimeOverlay.GetReal()
self.NodeProfiles[profileID].SystemOverlay = profile.SystemOverlay.GetReal()
self.NodeProfiles[profileID].Disabled = profile.Disabled.GetRealB()
self.NodeProfiles[profileID].Discoverable = profile.Discoverable.GetRealB()
self.NodeProfiles[profileID].Profiles = profile.Profiles
self.NodeProfiles[profileID].NetDevs = make(map[string]*NetDevs)