Fininshed with node discovery and service refactoring
This commit is contained in:
@@ -1,8 +0,0 @@
|
|||||||
nodeprofiles:
|
|
||||||
default:
|
|
||||||
comment: "This profile is automatically included for each node"
|
|
||||||
container name: ""
|
|
||||||
kernel version: ""
|
|
||||||
kernel args: crashkernel=no quiet
|
|
||||||
|
|
||||||
nodes: {}
|
|
||||||
@@ -50,6 +50,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
|||||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "ClusterName", node.ClusterName.Source(), node.ClusterName.Print())
|
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "ClusterName", node.ClusterName.Source(), node.ClusterName.Print())
|
||||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Profiles", "--", strings.Join(node.Profiles, ","))
|
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Profiles", "--", strings.Join(node.Profiles, ","))
|
||||||
|
|
||||||
|
fmt.Printf("%-20s %-18s %-12s %t\n", node.Id.Get(), "Disabled", node.Disabled.Source(), node.Disabled.PrintB())
|
||||||
|
fmt.Printf("%-20s %-18s %-12s %t\n", node.Id.Get(), "Discoverable", node.Discoverable.Source(), node.Discoverable.PrintB())
|
||||||
|
|
||||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "ContainerName", node.ContainerName.Source(), node.ContainerName.Print())
|
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "ContainerName", node.ContainerName.Source(), node.ContainerName.Print())
|
||||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "KernelVersion", node.KernelVersion.Source(), node.KernelVersion.Print())
|
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "KernelVersion", node.KernelVersion.Source(), node.KernelVersion.Print())
|
||||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "KernelArgs", node.KernelArgs.Source(), node.KernelArgs.Print())
|
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "KernelArgs", node.KernelArgs.Source(), node.KernelArgs.Print())
|
||||||
|
|||||||
@@ -185,6 +185,27 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if SetDiscoverable == true {
|
||||||
|
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting node to discoverable\n", n.Id.Get())
|
||||||
|
|
||||||
|
n.Discoverable.SetB(true)
|
||||||
|
err := nodeDB.NodeUpdate(n)
|
||||||
|
if err != nil {
|
||||||
|
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if SetUndiscoverable == true {
|
||||||
|
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting node to undiscoverable\n", n.Id.Get())
|
||||||
|
|
||||||
|
n.Discoverable.SetB(false)
|
||||||
|
err := nodeDB.NodeUpdate(n)
|
||||||
|
if err != nil {
|
||||||
|
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(SetAddProfile) > 0 {
|
if len(SetAddProfile) > 0 {
|
||||||
for _, p := range SetAddProfile {
|
for _, p := range SetAddProfile {
|
||||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, adding profile to '%s'\n", n.Id.Get(), p)
|
wwlog.Printf(wwlog.VERBOSE, "Node: %s, adding profile to '%s'\n", n.Id.Get(), p)
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ var (
|
|||||||
SetDelProfile []string
|
SetDelProfile []string
|
||||||
SetForce bool
|
SetForce bool
|
||||||
SetInit string
|
SetInit string
|
||||||
|
SetDiscoverable bool
|
||||||
|
SetUndiscoverable bool
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -61,6 +63,8 @@ func init() {
|
|||||||
|
|
||||||
baseCmd.PersistentFlags().BoolVarP(&SetYes, "yes", "y", false, "Set 'yes' to all questions asked")
|
baseCmd.PersistentFlags().BoolVarP(&SetYes, "yes", "y", false, "Set 'yes' to all questions asked")
|
||||||
baseCmd.PersistentFlags().BoolVarP(&SetForce, "force", "f", false, "Force configuration (even on error)")
|
baseCmd.PersistentFlags().BoolVarP(&SetForce, "force", "f", false, "Force configuration (even on error)")
|
||||||
|
baseCmd.PersistentFlags().BoolVar(&SetDiscoverable, "discoverable", false, "Make this node discoverable")
|
||||||
|
baseCmd.PersistentFlags().BoolVar(&SetUndiscoverable, "undiscoverable", false, "Remove the discoverable flag")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
|||||||
n.SystemOverlay.Set(node.SystemOverlay)
|
n.SystemOverlay.Set(node.SystemOverlay)
|
||||||
n.RuntimeOverlay.Set(node.RuntimeOverlay)
|
n.RuntimeOverlay.Set(node.RuntimeOverlay)
|
||||||
|
|
||||||
|
n.Discoverable.SetB(node.Discoverable)
|
||||||
|
n.Disabled.SetB(node.Disabled)
|
||||||
|
|
||||||
for devname, netdev := range node.NetDevs {
|
for devname, netdev := range node.NetDevs {
|
||||||
if _, ok := n.NetDevs[devname]; !ok {
|
if _, ok := n.NetDevs[devname]; !ok {
|
||||||
var netdev NetDevEntry
|
var netdev NetDevEntry
|
||||||
@@ -112,6 +115,9 @@ func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
|||||||
n.SystemOverlay.SetAlt(self.NodeProfiles[p].SystemOverlay, pstring)
|
n.SystemOverlay.SetAlt(self.NodeProfiles[p].SystemOverlay, pstring)
|
||||||
n.RuntimeOverlay.SetAlt(self.NodeProfiles[p].RuntimeOverlay, 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 {
|
for devname, netdev := range self.NodeProfiles[p].NetDevs {
|
||||||
if _, ok := n.NetDevs[devname]; !ok {
|
if _, ok := n.NetDevs[devname]; !ok {
|
||||||
var netdev NetDevEntry
|
var netdev NetDevEntry
|
||||||
@@ -155,6 +161,9 @@ func (self *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
|
|||||||
p.RuntimeOverlay.Set(profile.RuntimeOverlay)
|
p.RuntimeOverlay.Set(profile.RuntimeOverlay)
|
||||||
p.SystemOverlay.Set(profile.SystemOverlay)
|
p.SystemOverlay.Set(profile.SystemOverlay)
|
||||||
|
|
||||||
|
p.Disabled.SetB(profile.Disabled)
|
||||||
|
p.Discoverable.SetB(profile.Discoverable)
|
||||||
|
|
||||||
for devname, netdev := range profile.NetDevs {
|
for devname, netdev := range profile.NetDevs {
|
||||||
if _, ok := p.NetDevs[devname]; !ok {
|
if _, ok := p.NetDevs[devname]; !ok {
|
||||||
var netdev NetDevEntry
|
var netdev NetDevEntry
|
||||||
@@ -190,17 +199,18 @@ func (self *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
|
|||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *nodeYaml) FindUnconfiguredNode() (NodeInfo, string, error) {
|
func (self *nodeYaml) FindDiscoverableNode() (NodeInfo, string, error) {
|
||||||
var ret NodeInfo
|
var ret NodeInfo
|
||||||
|
|
||||||
nodes, _ := self.FindAllNodes()
|
nodes, _ := self.FindAllNodes()
|
||||||
|
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
|
if node.Discoverable.GetB() == false {
|
||||||
|
continue
|
||||||
|
}
|
||||||
for netdev, dev := range node.NetDevs {
|
for netdev, dev := range node.NetDevs {
|
||||||
if dev.Hwaddr.Defined() == false && dev.Ipaddr.Defined() == true {
|
if dev.Hwaddr.Defined() == false {
|
||||||
if dev.Type.Defined() == false || dev.Type.Get() == "ethernet" {
|
return node, netdev, nil
|
||||||
return node, netdev, nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package node
|
package node
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/hpcng/warewulf/internal/pkg/util"
|
"github.com/hpcng/warewulf/internal/pkg/util"
|
||||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||||
"os"
|
"os"
|
||||||
@@ -30,6 +31,7 @@ type NodeConf struct {
|
|||||||
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
|
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
|
||||||
SystemOverlay string `yaml:"system overlay files,omitempty"`
|
SystemOverlay string `yaml:"system overlay files,omitempty"`
|
||||||
Init string `yaml:"init,omitempty"`
|
Init string `yaml:"init,omitempty"`
|
||||||
|
Discoverable bool `yaml:"discoverable,omitempty"`
|
||||||
Profiles []string `yaml:"profiles,omitempty"`
|
Profiles []string `yaml:"profiles,omitempty"`
|
||||||
NetDevs map[string]*NetDevs `yaml:"network devices,omitempty"`
|
NetDevs map[string]*NetDevs `yaml:"network devices,omitempty"`
|
||||||
}
|
}
|
||||||
@@ -71,6 +73,8 @@ type NodeInfo struct {
|
|||||||
IpmiPassword Entry
|
IpmiPassword Entry
|
||||||
RuntimeOverlay Entry
|
RuntimeOverlay Entry
|
||||||
SystemOverlay Entry
|
SystemOverlay Entry
|
||||||
|
Discoverable Entry
|
||||||
|
Disabled Entry
|
||||||
Init Entry //TODO: Finish adding this...
|
Init Entry //TODO: Finish adding this...
|
||||||
Profiles []string
|
Profiles []string
|
||||||
GroupProfiles []string
|
GroupProfiles []string
|
||||||
@@ -89,7 +93,20 @@ type NetDevEntry struct {
|
|||||||
func init() {
|
func init() {
|
||||||
//TODO: Check to make sure nodes.conf is found
|
//TODO: Check to make sure nodes.conf is found
|
||||||
if util.IsFile(ConfigFile) == false {
|
if util.IsFile(ConfigFile) == false {
|
||||||
wwlog.Printf(wwlog.ERROR, "Configuration file not found: %s\n", ConfigFile)
|
c, err := os.OpenFile(ConfigFile, os.O_RDWR|os.O_CREATE, 0644)
|
||||||
os.Exit(1)
|
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) {
|
func (self *Entry) SetAltB(val bool, from string) {
|
||||||
self.altbool = val
|
if val == true {
|
||||||
self.from = from
|
self.altbool = val
|
||||||
|
self.from = from
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,6 +108,13 @@ func (self *Entry) Print() string {
|
|||||||
return "--"
|
return "--"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *Entry) PrintB() bool {
|
||||||
|
if self.from == "" {
|
||||||
|
return self.bool
|
||||||
|
}
|
||||||
|
return self.altbool
|
||||||
|
}
|
||||||
|
|
||||||
func (self *Entry) Source() string {
|
func (self *Entry) Source() string {
|
||||||
if self.value != "" && self.altvalue != "" {
|
if self.value != "" && self.altvalue != "" {
|
||||||
return "SUPERSEDED"
|
return "SUPERSEDED"
|
||||||
|
|||||||
@@ -66,6 +66,10 @@ func (self *nodeYaml) NodeUpdate(node NodeInfo) error {
|
|||||||
self.Nodes[nodeID].IpmiPassword = node.IpmiPassword.GetReal()
|
self.Nodes[nodeID].IpmiPassword = node.IpmiPassword.GetReal()
|
||||||
self.Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetReal()
|
self.Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetReal()
|
||||||
self.Nodes[nodeID].SystemOverlay = node.SystemOverlay.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].Profiles = node.Profiles
|
||||||
self.Nodes[nodeID].NetDevs = make(map[string]*NetDevs)
|
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].IpmiPassword = profile.IpmiPassword.GetReal()
|
||||||
self.NodeProfiles[profileID].RuntimeOverlay = profile.RuntimeOverlay.GetReal()
|
self.NodeProfiles[profileID].RuntimeOverlay = profile.RuntimeOverlay.GetReal()
|
||||||
self.NodeProfiles[profileID].SystemOverlay = profile.SystemOverlay.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].Profiles = profile.Profiles
|
||||||
self.NodeProfiles[profileID].NetDevs = make(map[string]*NetDevs)
|
self.NodeProfiles[profileID].NetDevs = make(map[string]*NetDevs)
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ func DaemonStart() error {
|
|||||||
cmd.Start()
|
cmd.Start()
|
||||||
pid := cmd.Process.Pid
|
pid := cmd.Process.Pid
|
||||||
|
|
||||||
p.WriteString(fmt.Sprintf("%d", pid))
|
fmt.Fprintf(p, "%d", pid)
|
||||||
|
|
||||||
p.Close()
|
p.Close()
|
||||||
|
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
wwlog.Printf(wwlog.INFO, "Node was not found, looking for discoverable nodes...\n")
|
wwlog.Printf(wwlog.INFO, "Node was not found, looking for discoverable nodes...\n")
|
||||||
|
|
||||||
n, netdev, err = nodeDB.FindUnconfiguredNode()
|
n, netdev, err = nodeDB.FindDiscoverableNode()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wwlog.Printf(wwlog.WARN, "Node was not found, no nodes are discoverable...\n")
|
wwlog.Printf(wwlog.WARN, "Node was not found, no nodes are discoverable...\n")
|
||||||
unconfiguredNode = true
|
unconfiguredNode = true
|
||||||
@@ -68,6 +68,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) {
|
|||||||
wwlog.Printf(wwlog.INFO, "Adding new configuration to discoverable node: %s\n", n.Id.Get())
|
wwlog.Printf(wwlog.INFO, "Adding new configuration to discoverable node: %s\n", n.Id.Get())
|
||||||
|
|
||||||
n.NetDevs[netdev].Hwaddr.Set(hwaddr)
|
n.NetDevs[netdev].Hwaddr.Set(hwaddr)
|
||||||
|
n.Discoverable.SetB(false)
|
||||||
err := nodeDB.NodeUpdate(n)
|
err := nodeDB.NodeUpdate(n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wwlog.Printf(wwlog.ERROR, "Could not add discovered configuration for node: %s\n", n.Id.Get())
|
wwlog.Printf(wwlog.ERROR, "Could not add discovered configuration for node: %s\n", n.Id.Get())
|
||||||
|
|||||||
Reference in New Issue
Block a user