Fininshed with node discovery and service refactoring
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user