diff options
Diffstat (limited to 'cmd/podman/machine')
-rw-r--r-- | cmd/podman/machine/machine.go | 35 | ||||
-rw-r--r-- | cmd/podman/machine/rm.go | 5 | ||||
-rw-r--r-- | cmd/podman/machine/ssh.go | 56 | ||||
-rw-r--r-- | cmd/podman/machine/start.go | 5 | ||||
-rw-r--r-- | cmd/podman/machine/stop.go | 5 |
5 files changed, 74 insertions, 32 deletions
diff --git a/cmd/podman/machine/machine.go b/cmd/podman/machine/machine.go index 9a2377d12..d8cdf5568 100644 --- a/cmd/podman/machine/machine.go +++ b/cmd/podman/machine/machine.go @@ -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 +} diff --git a/cmd/podman/machine/rm.go b/cmd/podman/machine/rm.go index 002a793a3..e05b5f7a8 100644 --- a/cmd/podman/machine/rm.go +++ b/cmd/podman/machine/rm.go @@ -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, } ) diff --git a/cmd/podman/machine/ssh.go b/cmd/podman/machine/ssh.go index 586c4267d..fc7c71992 100644 --- a/cmd/podman/machine/ssh.go +++ b/cmd/podman/machine/ssh.go @@ -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,15 +13,13 @@ import ( var ( sshCmd = &cobra.Command{ - Use: "ssh [options] [NAME] [COMMAND [ARG ...]]", + Use: "ssh [NAME] [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, } ) @@ -31,36 +28,49 @@ var ( ) func init() { + sshCmd.Flags().SetInterspersed(false) registry.Commands = append(registry.Commands, registry.CliCommand{ Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode}, Command: sshCmd, Parent: machineCmd, }) - - flags := sshCmd.Flags() - executeFlagName := "execute" - flags.BoolVarP(&sshOpts.Execute, executeFlagName, "e", false, "Execute command from args") } func ssh(cmd *cobra.Command, args []string) error { var ( - err error - vm machine.VM - vmType string + err error + validVM bool + vm machine.VM + vmType string ) - vmName := defaultMachineName - if len(args) > 0 && len(args[0]) > 1 { - vmName = args[0] - } - sshOpts.Args = args[1:] - // Error if no execute but args given - if !sshOpts.Execute && len(sshOpts.Args) > 0 { - return errors.New("too many args: to execute commands via ssh, use -e flag") + // Set the VM to default + vmName := defaultMachineName + // If len is greater than 0, it means we may have been + // provided the VM name. If so, we check. The VM name, + // if provided, must be in args[0]. + if len(args) > 0 { + switch vmType { + default: + validVM, err = qemu.IsValidVMName(args[0]) + if err != nil { + return err + } + if validVM { + vmName = args[0] + } else { + sshOpts.Args = append(sshOpts.Args, args[0]) + } + } } - // Error if execute but no args given - if sshOpts.Execute && len(sshOpts.Args) < 1 { - return errors.New("must proivde at least one command to execute") + // If len is greater than 1, it means we might have been + // given a vmname and args or just args + if len(args) > 1 { + if validVM { + sshOpts.Args = args[1:] + } else { + sshOpts.Args = args + } } switch vmType { diff --git a/cmd/podman/machine/start.go b/cmd/podman/machine/start.go index 40800160e..959fa21d2 100644 --- a/cmd/podman/machine/start.go +++ b/cmd/podman/machine/start.go @@ -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, } ) diff --git a/cmd/podman/machine/stop.go b/cmd/podman/machine/stop.go index 7d655f0ba..36b434d8e 100644 --- a/cmd/podman/machine/stop.go +++ b/cmd/podman/machine/stop.go @@ -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, } ) |