Skip to content

Commit

Permalink
podman machine shell completion
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Paul Holzinger authored and jmguzik committed Apr 26, 2021
1 parent 33adf1d commit 836bf71
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 20 deletions.
8 changes: 0 additions & 8 deletions cmd/podman/common/completion.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
35 changes: 35 additions & 0 deletions cmd/podman/machine/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -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
}
5 changes: 2 additions & 3 deletions cmd/podman/machine/rm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
}
)

Expand Down
5 changes: 2 additions & 3 deletions cmd/podman/machine/ssh.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -14,15 +13,15 @@ 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,
Args: cobra.MaximumNArgs(1),
Example: `podman machine ssh myvm
podman machine ssh -e myvm echo hello`,

ValidArgsFunction: common.AutocompleteMachineSSH,
ValidArgsFunction: autocompleteMachineSSH,
}
)

Expand Down
5 changes: 2 additions & 3 deletions cmd/podman/machine/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
}
)

Expand Down
5 changes: 2 additions & 3 deletions cmd/podman/machine/stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
}
)

Expand Down

0 comments on commit 836bf71

Please sign in to comment.