Merge pull request #174 from gmkurtzer/expand_bracket

Bracket expansion for node ranges
This commit is contained in:
Gregory M. Kurtzer
2021-10-23 12:30:12 -07:00
committed by GitHub
16 changed files with 146 additions and 18 deletions

View File

@@ -2,18 +2,23 @@ package add
import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/util"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
func CobraRunE(cmd *cobra.Command, args []string) error {
var count uint
nodeDB, err := node.New()
if err != nil {
return errors.Wrap(err, "failed to open node database")
}
for _, a := range args {
node_args := hostlist.Expand(args)
for _, a := range node_args {
n, err := nodeDB.AddNode(a)
if err != nil {
return errors.Wrap(err, "failed to add node")
@@ -34,14 +39,16 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
return errors.New("you must include the '--netdev' option")
}
NewIpaddr := util.IncrementIPv4(SetIpaddr, count)
if _, ok := n.NetDevs[SetNetDev]; !ok {
var netdev node.NetDevEntry
n.NetDevs[SetNetDev] = &netdev
}
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Id.Get(), SetNetDev, SetIpaddr)
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Id.Get(), SetNetDev, NewIpaddr)
n.NetDevs[SetNetDev].Ipaddr.Set(SetIpaddr)
n.NetDevs[SetNetDev].Ipaddr.Set(NewIpaddr)
n.NetDevs[SetNetDev].Default.SetB(true)
err := nodeDB.NodeUpdate(n)
if err != nil {
@@ -123,7 +130,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
return errors.Wrap(err, "failed to update nodedb")
}
}
count++
}
return errors.Wrap(nodeDB.Persist(), "failed to persist nodedb")

View File

@@ -7,6 +7,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -25,6 +26,8 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
os.Exit(1)
}
args = hostlist.Expand(args)
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
} else {

View File

@@ -6,6 +6,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/manifoldco/promptui"
"github.com/pkg/errors"
"github.com/spf13/cobra"
@@ -27,6 +28,8 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
os.Exit(1)
}
args = hostlist.Expand(args)
for _, r := range args {
var match bool
for _, n := range nodes {

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -26,6 +27,8 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
os.Exit(1)
}
args = hostlist.Expand(args)
if ShowAll {
for _, node := range node.FilterByName(nodes, args) {
fmt.Printf("################################################################################\n")

View File

@@ -15,7 +15,9 @@ var (
baseCmd = &cobra.Command{
Use: "node",
Short: "Node management",
Long: "Management of node settings",
Long: "Management of node settings. All node ranges can use brackets to identify\n" +
"node ranges. For example: n00[00-4].cluster[0-1] will identify the first 5 nodes\n" +
"in cluster0 and cluster1.",
}
)

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -26,6 +27,8 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
os.Exit(1)
}
args = hostlist.Expand(args)
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
} else {

View File

@@ -9,6 +9,7 @@ import (
"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/manifoldco/promptui"
"github.com/pkg/errors"
"github.com/spf13/cobra"
@@ -16,6 +17,7 @@ import (
func CobraRunE(cmd *cobra.Command, args []string) error {
var err error
var count uint
var SetProfiles []string
nodeDB, err := node.New()
@@ -32,7 +34,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
if !SetNodeAll {
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()
@@ -99,8 +101,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if SetIpmiIpaddr != "" {
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP address to: %s\n", n.Id.Get(), SetIpmiIpaddr)
n.IpmiIpaddr.Set(SetIpmiIpaddr)
NewIpaddr := util.IncrementIPv4(SetIpmiIpaddr, count)
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP address to: %s\n", n.Id.Get(), NewIpaddr)
n.IpmiIpaddr.Set(NewIpaddr)
}
if SetIpmiNetmask != "" {
@@ -182,13 +185,15 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
os.Exit(1)
}
NewIpaddr := util.IncrementIPv4(SetIpaddr, count)
if _, ok := n.NetDevs[SetNetDev]; !ok {
var nd node.NetDevEntry
n.NetDevs[SetNetDev] = &nd
}
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Id.Get(), SetNetDev, SetIpaddr)
n.NetDevs[SetNetDev].Ipaddr.Set(SetIpaddr)
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Id.Get(), SetNetDev, NewIpaddr)
n.NetDevs[SetNetDev].Ipaddr.Set(NewIpaddr)
}
if SetNetmask != "" {
if SetNetDev == "" {
@@ -302,6 +307,8 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
wwlog.Printf(wwlog.ERROR, "%s\n", err)
os.Exit(1)
}
count++
}
if SetYes {

View File

@@ -105,13 +105,13 @@ func init() {
}); err != nil {
log.Println(err)
}
baseCmd.PersistentFlags().StringVar(&SetIpmiIpaddr, "ipmi", "", "Set the node's IPMI IP address")
baseCmd.PersistentFlags().StringVar(&SetIpmiIpaddr, "ipmiaddr", "", "Set the node's IPMI IP address")
baseCmd.PersistentFlags().StringVar(&SetIpmiNetmask, "ipminetmask", "", "Set the node's IPMI netmask")
baseCmd.PersistentFlags().StringVar(&SetIpmiPort, "ipmiport", "", "Set the node's IPMI port")
baseCmd.PersistentFlags().StringVar(&SetIpmiGateway, "ipmigateway", "", "Set the node's IPMI gateway")
baseCmd.PersistentFlags().StringVar(&SetIpmiUsername, "ipmiuser", "", "Set the node's IPMI username")
baseCmd.PersistentFlags().StringVar(&SetIpmiPassword, "ipmipass", "", "Set the node's IPMI password")
baseCmd.PersistentFlags().StringVar(&SetIpmiInterface, "ipmiinterface", "", "Set the node's IPMI interface (defaults to 'lan' if empty)")
baseCmd.PersistentFlags().StringVar(&SetIpmiInterface, "ipmiinterface", "", "Set the node's IPMI interface (defaults: 'lan')")
baseCmd.PersistentFlags().StringSliceVar(&SetAddProfile, "addprofile", []string{}, "Add Profile(s) to node")
baseCmd.PersistentFlags().StringSliceVar(&SetDelProfile, "delprofile", []string{}, "Remove Profile(s) to node")
baseCmd.PersistentFlags().StringVarP(&SetProfile, "profile", "P", "", "Set the node's profile members (comma separated)")

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -27,7 +28,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -27,7 +28,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -27,7 +28,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -27,7 +28,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -27,7 +28,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()

View File

@@ -8,6 +8,7 @@ import (
"github.com/hpcng/warewulf/internal/pkg/node"
"github.com/hpcng/warewulf/internal/pkg/power"
"github.com/hpcng/warewulf/internal/pkg/wwlog"
"github.com/hpcng/warewulf/pkg/hostlist"
"github.com/spf13/cobra"
)
@@ -27,7 +28,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
if len(args) > 0 {
nodes = node.FilterByName(nodes, args)
nodes = node.FilterByName(nodes, hostlist.Expand(args))
} else {
//nolint:errcheck
cmd.Usage()