Today I finally decided to solve something I’ve been putting off for a while. I recently migrated to reasonably-priced cloud hosting solution DigitalOcean. Version 1 of their API will stop working on November 9. The tool I use to automate my servers and developer installs is Ansible currently uses version 1 will not support version 2 of the DigitalOcean API until Version 2.0, which was supposed to have been released by now. My guess is that since it is almost November, the ansible team decided to wait until AnsibleFest to release 2.0. Unfortunately, that’s on November 19th.
So there’s a 10 day window + developer time where any playbooks I’m using will no longer work on the live site. Not cool.
So I decided to start up a project to test a working fix for this.
The first thing I needed to do was install Ansible 2.0 from source using the instructions on the website.
$ git clone git://github.com/ansible/ansible.git --recursive | |
$ cd ansible | |
$ source ./hacking/env-setup | |
$ sudo pip install paramiko PyYAML Jinja2 httplib2 six | |
$ make | |
$ sudo make install |
This installed Ansible into my /usr/local/bin
which I verified was correct by typing ansible --version
Next I installed the python DigitalOcean API, dopy
:
$ sudo pip install dopy |
Log in to DigitalOcean and get a v2 token (there is no client_id in v2) and add the below to your .profile
replacing the api_token
with the one you generated.
$ export DO_API_VERSION='2' | |
$ export DO_API_TOKEN='api_token' |
Generate a RSA key pair and upload it to DigitalOcean if you haven’t already done so and copy the following provision script into provision.yml
(example modified from Jeff Geerling’s Ansible for DevOps chapter 7.) remembering to modify the ssh key signature.
https://gist.github.com/e86245d7652a755552ec#file-4_provision-yml
Then run the script with the command:
$ ansible-playbook provision.yml |
This will create an ubuntu droplet and log in and run a install on it all automated like. You’ll notice that unlike Jeff’s script, you can refer to regions, images, sizes, and keys by name instead of looking up esoteric numbers for them.
Good luck and have fun!