diff --git a/internal/pkg/node/constructors.go b/internal/pkg/node/constructors.go index 2b991867..26ec2cce 100644 --- a/internal/pkg/node/constructors.go +++ b/internal/pkg/node/constructors.go @@ -62,6 +62,8 @@ 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") @@ -110,7 +112,7 @@ func (config *nodeYaml) FindAllNodes() ([]NodeInfo, error) { n.Discoverable.Set(node.Discoverable) if node.Kernel != nil { - if node.Kernel.Override != "" { + if node.Kernel.Override != "" { n.Kernel.Override.Set(node.Kernel.Override) } else if node.Kernel.Version != "" { n.Kernel.Override.Set(node.Kernel.Version) diff --git a/internal/pkg/node/methods.go b/internal/pkg/node/methods.go index 9b2dde52..1c3e4607 100644 --- a/internal/pkg/node/methods.go +++ b/internal/pkg/node/methods.go @@ -209,6 +209,16 @@ func (ent *Entry) GetRealSlice() []string { return ent.value } +/* +true if the entry has set a real value, else false. +*/ +func (ent *Entry) GotReal() bool { + if len(ent.value) == 0 { + return false + } + return true +} + /********** * * Misc diff --git a/internal/pkg/node/modifiers.go b/internal/pkg/node/modifiers.go index 7f48f8f6..9420e696 100644 --- a/internal/pkg/node/modifiers.go +++ b/internal/pkg/node/modifiers.go @@ -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()