removed NodeInfo and using NodeConf instead

This is a significant change in the undelying data model!

nodeDb, err := node.New()

will result in a structure which contains the on disk
values. Only

nodeDb.FindAllNodes() or nodeDb.GetNode(id) will give
the nodes with its merged in profiles.

Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
Christian Goll
2023-12-15 15:35:26 +01:00
committed by Jonathon Anderson
parent dc8fb2d6f2
commit 28a7b9fe84
27 changed files with 967 additions and 1801 deletions

View File

@@ -3,61 +3,93 @@ package node
import (
"errors"
"net"
"reflect"
"strings"
)
/*
get node by its hardware/MAC address, return error otherwise
Gets a node by its hardware(mac) address
*/
func (config *NodeYaml) FindByHwaddr(hwa string) (NodeInfo, error) {
func (config *NodeYaml) FindByHwaddr(hwa string) (NodeConf, error) {
if _, err := net.ParseMAC(hwa); err != nil {
return NodeInfo{}, errors.New("invalid hardware address: " + hwa)
return NodeConf{}, errors.New("invalid hardware address: " + hwa)
}
var ret NodeInfo
n, _ := config.FindAllNodes()
for _, node := range n {
nodeList, _ := config.FindAllNodes()
for _, node := range nodeList {
for _, dev := range node.NetDevs {
if strings.EqualFold(dev.Hwaddr.Get(), hwa) {
if strings.EqualFold(dev.Hwaddr, hwa) {
return node, nil
}
}
}
return ret, errors.New("No nodes found with HW Addr: " + hwa)
return NodeConf{}, ErrNotFound
}
/*
get node by its ip address, return error otherwise
Find a node by its ip address
*/
func (config *NodeYaml) FindByIpaddr(ipaddr string) (NodeInfo, error) {
if addr := net.ParseIP(ipaddr); addr == nil {
return NodeInfo{}, errors.New("invalid IP:" + ipaddr)
} else {
ipaddr = addr.String()
func (config *NodeYaml) FindByIpaddr(ipaddr string) (NodeConf, error) {
addr := net.ParseIP(ipaddr)
if addr == nil {
return NodeConf{}, errors.New("invalid IP:" + ipaddr)
}
var ret NodeInfo
n, _ := config.FindAllNodes()
for _, node := range n {
nodeList, err := config.FindAllNodes()
if err != nil {
return NodeConf{}, err
}
for _, node := range nodeList {
for _, dev := range node.NetDevs {
if dev.Ipaddr.Get() == ipaddr {
if dev.Ipaddr.Equal(addr) {
return node, nil
}
}
}
return ret, errors.New("No nodes found with IP Addr: " + ipaddr)
return NodeConf{}, ErrNotFound
}
// Return just the node list as string slice
func (config *NodeYaml) NodeList() []string {
ret := make([]string, len(config.Nodes))
for key := range config.Nodes {
ret = append(ret, key)
/*
Check if the Object is empty, has no valid values
*/
func ObjectIsEmpty(obj interface{}) bool {
if obj == nil {
return true
}
return ret
varType := reflect.TypeOf(obj)
varVal := reflect.ValueOf(obj)
if varType.Kind() == reflect.Ptr && !varVal.IsNil() {
return ObjectIsEmpty(varVal.Elem().Interface())
}
if varVal.IsZero() {
return true
}
for i := 0; i < varType.NumField(); i++ {
if varType.Field(i).Type.Kind() == reflect.String && !varVal.Field(i).IsZero() {
val := varVal.Field(i).Interface().(string)
if val != "" {
return false
}
} else if varType.Field(i).Type == reflect.TypeOf(map[string]string{}) {
if len(varVal.Field(i).Interface().(map[string]string)) != 0 {
return false
}
} else if varType.Field(i).Type.Kind() == reflect.Ptr {
if !ObjectIsEmpty(varVal.Field(i).Interface()) {
return false
}
} else if varType.Field(i).Type == reflect.TypeOf(net.IP{}) {
val := varVal.Field(i).Interface().(net.IP)
if len(val) != 0 && !val.IsUnspecified() {
return false
}
} else if varType.Field(i).Type == reflect.TypeOf(net.IPMask{}) {
o, b := varVal.Field(i).Interface().(net.IPMask).Size()
if o == 0 && b == 0 {
return false
}
}
}
return true
}