From 8a419f648b48c773695710cd3db35211588d4c59 Mon Sep 17 00:00:00 2001 From: Gregory Kurtzer Date: Tue, 22 Dec 2020 21:51:05 -0800 Subject: [PATCH] Properly configure a network device to be default --- internal/app/wwctl/node/list/main.go | 1 + internal/app/wwctl/node/set/main.go | 18 ++++++++++++++++++ internal/app/wwctl/node/set/root.go | 3 +++ internal/app/wwctl/profile/list/main.go | 2 +- internal/app/wwctl/profile/set/main.go | 19 +++++++++++++++++++ internal/app/wwctl/profile/set/root.go | 2 ++ 6 files changed, 44 insertions(+), 1 deletion(-) diff --git a/internal/app/wwctl/node/list/main.go b/internal/app/wwctl/node/list/main.go index 47a4a5d1..74d68a8a 100644 --- a/internal/app/wwctl/node/list/main.go +++ b/internal/app/wwctl/node/list/main.go @@ -61,6 +61,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":NETMASK", netdev.Netmask.Source(), netdev.Netmask.Print()) fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":GATEWAY", netdev.Gateway.Source(), netdev.Gateway.Print()) fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":TYPE", netdev.Type.Source(), netdev.Type.Print()) + fmt.Printf("%-20s %-18s %-12s %t\n", node.Id.Get(), name+":DEFAULT", netdev.Default.Source(), netdev.Default.PrintB()) } // v := reflect.ValueOf(node) diff --git a/internal/app/wwctl/node/set/main.go b/internal/app/wwctl/node/set/main.go index 22298a56..2878cbc2 100644 --- a/internal/app/wwctl/node/set/main.go +++ b/internal/app/wwctl/node/set/main.go @@ -233,6 +233,24 @@ func CobraRunE(cmd *cobra.Command, args []string) error { wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting HW address to: %s\n", n.Id.Get(), SetNetDev, SetHwaddr) n.NetDevs[SetNetDev].Hwaddr.Set(SetHwaddr) } + if SetNetDevDefault == true { + if SetNetDev == "" { + wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n") + os.Exit(1) + } + + if _, ok := n.NetDevs[SetNetDev]; !ok { + var nd node.NetDevEntry + n.NetDevs[SetNetDev] = &nd + } + + wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting device as default\n", n.Id.Get(), SetNetDev) + for _, dev := range n.NetDevs { + // First clear all other devices that might be configured as default + dev.Default.SetB(false) + } + n.NetDevs[SetNetDev].Default.SetB(true) + } err := nodeDB.NodeUpdate(n) if err != nil { diff --git a/internal/app/wwctl/node/set/root.go b/internal/app/wwctl/node/set/root.go index 24fe2934..3aadc4c7 100644 --- a/internal/app/wwctl/node/set/root.go +++ b/internal/app/wwctl/node/set/root.go @@ -19,6 +19,7 @@ var ( SetGateway string SetHwaddr string SetNetDevDel bool + SetNetDevDefault bool SetClusterName string SetIpxe string SetRuntimeOverlay string @@ -66,6 +67,8 @@ func init() { baseCmd.PersistentFlags().StringVarP(&SetGateway, "gateway", "G", "", "Set the node's network device gateway") baseCmd.PersistentFlags().StringVarP(&SetHwaddr, "hwaddr", "H", "", "Set the node's network device HW address") baseCmd.PersistentFlags().BoolVar(&SetNetDevDel, "netdel", false, "Delete the node's network device") + baseCmd.PersistentFlags().BoolVar(&SetNetDevDefault, "netdefault", false, "Set this network to be default") + baseCmd.PersistentFlags().BoolVarP(&SetNodeAll, "all", "a", false, "Set all nodes") baseCmd.PersistentFlags().BoolVarP(&SetYes, "yes", "y", false, "Set 'yes' to all questions asked") diff --git a/internal/app/wwctl/profile/list/main.go b/internal/app/wwctl/profile/list/main.go index 9702bc81..371e6171 100644 --- a/internal/app/wwctl/profile/list/main.go +++ b/internal/app/wwctl/profile/list/main.go @@ -49,7 +49,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { fmt.Printf("%-20s %-18s %s\n", profile.Id.Get(), name+":GATEWAY", netdev.Gateway.Print()) fmt.Printf("%-20s %-18s %s\n", profile.Id.Get(), name+":HWADDR", netdev.Hwaddr.Print()) fmt.Printf("%-20s %-18s %s\n", profile.Id.Get(), name+":TYPE", netdev.Hwaddr.Print()) - + fmt.Printf("%-20s %-18s %t\n", profile.Id.Get(), name+":DEFAULT", netdev.Default.PrintB()) } } diff --git a/internal/app/wwctl/profile/set/main.go b/internal/app/wwctl/profile/set/main.go index 5025a3ff..74ec6adc 100644 --- a/internal/app/wwctl/profile/set/main.go +++ b/internal/app/wwctl/profile/set/main.go @@ -213,6 +213,25 @@ func CobraRunE(cmd *cobra.Command, args []string) error { p.NetDevs[SetNetDev].Hwaddr.Set(SetHwaddr) } + if SetNetDevDefault == true { + if SetNetDev == "" { + wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n") + os.Exit(1) + } + + if _, ok := p.NetDevs[SetNetDev]; !ok { + var nd node.NetDevEntry + p.NetDevs[SetNetDev] = &nd + } + + wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting device as default\n", p.Id.Get(), SetNetDev) + for _, dev := range p.NetDevs { + // First clear all other devices that might be configured as default + dev.Default.SetB(false) + } + p.NetDevs[SetNetDev].Default.SetB(true) + } + err := nodeDB.ProfileUpdate(p) if err != nil { wwlog.Printf(wwlog.ERROR, "%s\n", err) diff --git a/internal/app/wwctl/profile/set/root.go b/internal/app/wwctl/profile/set/root.go index b23a33fb..875fa3e8 100644 --- a/internal/app/wwctl/profile/set/root.go +++ b/internal/app/wwctl/profile/set/root.go @@ -29,6 +29,7 @@ var ( SetGateway string SetHwaddr string SetNetDevDel bool + SetNetDevDefault bool SetInit string SetRoot string ) @@ -56,6 +57,7 @@ func init() { baseCmd.PersistentFlags().StringVarP(&SetGateway, "gateway", "G", "", "Set the node's network device gateway") baseCmd.PersistentFlags().StringVarP(&SetHwaddr, "hwaddr", "H", "", "Set the node's network device HW address") baseCmd.PersistentFlags().BoolVar(&SetNetDevDel, "netdel", false, "Delete the node's network device") + baseCmd.PersistentFlags().BoolVar(&SetNetDevDefault, "netdefault", false, "Set this network to be default") baseCmd.PersistentFlags().BoolVarP(&SetAll, "all", "a", false, "Set all profiles") baseCmd.PersistentFlags().BoolVarP(&SetForce, "force", "f", false, "Force configuration (even on error)")