api changes to modify unexported fields

changes can now not be done directly but must
go to SetNode or SetProfile. Although its also
now possible to access the field direclty with
GetNodePtr

Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
Christian Goll
2023-12-20 15:42:44 +01:00
committed by Jonathon Anderson
parent 4c8a07f1dc
commit 9ba1aa8d63
12 changed files with 130 additions and 122 deletions

View File

@@ -4,7 +4,7 @@ import (
"log"
"os"
"gopkg.in/yaml.v2"
"gopkg.in/yaml.v3"
)
// ClientApiConfig contains configuration parameters for an API server.

View File

@@ -4,7 +4,7 @@ import (
"log"
"os"
"gopkg.in/yaml.v2"
"gopkg.in/yaml.v3"
)
// ServerApiConfig contains configuration parameters for an API server.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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 {

View File

@@ -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))

View File

@@ -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++

View File

@@ -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"
)
/*

View File

@@ -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()

View File

@@ -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 {

View File

@@ -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

View File

@@ -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++