From 4525fe37b4736d9e5edfd12676d8e3729bc07e40 Mon Sep 17 00:00:00 2001 From: Harald Albers Date: Wed, 30 Oct 2024 16:24:35 +0000 Subject: [PATCH] Add completion for `--volume-driver` Signed-off-by: Harald Albers --- cli/command/container/completion.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cli/command/container/completion.go b/cli/command/container/completion.go index 840c6de86e..35a02f4d2e 100644 --- a/cli/command/container/completion.go +++ b/cli/command/container/completion.go @@ -136,6 +136,7 @@ func addCompletions(cmd *cobra.Command, dockerCLI completion.APIClientProvider) _ = cmd.RegisterFlagCompletionFunc("ulimit", completeUlimit) _ = cmd.RegisterFlagCompletionFunc("userns", completion.FromList("host")) _ = cmd.RegisterFlagCompletionFunc("uts", completion.FromList("host")) + _ = cmd.RegisterFlagCompletionFunc("volume-driver", completeVolumeDriver(dockerCLI)) _ = cmd.RegisterFlagCompletionFunc("volumes-from", completion.ContainerNames(dockerCLI, true)) } @@ -272,6 +273,19 @@ func completeUlimit(_ *cobra.Command, _ []string, _ string) ([]string, cobra.She return postfixWith("=", limits), cobra.ShellCompDirectiveNoSpace } +// completeVolumeDriver contacts the API to get the built-in and installed volume drivers. +func completeVolumeDriver(dockerCLI completion.APIClientProvider) completion.ValidArgsFn { + return func(cmd *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) { + info, err := dockerCLI.Client().Info(cmd.Context()) + if err != nil { + // fallback: the built-in drivers + return []string{"local"}, cobra.ShellCompDirectiveNoFileComp + } + drivers := info.Plugins.Volume + return drivers, cobra.ShellCompDirectiveNoFileComp + } +} + // containerNames contacts the API to get names and optionally IDs of containers. // In case of an error, an empty list is returned. func containerNames(dockerCLI completion.APIClientProvider, cmd *cobra.Command, args []string, toComplete string) []string {