net.IPMask doesn't have any advantages, as it would marshalled to mask: - 1 - 2 - 3 - 4 Signed-off-by: Christian Goll <cgoll@suse.com>
91 lines
2.0 KiB
Go
91 lines
2.0 KiB
Go
package node
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
/*
|
|
Gets a node by its hardware(mac) address
|
|
*/
|
|
func (config *NodeYaml) FindByHwaddr(hwa string) (NodeConf, error) {
|
|
if _, err := net.ParseMAC(hwa); err != nil {
|
|
return NodeConf{}, errors.New("invalid hardware address: " + hwa)
|
|
}
|
|
nodeList, _ := config.FindAllNodes()
|
|
for _, node := range nodeList {
|
|
for _, dev := range node.NetDevs {
|
|
if strings.EqualFold(dev.Hwaddr, hwa) {
|
|
return node, nil
|
|
}
|
|
}
|
|
}
|
|
|
|
return NodeConf{}, ErrNotFound
|
|
}
|
|
|
|
/*
|
|
Find a node by its ip address
|
|
*/
|
|
func (config *NodeYaml) FindByIpaddr(ipaddr string) (NodeConf, error) {
|
|
addr := net.ParseIP(ipaddr)
|
|
if addr == nil {
|
|
return NodeConf{}, errors.New("invalid IP:" + ipaddr)
|
|
}
|
|
nodeList, err := config.FindAllNodes()
|
|
if err != nil {
|
|
return NodeConf{}, err
|
|
}
|
|
for _, node := range nodeList {
|
|
for _, dev := range node.NetDevs {
|
|
if dev.Ipaddr.Equal(addr) {
|
|
return node, nil
|
|
}
|
|
}
|
|
}
|
|
|
|
return NodeConf{}, ErrNotFound
|
|
}
|
|
|
|
/*
|
|
Check if the Object is empty, has no valid values
|
|
*/
|
|
func ObjectIsEmpty(obj interface{}) bool {
|
|
if obj == nil {
|
|
return true
|
|
}
|
|
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 varVal.Field(i).Len() != 0 {
|
|
// 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
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|