porfile add has now all otions of set

This commit is contained in:
Christian Goll
2022-07-14 17:22:49 +02:00
parent 510f6a60a9
commit e6ef30ed53
4 changed files with 156 additions and 46 deletions

View File

@@ -7,7 +7,9 @@ import (
apinode "github.com/hpcng/warewulf/internal/pkg/api/node"
"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"
"github.com/pkg/errors"
)
// NodeSet is the wwapiv1 implmentation for updating nodeinfo fields.
@@ -20,7 +22,7 @@ func ProfileSet(set *wwapiv1.NodeSetParameter) (err error) {
var nodeDB node.NodeYaml
nodeDB, _, err = ProfileSetParameterCheck(set, false)
if err != nil {
return
return errors.Wrap(err, "Could not open database")
}
return apinode.DbSave(&nodeDB)
}
@@ -61,7 +63,7 @@ func ProfileSetParameterCheck(set *wwapiv1.NodeSetParameter, console bool) (node
// Note: This does not do expansion on the nodes.
if set.AllNodes || (len(set.NodeNames) == 0 && len(profiles) > 0) {
if set.AllNodes || (len(set.NodeNames) == 0) {
if console {
fmt.Printf("\n*** WARNING: This command will modify all profiles! ***\n\n")
}
@@ -75,33 +77,58 @@ func ProfileSetParameterCheck(set *wwapiv1.NodeSetParameter, console bool) (node
}
for _, p := range profiles {
wwlog.Printf(wwlog.VERBOSE, "Evaluating profile: %s\n", p.Id.Get())
for key, val := range set.OptionsStrMap {
if val != "" {
wwlog.Verbose("profile:%s setting %s to %s\n", p.Id.Get(), key, val)
p.SetField(key, val)
}
}
if set.NetdevDelete != "" {
if _, ok := p.NetDevs[set.NetdevDelete]; !ok {
err = fmt.Errorf("Network device name doesn't exist: %s", set.NetdevDelete)
wwlog.Error(fmt.Sprintf("%v\n", err.Error()))
return
if util.InSlice(set.NodeNames, p.Id.Get()) {
wwlog.Printf(wwlog.VERBOSE, "Evaluating profile: %s\n", p.Id.Get())
for key, val := range set.OptionsStrMap {
if val != "" {
wwlog.Verbose("profile:%s setting %s to %s\n", p.Id.Get(), key, val)
p.SetField(key, val)
}
}
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Deleting network device: %s\n", p.Id.Get(), set.NetdevDelete)
delete(p.NetDevs, set.NetdevDelete)
}
if set.NetdevDelete != "" {
err := nodeDB.ProfileUpdate(p)
if err != nil {
wwlog.Error("%s\n", err)
os.Exit(1)
}
if _, ok := p.NetDevs[set.NetdevDelete]; !ok {
err = fmt.Errorf("Network device name doesn't exist: %s", set.NetdevDelete)
wwlog.Error(fmt.Sprintf("%v\n", err.Error()))
return
}
profileCount++
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Deleting network device: %s\n", p.Id.Get(), set.NetdevDelete)
delete(p.NetDevs, set.NetdevDelete)
}
err := nodeDB.ProfileUpdate(p)
if err != nil {
wwlog.Error("%s\n", err)
os.Exit(1)
}
profileCount++
}
}
return
}
/*
Adds a new profile with the given name
*/
func AddProfile(set *wwapiv1.NodeSetParameter, console bool) error {
nodeDB, err := node.New()
if err != nil {
return errors.Wrap(err, "Could not open database")
}
if util.InSlice(nodeDB.ListAllProfiles(), set.NodeNames[0]) {
return errors.New(fmt.Sprintf("profile with name %s allready exists", set.NodeNames[0]))
}
_, err = nodeDB.AddProfile(set.NodeNames[0])
if err != nil {
return errors.Wrap(err, "Could not create new profile")
}
err = apinode.DbSave(&nodeDB)
if err != nil {
return errors.Wrap(err, "Could not persist new profile")
}
return nil
}