From e7661137373b5f87bf6ec45e32326821b172ce7b Mon Sep 17 00:00:00 2001 From: Ashley Cui Date: Mon, 22 Mar 2021 13:23:22 -0400 Subject: Add --execute flag to podman machine ssh --execute, -e allows to execute a command through ssh Signed-off-by: Ashley Cui --- cmd/podman/machine/ssh.go | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'cmd/podman/machine') diff --git a/cmd/podman/machine/ssh.go b/cmd/podman/machine/ssh.go index a0656d17b..32483f731 100644 --- a/cmd/podman/machine/ssh.go +++ b/cmd/podman/machine/ssh.go @@ -12,22 +12,33 @@ import ( var ( sshCmd = &cobra.Command{ - Use: "ssh NAME", - Short: "SSH into a virtual machine", - Long: "SSH into a podman-managed virtual machine ", - RunE: ssh, - Args: cobra.ExactArgs(1), - Example: `podman machine ssh myvm`, + Use: "ssh [options] NAME [COMMAND [ARG ...]]", + Short: "SSH into a virtual machine", + Long: "SSH into a podman-managed virtual machine ", + RunE: ssh, + Args: cobra.MinimumNArgs(1), + Example: `podman machine ssh myvm + podman machine ssh -e myvm echo hello`, + ValidArgsFunction: completion.AutocompleteNone, } ) +var ( + sshOpts machine.SSHOptions +) + func init() { 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") + _ = sshCmd.RegisterFlagCompletionFunc(executeFlagName, completion.AutocompleteDefault) } func ssh(cmd *cobra.Command, args []string) error { @@ -36,6 +47,17 @@ func ssh(cmd *cobra.Command, args []string) error { vm machine.VM vmType string ) + 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") + } + // 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") + } + switch vmType { default: vm, err = qemu.LoadVMByName(args[0]) @@ -43,5 +65,5 @@ func ssh(cmd *cobra.Command, args []string) error { if err != nil { return errors.Wrapf(err, "vm %s not found", args[0]) } - return vm.SSH(args[0], machine.SSHOptions{}) + return vm.SSH(args[0], sshOpts) } -- cgit v1.2.3-54-g00ecf