From bd3edb9e7f2a669735b555ee62b96b6e96676675 Mon Sep 17 00:00:00 2001 From: jcsiadal Date: Mon, 4 Apr 2022 16:11:24 +0000 Subject: [PATCH] Udated constructors/mods Signed-off-by: jcsiadal --- etc/nodes.conf | 1 + etc/warewulf.conf | 1 + internal/pkg/buildconfig/defaults.go | 2 + internal/pkg/node/constructors.go | 78 +++++++++++----------- internal/pkg/node/datastructure.go | 19 ++++-- internal/pkg/node/modifiers.go | 40 +++++------ internal/pkg/warewulfconf/datastructure.go | 25 +++---- internal/pkg/warewulfconf/defaults.go | 17 ++--- 8 files changed, 99 insertions(+), 84 deletions(-) diff --git a/etc/nodes.conf b/etc/nodes.conf index 3999a8cd..6cc8a52a 100644 --- a/etc/nodes.conf +++ b/etc/nodes.conf @@ -1,3 +1,4 @@ +WW_INTERNAL: 43 nodeprofiles: default: comment: This profile is automatically included for each node diff --git a/etc/warewulf.conf b/etc/warewulf.conf index 787d8188..ffd9aa5c 100644 --- a/etc/warewulf.conf +++ b/etc/warewulf.conf @@ -1,3 +1,4 @@ +WW_INTERNAL: 43 ipaddr: 192.168.200.1 netmask: 255.255.255.0 warewulf: diff --git a/internal/pkg/buildconfig/defaults.go b/internal/pkg/buildconfig/defaults.go index fc714a3d..375778f2 100644 --- a/internal/pkg/buildconfig/defaults.go +++ b/internal/pkg/buildconfig/defaults.go @@ -2,6 +2,8 @@ package buildconfig import "github.com/hpcng/warewulf/internal/pkg/wwlog" +const WWVer = 43 + var ( bindir string = "UNDEF" sysconfdir string = "UNDEF" diff --git a/internal/pkg/node/constructors.go b/internal/pkg/node/constructors.go index db353df7..9e63f4c1 100644 --- a/internal/pkg/node/constructors.go +++ b/internal/pkg/node/constructors.go @@ -67,7 +67,7 @@ func (config *nodeYaml) FindAllNodes() ([]NodeInfo, error) { n.Ipxe.SetDefault("default") n.Init.SetDefault("/sbin/init") n.Root.SetDefault("initramfs") - n.KernelArgs.SetDefault("quiet crashkernel=no vga=791") + n.Kernel.Args.SetDefault("quiet crashkernel=no vga=791") fullname := strings.SplitN(nodename, ".", 2) if len(fullname) > 1 { @@ -83,28 +83,28 @@ func (config *nodeYaml) FindAllNodes() ([]NodeInfo, error) { n.Id.Set(nodename) n.Comment.Set(node.Comment) n.ContainerName.Set(node.ContainerName) - n.KernelArgs.Set(node.KernelArgs) + n.Kernel.Args.Set(node.Kernel.Args) n.ClusterName.Set(node.ClusterName) n.Ipxe.Set(node.Ipxe) n.Init.Set(node.Init) - n.IpmiIpaddr.Set(node.IpmiIpaddr) - n.IpmiNetmask.Set(node.IpmiNetmask) - n.IpmiPort.Set(node.IpmiPort) - n.IpmiGateway.Set(node.IpmiGateway) - n.IpmiUserName.Set(node.IpmiUserName) - n.IpmiPassword.Set(node.IpmiPassword) - n.IpmiInterface.Set(node.IpmiInterface) - n.IpmiWrite.SetB(node.IpmiWrite) + 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.KernelOverride != "" { - n.KernelOverride.Set(node.KernelOverride) - } else if node.KernelVersion != "" { - n.KernelOverride.Set(node.KernelVersion) + 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 { @@ -170,27 +170,27 @@ 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.KernelArgs.SetAlt(config.NodeProfiles[p].KernelArgs, p) + 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.IpmiIpaddr.SetAlt(config.NodeProfiles[p].IpmiIpaddr, p) - n.IpmiNetmask.SetAlt(config.NodeProfiles[p].IpmiNetmask, p) - n.IpmiPort.SetAlt(config.NodeProfiles[p].IpmiPort, p) - n.IpmiGateway.SetAlt(config.NodeProfiles[p].IpmiGateway, p) - n.IpmiUserName.SetAlt(config.NodeProfiles[p].IpmiUserName, p) - n.IpmiPassword.SetAlt(config.NodeProfiles[p].IpmiPassword, p) - n.IpmiInterface.SetAlt(config.NodeProfiles[p].IpmiInterface, p) - n.IpmiWrite.SetB(config.NodeProfiles[p].IpmiWrite) + 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].KernelOverride != "" { - n.KernelOverride.SetAlt(config.NodeProfiles[p].KernelOverride, p) - } else if config.NodeProfiles[p].KernelVersion != "" { - n.KernelOverride.SetAlt(config.NodeProfiles[p].KernelVersion, 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) } for devname, netdev := range config.NodeProfiles[p].NetDevs { @@ -260,24 +260,24 @@ func (config *nodeYaml) FindAllProfiles() ([]NodeInfo, error) { p.ContainerName.Set(profile.ContainerName) p.Ipxe.Set(profile.Ipxe) p.Init.Set(profile.Init) - p.KernelArgs.Set(profile.KernelArgs) - p.IpmiNetmask.Set(profile.IpmiNetmask) - p.IpmiPort.Set(profile.IpmiPort) - p.IpmiGateway.Set(profile.IpmiGateway) - p.IpmiUserName.Set(profile.IpmiUserName) - p.IpmiPassword.Set(profile.IpmiPassword) - p.IpmiInterface.Set(profile.IpmiInterface) - p.IpmiWrite.SetB(profile.IpmiWrite) + 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) 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.KernelOverride != "" { - p.KernelOverride.Set(profile.KernelOverride) - } else if profile.KernelVersion != "" { - p.KernelOverride.Set(profile.KernelVersion) + 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 { diff --git a/internal/pkg/node/datastructure.go b/internal/pkg/node/datastructure.go index 768f5c82..05012fd9 100644 --- a/internal/pkg/node/datastructure.go +++ b/internal/pkg/node/datastructure.go @@ -10,6 +10,7 @@ import ( ******/ type nodeYaml struct { + WWInternal int `yaml:"WW_INTERNAL"` NodeProfiles map[string]*NodeConf Nodes map[string]*NodeConf } @@ -19,11 +20,9 @@ type NodeConf struct { ClusterName string `yaml:"cluster name,omitempty"` ContainerName string `yaml:"container name,omitempty"` Ipxe string `yaml:"ipxe template,omitempty"` - KernelVersion string `yaml:"kernel version,omitempty"` - KernelOverride string `yaml:"kernel override,omitempty"` - KernelArgs string `yaml:"kernel args,omitempty"` RuntimeOverlay []string `yaml:"runtime overlay,omitempty"` SystemOverlay []string `yaml:"system overlay,omitempty"` + Kernel *KernelConf `yaml:"kernel,omitempty"` Ipmi *IpmiConf `yaml:"ipmi,omitempty"` Init string `yaml:"init,omitempty"` Root string `yaml:"root,omitempty"` @@ -45,6 +44,11 @@ type IpmiConf struct { Interface string `yaml:"interface,omitempty"` Write bool `yaml:"write,omitempty"` } +type KernelConf struct { + Version string `yaml:"version,omitempty"` + Override string `yaml:"override,omitempty"` + Args string `yaml:"args,omitempty"` +} type NetDevs struct { Type string `yaml:"type,omitempty"` @@ -82,14 +86,13 @@ type NodeInfo struct { ClusterName Entry ContainerName Entry Ipxe Entry - KernelOverride Entry - KernelArgs Entry RuntimeOverlay Entry SystemOverlay Entry Root Entry Discoverable Entry Init Entry //TODO: Finish adding this... AssetKey Entry + Kernel *KernelEntry Ipmi *IpmiEntry Profiles []string GroupProfiles []string @@ -108,6 +111,12 @@ type IpmiEntry struct { Write Entry } +type KernelEntry struct { + Version Entry + Override Entry + Args Entry +} + type NetDevEntry struct { Type Entry OnBoot Entry diff --git a/internal/pkg/node/modifiers.go b/internal/pkg/node/modifiers.go index 8137903d..933b73c6 100644 --- a/internal/pkg/node/modifiers.go +++ b/internal/pkg/node/modifiers.go @@ -60,16 +60,16 @@ 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].KernelOverride = node.KernelOverride.GetReal() - config.Nodes[nodeID].KernelArgs = node.KernelArgs.GetReal() - config.Nodes[nodeID].IpmiIpaddr = node.IpmiIpaddr.GetReal() - config.Nodes[nodeID].IpmiNetmask = node.IpmiNetmask.GetReal() - config.Nodes[nodeID].IpmiPort = node.IpmiPort.GetReal() - config.Nodes[nodeID].IpmiGateway = node.IpmiGateway.GetReal() - config.Nodes[nodeID].IpmiUserName = node.IpmiUserName.GetReal() - config.Nodes[nodeID].IpmiPassword = node.IpmiPassword.GetReal() - config.Nodes[nodeID].IpmiInterface = node.IpmiInterface.GetReal() - config.Nodes[nodeID].IpmiWrite = node.IpmiWrite.GetB() + 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() config.Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetRealSlice() config.Nodes[nodeID].SystemOverlay = node.SystemOverlay.GetRealSlice() config.Nodes[nodeID].Root = node.Root.GetReal() @@ -149,16 +149,16 @@ func (config *nodeYaml) ProfileUpdate(profile NodeInfo) error { config.NodeProfiles[profileID].Ipxe = profile.Ipxe.GetReal() config.NodeProfiles[profileID].Init = profile.Init.GetReal() config.NodeProfiles[profileID].ClusterName = profile.ClusterName.GetReal() - config.NodeProfiles[profileID].KernelOverride = profile.KernelOverride.GetReal() - config.NodeProfiles[profileID].KernelArgs = profile.KernelArgs.GetReal() - config.NodeProfiles[profileID].IpmiIpaddr = profile.IpmiIpaddr.GetReal() - config.NodeProfiles[profileID].IpmiNetmask = profile.IpmiNetmask.GetReal() - config.NodeProfiles[profileID].IpmiPort = profile.IpmiPort.GetReal() - config.NodeProfiles[profileID].IpmiGateway = profile.IpmiGateway.GetReal() - config.NodeProfiles[profileID].IpmiUserName = profile.IpmiUserName.GetReal() - config.NodeProfiles[profileID].IpmiPassword = profile.IpmiPassword.GetReal() - config.NodeProfiles[profileID].IpmiInterface = profile.IpmiInterface.GetReal() - config.NodeProfiles[profileID].IpmiWrite = profile.IpmiInterface.GetB() + config.NodeProfiles[profileID].Kernel.Override = profile.Kernel.Override.GetReal() + config.NodeProfiles[profileID].Kernel.Args = profile.Kernel.Args.GetReal() + config.NodeProfiles[profileID].Ipmi.Ipaddr = profile.Ipmi.Ipaddr.GetReal() + config.NodeProfiles[profileID].Ipmi.Netmask = profile.Ipmi.Netmask.GetReal() + config.NodeProfiles[profileID].Ipmi.Port = profile.Ipmi.Port.GetReal() + config.NodeProfiles[profileID].Ipmi.Gateway = profile.Ipmi.Gateway.GetReal() + config.NodeProfiles[profileID].Ipmi.UserName = profile.Ipmi.UserName.GetReal() + config.NodeProfiles[profileID].Ipmi.Password = profile.Ipmi.Password.GetReal() + config.NodeProfiles[profileID].Ipmi.Interface = profile.Ipmi.Interface.GetReal() + config.NodeProfiles[profileID].Ipmi.Write = profile.Ipmi.Interface.GetB() config.NodeProfiles[profileID].RuntimeOverlay = profile.RuntimeOverlay.GetRealSlice() config.NodeProfiles[profileID].SystemOverlay = profile.SystemOverlay.GetRealSlice() config.NodeProfiles[profileID].Root = profile.Root.GetReal() diff --git a/internal/pkg/warewulfconf/datastructure.go b/internal/pkg/warewulfconf/datastructure.go index 7d9be76e..8c83adf5 100644 --- a/internal/pkg/warewulfconf/datastructure.go +++ b/internal/pkg/warewulfconf/datastructure.go @@ -7,18 +7,19 @@ import ( ) type ControllerConf struct { - Comment string `yaml:"comment,omitempty"` - Ipaddr string `yaml:"ipaddr"` - Ipaddr6 string `yaml:"ipaddr6,omitempty"` - Netmask string `yaml:"netmask"` - Network string `yaml:"network,omitempty"` - Ipv6net string `yaml:"ipv6net,omitempty"` - Fqdn string `yaml:"fqdn,omitempty"` - Warewulf *WarewulfConf `yaml:"warewulf"` - Dhcp *DhcpConf `yaml:"dhcp"` - Tftp *TftpConf `yaml:"tftp"` - Nfs *NfsConf `yaml:"nfs"` - current bool + WWInternal int `yaml:"WW_INTERNAL"` + Comment string `yaml:"comment,omitempty"` + Ipaddr string `yaml:"ipaddr"` + Ipaddr6 string `yaml:"ipaddr6,omitempty"` + Netmask string `yaml:"netmask"` + Network string `yaml:"network,omitempty"` + Ipv6net string `yaml:"ipv6net,omitempty"` + Fqdn string `yaml:"fqdn,omitempty"` + Warewulf *WarewulfConf `yaml:"warewulf"` + Dhcp *DhcpConf `yaml:"dhcp"` + Tftp *TftpConf `yaml:"tftp"` + Nfs *NfsConf `yaml:"nfs"` + current bool } type WarewulfConf struct { diff --git a/internal/pkg/warewulfconf/defaults.go b/internal/pkg/warewulfconf/defaults.go index db17f940..e3a89296 100644 --- a/internal/pkg/warewulfconf/defaults.go +++ b/internal/pkg/warewulfconf/defaults.go @@ -1,8 +1,8 @@ package warewulfconf -const defaultPort int = 9983 +import "github.com/hpcng/warewulf/internal/pkg/buildconfig" -var defaultDataStore string = "/var/lib/warewulf" +const defaultPort int = 9983 func defaultConfig() *ControllerConf { Warewulf := &WarewulfConf{ @@ -12,7 +12,7 @@ func defaultConfig() *ControllerConf { AutobuildOverlays: true, EnableHostOverlay: true, Syslog: false, - DataStore: defaultDataStore, + DataStore: buildconfig.LOCALSTATEDIR(), } Dhcp := &DhcpConf{ Enabled: true, @@ -23,14 +23,15 @@ func defaultConfig() *ControllerConf { } Tftp := &TftpConf{ Enabled: true, - TftpRoot: "/var/lib/tftpboot", + TftpRoot: buildconfig.TFTPDIR(), SystemdName: "tftp", } return &ControllerConf{ - Warewulf: Warewulf, - Dhcp: Dhcp, - Tftp: Tftp, - current: false, + WWInternal: buildconfig.WWVer, + Warewulf: Warewulf, + Dhcp: Dhcp, + Tftp: Tftp, + current: false, } }