Packages
doex
0.4.18
0.14.1
0.12.2
0.12.1
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
A Digital Ocean API v2 client for Elixir (yes, another one)
Current section
Files
Jump to
Current section
Files
lib/doex/cli/ssh.ex
defmodule Doex.Cli.Ssh do
use FnExpr
alias Doex.Cli.Parser
alias Doex.Io.Shell
@moduledoc"""
Execute a command on your droplet
doex ssh <droplet_id_or_name_or_tag> <cmd>
You can provide the droplet ID, referenece it by name, or by tag (if you add the --tag option)
For example
doex ssh my_app "ls -la"
If you have a specific config file, `mix help doex.config` then add it as an environment variable
DOEX_CONFIG=/tmp/my.doex doex ssh my_app "ls -la"
"""
@options %{
tag: :boolean,
}
def run(raw_args) do
Doex.start
raw_args
|> Parser.parse(@options)
|> invoke(fn {opts, [name, cmd]} ->
name
|> Doex.Client.find_droplet(opts)
|> Doex.Client.droplet_ip
|> ssh(cmd)
end)
|> Shell.info(raw_args)
end
def ssh(nil, _cmd), do: "Unable to locate droplet, aborting"
def ssh(ip, cmd) do
SSHEx.connect(ip: ip, user: "root")
|> invoke(fn {:ok, conn} -> SSHEx.cmd!(conn, cmd) end)
end
end