Packages
doex
0.7.7
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/main.ex
defmodule Doex.Cli.Main do
use FnExpr
alias Doex.Io.Shell
def main(argv) do
argv
|> parse
|> run
end
def run({:doex, []}) do
Shell.info "doex v" <> Doex.version
Shell.info "doex is a API client for Digital Ocean's API v2."
Shell.newline
Shell.info "Available tasks:"
Shell.newline
# Run `mix help --search doex.` to get this output
# and paste here, replacing `mix doex.` with just `doex `
Shell.info "#{Shell.cmd("doex block")} # Block the command line until a condition is met"
Shell.info "#{Shell.cmd("doex config")} # Reads, updates or deletes Doex config"
Shell.info "#{Shell.cmd("doex delete")} # Execute a Digital Ocean API DELETE request"
Shell.info "#{Shell.cmd("doex droplets.create")} # Create a droplet on Digital Ocean"
Shell.info "#{Shell.cmd("doex droplets.id")} # Locate a droplet ID, by name or tag (--tag)"
Shell.info "#{Shell.cmd("doex droplets.tag")} # Tag a droplet."
Shell.info "#{Shell.cmd("doex get")} # Execute a Digital Ocean API GET request"
Shell.info "#{Shell.cmd("doex id")} # Locate a ID of a resource, by name or tag (--tag)"
Shell.info "#{Shell.cmd("doex imagelets.create")} # Create a DitigalOcean snapshot based on available templates"
Shell.info "#{Shell.cmd("doex init")} # Initialize your doex config"
Shell.info "#{Shell.cmd("doex ip")} # Get the IP of a droplet"
Shell.info "#{Shell.cmd("doex ls")} # List your resources."
Shell.info "#{Shell.cmd("doex post")} # Execute a Digital Ocean API POST request"
Shell.info "#{Shell.cmd("doex put")} # Execute a Digital Ocean API PUT request"
Shell.info "#{Shell.cmd("doex scp")} # Secure copy a file from <src> to your droplet's <target>"
Shell.info "#{Shell.cmd("doex snapshots.create")} # Creates a snapshot of an existing Digital Ocean droplet"
Shell.info "#{Shell.cmd("doex ssh")} # Execute a command on your droplet"
Shell.info "#{Shell.cmd("doex ssh.hostkey")} # Add the droplet hostkey to the executing server"
Shell.newline
Shell.info "Further information can be found here:"
Shell.info " -- https://hex.pm/packages/doex"
Shell.info " -- https://github.com/capbash/doex"
Shell.newline
end
def run({:doex, [cmd | args]}), do: run({:unknown, cmd, args})
# TODO: consider moving to macro expansion
def run({:config, args}), do: Doex.Cli.Config.run(args)
def run({:id, args}), do: Doex.Cli.Id.run(args)
def run({:ip, args}), do: Doex.Cli.Ip.run(args)
def run({:ls, args}), do: Doex.Cli.Ls.run(args)
def run({:ssh, args}), do: Doex.Cli.Ssh.run(args)
def run({:ssh_hostkey, args}), do: Doex.Cli.Ssh.Hostkey.run(args)
def run({:scp, args}), do: Doex.Cli.Scp.run(args)
def run({:droplets_id, args}), do: Doex.Cli.Droplets.Id.run(args)
def run({:droplets_tag, args}), do: Doex.Cli.Droplets.Tag.run(args)
def run({:droplets_create, args}), do: Doex.Cli.Droplets.Create.run(args)
def run({:floating_ip_id, args}), do: Doex.Cli.FloatingIp.Id.run(args)
def run({:floating_ip_reassign, args}), do: Doex.Cli.FloatingIp.Reassign.run(args)
def run({:snapshots_create, args}), do: Doex.Cli.Snapshots.Create.run(args)
def run({:imagelets_create, args}), do: Doex.Cli.Imagelets.Create.run(args)
def run({:init, args}), do: Doex.Cli.Init.run(args)
def run({:get, args}), do: Doex.Cli.Get.run(args)
def run({:post, args}), do: Doex.Cli.Post.run(args)
def run({:put, args}), do: Doex.Cli.Put.run(args)
def run({:delete, args}), do: Doex.Cli.Delete.run(args)
def run({:block, args}), do: Doex.Cli.Block.run(args)
def run({:unknown, "dexter", _args}) do
Shell.error "You following me?"
Shell.newline
end
def run({:unknown, "doakes", _args}) do
Shell.error "Surprise muthaf*cka."
Shell.newline
end
def run({:unknown, unknown_cmd, _args}) do
Shell.error "We couldn't process #{unknown_cmd}, so kinda check your spelling and try again"
Shell.newline
run({:doex, []})
end
def run({cmd, args}), do: run({:unknown, cmd, args})
defp parse([]), do: {:doex, []}
defp parse([subcommand | subargs]) do
subcommand
|> String.replace(".", "_")
|> String.to_atom
|> invoke({&1, subargs})
end
end