The completion functions only need the API-client, and not all of the CLI. However, passing the API-client as argument would mean that the API-client is initialized early, which may not be what we want, so instead, defining an APIClientProvider interface to preserve the behavior of initializing when needed only. While updating, also simplify stack.format to only require an io.Writer. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package secret
|
|
|
|
import (
|
|
"github.com/docker/cli/cli"
|
|
"github.com/docker/cli/cli/command"
|
|
"github.com/docker/cli/cli/command/completion"
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// NewSecretCommand returns a cobra command for `secret` subcommands
|
|
func NewSecretCommand(dockerCli command.Cli) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "secret",
|
|
Short: "Manage Swarm secrets",
|
|
Args: cli.NoArgs,
|
|
RunE: command.ShowHelp(dockerCli.Err()),
|
|
Annotations: map[string]string{
|
|
"version": "1.25",
|
|
"swarm": "manager",
|
|
},
|
|
}
|
|
cmd.AddCommand(
|
|
newSecretListCommand(dockerCli),
|
|
newSecretCreateCommand(dockerCli),
|
|
newSecretInspectCommand(dockerCli),
|
|
newSecretRemoveCommand(dockerCli),
|
|
)
|
|
return cmd
|
|
}
|
|
|
|
// completeNames offers completion for swarm secrets
|
|
func completeNames(dockerCLI completion.APIClientProvider) completion.ValidArgsFn {
|
|
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
list, err := dockerCLI.Client().SecretList(cmd.Context(), types.SecretListOptions{})
|
|
if err != nil {
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
var names []string
|
|
for _, secret := range list {
|
|
names = append(names, secret.ID)
|
|
}
|
|
return names, cobra.ShellCompDirectiveNoFileComp
|
|
}
|
|
}
|