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:
committed by
Jonathon Anderson
parent
4c8a07f1dc
commit
9ba1aa8d63
@@ -4,7 +4,7 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// ClientApiConfig contains configuration parameters for an API server.
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// ServerApiConfig contains configuration parameters for an API server.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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++
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++
|
||||
|
||||
Reference in New Issue
Block a user