From 760b6e5217e3b16099e232fd3a961d5a802c0e8b Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Sun, 9 Feb 2025 15:14:30 -0700 Subject: [PATCH] wwctl overlay list completions Signed-off-by: Jonathon Anderson --- internal/app/wwctl/completions/completions.go | 13 +++++++++++++ internal/app/wwctl/node/add/root.go | 4 ++-- internal/app/wwctl/node/set/root.go | 4 ++-- internal/app/wwctl/profile/add/root.go | 4 ++-- internal/app/wwctl/profile/set/root.go | 4 ++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/internal/app/wwctl/completions/completions.go b/internal/app/wwctl/completions/completions.go index 83ba8cfd..dc27e81b 100644 --- a/internal/app/wwctl/completions/completions.go +++ b/internal/app/wwctl/completions/completions.go @@ -1,6 +1,8 @@ package completions import ( + "strings" + "github.com/spf13/cobra" "github.com/warewulf/warewulf/internal/pkg/hostlist" @@ -87,6 +89,17 @@ func Overlays(cmd *cobra.Command, args []string, toComplete string) ([]string, c return list, cobra.ShellCompDirectiveNoFileComp } +func OverlayList(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + list, directive := Overlays(cmd, args, toComplete) + lastCommaIndex := strings.LastIndex(toComplete, ",") + if lastCommaIndex >= 0 { + for i := range list { + list[i] = toComplete[:lastCommaIndex+1] + list[i] + } + } + return list, directive +} + func OverlayFiles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { ret, _ := overlay.OverlayGetFiles(args[0]) return ret, cobra.ShellCompDirectiveNoFileComp diff --git a/internal/app/wwctl/node/add/root.go b/internal/app/wwctl/node/add/root.go index 7058834b..850362a4 100644 --- a/internal/app/wwctl/node/add/root.go +++ b/internal/app/wwctl/node/add/root.go @@ -37,10 +37,10 @@ func GetCommand() *cobra.Command { if err := baseCmd.RegisterFlagCompletionFunc("kernelversion", completions.NodeKernelVersion); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.OverlayList); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.OverlayList); err != nil { panic(err) } if err := baseCmd.RegisterFlagCompletionFunc("profile", completions.Profiles(0)); err != nil { // no limit diff --git a/internal/app/wwctl/node/set/root.go b/internal/app/wwctl/node/set/root.go index d563279b..68c482d2 100644 --- a/internal/app/wwctl/node/set/root.go +++ b/internal/app/wwctl/node/set/root.go @@ -44,10 +44,10 @@ func GetCommand() *cobra.Command { if err := baseCmd.RegisterFlagCompletionFunc("kernelversion", completions.NodeKernelVersion); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.OverlayList); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.OverlayList); err != nil { panic(err) } if err := baseCmd.RegisterFlagCompletionFunc("profile", completions.Profiles(0)); err != nil { // no limit diff --git a/internal/app/wwctl/profile/add/root.go b/internal/app/wwctl/profile/add/root.go index 41900e8f..ee1aab4f 100644 --- a/internal/app/wwctl/profile/add/root.go +++ b/internal/app/wwctl/profile/add/root.go @@ -35,10 +35,10 @@ func GetCommand() *cobra.Command { if err := baseCmd.RegisterFlagCompletionFunc("kernelversion", completions.ProfileKernelVersion); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.OverlayList); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.OverlayList); err != nil { panic(err) } return baseCmd diff --git a/internal/app/wwctl/profile/set/root.go b/internal/app/wwctl/profile/set/root.go index 2c987376..699c1c9d 100644 --- a/internal/app/wwctl/profile/set/root.go +++ b/internal/app/wwctl/profile/set/root.go @@ -48,10 +48,10 @@ func GetCommand() *cobra.Command { if err := baseCmd.RegisterFlagCompletionFunc("kernelversion", completions.ProfileKernelVersion); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("runtime", completions.OverlayList); err != nil { panic(err) } - if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.Overlays); err != nil { + if err := baseCmd.RegisterFlagCompletionFunc("wwinit", completions.OverlayList); err != nil { panic(err) } return baseCmd