summaryrefslogtreecommitdiff
path: root/cmd/podman/machine
diff options
context:
space:
mode:
authorAshley Cui <acui@redhat.com>2021-03-22 13:23:22 -0400
committerbaude <bbaude@redhat.com>2021-03-25 08:46:43 -0500
commite7661137373b5f87bf6ec45e32326821b172ce7b (patch)
tree34910aceb3e4188f4e66a128eba502e12e659308 /cmd/podman/machine
parentb5f54a9b23e8d9418700494da9aa78d8db354c43 (diff)
downloadpodman-e7661137373b5f87bf6ec45e32326821b172ce7b.tar.gz
podman-e7661137373b5f87bf6ec45e32326821b172ce7b.tar.bz2
podman-e7661137373b5f87bf6ec45e32326821b172ce7b.zip
Add --execute flag to podman machine ssh
--execute, -e allows to execute a command through ssh Signed-off-by: Ashley Cui <acui@redhat.com>
Diffstat (limited to 'cmd/podman/machine')
-rw-r--r--cmd/podman/machine/ssh.go36
1 files changed, 29 insertions, 7 deletions
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)
}