This makes it so we can never UNDEF/DELETE an entry as that requires upper case. So we are doing the lower case now where it matters.
60 lines
876 B
Go
60 lines
876 B
Go
package warewulfd
|
|
|
|
import (
|
|
"strings"
|
|
"sync"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/hpcng/warewulf/internal/pkg/node"
|
|
)
|
|
|
|
type nodeDB struct {
|
|
lock sync.RWMutex
|
|
NodeInfo map[string]node.NodeInfo
|
|
}
|
|
|
|
var (
|
|
db nodeDB
|
|
)
|
|
|
|
func LoadNodeDB() error {
|
|
TmpMap := make(map[string]node.NodeInfo)
|
|
|
|
DB, err := node.New()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
nodes, err := DB.FindAllNodes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, n := range nodes {
|
|
for _, netdev := range n.NetDevs {
|
|
hwaddr := strings.ToLower(netdev.Hwaddr.Get())
|
|
TmpMap[hwaddr] = n
|
|
}
|
|
}
|
|
|
|
db.lock.Lock()
|
|
defer db.lock.Unlock()
|
|
db.NodeInfo = TmpMap
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetNode(val string) (node.NodeInfo, error) {
|
|
db.lock.RLock()
|
|
defer db.lock.RUnlock()
|
|
|
|
if _, ok := db.NodeInfo[val]; ok {
|
|
|
|
return db.NodeInfo[val], nil
|
|
}
|
|
|
|
var empty node.NodeInfo
|
|
return empty, errors.New("No node found")
|
|
}
|