From a3e94473cb43d56c94ac2d8e8eb9efe7a35e6967 Mon Sep 17 00:00:00 2001 From: Yong Qin Date: Wed, 7 Apr 2021 15:23:37 -0700 Subject: [PATCH] Added "kernel delete" command. --- internal/app/wwctl/kernel/delete/main.go | 41 ++++++++++++++++++++++++ internal/app/wwctl/kernel/delete/root.go | 22 +++++++++++++ internal/app/wwctl/kernel/root.go | 2 ++ internal/pkg/kernel/kernel.go | 7 ++++ 4 files changed, 72 insertions(+) create mode 100644 internal/app/wwctl/kernel/delete/main.go create mode 100644 internal/app/wwctl/kernel/delete/root.go diff --git a/internal/app/wwctl/kernel/delete/main.go b/internal/app/wwctl/kernel/delete/main.go new file mode 100644 index 00000000..c289a27d --- /dev/null +++ b/internal/app/wwctl/kernel/delete/main.go @@ -0,0 +1,41 @@ +package delete + +import ( + "fmt" + "os" + + "github.com/hpcng/warewulf/internal/pkg/kernel" + "github.com/hpcng/warewulf/internal/pkg/node" + "github.com/hpcng/warewulf/internal/pkg/wwlog" + "github.com/spf13/cobra" +) + +func CobraRunE(cmd *cobra.Command, args []string) error { + + nodeDB, err := node.New() + if err != nil { + wwlog.Printf(wwlog.ERROR, "Could not open nodeDB: %s\n", err) + os.Exit(1) + } + + nodes, _ := nodeDB.FindAllNodes() + +ARG_LOOP: + for _, arg := range args { + for _, n := range nodes { + if n.KernelVersion.Get() == arg { + wwlog.Printf(wwlog.ERROR, "Kernel is configured for nodes, skipping: %s\n", arg) + continue ARG_LOOP + } + } + + err := kernel.DeleteKernel(arg) + if err != nil { + wwlog.Printf(wwlog.ERROR, "Could not delete kernel: %s\n", arg) + } else { + fmt.Printf("Kernel has been deleted: %s\n", arg) + } + } + + return nil +} diff --git a/internal/app/wwctl/kernel/delete/root.go b/internal/app/wwctl/kernel/delete/root.go new file mode 100644 index 00000000..8295e4b5 --- /dev/null +++ b/internal/app/wwctl/kernel/delete/root.go @@ -0,0 +1,22 @@ +package delete + +import "github.com/spf13/cobra" + +var ( + baseCmd = &cobra.Command{ + Use: "delete [flags] [kernel version]...", + Short: "Delete an imported kernel", + Long: "This command will delete a kernel that has been imported into Warewulf.", + RunE: CobraRunE, + Args: cobra.MinimumNArgs(1), + } +) + +func init() { + +} + +// GetRootCommand returns the root cobra.Command for the application. +func GetCommand() *cobra.Command { + return baseCmd +} diff --git a/internal/app/wwctl/kernel/root.go b/internal/app/wwctl/kernel/root.go index 3dcdd34b..33d74b0a 100644 --- a/internal/app/wwctl/kernel/root.go +++ b/internal/app/wwctl/kernel/root.go @@ -1,6 +1,7 @@ package kernel import ( + "github.com/hpcng/warewulf/internal/app/wwctl/kernel/delete" "github.com/hpcng/warewulf/internal/app/wwctl/kernel/imprt" "github.com/hpcng/warewulf/internal/app/wwctl/kernel/list" "github.com/spf13/cobra" @@ -18,6 +19,7 @@ var ( func init() { baseCmd.AddCommand(imprt.GetCommand()) baseCmd.AddCommand(list.GetCommand()) + baseCmd.AddCommand(delete.GetCommand()) } // GetRootCommand returns the root cobra.Command for the application. diff --git a/internal/pkg/kernel/kernel.go b/internal/pkg/kernel/kernel.go index 62ac2cbc..f3f08ada 100644 --- a/internal/pkg/kernel/kernel.go +++ b/internal/pkg/kernel/kernel.go @@ -108,3 +108,10 @@ func Build(kernelVersion string, root string) (string, error) { return "Done", nil } + +func DeleteKernel(name string) error { + fullPath := path.Join(ParentDir(), name) + + wwlog.Printf(wwlog.VERBOSE, "Removing path: %s\n", fullPath) + return os.RemoveAll(fullPath) +}