Skip to main content

A cli to Create / Destroy DigitalOcean Droplets

Project description

# Ansible Droplet
[![Travis](https://img.shields.io/travis/FlorianKempenich/ansible-droplet.svg)](https://travis-ci.org/FlorianKempenich/ansible-droplet) [![PyPI](https://img.shields.io/pypi/v/ansible-droplet.svg)](https://pypi.org/project/ansible-droplet/)

`ansible-droplet` is a cli tool to easily create _ready-to-use_ droplets on Digital Ocean.

* Create **ready-to-use** Ubuntu Droplet on Digital Ocean
* One **simple** command: `ansible-droplet create my_droplet`
* Access it directly via its **name**:
* SSH: `ssh my_droplet`
* Ansible: `- hosts: my_droplet`
* And more:
* New sudo user automatically created
* Swap added (configurable)
* DigitalOcean advanced metrics enabled
* `glances` server running to monitor the Droplet from outside


## Installation
**Important Note:** For now only `python 2` is supported

```
pip install ansible-droplet
```
> Use a `virtualenv` or install with `pip install ansible-droplet --user`

---

## Usage
### One time setup
Before using the tool, a simple _one-time-setup_ must be done.

1. Make sure you have a **`ssh` public key**, or [generate one](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/#generating-a-new-ssh-key)
1. Make sure you have a **Digital Ocean API token**, or [generate one](https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2)
1. **Store in a file** the Digital Ocean API token in clear<sup>[1](#f1)</sup>
1. Note down:
* _Path_ to your **ssh public key**
* _Path_ to the file containing the **Digital Ocean API token**
1. Run `ansible-droplet config` see below for more detail on the config parameters


### Create
```
ansible-droplet create my_droplet
```
##### Creation process
* **Create a new Droplet** on your Ditigal Ocean Account
* **Set it up** with: Swap, new sudo user, glances server
* **Create a SSH entry** in your `~/.ssh/config` to be able to ssh directly with its name: `ssh my_droplet`
* **Create a ansible inventory entry** in `~/.ansible-droplet-inventory`


### Destroy
```
ansible-droplet destroy my_droplet
```
##### Destruction process
* **Destroy the Droplet** from your Ditigal Ocean Account
* **Remove the SSH entry** from your `~/.ssh/config` to be able to ssh directly with its name: `ssh my_droplet`
* **Remove the ansible inventory entry** from `~/.ansible-droplet-inventory`


## Advanced Usage
### Config parameters
When running `ansible-droplet config` a couple of parameters must be provided:

* **Path to SSH key**:
No brainer, the path to your SSH public key.
_Default: `~/.ssh/id_rsa.pub`_

* **Name of SSH key on Digital Ocean**:
To prevent uploading the public keys each time, Digital Ocean offers to store them under a name. It can be anything.
_Default: `Main SSH Key`_

* **Path to Ditigal Ocean token**:
The path to the file containing your Digital Ocean token in plain text.
_No defaults_

* **User on Droplet - Username:**
Username for the sudo user being created on the Droplet.
_No defaults_

* **User on Droplet - Default Password:**
Default password for the sudo user being created on the Droplet.
_No defaults_
_Do not forget to change it after the first login!_


### Droplet specs
You can specify the droplet size and specs when creating a new droplet.
Simply list it after the droplet name:
```
ansible-droplet create my_droplet SPEC_NAME
```

For now, only 3 specs are supported<sup>[2](#f2)</sup>:
* **Micro**
* size: "512mb"
* region: "fra1"
* image: "ubuntu-16-04-x64"
* swap: "4GiB"
* **Mini**
* size: "1gb"
* region: "fra1"
* image: "ubuntu-16-04-x64"
* swap: "4GiB"
* **Power**
* size: "4gb"
* region: "fra1"
* image: "ubuntu-16-04-x64"
* swap: "4GiB"

The list of specification are stored on the repository: [Droplet Specs](https://github.com/FlorianKempenich/ansible-droplet/tree/master/ansible_droplet/ansible/droplet_specs)




### Ansible Droplet Inventory
It is possible to access the Droplet from any other ansible playbook via its **name**:

- hosts: my_droplet

For that purpose the file `~/.ansible-droplet-inventory` is created.
`~/.ansible-droplet-inventory` contains ansible inventory entries for each Droplet created with the `ansible-droplet` tool.

To use the droplet in a playbook, either:
* Point your _inventory_ to the `~/.ansible-droplet-inventory` file
* Point your _inventory_ to a directory containing a symlink to the `~/.ansible-droplet-inventory` file

From there you can reference the Droplet directly by name.


### Multiple configuration - Multiple Digital Ocean accounts

You can use multiple configurations to support:
* Multiple **DigitalOcean accounts**
* Multiple **SHH Keys**
* Multiple **default user/password**

The configuration generated by `ansible-droplet config` is kept in the installation directory.

To allow multiple configs, simply **install multiple versions of `ansible-droplet` in different _virtualenvs_**<sup>[3](#f3)</sup>


---
1. <span id="f1"></span>Yes, this is a security concern. Feel free to open a pull request.
2. <span id="f2"></span>For now, the addition of new droplet specs is not supported. Again, pull requests are welcome :)
3. <span id="f3"></span>This is not optimal... You know what to do ;)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for ansible-droplet, version 0.5.0
Filename, size File type Python version Upload date Hashes
Filename, size ansible-droplet-0.5.0.tar.gz (11.6 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page