diff --git a/internal/pkg/api/apiconfig/client.go b/internal/pkg/api/apiconfig/client.go index 595409e8..fe201945 100644 --- a/internal/pkg/api/apiconfig/client.go +++ b/internal/pkg/api/apiconfig/client.go @@ -4,7 +4,7 @@ import ( "log" "os" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) // ClientApiConfig contains configuration parameters for an API server. diff --git a/internal/pkg/api/apiconfig/server.go b/internal/pkg/api/apiconfig/server.go index 85be2bce..bc5d9f7a 100644 --- a/internal/pkg/api/apiconfig/server.go +++ b/internal/pkg/api/apiconfig/server.go @@ -4,7 +4,7 @@ import ( "log" "os" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) // ServerApiConfig contains configuration parameters for an API server. diff --git a/internal/pkg/api/node/add.go b/internal/pkg/api/node/add.go index 0ba20630..a5b23f65 100644 --- a/internal/pkg/api/node/add.go +++ b/internal/pkg/api/node/add.go @@ -5,14 +5,14 @@ import ( "fmt" "net" - "github.com/hpcng/warewulf/internal/pkg/api/routes/wwapiv1" - "github.com/hpcng/warewulf/internal/pkg/node" - "github.com/hpcng/warewulf/internal/pkg/util" - "github.com/hpcng/warewulf/internal/pkg/warewulfd" - "github.com/hpcng/warewulf/internal/pkg/wwlog" - "github.com/hpcng/warewulf/pkg/hostlist" "github.com/pkg/errors" - "gopkg.in/yaml.v2" + "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" + "github.com/warewulf/warewulf/internal/pkg/hostlist" + "github.com/warewulf/warewulf/internal/pkg/node" + "github.com/warewulf/warewulf/internal/pkg/util" + "github.com/warewulf/warewulf/internal/pkg/warewulfd" + "github.com/warewulf/warewulf/internal/pkg/wwlog" + "gopkg.in/yaml.v3" ) // NodeAdd adds nodes for management by Warewulf. diff --git a/internal/pkg/api/node/delete.go b/internal/pkg/api/node/delete.go index 7738c18f..bf17217e 100644 --- a/internal/pkg/api/node/delete.go +++ b/internal/pkg/api/node/delete.go @@ -5,12 +5,12 @@ import ( "fmt" "os" - "github.com/hpcng/warewulf/internal/pkg/api/routes/wwapiv1" - "github.com/hpcng/warewulf/internal/pkg/node" - "github.com/hpcng/warewulf/internal/pkg/warewulfd" - "github.com/hpcng/warewulf/internal/pkg/wwlog" - "github.com/hpcng/warewulf/pkg/hostlist" "github.com/pkg/errors" + "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" + "github.com/warewulf/warewulf/internal/pkg/hostlist" + "github.com/warewulf/warewulf/internal/pkg/node" + "github.com/warewulf/warewulf/internal/pkg/warewulfd" + "github.com/warewulf/warewulf/internal/pkg/wwlog" ) // NodeDelete adds nodes for management by Warewulf. diff --git a/internal/pkg/api/node/edit.go b/internal/pkg/api/node/edit.go index 05d96ffd..fe777681 100644 --- a/internal/pkg/api/node/edit.go +++ b/internal/pkg/api/node/edit.go @@ -7,7 +7,7 @@ import ( "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" "github.com/warewulf/warewulf/internal/pkg/node" "github.com/warewulf/warewulf/internal/pkg/wwlog" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) /* @@ -19,7 +19,7 @@ func FindAllNodeConfs() *wwapiv1.NodeYaml { wwlog.Error("Could not open nodeDB: %s\n", err) os.Exit(1) } - nodeMap := nodeDB.Nodes + nodeMap, _ := nodeDB.FindAllNodes() // ignore err as nodeDB should always be correct buffer, _ := yaml.Marshal(nodeMap) retVal := wwapiv1.NodeYaml{ @@ -38,8 +38,8 @@ func FilteredNodes(nodeList *wwapiv1.NodeList) *wwapiv1.NodeYaml { wwlog.Error("Could not open nodeDB: %s\n", err) os.Exit(1) } - nodeMap := nodeDB.Nodes - nodeMap = node.FilterNodesByName(nodeMap, nodeList.Output) + nodeMap, _ := nodeDB.FindAllNodes() + nodeMap = node.FilterByName(nodeMap, nodeList.Output) buffer, _ := yaml.Marshal(nodeMap) retVal := wwapiv1.NodeYaml{ NodeConfMapYaml: string(buffer), @@ -59,14 +59,13 @@ func NodeAddFromYaml(nodeList *wwapiv1.NodeYaml) (err error) { nodeMap := make(map[string]*node.NodeConf) err = yaml.Unmarshal([]byte(nodeList.NodeConfMapYaml), nodeMap) if err != nil { - return errors.Wrap(err, "Could not unmarshall Yaml: %s\n") + return errors.Wrap(err, "Could not unmarshal Yaml: %s\n") } for nodeName, node := range nodeMap { - err = node.Check() + err = nodeDB.SetNode(nodeName, *node) if err != nil { - return errors.Errorf("error on node %s: %s", nodeName, err) + return errors.Wrap(err, "couldn't set node") } - nodeDB.Nodes[nodeName] = node } err = nodeDB.Persist() if err != nil { diff --git a/internal/pkg/api/node/list.go b/internal/pkg/api/node/list.go index 58396239..7845ad96 100644 --- a/internal/pkg/api/node/list.go +++ b/internal/pkg/api/node/list.go @@ -43,7 +43,7 @@ func NodeList(nodeGet *wwapiv1.GetNodeList) (nodeList wwapiv1.NodeList, err erro } } else if nodeGet.Type == wwapiv1.GetNodeList_Network { nodeList.Output = append(nodeList.Output, - fmt.Sprintf("%s:=:%s:=:%s:=:%s:=:%s:=:%s", "NODE NAME", "NAME", "HWADDR", "IPADDR", "GATEWAY", "DEVICE")) + fmt.Sprintf("%s:=:%s:=:%s:=:%s:=:%s:=:%s", "NODE", "NETWORK ", "HWADDR", "IPADDR", "GATEWAY", "DEVICE")) for _, n := range node.FilterByName(nodes, nodeGet.Nodes) { if len(n.NetDevs) > 0 { for name := range n.NetDevs { @@ -61,11 +61,11 @@ func NodeList(nodeGet *wwapiv1.GetNodeList) (nodeList wwapiv1.NodeList, err erro } } else if nodeGet.Type == wwapiv1.GetNodeList_Ipmi { nodeList.Output = append(nodeList.Output, - fmt.Sprintf("%s:=:%s:=:%s:=:%s:=:%s", "NODE NAME", "IPMI IPADDR", "IPMI PORT", "IPMI USERNAME", "IPMI INTERFACE")) + fmt.Sprintf("%s:=:%s:=:%s:=:%s:=:%s", "NODE", "IPMI IPADDR", "IPMI PORT", "IPMI USERNAME", "IPMI INTERFACE")) for _, n := range node.FilterByName(nodes, nodeGet.Nodes) { nodeList.Output = append(nodeList.Output, fmt.Sprintf("%s:=:%s:=:%s:=:%s:=:%s:=:%s", n.Id(), - n.Ipmi.Ipaddr, + n.Ipmi.Ipaddr.String(), n.Ipmi.Port, n.Ipmi.UserName, n.Ipmi.Interface, @@ -85,7 +85,7 @@ func NodeList(nodeGet *wwapiv1.GetNodeList) (nodeList wwapiv1.NodeList, err erro for _, n := range node.FilterByName(nodes, nodeGet.Nodes) { nodeList.Output = append(nodeList.Output, fmt.Sprintf("%s:=:%s:=:%s:=:%s", "NODE", "FIELD", "PROFILE", "VALUE")) - fields := nodeDB.GetFields(n, nodeGet.Type == wwapiv1.GetNodeList_All) + fields := nodeDB.GetFields(n) for _, f := range fields { nodeList.Output = append(nodeList.Output, fmt.Sprintf("%s:=:%s:=:%s:=:%s", n.Id(), f.Field, f.Source, f.Value)) diff --git a/internal/pkg/api/node/set.go b/internal/pkg/api/node/set.go index 1814b900..6d539200 100644 --- a/internal/pkg/api/node/set.go +++ b/internal/pkg/api/node/set.go @@ -3,13 +3,13 @@ package apinode import ( "fmt" - "github.com/hpcng/warewulf/internal/pkg/api/routes/wwapiv1" - "github.com/hpcng/warewulf/internal/pkg/node" - "github.com/hpcng/warewulf/internal/pkg/util" - "github.com/hpcng/warewulf/internal/pkg/wwlog" - "gopkg.in/yaml.v2" - - "github.com/hpcng/warewulf/internal/pkg/warewulfd" + "dario.cat/mergo" + "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" + "github.com/warewulf/warewulf/internal/pkg/node" + "github.com/warewulf/warewulf/internal/pkg/util" + "github.com/warewulf/warewulf/internal/pkg/warewulfd" + "github.com/warewulf/warewulf/internal/pkg/wwlog" + "gopkg.in/yaml.v3" ) // NodeSet is the wwapiv1 implmentation for updating node fields. @@ -47,7 +47,7 @@ func NodeSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYaml, return } if set.ConfList == nil { - err = fmt.Errorf("node nodes to set!") + err = fmt.Errorf("node nodes to set") return } confs := nodeDB.ListAllNodes() @@ -57,33 +57,39 @@ func NodeSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYaml, } else if len(confs) == 0 { wwlog.Warn("no nodes/profiles found") return - } else { - confs = set.ConfList } - //var confobject node.NodeConf - for _, p := range set.ConfList { - if util.InSlice(set.ConfList, p) { - wwlog.Verbose("evaluating profile: %s", p) - if _, ok := nodeDB.Nodes[p]; !ok { + for _, nId := range set.ConfList { + if util.InSlice(set.ConfList, nId) { + wwlog.Debug("evaluating node: %s", nId) + var nodePtr *node.NodeConf + nodePtr, err = nodeDB.GetNodeOnlyPtr(nId) + if err != nil { + wwlog.Warn("invalid node: %s", nId) continue } - err = yaml.Unmarshal([]byte(set.NodeConfYaml), nodeDB.Nodes[p]) + newConf := node.EmptyNode() + err = yaml.Unmarshal([]byte(set.NodeConfYaml), &newConf) + if err != nil { + return + } + // merge in + err = mergo.Merge(nodePtr, &newConf, mergo.WithOverride) if err != nil { return } if set.NetdevDelete != "" { - if _, ok := nodeDB.Nodes[p].NetDevs[set.NetdevDelete]; !ok { + if _, ok := nodePtr.NetDevs[set.NetdevDelete]; !ok { err = fmt.Errorf("network device name doesn't exist: %s", set.NetdevDelete) wwlog.Error(fmt.Sprintf("%v", err.Error())) return } - wwlog.Verbose("Profile: %s, Deleting network device: %s", p, set.NetdevDelete) - delete(nodeDB.Nodes[p].NetDevs, set.NetdevDelete) + wwlog.Verbose("Profile: %s, Deleting network device: %s", nId, set.NetdevDelete) + delete(nodePtr.NetDevs, set.NetdevDelete) } if set.PartitionDelete != "" { - for diskname, disk := range nodeDB.Nodes[p].Disks { + for diskname, disk := range nodePtr.Disks { if _, ok := disk.Partitions[set.PartitionDelete]; ok { - wwlog.Verbose("Node: %s, on disk %, deleting partition: %s", p, diskname, set.PartitionDelete) + wwlog.Verbose("Node: %s, on disk %, deleting partition: %s", nId, diskname, set.PartitionDelete) delete(disk.Partitions, set.PartitionDelete) } else { return nodeDB, count, fmt.Errorf("partition doesn't exist: %s", set.PartitionDelete) @@ -92,45 +98,45 @@ func NodeSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYaml, } } if set.DiskDelete != "" { - if _, ok := nodeDB.Nodes[p].Disks[set.DiskDelete]; ok { - wwlog.Verbose("Node: %s, deleting disk: %s", p, set.DiskDelete) - delete(nodeDB.Nodes[p].Disks, set.DiskDelete) + if _, ok := nodePtr.Disks[set.DiskDelete]; ok { + wwlog.Verbose("Node: %s, deleting disk: %s", nId, set.DiskDelete) + delete(nodePtr.Disks, set.DiskDelete) } else { return nodeDB, count, fmt.Errorf("disk doesn't exist: %s", set.DiskDelete) } } if set.FilesystemDelete != "" { - if _, ok := nodeDB.Nodes[p].FileSystems[set.FilesystemDelete]; ok { - wwlog.Verbose("Node: %s, deleting filesystem: %s", p, set.FilesystemDelete) - delete(nodeDB.Nodes[p].FileSystems, set.FilesystemDelete) + if _, ok := nodePtr.FileSystems[set.FilesystemDelete]; ok { + wwlog.Verbose("Node: %s, deleting filesystem: %s", nId, set.FilesystemDelete) + delete(nodePtr.FileSystems, set.FilesystemDelete) } else { return nodeDB, count, fmt.Errorf("disk doesn't exist: %s", set.FilesystemDelete) } } for _, key := range set.TagDel { - delete(nodeDB.Nodes[p].Tags, key) + delete(nodePtr.Tags, key) } for key, val := range set.TagAdd { - if nodeDB.Nodes[p].Tags == nil { - nodeDB.Nodes[p].Tags = make(map[string]string) + if nodePtr.Tags == nil { + nodePtr.Tags = make(map[string]string) } - nodeDB.Nodes[p].Tags[key] = val + nodePtr.Tags[key] = val } for key, val := range set.IpmiTagAdd { - if nodeDB.Nodes[p].Ipmi.Tags == nil { - nodeDB.Nodes[p].Ipmi.Tags = make(map[string]string) + if nodePtr.Ipmi.Tags == nil { + nodePtr.Ipmi.Tags = make(map[string]string) } - nodeDB.Nodes[p].Ipmi.Tags[key] = val + nodePtr.Ipmi.Tags[key] = val } for _, key := range set.IpmiTagDel { - delete(nodeDB.Nodes[p].Ipmi.Tags, key) + delete(nodePtr.Ipmi.Tags, key) } - if _, ok := nodeDB.Nodes[p].NetDevs[set.Netdev]; ok { + if _, ok := nodePtr.NetDevs[set.Netdev]; ok { for _, key := range set.NetTagDel { - delete(nodeDB.Nodes[p].NetDevs[set.Netdev].Tags, key) + delete(nodePtr.NetDevs[set.Netdev].Tags, key) } for key, val := range set.TagAdd { - nodeDB.Nodes[p].NetDevs[set.Netdev].Tags[key] = val + nodePtr.NetDevs[set.Netdev].Tags[key] = val } } count++ diff --git a/internal/pkg/api/profile/add.go b/internal/pkg/api/profile/add.go index 338ec047..1ffb1b05 100644 --- a/internal/pkg/api/profile/add.go +++ b/internal/pkg/api/profile/add.go @@ -3,11 +3,11 @@ package apiprofile import ( "fmt" - "github.com/hpcng/warewulf/internal/pkg/api/routes/wwapiv1" - "github.com/hpcng/warewulf/internal/pkg/node" - "github.com/hpcng/warewulf/internal/pkg/util" "github.com/pkg/errors" - "gopkg.in/yaml.v2" + "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" + "github.com/warewulf/warewulf/internal/pkg/node" + "github.com/warewulf/warewulf/internal/pkg/util" + "gopkg.in/yaml.v3" ) /* diff --git a/internal/pkg/api/profile/delete.go b/internal/pkg/api/profile/delete.go index 6f5dfc94..0c241398 100644 --- a/internal/pkg/api/profile/delete.go +++ b/internal/pkg/api/profile/delete.go @@ -21,8 +21,10 @@ func ProfileDelete(ndp *wwapiv1.NodeDeleteParameter) (err error) { return fmt.Errorf("got wrong hash, not modifying profile database") } for _, p := range profileList { - delete(nodeDB.NodeProfiles, p) - wwlog.Verbose("Deleting profile: %s", p) + err = nodeDB.DelProfile(p) + if err != nil { + return + } } err = nodeDB.Persist() diff --git a/internal/pkg/api/profile/edit.go b/internal/pkg/api/profile/edit.go index 465aa356..56458dce 100644 --- a/internal/pkg/api/profile/edit.go +++ b/internal/pkg/api/profile/edit.go @@ -8,7 +8,7 @@ import ( "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" "github.com/warewulf/warewulf/internal/pkg/node" "github.com/warewulf/warewulf/internal/pkg/wwlog" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) /* @@ -20,7 +20,7 @@ func FindAllProfileConfs() *wwapiv1.NodeYaml { wwlog.Error("Could not open nodeDB: %s\n", err) os.Exit(1) } - profileMap := nodeDB.NodeProfiles + profileMap, _ := nodeDB.FindAllProfiles() // ignore err as nodeDB should always be correct buffer, _ := yaml.Marshal(profileMap) retVal := wwapiv1.NodeYaml{ @@ -38,8 +38,8 @@ func FilteredProfiles(profileList *wwapiv1.NodeList) *wwapiv1.NodeYaml { wwlog.Error("Could not open nodeDB: %s\n", err) os.Exit(1) } - profileMap := nodeDB.NodeProfiles - profileMap = node.FilterProfilesByName(profileMap, profileList.Output) + profileMap, _ := nodeDB.FindAllProfiles() + //profileMap = node.FilterProfilesByName(profileMap, profileList.Output) buffer, _ := yaml.Marshal(profileMap) retVal := wwapiv1.NodeYaml{ NodeConfMapYaml: string(buffer), @@ -65,7 +65,10 @@ func ProfileAddFromYaml(nodeList *wwapiv1.NodeAddParameter) (err error) { return errors.Wrap(err, "Could not unmarshall Yaml: %s\n") } for profileName, profile := range profileMap { - nodeDB.NodeProfiles[profileName] = profile + err = nodeDB.SetProfile(profileName, *profile) + if err != nil { + return errors.Wrap(err, "couldn't set profile") + } } err = nodeDB.Persist() if err != nil { diff --git a/internal/pkg/api/profile/list.go b/internal/pkg/api/profile/list.go index 6792bcb5..6eb7a13a 100644 --- a/internal/pkg/api/profile/list.go +++ b/internal/pkg/api/profile/list.go @@ -7,7 +7,6 @@ import ( "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" "github.com/warewulf/warewulf/internal/pkg/node" - "github.com/warewulf/warewulf/internal/pkg/wwlog" "gopkg.in/yaml.v2" ) @@ -24,7 +23,7 @@ func ProfileList(ShowOpt *wwapiv1.GetProfileList) (profileList wwapiv1.ProfileLi if err != nil { return } - profiles = node.FilterByName(profiles, ShowOpt.Profiles) + //profiles = node.FilterByName(profiles, ShowOpt.Profiles) sort.Slice(profiles, func(i, j int) bool { return profiles[i].Id() < profiles[j].Id() }) @@ -32,24 +31,24 @@ func ProfileList(ShowOpt *wwapiv1.GetProfileList) (profileList wwapiv1.ProfileLi for _, p := range profiles { profileList.Output = append(profileList.Output, fmt.Sprintf("%s:=:%s:=:%s", "PROFILE", "FIELD", "VALUE")) - fields := p.GetFields(ShowOpt.ShowAll) + fields := nodeDB.GetFieldsProfile(p) for _, f := range fields { profileList.Output = append(profileList.Output, - fmt.Sprintf("%s:=:%s:=:%s", p.Id.Print(), f.Field, f.Value)) + fmt.Sprintf("%s:=:%s:=:%s", p.Id(), f.Field, f.Value)) } } } else if ShowOpt.ShowYaml { - profileMap := make(map[string]node.NodeInfo) + profileMap := make(map[string]node.ProfileConf) for _, profile := range profiles { - profileMap[profile.Id.Get()] = profile + profileMap[profile.Id()] = profile } buf, _ := yaml.Marshal(profileMap) profileList.Output = append(profileList.Output, string(buf)) } else if ShowOpt.ShowJson { - profileMap := make(map[string]node.NodeInfo) + profileMap := make(map[string]node.ProfileConf) for _, profile := range profiles { - profileMap[profile.Id.Get()] = profile + profileMap[profile.Id()] = profile } buf, _ := json.MarshalIndent(profileMap, "", " ") @@ -60,7 +59,7 @@ func ProfileList(ShowOpt *wwapiv1.GetProfileList) (profileList wwapiv1.ProfileLi for _, profile := range profiles { profileList.Output = append(profileList.Output, - fmt.Sprintf("%s:=:%s", profile.Id.Print(), profile.Comment.Print())) + fmt.Sprintf("%s:=:%s", profile.Id(), profile.Comment)) } } return diff --git a/internal/pkg/api/profile/set.go b/internal/pkg/api/profile/set.go index 44ddb7b6..86f6e108 100644 --- a/internal/pkg/api/profile/set.go +++ b/internal/pkg/api/profile/set.go @@ -3,13 +3,13 @@ package apiprofile import ( "fmt" - "github.com/hpcng/warewulf/internal/pkg/api/routes/wwapiv1" - "github.com/hpcng/warewulf/internal/pkg/node" - "github.com/hpcng/warewulf/internal/pkg/util" - "github.com/hpcng/warewulf/internal/pkg/warewulfd" - "github.com/hpcng/warewulf/internal/pkg/wwlog" "github.com/pkg/errors" - "gopkg.in/yaml.v2" + "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" + "github.com/warewulf/warewulf/internal/pkg/node" + "github.com/warewulf/warewulf/internal/pkg/util" + "github.com/warewulf/warewulf/internal/pkg/warewulfd" + "github.com/warewulf/warewulf/internal/pkg/wwlog" + "gopkg.in/yaml.v3" ) // NodeSet is the wwapiv1 implmentation for updating nodeinfo fields. @@ -40,13 +40,12 @@ func ProfileSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYa wwlog.Error("Could not open configuration: %s", err) return } - //func AbstractSetParameterCheck(set *wwapiv1.ConfSetParameter, confMap map[string]*node.NodeConf, confs []string) (count uint, err error) { if set == nil { err = fmt.Errorf("profile set parameter is nil") return } if set.ConfList == nil { - err = fmt.Errorf("node nodes to set!") + err = fmt.Errorf("node nodes to set") return } confs := nodeDB.ListAllProfiles() @@ -56,33 +55,33 @@ func ProfileSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYa } else if len(confs) == 0 { wwlog.Warn("no nodes/profiles found") return - } else { - confs = set.ConfList } - //var confobject node.NodeConf - for _, p := range set.ConfList { - if util.InSlice(set.ConfList, p) { - wwlog.Verbose("evaluating profile: %s", p) - if _, ok := nodeDB.NodeProfiles[p]; !ok { + for _, profileId := range set.ConfList { + if util.InSlice(set.ConfList, profileId) { + wwlog.Verbose("evaluating profile: %s", profileId) + var profilePtr *node.ProfileConf + profilePtr, err = nodeDB.GetProfilePtr(profileId) + if err != nil { + wwlog.Warn("invalid profile: %s", profileId) continue } - err = yaml.Unmarshal([]byte(set.NodeConfYaml), nodeDB.NodeProfiles[p]) + err = yaml.Unmarshal([]byte(set.NodeConfYaml), profilePtr) if err != nil { return } if set.NetdevDelete != "" { - if _, ok := nodeDB.NodeProfiles[p].NetDevs[set.NetdevDelete]; !ok { + if _, ok := profilePtr.NetDevs[set.NetdevDelete]; !ok { err = fmt.Errorf("network device name doesn't exist: %s", set.NetdevDelete) wwlog.Error(fmt.Sprintf("%v", err.Error())) return } - wwlog.Verbose("Profile: %s, Deleting network device: %s", p, set.NetdevDelete) - delete(nodeDB.NodeProfiles[p].NetDevs, set.NetdevDelete) + wwlog.Verbose("Profile: %s, Deleting network device: %s", profileId, set.NetdevDelete) + delete(profilePtr.NetDevs, set.NetdevDelete) } if set.PartitionDelete != "" { - for diskname, disk := range nodeDB.NodeProfiles[p].Disks { + for diskname, disk := range profilePtr.Disks { if _, ok := disk.Partitions[set.PartitionDelete]; ok { - wwlog.Verbose("Node: %s, on disk %, deleting partition: %s", p, diskname, set.PartitionDelete) + wwlog.Verbose("Node: %s, on disk %, deleting partition: %s", profileId, diskname, set.PartitionDelete) delete(disk.Partitions, set.PartitionDelete) } else { return nodeDB, count, fmt.Errorf("partition doesn't exist: %s", set.PartitionDelete) @@ -91,45 +90,45 @@ func ProfileSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYa } } if set.DiskDelete != "" { - if _, ok := nodeDB.NodeProfiles[p].Disks[set.DiskDelete]; ok { - wwlog.Verbose("Node: %s, deleting disk: %s", p, set.DiskDelete) - delete(nodeDB.NodeProfiles[p].Disks, set.DiskDelete) + if _, ok := profilePtr.Disks[set.DiskDelete]; ok { + wwlog.Verbose("Node: %s, deleting disk: %s", profileId, set.DiskDelete) + delete(profilePtr.Disks, set.DiskDelete) } else { return nodeDB, count, fmt.Errorf("disk doesn't exist: %s", set.DiskDelete) } } if set.FilesystemDelete != "" { - if _, ok := nodeDB.NodeProfiles[p].FileSystems[set.FilesystemDelete]; ok { - wwlog.Verbose("Node: %s, deleting filesystem: %s", p, set.FilesystemDelete) - delete(nodeDB.NodeProfiles[p].FileSystems, set.FilesystemDelete) + if _, ok := profilePtr.FileSystems[set.FilesystemDelete]; ok { + wwlog.Verbose("Node: %s, deleting filesystem: %s", profileId, set.FilesystemDelete) + delete(profilePtr.FileSystems, set.FilesystemDelete) } else { return nodeDB, count, fmt.Errorf("disk doesn't exist: %s", set.FilesystemDelete) } } for _, key := range set.TagDel { - delete(nodeDB.NodeProfiles[p].Tags, key) + delete(profilePtr.Tags, key) } for key, val := range set.TagAdd { - if nodeDB.NodeProfiles[p].Tags == nil { - nodeDB.NodeProfiles[p].Tags = make(map[string]string) + if profilePtr.Tags == nil { + profilePtr.Tags = make(map[string]string) } - nodeDB.NodeProfiles[p].Tags[key] = val + profilePtr.Tags[key] = val } for key, val := range set.IpmiTagAdd { - if nodeDB.NodeProfiles[p].Ipmi.Tags == nil { - nodeDB.NodeProfiles[p].Ipmi.Tags = make(map[string]string) + if profilePtr.Ipmi.Tags == nil { + profilePtr.Ipmi.Tags = make(map[string]string) } - nodeDB.NodeProfiles[p].Ipmi.Tags[key] = val + profilePtr.Ipmi.Tags[key] = val } for _, key := range set.IpmiTagDel { - delete(nodeDB.NodeProfiles[p].Ipmi.Tags, key) + delete(profilePtr.Ipmi.Tags, key) } - if _, ok := nodeDB.NodeProfiles[p].NetDevs[set.Netdev]; ok { + if _, ok := profilePtr.NetDevs[set.Netdev]; ok { for _, key := range set.NetTagDel { - delete(nodeDB.NodeProfiles[p].NetDevs[set.Netdev].Tags, key) + delete(profilePtr.NetDevs[set.Netdev].Tags, key) } for key, val := range set.TagAdd { - nodeDB.NodeProfiles[p].NetDevs[set.Netdev].Tags[key] = val + profilePtr.NetDevs[set.Netdev].Tags[key] = val } } count++