podman machine shell completion

Add shell completion for machine names.

[NO TESTS NEEDED]
I would like to add one to the shell completion test however
using podman machine init is to expensive.

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
This commit is contained in:
Paul Holzinger
2021-03-31 14:01:18 +02:00
parent dbb7009e55
commit 009322c57a
6 changed files with 43 additions and 20 deletions

View File

@ -1092,11 +1092,3 @@ func AutocompleteVolumeFilters(cmd *cobra.Command, args []string, toComplete str
}
return completeKeyValues(toComplete, kv)
}
// AutocompleteMachineSSH - Autocomplete machine ssh command.
func AutocompleteMachineSSH(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
if len(args) == 0 {
return nil, cobra.ShellCompDirectiveNoFileComp
}
return nil, cobra.ShellCompDirectiveDefault
}

View File

@ -3,9 +3,13 @@
package machine
import (
"strings"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/cmd/podman/validate"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/machine"
"github.com/containers/podman/v3/pkg/machine/qemu"
"github.com/spf13/cobra"
)
@ -30,3 +34,34 @@ func init() {
Command: machineCmd,
})
}
// autocompleteMachineSSH - Autocomplete machine ssh command.
func autocompleteMachineSSH(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
if len(args) == 0 {
return getMachines(toComplete)
}
return nil, cobra.ShellCompDirectiveDefault
}
// autocompleteMachine - Autocomplete machines.
func autocompleteMachine(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
if len(args) == 0 {
return getMachines(toComplete)
}
return nil, cobra.ShellCompDirectiveNoFileComp
}
func getMachines(toComplete string) ([]string, cobra.ShellCompDirective) {
suggestions := []string{}
machines, err := qemu.List(machine.ListOptions{})
if err != nil {
cobra.CompErrorln(err.Error())
return nil, cobra.ShellCompDirectiveNoFileComp
}
for _, m := range machines {
if strings.HasPrefix(m.Name, toComplete) {
suggestions = append(suggestions, m.Name)
}
}
return suggestions, cobra.ShellCompDirectiveNoFileComp
}

View File

@ -8,7 +8,6 @@ import (
"os"
"strings"
"github.com/containers/common/pkg/completion"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/machine"
@ -18,13 +17,13 @@ import (
var (
rmCmd = &cobra.Command{
Use: "rm [options] [NAME]",
Use: "rm [options] [MACHINE]",
Short: "Remove an existing machine",
Long: "Remove an existing machine ",
RunE: rm,
Args: cobra.MaximumNArgs(1),
Example: `podman machine rm myvm`,
ValidArgsFunction: completion.AutocompleteNone,
ValidArgsFunction: autocompleteMachine,
}
)

View File

@ -3,7 +3,6 @@
package machine
import (
"github.com/containers/podman/v3/cmd/podman/common"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/machine"
@ -14,7 +13,7 @@ import (
var (
sshCmd = &cobra.Command{
Use: "ssh [options] [NAME] [COMMAND [ARG ...]]",
Use: "ssh [options] [MACHINE] [COMMAND [ARG ...]]",
Short: "SSH into a virtual machine",
Long: "SSH into a virtual machine ",
RunE: ssh,
@ -22,7 +21,7 @@ var (
Example: `podman machine ssh myvm
podman machine ssh -e myvm echo hello`,
ValidArgsFunction: common.AutocompleteMachineSSH,
ValidArgsFunction: autocompleteMachineSSH,
}
)

View File

@ -3,7 +3,6 @@
package machine
import (
"github.com/containers/common/pkg/completion"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/machine"
@ -13,13 +12,13 @@ import (
var (
startCmd = &cobra.Command{
Use: "start [NAME]",
Use: "start [MACHINE]",
Short: "Start an existing machine",
Long: "Start an existing machine ",
RunE: start,
Args: cobra.MaximumNArgs(1),
Example: `podman machine start myvm`,
ValidArgsFunction: completion.AutocompleteNone,
ValidArgsFunction: autocompleteMachine,
}
)

View File

@ -3,7 +3,6 @@
package machine
import (
"github.com/containers/common/pkg/completion"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/machine"
@ -13,13 +12,13 @@ import (
var (
stopCmd = &cobra.Command{
Use: "stop [NAME]",
Use: "stop [MACHINE]",
Short: "Stop an existing machine",
Long: "Stop an existing machine ",
RunE: stop,
Args: cobra.MaximumNArgs(1),
Example: `podman machine stop myvm`,
ValidArgsFunction: completion.AutocompleteNone,
ValidArgsFunction: autocompleteMachine,
}
)