This is a work in progress API shift as the data structure has changed and I'm cleaning the interface.
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"gopkg.in/yaml.v2"
|
||||
"io/ioutil"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func New() (nodeYaml, error) {
|
||||
@@ -30,142 +31,104 @@ func New() (nodeYaml, error) {
|
||||
func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
||||
var ret []NodeInfo
|
||||
|
||||
for controllername, controller := range self.Controllers {
|
||||
for groupname, group := range controller.NodeGroups {
|
||||
for nodename, node := range group.Nodes {
|
||||
var n NodeInfo
|
||||
var allProfiles []string
|
||||
for nodename, node := range self.Nodes {
|
||||
var n NodeInfo
|
||||
|
||||
if node.Disabled == true || group.Disabled == true {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Skipping disabled node: %s/%s\n", groupname, nodename)
|
||||
continue
|
||||
n.NetDevs = make(map[string]*NetDevEntry)
|
||||
n.SystemOverlay.Set("default")
|
||||
n.RuntimeOverlay.Set("default")
|
||||
n.Ipxe.Set("default")
|
||||
|
||||
fullname := strings.SplitN(nodename, ".", 2)
|
||||
if len(fullname) > 1 {
|
||||
n.DomainName.Set(fullname[1])
|
||||
}
|
||||
|
||||
if len(node.Profiles) == 0 {
|
||||
n.Profiles = []string{"default"}
|
||||
} else {
|
||||
n.Profiles = node.Profiles
|
||||
}
|
||||
|
||||
n.Id.Set(nodename)
|
||||
n.Comment.Set(node.Comment)
|
||||
n.Vnfs.Set(node.Vnfs)
|
||||
n.KernelVersion.Set(node.KernelVersion)
|
||||
n.KernelArgs.Set(node.KernelArgs)
|
||||
n.DomainName.Set(node.DomainName)
|
||||
n.Ipxe.Set(node.Ipxe)
|
||||
n.IpmiIpaddr.Set(node.IpmiIpaddr)
|
||||
n.IpmiNetmask.Set(node.IpmiNetmask)
|
||||
n.IpmiUserName.Set(node.IpmiUserName)
|
||||
n.IpmiPassword.Set(node.IpmiPassword)
|
||||
n.SystemOverlay.Set(node.SystemOverlay)
|
||||
n.RuntimeOverlay.Set(node.RuntimeOverlay)
|
||||
|
||||
for devname, netdev := range node.NetDevs {
|
||||
if _, ok := n.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
n.NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
n.NetDevs[devname].Ipaddr.Set(netdev.Ipaddr)
|
||||
n.NetDevs[devname].Netmask.Set(netdev.Netmask)
|
||||
n.NetDevs[devname].Hwaddr.Set(netdev.Hwaddr)
|
||||
n.NetDevs[devname].Gateway.Set(netdev.Gateway)
|
||||
n.NetDevs[devname].Type.Set(netdev.Type)
|
||||
n.NetDevs[devname].Default.SetB(netdev.Default)
|
||||
}
|
||||
|
||||
for _, p := range n.Profiles {
|
||||
if _, ok := self.NodeProfiles[p]; !ok {
|
||||
wwlog.Printf(wwlog.WARN, "Profile not found for node '%s': %s\n", nodename, p)
|
||||
continue
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Merging profile into node: %s <- %s\n", nodename, p)
|
||||
|
||||
pstring := fmt.Sprintf("%s", p)
|
||||
|
||||
n.Comment.SetAlt(self.NodeProfiles[p].Comment, pstring)
|
||||
n.DomainName.SetAlt(self.NodeProfiles[p].DomainName, pstring)
|
||||
n.Vnfs.SetAlt(self.NodeProfiles[p].Vnfs, pstring)
|
||||
n.KernelVersion.SetAlt(self.NodeProfiles[p].KernelVersion, pstring)
|
||||
n.KernelArgs.SetAlt(self.NodeProfiles[p].KernelArgs, pstring)
|
||||
n.Ipxe.SetAlt(self.NodeProfiles[p].Ipxe, pstring)
|
||||
n.IpmiIpaddr.SetAlt(self.NodeProfiles[p].IpmiIpaddr, pstring)
|
||||
n.IpmiNetmask.SetAlt(self.NodeProfiles[p].IpmiNetmask, pstring)
|
||||
n.IpmiUserName.SetAlt(self.NodeProfiles[p].IpmiUserName, pstring)
|
||||
n.IpmiPassword.SetAlt(self.NodeProfiles[p].IpmiPassword, pstring)
|
||||
n.SystemOverlay.SetAlt(self.NodeProfiles[p].SystemOverlay, pstring)
|
||||
n.RuntimeOverlay.SetAlt(self.NodeProfiles[p].RuntimeOverlay, pstring)
|
||||
|
||||
for devname, netdev := range self.NodeProfiles[p].NetDevs {
|
||||
if _, ok := n.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
n.NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
n.Id.SetNode(nodename)
|
||||
n.Gid.SetNode(groupname)
|
||||
n.Cid.SetNode(controllername)
|
||||
n.HostName.SetNode(node.Hostname)
|
||||
n.IpmiIpaddr.SetNode(node.IpmiIpaddr)
|
||||
n.IpmiNetmask.SetNode(node.IpmiNetmask)
|
||||
n.DomainName.SetNode(node.DomainName)
|
||||
n.Vnfs.SetNode(node.Vnfs)
|
||||
n.KernelVersion.SetNode(node.KernelVersion)
|
||||
n.KernelArgs.SetNode(node.KernelArgs)
|
||||
n.Ipxe.SetNode(node.Ipxe)
|
||||
n.IpmiUserName.SetNode(node.IpmiUserName)
|
||||
n.IpmiPassword.SetNode(node.IpmiPassword)
|
||||
n.SystemOverlay.SetNode(node.SystemOverlay)
|
||||
n.RuntimeOverlay.SetNode(node.RuntimeOverlay)
|
||||
|
||||
n.DomainName.SetGroup(group.DomainName)
|
||||
n.Vnfs.SetGroup(group.Vnfs)
|
||||
n.KernelVersion.SetGroup(group.KernelVersion)
|
||||
n.KernelArgs.SetGroup(group.KernelArgs)
|
||||
n.Ipxe.SetGroup(group.Ipxe)
|
||||
n.IpmiNetmask.SetGroup(group.IpmiNetmask)
|
||||
n.IpmiUserName.SetGroup(group.IpmiUserName)
|
||||
n.IpmiPassword.SetGroup(group.IpmiPassword)
|
||||
n.SystemOverlay.SetGroup(group.SystemOverlay)
|
||||
n.RuntimeOverlay.SetGroup(group.RuntimeOverlay)
|
||||
|
||||
n.RuntimeOverlay.SetDefault("default")
|
||||
n.SystemOverlay.SetDefault("default")
|
||||
n.Ipxe.SetDefault("default")
|
||||
n.KernelArgs.SetDefault("crashkernel=no quiet")
|
||||
|
||||
n.GroupProfiles = group.Profiles
|
||||
n.Profiles = node.Profiles
|
||||
|
||||
allProfiles = append(allProfiles, group.Profiles...)
|
||||
allProfiles = append(allProfiles, node.Profiles...)
|
||||
|
||||
for _, p := range allProfiles {
|
||||
if _, ok := self.NodeProfiles[p]; !ok {
|
||||
wwlog.Printf(wwlog.WARN, "Profile not found for node '%s': %s\n", nodename, p)
|
||||
continue
|
||||
}
|
||||
|
||||
n.DomainName.SetProfile(self.NodeProfiles[p].DomainName)
|
||||
n.Vnfs.SetProfile(self.NodeProfiles[p].Vnfs)
|
||||
n.KernelVersion.SetProfile(self.NodeProfiles[p].KernelVersion)
|
||||
n.KernelArgs.SetProfile(self.NodeProfiles[p].KernelArgs)
|
||||
n.Ipxe.SetProfile(self.NodeProfiles[p].Ipxe)
|
||||
n.IpmiNetmask.SetProfile(self.NodeProfiles[p].IpmiNetmask)
|
||||
n.IpmiUserName.SetProfile(self.NodeProfiles[p].IpmiUserName)
|
||||
n.IpmiPassword.SetProfile(self.NodeProfiles[p].IpmiPassword)
|
||||
n.SystemOverlay.SetProfile(self.NodeProfiles[p].SystemOverlay)
|
||||
n.RuntimeOverlay.SetProfile(self.NodeProfiles[p].RuntimeOverlay)
|
||||
}
|
||||
|
||||
if n.DomainName.Defined() == true {
|
||||
n.Fqdn.SetNode(node.Hostname + "." + n.DomainName.Get())
|
||||
} else {
|
||||
n.Fqdn.SetNode(node.Hostname)
|
||||
}
|
||||
|
||||
n.NetDevs = node.NetDevs
|
||||
|
||||
ret = append(ret, n)
|
||||
n.NetDevs[devname].Ipaddr.SetAlt(netdev.Ipaddr, pstring)
|
||||
n.NetDevs[devname].Netmask.SetAlt(netdev.Netmask, pstring)
|
||||
n.NetDevs[devname].Hwaddr.SetAlt(netdev.Hwaddr, pstring)
|
||||
n.NetDevs[devname].Gateway.SetAlt(netdev.Gateway, pstring)
|
||||
n.NetDevs[devname].Type.SetAlt(netdev.Type, pstring)
|
||||
n.NetDevs[devname].Default.SetAltB(netdev.Default, pstring)
|
||||
}
|
||||
}
|
||||
|
||||
ret = append(ret, n)
|
||||
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) FindAllGroups() ([]GroupInfo, error) {
|
||||
var ret []GroupInfo
|
||||
/*
|
||||
func (self *nodeYaml) FindAllControllers() ([]ControllerConf, error) {
|
||||
var ret []ControllerConf
|
||||
|
||||
for controllername, controller := range self.Controllers {
|
||||
for groupname, group := range controller.NodeGroups {
|
||||
var g GroupInfo
|
||||
|
||||
g.Id.SetGroup(groupname)
|
||||
g.Cid.SetGroup(controllername)
|
||||
g.DomainName.SetGroup(group.DomainName)
|
||||
g.Comment.SetGroup(group.Comment)
|
||||
g.Vnfs.SetGroup(group.Vnfs)
|
||||
g.KernelVersion.SetGroup(group.KernelVersion)
|
||||
g.KernelArgs.SetGroup(group.KernelArgs)
|
||||
g.IpmiNetmask.SetGroup(group.IpmiNetmask)
|
||||
g.IpmiPassword.SetGroup(group.IpmiPassword)
|
||||
g.IpmiUserName.SetGroup(group.IpmiUserName)
|
||||
g.SystemOverlay.SetGroup(group.SystemOverlay)
|
||||
g.RuntimeOverlay.SetGroup(group.RuntimeOverlay)
|
||||
|
||||
g.Profiles = group.Profiles
|
||||
|
||||
for _, p := range group.Profiles {
|
||||
if _, ok := self.NodeProfiles[p]; !ok {
|
||||
wwlog.Printf(wwlog.WARN, "Profile not found for group '%s': %s\n", groupname, p)
|
||||
continue
|
||||
}
|
||||
|
||||
g.DomainName.SetProfile(self.NodeProfiles[p].DomainName)
|
||||
g.Vnfs.SetProfile(self.NodeProfiles[p].Vnfs)
|
||||
g.KernelVersion.SetProfile(self.NodeProfiles[p].KernelVersion)
|
||||
g.KernelArgs.SetProfile(self.NodeProfiles[p].KernelArgs)
|
||||
g.Ipxe.SetProfile(self.NodeProfiles[p].Ipxe)
|
||||
g.IpmiNetmask.SetProfile(self.NodeProfiles[p].IpmiNetmask)
|
||||
g.IpmiUserName.SetProfile(self.NodeProfiles[p].IpmiUserName)
|
||||
g.IpmiPassword.SetProfile(self.NodeProfiles[p].IpmiPassword)
|
||||
g.SystemOverlay.SetProfile(self.NodeProfiles[p].SystemOverlay)
|
||||
g.RuntimeOverlay.SetProfile(self.NodeProfiles[p].RuntimeOverlay)
|
||||
}
|
||||
|
||||
// TODO: Validate or die on all inputs
|
||||
|
||||
ret = append(ret, g)
|
||||
}
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) FindAllControllers() ([]ControllerInfo, error) {
|
||||
var ret []ControllerInfo
|
||||
|
||||
for controllername, controller := range self.Controllers {
|
||||
var c ControllerInfo
|
||||
var c ControllerConf
|
||||
|
||||
c.Id = controllername
|
||||
c.Ipaddr = controller.Ipaddr
|
||||
@@ -223,25 +186,39 @@ func (self *nodeYaml) FindAllControllers() ([]ControllerInfo, error) {
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
*/
|
||||
|
||||
func (self *nodeYaml) FindAllProfiles() ([]ProfileInfo, error) {
|
||||
var ret []ProfileInfo
|
||||
func (self *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
|
||||
var ret []NodeInfo
|
||||
|
||||
for name, profile := range self.NodeProfiles {
|
||||
var p ProfileInfo
|
||||
var p NodeInfo
|
||||
|
||||
p.Id = name
|
||||
p.Comment = profile.Comment
|
||||
p.Vnfs = profile.Vnfs
|
||||
p.Ipxe = profile.Ipxe
|
||||
p.KernelVersion = profile.KernelVersion
|
||||
p.KernelArgs = profile.KernelArgs
|
||||
p.IpmiNetmask = profile.IpmiNetmask
|
||||
p.IpmiUserName = profile.IpmiUserName
|
||||
p.IpmiPassword = profile.IpmiPassword
|
||||
p.DomainName = profile.DomainName
|
||||
p.RuntimeOverlay = profile.RuntimeOverlay
|
||||
p.SystemOverlay = profile.SystemOverlay
|
||||
p.Id.Set(name)
|
||||
p.Comment.Set(profile.Comment)
|
||||
p.Vnfs.Set(profile.Vnfs)
|
||||
p.Ipxe.Set(profile.Ipxe)
|
||||
p.KernelVersion.Set(profile.KernelVersion)
|
||||
p.KernelArgs.Set(profile.KernelArgs)
|
||||
p.IpmiNetmask.Set(profile.IpmiNetmask)
|
||||
p.IpmiUserName.Set(profile.IpmiUserName)
|
||||
p.IpmiPassword.Set(profile.IpmiPassword)
|
||||
p.RuntimeOverlay.Set(profile.RuntimeOverlay)
|
||||
p.SystemOverlay.Set(profile.SystemOverlay)
|
||||
|
||||
for devname, netdev := range profile.NetDevs {
|
||||
if _, ok := p.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
p.NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
p.NetDevs[devname].Ipaddr.Set(netdev.Ipaddr)
|
||||
p.NetDevs[devname].Netmask.Set(netdev.Netmask)
|
||||
p.NetDevs[devname].Hwaddr.Set(netdev.Hwaddr)
|
||||
p.NetDevs[devname].Gateway.Set(netdev.Gateway)
|
||||
p.NetDevs[devname].Type.Set(netdev.Type)
|
||||
p.NetDevs[devname].Default.SetB(netdev.Default)
|
||||
}
|
||||
|
||||
// TODO: Validate or die on all inputs
|
||||
|
||||
@@ -257,7 +234,7 @@ func (self *nodeYaml) FindByHwaddr(hwa string) (NodeInfo, error) {
|
||||
|
||||
for _, node := range n {
|
||||
for _, dev := range node.NetDevs {
|
||||
if dev.Hwaddr == hwa {
|
||||
if dev.Hwaddr.Get() == hwa {
|
||||
return node, nil
|
||||
}
|
||||
}
|
||||
@@ -273,7 +250,7 @@ func (self *nodeYaml) FindByIpaddr(ipaddr string) (NodeInfo, error) {
|
||||
|
||||
for _, node := range n {
|
||||
for _, dev := range node.NetDevs {
|
||||
if dev.Ipaddr == ipaddr {
|
||||
if dev.Ipaddr.Get() == ipaddr {
|
||||
return node, nil
|
||||
}
|
||||
}
|
||||
@@ -288,7 +265,7 @@ func (nodes *nodeYaml) SearchByName(search string) ([]NodeInfo, error) {
|
||||
n, _ := nodes.FindAllNodes()
|
||||
|
||||
for _, node := range n {
|
||||
b, _ := regexp.MatchString(search, node.Fqdn.Get())
|
||||
b, _ := regexp.MatchString(search, node.Id.Get())
|
||||
if b == true {
|
||||
ret = append(ret, node)
|
||||
}
|
||||
@@ -304,7 +281,7 @@ func (nodes *nodeYaml) SearchByNameList(searchList []string) ([]NodeInfo, error)
|
||||
|
||||
for _, search := range searchList {
|
||||
for _, node := range n {
|
||||
b, _ := regexp.MatchString(search, node.Fqdn.Get())
|
||||
b, _ := regexp.MatchString(search, node.Id.Get())
|
||||
if b == true {
|
||||
ret = append(ret, node)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user