Packages
doex
0.3.0
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/config.ex
defmodule Doex.Cli.Config do
use Mix.Task
alias Doex.Cli.Shell
@moduledoc"""
Reads, updates or deletes Doex configuration keys.
doex config KEY [VALUE]
Look at available settings and definitions in the
[Digital Ocean API V2 Documentation](https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2)
## Config keys
* `token` - Digitial Ocean Token ()
* `ssh_keys` - The SSH Key "IDs" stored in Digital Ocean to grant to new droplets
## Command line options
* `--delete` - Remove a specific config key
"""
@switches [delete: :boolean]
def run(args) do
{opts, args, _} = OptionParser.parse(args, switches: @switches)
case args do
[] ->
list()
["$" <> _key | _] ->
Mix.raise "Invalid key name"
[key] ->
if opts[:delete] do
delete(key)
else
read(key)
end
[key, value] ->
set(key, value)
[key | values] ->
set(key, values)
_ ->
Shell.raise """
Invalid arguments, expected:
#{Shell.cmd("doex config KEY [VALUE]")}
"""
end
end
defp list() do
Enum.each(Doex.Config.read, fn {key, value} ->
Shell.info "#{key}: #{inspect(value, pretty: true)}"
end)
end
defp read(key) do
key
|> String.to_atom
|> Doex.Config.get
|> print(key)
end
defp print(nil, key) do
Mix.raise "Config does not contain any value for #{key}"
end
defp print(values, key) when is_list(values) do
values
|> Enum.join(",")
|> print(key)
end
defp print(value, _key) do
Shell.info(value)
end
defp delete(key) do
key
|> String.to_atom
|> Doex.Config.remove
end
defp set(key, value) do
Doex.Config.put(String.to_atom(key), value)
end
end