api changes for use without NodeInfo
Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
committed by
Jonathon Anderson
parent
457c7c16b1
commit
ffef31969e
140
internal/pkg/api/node/set.go
Normal file
140
internal/pkg/api/node/set.go
Normal file
@@ -0,0 +1,140 @@
|
||||
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"
|
||||
)
|
||||
|
||||
// NodeSet is the wwapiv1 implmentation for updating node fields.
|
||||
func NodeSet(set *wwapiv1.ConfSetParameter) (err error) {
|
||||
if set == nil {
|
||||
return fmt.Errorf("NodeSetParameter is nil")
|
||||
}
|
||||
var nodeDB node.NodeYaml
|
||||
nodeDB, _, err = NodeSetParameterCheck(set)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = nodeDB.Persist(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = warewulfd.DaemonReload(); err != nil {
|
||||
return err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
NodeSetParameterCheck does error checking and returns a modified
|
||||
NodeYml which than can be persisted
|
||||
*/
|
||||
func NodeSetParameterCheck(set *wwapiv1.ConfSetParameter) (nodeDB node.NodeYaml, count uint, err error) {
|
||||
nodeDB, err = node.New()
|
||||
if err != nil {
|
||||
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!")
|
||||
return
|
||||
}
|
||||
confs := nodeDB.ListAllNodes()
|
||||
// Note: This does not do expansion on the nodes.
|
||||
if set.AllConfs || (len(set.ConfList) == 0) {
|
||||
wwlog.Warn("this command will modify all nodes/profiles")
|
||||
} 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 {
|
||||
continue
|
||||
}
|
||||
err = yaml.Unmarshal([]byte(set.NodeConfYaml), nodeDB.Nodes[p])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if set.NetdevDelete != "" {
|
||||
if _, ok := nodeDB.Nodes[p].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)
|
||||
}
|
||||
if set.PartitionDelete != "" {
|
||||
for diskname, disk := range nodeDB.Nodes[p].Disks {
|
||||
if _, ok := disk.Partitions[set.PartitionDelete]; ok {
|
||||
wwlog.Verbose("Node: %s, on disk %, deleting partition: %s", p, diskname, set.PartitionDelete)
|
||||
delete(disk.Partitions, set.PartitionDelete)
|
||||
} else {
|
||||
return nodeDB, count, fmt.Errorf("partition doesn't exist: %s", set.PartitionDelete)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
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)
|
||||
} 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)
|
||||
} else {
|
||||
return nodeDB, count, fmt.Errorf("disk doesn't exist: %s", set.FilesystemDelete)
|
||||
}
|
||||
}
|
||||
for _, key := range set.TagDel {
|
||||
delete(nodeDB.Nodes[p].Tags, key)
|
||||
}
|
||||
for key, val := range set.TagAdd {
|
||||
if nodeDB.Nodes[p].Tags == nil {
|
||||
nodeDB.Nodes[p].Tags = make(map[string]string)
|
||||
}
|
||||
nodeDB.Nodes[p].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)
|
||||
}
|
||||
nodeDB.Nodes[p].Ipmi.Tags[key] = val
|
||||
}
|
||||
for _, key := range set.IpmiTagDel {
|
||||
delete(nodeDB.Nodes[p].Ipmi.Tags, key)
|
||||
}
|
||||
if _, ok := nodeDB.Nodes[p].NetDevs[set.Netdev]; ok {
|
||||
for _, key := range set.NetTagDel {
|
||||
delete(nodeDB.Nodes[p].NetDevs[set.Netdev].Tags, key)
|
||||
}
|
||||
for key, val := range set.TagAdd {
|
||||
nodeDB.Nodes[p].NetDevs[set.Netdev].Tags[key] = val
|
||||
}
|
||||
}
|
||||
count++
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user