Packages
doex
0.8.2
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/scp.ex
defmodule Doex.Cli.Scp do
use FnExpr
alias Doex.Cli.Parser
alias Doex.Io.Shell
@moduledoc """
Secure copy a file from <src> to your droplet's <target>
doex scp <droplet_name> <src> <target>
You can provide the droplet ID, referenece it by name, or by tag (if you add the --tag option)
For example
doex scp my_app ./bin/env /src/my_app/bin/env
If you have a specific config file, `mix help doex.config` then add it as an environment variable
DOEX_CONFIG=/tmp/my.doex doex scp my_app ./bin/env /src/my_app/bin/env
"""
@options %{
tag: :boolean
}
def run(raw_args) do
Doex.start()
raw_args
|> Parser.parse(@options)
|> invoke(fn {opts, [name, src, target]} ->
name
|> Doex.Client.find_droplet(opts)
|> invoke(fn
nil -> Shell.unknown_droplet(name, ["scp" | raw_args])
id -> id
end)
|> Doex.Client.droplet_ip()
|> scp(src, target)
end)
|> Shell.info(raw_args)
end
def scp(nil, _src, _target), do: nil
def scp(ip, src, target) do
{_, 0} = System.cmd("scp", [src, "root@#{ip}:#{target}"])
"scp #{src} root@#{ip}:#{target}"
end
end