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:
committed by
Jonathon Anderson
parent
dc8fb2d6f2
commit
28a7b9fe84
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user