Merge pull request #371 from MatthewHink/mhink-nil
Fix 365. Nil checks around pointers in nodes.conf.
This commit is contained in:
@@ -62,11 +62,17 @@ func (config *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
||||
wwlog.Printf(wwlog.DEBUG, "In node loop: %s\n", nodename)
|
||||
n.NetDevs = make(map[string]*NetDevEntry)
|
||||
n.Tags = make(map[string]*Entry)
|
||||
n.Kernel = new(KernelEntry)
|
||||
n.Ipmi = new(IpmiEntry)
|
||||
n.SystemOverlay.SetDefault("wwinit")
|
||||
n.RuntimeOverlay.SetDefault("generic")
|
||||
n.Ipxe.SetDefault("default")
|
||||
n.Init.SetDefault("/sbin/init")
|
||||
n.Root.SetDefault("initramfs")
|
||||
|
||||
if n.Kernel == nil {
|
||||
n.Kernel = &KernelEntry{}
|
||||
}
|
||||
n.Kernel.Args.SetDefault("quiet crashkernel=no vga=791")
|
||||
|
||||
fullname := strings.SplitN(nodename, ".", 2)
|
||||
@@ -83,28 +89,34 @@ func (config *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
||||
n.Id.Set(nodename)
|
||||
n.Comment.Set(node.Comment)
|
||||
n.ContainerName.Set(node.ContainerName)
|
||||
n.Kernel.Args.Set(node.Kernel.Args)
|
||||
if node.Kernel != nil {
|
||||
n.Kernel.Args.Set(node.Kernel.Args)
|
||||
}
|
||||
n.ClusterName.Set(node.ClusterName)
|
||||
n.Ipxe.Set(node.Ipxe)
|
||||
n.Init.Set(node.Init)
|
||||
n.Ipmi.Ipaddr.Set(node.Ipmi.Ipaddr)
|
||||
n.Ipmi.Netmask.Set(node.Ipmi.Netmask)
|
||||
n.Ipmi.Port.Set(node.Ipmi.Port)
|
||||
n.Ipmi.Gateway.Set(node.Ipmi.Gateway)
|
||||
n.Ipmi.UserName.Set(node.Ipmi.UserName)
|
||||
n.Ipmi.Password.Set(node.Ipmi.Password)
|
||||
n.Ipmi.Interface.Set(node.Ipmi.Interface)
|
||||
n.Ipmi.Write.SetB(node.Ipmi.Write)
|
||||
if node.Ipmi != nil {
|
||||
n.Ipmi.Ipaddr.Set(node.Ipmi.Ipaddr)
|
||||
n.Ipmi.Netmask.Set(node.Ipmi.Netmask)
|
||||
n.Ipmi.Port.Set(node.Ipmi.Port)
|
||||
n.Ipmi.Gateway.Set(node.Ipmi.Gateway)
|
||||
n.Ipmi.UserName.Set(node.Ipmi.UserName)
|
||||
n.Ipmi.Password.Set(node.Ipmi.Password)
|
||||
n.Ipmi.Interface.Set(node.Ipmi.Interface)
|
||||
n.Ipmi.Write.SetB(node.Ipmi.Write)
|
||||
}
|
||||
n.SystemOverlay.SetSlice(node.SystemOverlay)
|
||||
n.RuntimeOverlay.SetSlice(node.RuntimeOverlay)
|
||||
n.Root.Set(node.Root)
|
||||
n.AssetKey.Set(node.AssetKey)
|
||||
n.Discoverable.Set(node.Discoverable)
|
||||
|
||||
if node.Kernel.Override != "" {
|
||||
n.Kernel.Override.Set(node.Kernel.Override)
|
||||
} else if node.Kernel.Version != "" {
|
||||
n.Kernel.Override.Set(node.Kernel.Version)
|
||||
if node.Kernel != nil {
|
||||
if node.Kernel.Override != "" {
|
||||
n.Kernel.Override.Set(node.Kernel.Override)
|
||||
} else if node.Kernel.Version != "" {
|
||||
n.Kernel.Override.Set(node.Kernel.Version)
|
||||
}
|
||||
}
|
||||
|
||||
for devname, netdev := range node.NetDevs {
|
||||
@@ -179,27 +191,33 @@ func (config *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
||||
n.Comment.SetAlt(config.NodeProfiles[p].Comment, p)
|
||||
n.ClusterName.SetAlt(config.NodeProfiles[p].ClusterName, p)
|
||||
n.ContainerName.SetAlt(config.NodeProfiles[p].ContainerName, p)
|
||||
n.Kernel.Args.SetAlt(config.NodeProfiles[p].Kernel.Args, p)
|
||||
if config.NodeProfiles[p].Kernel != nil {
|
||||
n.Kernel.Args.SetAlt(config.NodeProfiles[p].Kernel.Args, p)
|
||||
}
|
||||
n.Ipxe.SetAlt(config.NodeProfiles[p].Ipxe, p)
|
||||
n.Init.SetAlt(config.NodeProfiles[p].Init, p)
|
||||
n.Ipmi.Ipaddr.SetAlt(config.NodeProfiles[p].Ipmi.Ipaddr, p)
|
||||
n.Ipmi.Netmask.SetAlt(config.NodeProfiles[p].Ipmi.Netmask, p)
|
||||
n.Ipmi.Port.SetAlt(config.NodeProfiles[p].Ipmi.Port, p)
|
||||
n.Ipmi.Gateway.SetAlt(config.NodeProfiles[p].Ipmi.Gateway, p)
|
||||
n.Ipmi.UserName.SetAlt(config.NodeProfiles[p].Ipmi.UserName, p)
|
||||
n.Ipmi.Password.SetAlt(config.NodeProfiles[p].Ipmi.Password, p)
|
||||
n.Ipmi.Interface.SetAlt(config.NodeProfiles[p].Ipmi.Interface, p)
|
||||
n.Ipmi.Write.SetB(config.NodeProfiles[p].Ipmi.Write)
|
||||
if config.NodeProfiles[p].Ipmi != nil {
|
||||
n.Ipmi.Ipaddr.SetAlt(config.NodeProfiles[p].Ipmi.Ipaddr, p)
|
||||
n.Ipmi.Netmask.SetAlt(config.NodeProfiles[p].Ipmi.Netmask, p)
|
||||
n.Ipmi.Port.SetAlt(config.NodeProfiles[p].Ipmi.Port, p)
|
||||
n.Ipmi.Gateway.SetAlt(config.NodeProfiles[p].Ipmi.Gateway, p)
|
||||
n.Ipmi.UserName.SetAlt(config.NodeProfiles[p].Ipmi.UserName, p)
|
||||
n.Ipmi.Password.SetAlt(config.NodeProfiles[p].Ipmi.Password, p)
|
||||
n.Ipmi.Interface.SetAlt(config.NodeProfiles[p].Ipmi.Interface, p)
|
||||
n.Ipmi.Write.SetB(config.NodeProfiles[p].Ipmi.Write)
|
||||
}
|
||||
n.SystemOverlay.SetAltSlice(config.NodeProfiles[p].SystemOverlay, p)
|
||||
n.RuntimeOverlay.SetAltSlice(config.NodeProfiles[p].RuntimeOverlay, p)
|
||||
n.Root.SetAlt(config.NodeProfiles[p].Root, p)
|
||||
n.AssetKey.SetAlt(config.NodeProfiles[p].AssetKey, p)
|
||||
n.Discoverable.SetAlt(config.NodeProfiles[p].Discoverable, p)
|
||||
|
||||
if config.NodeProfiles[p].Kernel.Override != "" {
|
||||
n.Kernel.Override.SetAlt(config.NodeProfiles[p].Kernel.Override, p)
|
||||
} else if config.NodeProfiles[p].Kernel.Version != "" {
|
||||
n.Kernel.Override.SetAlt(config.NodeProfiles[p].Kernel.Version, p)
|
||||
if config.NodeProfiles[p].Kernel != nil {
|
||||
if config.NodeProfiles[p].Kernel.Override != "" {
|
||||
n.Kernel.Override.SetAlt(config.NodeProfiles[p].Kernel.Override, p)
|
||||
} else if config.NodeProfiles[p].Kernel.Version != "" {
|
||||
n.Kernel.Override.SetAlt(config.NodeProfiles[p].Kernel.Version, p)
|
||||
}
|
||||
}
|
||||
|
||||
for devname, netdev := range config.NodeProfiles[p].NetDevs {
|
||||
@@ -271,33 +289,37 @@ func (config *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
|
||||
var p NodeInfo
|
||||
p.NetDevs = make(map[string]*NetDevEntry)
|
||||
p.Tags = make(map[string]*Entry)
|
||||
|
||||
p.Kernel = new(KernelEntry)
|
||||
p.Ipmi = new(IpmiEntry)
|
||||
p.Id.Set(name)
|
||||
p.Comment.Set(profile.Comment)
|
||||
p.ClusterName.Set(profile.ClusterName)
|
||||
p.ContainerName.Set(profile.ContainerName)
|
||||
p.Ipxe.Set(profile.Ipxe)
|
||||
p.Init.Set(profile.Init)
|
||||
p.Kernel.Args.Set(profile.Kernel.Args)
|
||||
p.Ipmi.Netmask.Set(profile.Ipmi.Netmask)
|
||||
p.Ipmi.Port.Set(profile.Ipmi.Port)
|
||||
p.Ipmi.Gateway.Set(profile.Ipmi.Gateway)
|
||||
p.Ipmi.UserName.Set(profile.Ipmi.UserName)
|
||||
p.Ipmi.Password.Set(profile.Ipmi.Password)
|
||||
p.Ipmi.Interface.Set(profile.Ipmi.Interface)
|
||||
p.Ipmi.Write.SetB(profile.Ipmi.Write)
|
||||
if profile.Kernel != nil {
|
||||
p.Kernel.Args.Set(profile.Kernel.Args)
|
||||
if profile.Kernel.Override != "" {
|
||||
p.Kernel.Override.Set(profile.Kernel.Override)
|
||||
} else if profile.Kernel.Version != "" {
|
||||
p.Kernel.Override.Set(profile.Kernel.Version)
|
||||
}
|
||||
}
|
||||
if profile.Ipmi != nil {
|
||||
p.Ipmi.Netmask.Set(profile.Ipmi.Netmask)
|
||||
p.Ipmi.Port.Set(profile.Ipmi.Port)
|
||||
p.Ipmi.Gateway.Set(profile.Ipmi.Gateway)
|
||||
p.Ipmi.UserName.Set(profile.Ipmi.UserName)
|
||||
p.Ipmi.Password.Set(profile.Ipmi.Password)
|
||||
p.Ipmi.Interface.Set(profile.Ipmi.Interface)
|
||||
p.Ipmi.Write.SetB(profile.Ipmi.Write)
|
||||
}
|
||||
p.RuntimeOverlay.SetSlice(profile.RuntimeOverlay)
|
||||
p.SystemOverlay.SetSlice(profile.SystemOverlay)
|
||||
p.Root.Set(profile.Root)
|
||||
p.AssetKey.Set(profile.AssetKey)
|
||||
p.Discoverable.Set(profile.Discoverable)
|
||||
|
||||
if profile.Kernel.Override != "" {
|
||||
p.Kernel.Override.Set(profile.Kernel.Override)
|
||||
} else if profile.Kernel.Version != "" {
|
||||
p.Kernel.Override.Set(profile.Kernel.Version)
|
||||
}
|
||||
|
||||
for devname, netdev := range profile.NetDevs {
|
||||
if _, ok := p.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
|
||||
@@ -209,6 +209,13 @@ func (ent *Entry) GetRealSlice() []string {
|
||||
return ent.value
|
||||
}
|
||||
|
||||
/*
|
||||
true if the entry has set a real value, else false.
|
||||
*/
|
||||
func (ent *Entry) GotReal() bool {
|
||||
return len(ent.value) != 0
|
||||
}
|
||||
|
||||
/**********
|
||||
*
|
||||
* Misc
|
||||
|
||||
@@ -28,10 +28,11 @@ func (config *nodeYaml) AddNode(nodeID string) (NodeInfo, error) {
|
||||
config.Nodes[nodeID] = &node
|
||||
config.Nodes[nodeID].Profiles = []string{"default"}
|
||||
config.Nodes[nodeID].NetDevs = make(map[string]*NetDevs)
|
||||
|
||||
n.Id.Set(nodeID)
|
||||
n.Profiles = []string{"default"}
|
||||
n.NetDevs = make(map[string]*NetDevEntry)
|
||||
n.Ipmi = new(IpmiEntry)
|
||||
n.Kernel = new(KernelEntry)
|
||||
|
||||
return n, nil
|
||||
}
|
||||
@@ -60,16 +61,24 @@ func (config *nodeYaml) NodeUpdate(node NodeInfo) error {
|
||||
config.Nodes[nodeID].ClusterName = node.ClusterName.GetReal()
|
||||
config.Nodes[nodeID].Ipxe = node.Ipxe.GetReal()
|
||||
config.Nodes[nodeID].Init = node.Init.GetReal()
|
||||
config.Nodes[nodeID].Kernel.Override = node.Kernel.Override.GetReal()
|
||||
config.Nodes[nodeID].Kernel.Args = node.Kernel.Args.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Ipaddr = node.Ipmi.Ipaddr.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Netmask = node.Ipmi.Netmask.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Port = node.Ipmi.Port.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Gateway = node.Ipmi.Gateway.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.UserName = node.Ipmi.UserName.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Password = node.Ipmi.Password.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Interface = node.Ipmi.Interface.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Write = node.Ipmi.Write.GetB()
|
||||
if node.Kernel.Override.GotReal() || node.Kernel.Args.GotReal() {
|
||||
config.Nodes[nodeID].Kernel = new(KernelConf)
|
||||
config.Nodes[nodeID].Kernel.Override = node.Kernel.Override.GetReal()
|
||||
config.Nodes[nodeID].Kernel.Args = node.Kernel.Args.GetReal()
|
||||
}
|
||||
if node.Ipmi.Ipaddr.GotReal() || node.Ipmi.Netmask.GotReal() ||
|
||||
node.Ipmi.Port.GotReal() || node.Ipmi.Gateway.GotReal() || node.Ipmi.UserName.GotReal() ||
|
||||
node.Ipmi.Password.GotReal() || node.Ipmi.Interface.GotReal() || node.Ipmi.Write.GotReal() {
|
||||
config.Nodes[nodeID].Ipmi = new(IpmiConf)
|
||||
config.Nodes[nodeID].Ipmi.Ipaddr = node.Ipmi.Ipaddr.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Netmask = node.Ipmi.Netmask.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Port = node.Ipmi.Port.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Gateway = node.Ipmi.Gateway.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.UserName = node.Ipmi.UserName.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Password = node.Ipmi.Password.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Interface = node.Ipmi.Interface.GetReal()
|
||||
config.Nodes[nodeID].Ipmi.Write = node.Ipmi.Write.GetB()
|
||||
}
|
||||
config.Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetRealSlice()
|
||||
config.Nodes[nodeID].SystemOverlay = node.SystemOverlay.GetRealSlice()
|
||||
config.Nodes[nodeID].Root = node.Root.GetReal()
|
||||
|
||||
Reference in New Issue
Block a user