Packages
doex
0.4.8
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/droplets.create.ex
defmodule Doex.Cli.Droplets.Create do
use FnExpr
alias Doex.Cli.{Parser, Shell}
@moduledoc"""
Create a new digital ocean droplet
doex droplets.create <name> <options>
The following Digital Ocean options (some with examples) are shown below:
--region nyc3
--size 512mb
--image ubuntu-14-04-x64
--ssh_keys 1234,5467
--backups # add option to enable
--ipv6 # add option to enable
--user_data # TODO figure out what this should be
--private_networking # add option to enable
--volumes # TODO figure out what this should be
--tags web,uat,temp
Additional `doex` options that can be used
--quiet If set, keep output to a minimum
--block If set, block the process until the droplet is active
For example
doex droplets.create mydroplet \
--region tor1 \
--tags myt \
--image ubuntu-14-04-x64 \
--size 512mb
If you have a specific config file, `mix help doex.config` then add it as an environment variable
DOEX_CONFIG=/tmp/my.doex doex droplets.create mydroplet \
--region tor1 \
--tags myt \
--image ubuntu-14-04-x64 \
--size 512mb
"""
@options %{
region: :string,
size: :string,
image: :string,
ssh_keys: :list,
backups: :boolean,
ipv6: :boolean,
user_data: :string,
private_networking: :boolean,
volumes: :string,
tags: :list,
quiet: :boolean
}
def run(raw_args) do
Doex.start
raw_args
|> Parser.parse(@options)
|> invoke(fn {opts, [name]} -> opts |> Map.put(:name, name) end)
|> create_droplet
|> invoke(fn {:ok, %{"droplet" => %{"id" => id}}} -> Shell.info(id) end)
end
defp create_droplet(opts) do
Shell.info("Creating droplet named #{opts[:name]}...", opts)
Doex.Api.post("/droplets", opts)
|> invoke(fn resp ->
if opts[:block] do
Doex.Cli.Block.block_until(resp)
Shell.info("DONE, Creating droplet named #{opts[:name]}.", opts)
else
Shell.info("WORKING, Creating droplet named #{opts[:name]}.", opts)
end
resp
end)
|> Shell.inspect(opts)
end
end