README.md

# DynamicServerManager

Simple, high-level API for managing cloud servers across multiple
providers from within [Elixir](http://elixir-lang.github.io).

This doesn't try to be everything, but instead provides two basic
behaviours, for which additional providers can be added:

 * Server:
   * Create based on snapshot
   * Destroy
   * Query for basic information

 * DNS:
   * Create/destroy A records for configured domains


## Installation

First, add to your `mix.exs` dependencies:

```elixir
def deps do
  [{:dynamic_server_manager, "~> 0.0.1"}]
end
```
Then, update your dependencies:

```sh
$ mix deps.get
```

## Configuration

See the [sample configuration](config/config.sample.exs)


## Usage

See the [example usage](lib/example.ex)


## Currently supported providers

 * Server:
   * [AWS EC2](https://aws.amazon.com/ec2)
   * [CloudSigma](https://www.cloudsigma.com)
   * [DigitalOcean](https://www.digitalocean.com)
   * [ProfitBricks](https://www.profitbricks.com)

 * DNS:
   * [AWS Route53](https://aws.amazon.com/route53)


## Writing new providers

They are based on the behaviours as defined in the following modules:

 * Server: DynamicServerManager.Server
 * DNS: DynamicServerManager.Dns

Hopefully between that and referencing the existing plugins you'll get the
idea.


### TODO

 * Better documentation (maybe, someday...)
 * Better plugin label/module mapping, possibly via registration