Data format changes and updated API for NodesDB

This commit is contained in:
Gregory Kurtzer
2020-12-01 23:33:01 -08:00
parent 442fc41f1b
commit 7516cca031
5 changed files with 226 additions and 180 deletions

View File

@@ -6,7 +6,7 @@ nodeprofiles:
kernel args: crashkernel=no quiet kernel args: crashkernel=no quiet
control: control:
headnode01: localhost:
comment: This is the first control system comment: This is the first control system
ipaddr: 192.168.1.1 ipaddr: 192.168.1.1
services: services:

View File

@@ -41,21 +41,21 @@ func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
continue continue
} }
n.Id.Set(nodename) n.Id.SetNode(nodename)
n.Gid.Set(groupname) n.Gid.SetNode(groupname)
n.Cid.Set(controllername) n.Cid.SetNode(controllername)
n.HostName.Set(node.Hostname) n.HostName.SetNode(node.Hostname)
n.IpmiIpaddr.Set(node.IpmiIpaddr) n.IpmiIpaddr.SetNode(node.IpmiIpaddr)
n.IpmiNetmask.Set(node.IpmiNetmask) n.IpmiNetmask.SetNode(node.IpmiNetmask)
n.DomainName.Set(node.DomainName) n.DomainName.SetNode(node.DomainName)
n.Vnfs.Set(node.Vnfs) n.Vnfs.SetNode(node.Vnfs)
n.KernelVersion.Set(node.KernelVersion) n.KernelVersion.SetNode(node.KernelVersion)
n.KernelArgs.Set(node.KernelArgs) n.KernelArgs.SetNode(node.KernelArgs)
n.Ipxe.Set(node.Ipxe) n.Ipxe.SetNode(node.Ipxe)
n.IpmiUserName.Set(node.IpmiUserName) n.IpmiUserName.SetNode(node.IpmiUserName)
n.IpmiPassword.Set(node.IpmiPassword) n.IpmiPassword.SetNode(node.IpmiPassword)
n.SystemOverlay.Set(node.SystemOverlay) n.SystemOverlay.SetNode(node.SystemOverlay)
n.RuntimeOverlay.Set(node.RuntimeOverlay) n.RuntimeOverlay.SetNode(node.RuntimeOverlay)
n.DomainName.SetGroup(group.DomainName) n.DomainName.SetGroup(group.DomainName)
n.Vnfs.SetGroup(group.Vnfs) n.Vnfs.SetGroup(group.Vnfs)
@@ -98,9 +98,9 @@ func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
} }
if n.DomainName.Defined() == true { if n.DomainName.Defined() == true {
n.Fqdn.Set(node.Hostname + "." + n.DomainName.Get()) n.Fqdn.SetNode(node.Hostname + "." + n.DomainName.Get())
} else { } else {
n.Fqdn.Set(node.Hostname) n.Fqdn.SetNode(node.Hostname)
} }
n.NetDevs = node.NetDevs n.NetDevs = node.NetDevs
@@ -120,21 +120,39 @@ func (self *nodeYaml) FindAllGroups() ([]GroupInfo, error) {
for groupname, group := range controller.NodeGroups { for groupname, group := range controller.NodeGroups {
var g GroupInfo var g GroupInfo
g.Id = groupname g.Id.SetGroup(groupname)
g.Cid = controllername g.Cid.SetGroup(controllername)
g.DomainName = group.DomainName g.DomainName.SetGroup(group.DomainName)
g.Comment = group.Comment g.Comment.SetGroup(group.Comment)
g.Vnfs = group.Vnfs g.Vnfs.SetGroup(group.Vnfs)
g.KernelVersion = group.KernelVersion g.KernelVersion.SetGroup(group.KernelVersion)
g.KernelArgs = group.KernelArgs g.KernelArgs.SetGroup(group.KernelArgs)
g.IpmiNetmask = group.IpmiNetmask g.IpmiNetmask.SetGroup(group.IpmiNetmask)
g.IpmiPassword = group.IpmiPassword g.IpmiPassword.SetGroup(group.IpmiPassword)
g.IpmiUserName = group.IpmiUserName g.IpmiUserName.SetGroup(group.IpmiUserName)
g.SystemOverlay = group.SystemOverlay g.SystemOverlay.SetGroup(group.SystemOverlay)
g.RuntimeOverlay = group.RuntimeOverlay g.RuntimeOverlay.SetGroup(group.RuntimeOverlay)
g.Profiles = group.Profiles 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 // TODO: Validate or die on all inputs
ret = append(ret, g) ret = append(ret, g)

View File

@@ -118,32 +118,32 @@ type NetDevs struct {
* Code internal data representations * Code internal data representations
******/ ******/
type NodeInfoEntry struct { type Entry struct {
value string Node string
profile string Profile string
group string Group string
controller string Controller string
def string Default string
} }
type NodeInfo struct { type NodeInfo struct {
Id NodeInfoEntry Id Entry
Gid NodeInfoEntry Gid Entry
Cid NodeInfoEntry Cid Entry
Comment NodeInfoEntry Comment Entry
HostName NodeInfoEntry HostName Entry
Fqdn NodeInfoEntry Fqdn Entry
DomainName NodeInfoEntry DomainName Entry
Vnfs NodeInfoEntry Vnfs Entry
Ipxe NodeInfoEntry Ipxe Entry
KernelVersion NodeInfoEntry KernelVersion Entry
KernelArgs NodeInfoEntry KernelArgs Entry
IpmiIpaddr NodeInfoEntry IpmiIpaddr Entry
IpmiNetmask NodeInfoEntry IpmiNetmask Entry
IpmiUserName NodeInfoEntry IpmiUserName Entry
IpmiPassword NodeInfoEntry IpmiPassword Entry
RuntimeOverlay NodeInfoEntry RuntimeOverlay Entry
SystemOverlay NodeInfoEntry SystemOverlay Entry
Profiles []string Profiles []string
GroupProfiles []string GroupProfiles []string
NetDevs map[string]*NetDevs NetDevs map[string]*NetDevs
@@ -191,19 +191,19 @@ type ControllerInfo struct {
} }
type GroupInfo struct { type GroupInfo struct {
Id string Id Entry
Cid string Cid Entry
Comment string Comment Entry
Vnfs string Vnfs Entry
Ipxe string Ipxe Entry
KernelVersion string KernelVersion Entry
KernelArgs string KernelArgs Entry
IpmiNetmask string IpmiNetmask Entry
IpmiUserName string IpmiUserName Entry
IpmiPassword string IpmiPassword Entry
DomainName string DomainName Entry
RuntimeOverlay string RuntimeOverlay Entry
SystemOverlay string SystemOverlay Entry
Profiles []string Profiles []string
} }

View File

@@ -4,64 +4,64 @@ import (
"strings" "strings"
) )
func (self *NodeInfoEntry) String() string { func (self *Entry) Print() string {
if self.value != "" { if self.Node != "" {
return self.value return self.Node
} }
if self.group != "" { if self.Group != "" {
return self.group return self.Group
} }
if self.profile != "" { if self.Profile != "" {
return self.profile return self.Profile
} }
if self.controller != "" { if self.Controller != "" {
return self.controller return self.Controller
} }
if self.def != "" { if self.Default != "" {
return self.def return self.Default
} }
return "--" return "--"
} }
func (self *NodeInfoEntry) Source() string { func (self *Entry) Source() string {
if self.value != "" { if self.Node != "" {
return "node" return "node"
} }
if self.group != "" { if self.Group != "" {
return "group" return "group"
} }
if self.profile != "" { if self.Profile != "" {
return "profile" return "profile"
} }
if self.controller != "" { if self.Controller != "" {
return "controller" return "controller"
} }
if self.def != "" { if self.Default != "" {
return "default" return "default"
} }
return "" return ""
} }
func (self *NodeInfoEntry) Get() string { func (self *Entry) Get() string {
if self.value != "" { if self.Node != "" {
return self.value return self.Node
} }
if self.group != "" { if self.Group != "" {
return self.group return self.Group
} }
if self.profile != "" { if self.Profile != "" {
return self.profile return self.Profile
} }
if self.controller != "" { if self.Controller != "" {
return self.controller return self.Controller
} }
if self.def != "" { if self.Default != "" {
return self.def return self.Default
} }
return "" return ""
} }
func (self *NodeInfoEntry) Defined() bool { func (self *Entry) Defined() bool {
if self.Get() == "" { if self.Get() == "" {
return false return false
} }
@@ -69,47 +69,67 @@ func (self *NodeInfoEntry) Defined() bool {
return true return true
} }
func (self *NodeInfoEntry) SetDefault(value string) { func (self *Entry) SetDefault(value string) {
if value == "" {
return
}
self.def = value
}
func (self *NodeInfoEntry) SetGroup(value string) {
if value == "" {
return
}
self.group = value
}
func (self *NodeInfoEntry) SetProfile(value string) {
if value == "" {
return
}
self.profile = value
}
func (self *NodeInfoEntry) SetController(value string) {
if value == "" {
return
}
self.controller = value
}
func (self *NodeInfoEntry) Set(value string) {
if value == "" { if value == "" {
return return
} else if strings.ToUpper(value) == "UNDEF" { } else if strings.ToUpper(value) == "UNDEF" {
value = "" value = ""
} }
self.value = value self.Default = value
} }
func (self *NodeInfoEntry) Unset() { func (self *Entry) SetGroup(value string) {
self.value = "" if value == "" {
return
} else if strings.ToUpper(value) == "UNDEF" {
value = ""
}
self.Group = value
} }
func (self *NodeInfoEntry) GetReal() string { func (self *Entry) SetProfile(value string) {
return self.value if value == "" {
} return
} else if strings.ToUpper(value) == "UNDEF" {
value = ""
}
self.Profile = value
}
func (self *Entry) SetController(value string) {
if value == "" {
return
} else if strings.ToUpper(value) == "UNDEF" {
value = ""
}
self.Controller = value
}
func (self *Entry) SetNode(value string) {
if value == "" {
return
} else if strings.ToUpper(value) == "UNDEF" {
value = ""
}
self.Node = value
}
func (self *Entry) GetNode() string {
return self.Node
}
func (self *Entry) GetGroup() string {
return self.Group
}
func (self *Entry) GetController() string {
return self.Controller
}
func (self *Entry) GetProfile() string {
return self.Profile
}
func (self *Entry) GetDefault() string {
return self.Default
}

View File

@@ -3,11 +3,19 @@ package node
import ( import (
"github.com/hpcng/warewulf/internal/pkg/errors" "github.com/hpcng/warewulf/internal/pkg/errors"
"github.com/hpcng/warewulf/internal/pkg/wwlog" "github.com/hpcng/warewulf/internal/pkg/wwlog"
"strings"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
"os" "os"
) )
func get2Set(input string) string {
if strings.ToUpper(input) == "UNDEF" {
return ""
}
return input
}
/**** /****
* *
* NODE MODIFIERS * NODE MODIFIERS
@@ -74,18 +82,18 @@ func (self *nodeYaml) NodeUpdate(node NodeInfo) error {
return errors.New("Nodename does not exist in group: " + nodeID) return errors.New("Nodename does not exist in group: " + nodeID)
} }
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Hostname = node.HostName.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Hostname = get2Set(node.HostName.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Vnfs = node.Vnfs.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Vnfs = get2Set(node.Vnfs.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].DomainName = node.DomainName.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].DomainName = get2Set(node.DomainName.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Ipxe = node.Ipxe.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Ipxe = get2Set(node.Ipxe.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].KernelVersion = node.KernelVersion.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].KernelVersion = get2Set(node.KernelVersion.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].KernelArgs = node.KernelArgs.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].KernelArgs = get2Set(node.KernelArgs.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiIpaddr = node.IpmiIpaddr.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiIpaddr = get2Set(node.IpmiIpaddr.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiNetmask = node.IpmiNetmask.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiNetmask = get2Set(node.IpmiNetmask.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiUserName = node.IpmiUserName.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiUserName = get2Set(node.IpmiUserName.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiPassword = node.IpmiPassword.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiPassword = get2Set(node.IpmiPassword.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].RuntimeOverlay = get2Set(node.RuntimeOverlay.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].SystemOverlay = node.SystemOverlay.GetReal() self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].SystemOverlay = get2Set(node.SystemOverlay.GetNode())
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Profiles = node.Profiles self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Profiles = node.Profiles
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].NetDevs = node.NetDevs self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].NetDevs = node.NetDevs
@@ -135,8 +143,8 @@ func (self *nodeYaml) DelGroup(controllerID string, groupID string) error {
} }
func (self *nodeYaml) GroupUpdate(group GroupInfo) error { func (self *nodeYaml) GroupUpdate(group GroupInfo) error {
controllerID := group.Cid controllerID := group.Cid.Get()
groupID := group.Id groupID := group.Id.Get()
if _, ok := self.Controllers[controllerID]; !ok { if _, ok := self.Controllers[controllerID]; !ok {
return errors.New("Controller does not exist: " + controllerID) return errors.New("Controller does not exist: " + controllerID)
@@ -146,16 +154,16 @@ func (self *nodeYaml) GroupUpdate(group GroupInfo) error {
return errors.New("Group does not exist: " + groupID) return errors.New("Group does not exist: " + groupID)
} }
self.Controllers[controllerID].NodeGroups[groupID].DomainName = group.DomainName self.Controllers[controllerID].NodeGroups[groupID].DomainName = group.DomainName.Get()
self.Controllers[controllerID].NodeGroups[groupID].Vnfs = group.Vnfs self.Controllers[controllerID].NodeGroups[groupID].Vnfs = group.Vnfs.Get()
self.Controllers[controllerID].NodeGroups[groupID].KernelVersion = group.KernelVersion self.Controllers[controllerID].NodeGroups[groupID].KernelVersion = group.KernelVersion.Get()
self.Controllers[controllerID].NodeGroups[groupID].KernelArgs = group.KernelArgs self.Controllers[controllerID].NodeGroups[groupID].KernelArgs = group.KernelArgs.Get()
self.Controllers[controllerID].NodeGroups[groupID].Ipxe = group.Ipxe self.Controllers[controllerID].NodeGroups[groupID].Ipxe = group.Ipxe.Get()
self.Controllers[controllerID].NodeGroups[groupID].IpmiNetmask = group.IpmiNetmask self.Controllers[controllerID].NodeGroups[groupID].IpmiNetmask = group.IpmiNetmask.Get()
self.Controllers[controllerID].NodeGroups[groupID].IpmiUserName = group.IpmiUserName self.Controllers[controllerID].NodeGroups[groupID].IpmiUserName = group.IpmiUserName.Get()
self.Controllers[controllerID].NodeGroups[groupID].IpmiPassword = group.IpmiPassword self.Controllers[controllerID].NodeGroups[groupID].IpmiPassword = group.IpmiPassword.Get()
self.Controllers[controllerID].NodeGroups[groupID].RuntimeOverlay = group.RuntimeOverlay self.Controllers[controllerID].NodeGroups[groupID].RuntimeOverlay = group.RuntimeOverlay.Get()
self.Controllers[controllerID].NodeGroups[groupID].SystemOverlay = group.SystemOverlay self.Controllers[controllerID].NodeGroups[groupID].SystemOverlay = group.SystemOverlay.Get()
self.Controllers[controllerID].NodeGroups[groupID].Profiles = group.Profiles self.Controllers[controllerID].NodeGroups[groupID].Profiles = group.Profiles
return nil return nil
@@ -207,31 +215,31 @@ func (self *nodeYaml) ControllerUpdate(controller ControllerInfo) error {
self.Controllers[controllerID].Comment = controller.Comment self.Controllers[controllerID].Comment = controller.Comment
self.Controllers[controllerID].Fqdn = controller.Fqdn self.Controllers[controllerID].Fqdn = controller.Fqdn
self.Controllers[controllerID].Services.Warewulfd.Port = controller.Services.Warewulfd.Port self.Controllers[controllerID].Services.Warewulfd.Port = get2Set(controller.Services.Warewulfd.Port)
self.Controllers[controllerID].Services.Warewulfd.Secure = controller.Services.Warewulfd.Secure self.Controllers[controllerID].Services.Warewulfd.Secure = controller.Services.Warewulfd.Secure
self.Controllers[controllerID].Services.Warewulfd.StartCmd = controller.Services.Warewulfd.StartCmd self.Controllers[controllerID].Services.Warewulfd.StartCmd = get2Set(controller.Services.Warewulfd.StartCmd)
self.Controllers[controllerID].Services.Warewulfd.RestartCmd = controller.Services.Warewulfd.RestartCmd self.Controllers[controllerID].Services.Warewulfd.RestartCmd = get2Set(controller.Services.Warewulfd.RestartCmd)
self.Controllers[controllerID].Services.Warewulfd.EnableCmd = controller.Services.Warewulfd.EnableCmd self.Controllers[controllerID].Services.Warewulfd.EnableCmd = get2Set(controller.Services.Warewulfd.EnableCmd)
self.Controllers[controllerID].Services.Dhcp.Enabled = controller.Services.Dhcp.Enabled self.Controllers[controllerID].Services.Dhcp.Enabled = controller.Services.Dhcp.Enabled
self.Controllers[controllerID].Services.Dhcp.ConfigFile = controller.Services.Dhcp.ConfigFile self.Controllers[controllerID].Services.Dhcp.ConfigFile = get2Set(controller.Services.Dhcp.ConfigFile)
self.Controllers[controllerID].Services.Dhcp.RangeStart = controller.Services.Dhcp.RangeStart self.Controllers[controllerID].Services.Dhcp.RangeStart = get2Set(controller.Services.Dhcp.RangeStart)
self.Controllers[controllerID].Services.Dhcp.RangeEnd = controller.Services.Dhcp.RangeEnd self.Controllers[controllerID].Services.Dhcp.RangeEnd = get2Set(controller.Services.Dhcp.RangeEnd)
self.Controllers[controllerID].Services.Dhcp.StartCmd = controller.Services.Dhcp.StartCmd self.Controllers[controllerID].Services.Dhcp.StartCmd = get2Set(controller.Services.Dhcp.StartCmd)
self.Controllers[controllerID].Services.Dhcp.RestartCmd = controller.Services.Dhcp.RestartCmd self.Controllers[controllerID].Services.Dhcp.RestartCmd = get2Set(controller.Services.Dhcp.RestartCmd)
self.Controllers[controllerID].Services.Dhcp.EnableCmd = controller.Services.Dhcp.EnableCmd self.Controllers[controllerID].Services.Dhcp.EnableCmd = get2Set(controller.Services.Dhcp.EnableCmd)
self.Controllers[controllerID].Services.Nfs.Enabled = controller.Services.Nfs.Enabled self.Controllers[controllerID].Services.Nfs.Enabled = controller.Services.Nfs.Enabled
self.Controllers[controllerID].Services.Nfs.Exports = controller.Services.Nfs.Exports self.Controllers[controllerID].Services.Nfs.Exports = controller.Services.Nfs.Exports
self.Controllers[controllerID].Services.Nfs.StartCmd = controller.Services.Nfs.StartCmd self.Controllers[controllerID].Services.Nfs.StartCmd = get2Set(controller.Services.Nfs.StartCmd)
self.Controllers[controllerID].Services.Nfs.RestartCmd = controller.Services.Nfs.RestartCmd self.Controllers[controllerID].Services.Nfs.RestartCmd = get2Set(controller.Services.Nfs.RestartCmd)
self.Controllers[controllerID].Services.Nfs.EnableCmd = controller.Services.Nfs.EnableCmd self.Controllers[controllerID].Services.Nfs.EnableCmd = get2Set(controller.Services.Nfs.EnableCmd)
self.Controllers[controllerID].Services.Tftp.Enabled = controller.Services.Tftp.Enabled self.Controllers[controllerID].Services.Tftp.Enabled = controller.Services.Tftp.Enabled
self.Controllers[controllerID].Services.Tftp.TftpRoot = controller.Services.Tftp.TftpRoot self.Controllers[controllerID].Services.Tftp.TftpRoot = get2Set(controller.Services.Tftp.TftpRoot)
self.Controllers[controllerID].Services.Tftp.StartCmd = controller.Services.Tftp.StartCmd self.Controllers[controllerID].Services.Tftp.StartCmd = get2Set(controller.Services.Tftp.StartCmd)
self.Controllers[controllerID].Services.Tftp.RestartCmd = controller.Services.Tftp.RestartCmd self.Controllers[controllerID].Services.Tftp.RestartCmd = get2Set(controller.Services.Tftp.RestartCmd)
self.Controllers[controllerID].Services.Tftp.EnableCmd = controller.Services.Tftp.EnableCmd self.Controllers[controllerID].Services.Tftp.EnableCmd = get2Set(controller.Services.Tftp.EnableCmd)
return nil return nil
} }
@@ -274,15 +282,15 @@ func (self *nodeYaml) ProfileUpdate(profile ProfileInfo) error {
return errors.New("Group '" + profileID + "' was not found") return errors.New("Group '" + profileID + "' was not found")
} }
self.NodeProfiles[profileID].DomainName = profile.DomainName self.NodeProfiles[profileID].DomainName = get2Set(profile.DomainName)
self.NodeProfiles[profileID].Vnfs = profile.Vnfs self.NodeProfiles[profileID].Vnfs = get2Set(profile.Vnfs)
self.NodeProfiles[profileID].Ipxe = profile.Ipxe self.NodeProfiles[profileID].Ipxe = get2Set(profile.Ipxe)
self.NodeProfiles[profileID].KernelVersion = profile.KernelVersion self.NodeProfiles[profileID].KernelVersion = get2Set(profile.KernelVersion)
self.NodeProfiles[profileID].IpmiNetmask = profile.IpmiNetmask self.NodeProfiles[profileID].IpmiNetmask = get2Set(profile.IpmiNetmask)
self.NodeProfiles[profileID].IpmiUserName = profile.IpmiUserName self.NodeProfiles[profileID].IpmiUserName = get2Set(profile.IpmiUserName)
self.NodeProfiles[profileID].IpmiPassword = profile.IpmiPassword self.NodeProfiles[profileID].IpmiPassword = get2Set(profile.IpmiPassword)
self.NodeProfiles[profileID].RuntimeOverlay = profile.RuntimeOverlay self.NodeProfiles[profileID].RuntimeOverlay = get2Set(profile.RuntimeOverlay)
self.NodeProfiles[profileID].SystemOverlay = profile.SystemOverlay self.NodeProfiles[profileID].SystemOverlay = get2Set(profile.SystemOverlay)
return nil return nil
} }