diff --git a/internal/app/wwctl/group/set/main.go b/internal/app/wwctl/group/set/main.go index 467e077f..2cc8fcbe 100644 --- a/internal/app/wwctl/group/set/main.go +++ b/internal/app/wwctl/group/set/main.go @@ -3,6 +3,7 @@ package set import ( "fmt" "github.com/hpcng/warewulf/internal/pkg/node" + "github.com/hpcng/warewulf/internal/pkg/util" "github.com/hpcng/warewulf/internal/pkg/wwlog" "github.com/manifoldco/promptui" "github.com/spf13/cobra" @@ -61,23 +62,98 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if SetDomainName != "" { wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting domain name to: %s\n", g.Id, SetDomainName) -// err := nodeDB.SetGroupVal(g.Id.String(), "domain", SetDomainName) -// if err != nil { -// wwlog.Printf(wwlog.ERROR, "%s\n", err) -// os.Exit(1) -// } -// if SetClearNodes == true { -// nodes, err := nodeDB.FindAllNodes() -// if err != nil { -// wwlog.Printf(wwlog.ERROR, "%s\n", err) -// os.Exit(1) -// } -// for _, n := range nodes { -// _ = nodeDB.SetNodeVal(g.Id.String(), n.Id.String(), "domain", "") -// } -// } + g.DomainName = SetDomainName + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } } + if SetVnfs != "" { + wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting VNFS to: %s\n", g.Id, SetVnfs) + + g.Vnfs = SetVnfs + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if SetKernel != "" { + wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting kernel to: %s\n", g.Id, SetKernel) + + g.KernelVersion = SetKernel + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if SetIpmiUsername != "" { + wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting IPMI username to: %s\n", g.Id, SetIpmiUsername) + + g.IpmiUserName = SetIpmiUsername + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if SetIpmiPassword != "" { + wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting IPMI password to: %s\n", g.Id, SetIpmiPassword) + + g.IpmiPassword = SetIpmiPassword + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if SetSystemOverlay != "" { + wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting system overlay to: %s\n", g.Id, SetSystemOverlay) + + g.SystemOverlay = SetSystemOverlay + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if SetRuntimeOverlay != "" { + wwlog.Printf(wwlog.VERBOSE, "Group: %s, Setting runtime overlay to: %s\n", g.Id, SetRuntimeOverlay) + + g.RuntimeOverlay = SetRuntimeOverlay + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + + if len(SetAddProfile) > 0 { + for _, p := range SetAddProfile { + wwlog.Printf(wwlog.VERBOSE, "Adding profile to '%s': '%s'\n", g.Id, p) + g.Profiles = util.SliceAddUniqueElement(g.Profiles, p) + } + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if len(SetDelProfile) > 0 { + for _, p := range SetDelProfile { + wwlog.Printf(wwlog.VERBOSE, "Removing profile to '%s': '%s'\n", g.Id, p) + g.Profiles = util.SliceRemoveElement(g.Profiles, p) + } + err := nodeDB.GroupUpdate(g) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + } diff --git a/internal/app/wwctl/group/set/root.go b/internal/app/wwctl/group/set/root.go index d4378b52..0871d209 100644 --- a/internal/app/wwctl/group/set/root.go +++ b/internal/app/wwctl/group/set/root.go @@ -15,12 +15,12 @@ var ( SetIpxe string SetRuntimeOverlay string SetSystemOverlay string - SetHostname string SetClearNodes bool - SetIpmiIpaddr string SetIpmiUsername string SetIpmiPassword string SetGroupAll bool + SetAddProfile []string + SetDelProfile []string ) func init() { @@ -30,10 +30,12 @@ func init() { baseCmd.PersistentFlags().StringVarP(&SetIpxe, "ipxe", "P", "", "Set the node's iPXE template name") baseCmd.PersistentFlags().StringVarP(&SetRuntimeOverlay, "runtime", "R", "", "Set the node's runtime overlay") baseCmd.PersistentFlags().StringVarP(&SetSystemOverlay, "system", "S", "", "Set the node's system overlay") - baseCmd.PersistentFlags().StringVar(&SetIpmiIpaddr, "ipmi", "", "Set the node's IPMI address") baseCmd.PersistentFlags().StringVar(&SetIpmiUsername, "ipmiuser", "", "Set the node's IPMI username") baseCmd.PersistentFlags().StringVar(&SetIpmiPassword, "ipmipass", "", "Set the node's IPMI password") + baseCmd.PersistentFlags().StringSliceVarP(&SetAddProfile, "addprofile", "p", []string{}, "Add Profile(s) to group") + baseCmd.PersistentFlags().StringSliceVarP(&SetDelProfile, "delprofile", "r", []string{}, "Remove Profile(s) to group") + baseCmd.PersistentFlags().BoolVarP(&SetClearNodes, "clear", "c", false, "Clear node configurations when setting parent group") baseCmd.PersistentFlags().BoolVarP(&SetGroupAll, "all", "a", false, "Set all nodes") diff --git a/internal/app/wwctl/node/set/main.go b/internal/app/wwctl/node/set/main.go index 874333bd..10bbf269 100644 --- a/internal/app/wwctl/node/set/main.go +++ b/internal/app/wwctl/node/set/main.go @@ -3,6 +3,7 @@ package set import ( "fmt" "github.com/hpcng/warewulf/internal/pkg/node" + "github.com/hpcng/warewulf/internal/pkg/util" "github.com/hpcng/warewulf/internal/pkg/wwlog" "github.com/manifoldco/promptui" "github.com/spf13/cobra" @@ -44,6 +45,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { for _, n := range nodes { wwlog.Printf(wwlog.VERBOSE, "Evaluating node: %s\n", n.Fqdn.String()) + if SetVnfs != "" { wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting vnfs to: %s\n", n.Fqdn.String(), SetVnfs) @@ -145,6 +147,29 @@ func CobraRunE(cmd *cobra.Command, args []string) error { } } + if len(SetAddProfile) > 0 { + for _, p := range SetAddProfile { + wwlog.Printf(wwlog.VERBOSE, "Node: %s, adding profile to '%s'\n", n.Fqdn, p) + n.Profiles = util.SliceAddUniqueElement(n.Profiles, p) + } + err := nodeDB.NodeUpdate(n) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if len(SetDelProfile) > 0 { + for _, p := range SetDelProfile { + wwlog.Printf(wwlog.VERBOSE, "Node: %s, deleting profile from '%s'\n", n.Fqdn, p) + n.Profiles = util.SliceRemoveElement(n.Profiles, p) + } + err := nodeDB.NodeUpdate(n) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + os.Exit(1) + } + } + if SetNetDevDel == true { diff --git a/internal/app/wwctl/node/set/root.go b/internal/app/wwctl/node/set/root.go index f65ec18d..937b6025 100644 --- a/internal/app/wwctl/node/set/root.go +++ b/internal/app/wwctl/node/set/root.go @@ -27,6 +27,8 @@ var ( SetIpmiPassword string SetNodeAll bool SetYes bool + SetAddProfile []string + SetDelProfile []string ) func init() { @@ -41,6 +43,9 @@ func init() { baseCmd.PersistentFlags().StringVar(&SetIpmiUsername, "ipmiuser", "", "Set the node's IPMI username") baseCmd.PersistentFlags().StringVar(&SetIpmiPassword, "ipmipass", "", "Set the node's IPMI password") + baseCmd.PersistentFlags().StringSliceVarP(&SetAddProfile, "addprofile", "p", []string{}, "Add Profile(s) to node") + baseCmd.PersistentFlags().StringSliceVarP(&SetDelProfile, "delprofile", "r", []string{}, "Remove Profile(s) to node") + baseCmd.PersistentFlags().StringVarP(&SetNetDev, "netdev", "n", "", "Define the network device to configure") baseCmd.PersistentFlags().StringVarP(&SetIpaddr, "ipaddr", "I", "", "Set the node's network device IP address") baseCmd.PersistentFlags().StringVarP(&SetNetmask, "netmask", "M", "", "Set the node's network device netmask")