2018-08-31 16:42:07 +02:00
Vultr Guide
===========
Ansible offers a set of modules to interact with `Vultr <https://www.vultr.com> `_ cloud platform.
2018-12-20 22:50:10 +01:00
This set of module forms a framework that allows one to easily manage and orchestrate one's infrastructure on Vultr cloud platform.
2018-08-31 16:42:07 +02:00
Requirements
------------
There is actually no technical requirement; simply an already created Vultr account.
Configuration
-------------
Vultr modules offer a rather flexible way with regard to configuration.
Configuration is read in that order:
- Environment Variables (eg. `` VULTR_API_KEY `` , `` VULTR_API_TIMEOUT `` )
- File specified by environment variable `` VULTR_API_CONFIG ``
- `` vultr.ini `` file located in current working directory
- `` $HOME/.vultr.ini ``
Ini file are structured this way:
.. code-block :: ini
[default]
key = MY_API_KEY
timeout = 60
[personal_account]
key = MY_PERSONAL_ACCOUNT_API_KEY
timeout = 30
2018-12-20 22:50:10 +01:00
If `` VULTR_API_ACCOUNT `` environment variable or `` api_account `` module parameter is not specified, modules will look for the section named "default".
2018-08-31 16:42:07 +02:00
Authentication
--------------
Before using the Ansible modules to interact with Vultr, ones need an API key.
If one doesn't own one yet, log in to `Vultr <https://www.vultr.com> `_ go to Account, then API, enable API then the API key should show up.
Ensure you allow the usage of the API key from the proper IP addresses.
Refer to the Configuration section to find out where to put this information.
To check that everything is working properly run the following command:
.. code-block :: console
2019-08-24 17:54:17 +02:00
#> VULTR_API_KEY=XXX ansible -m vultr_account_info localhost
2018-08-31 16:42:07 +02:00
localhost | SUCCESS => {
"changed": false,
2019-08-24 17:54:17 +02:00
"vultr_account_info": {
2018-08-31 16:42:07 +02:00
"balance": -8.9,
"last_payment_amount": -10.0,
"last_payment_date": "2018-07-21 11:34:46",
"pending_charges": 6.0
},
"vultr_api": {
"api_account": "default",
"api_endpoint": "https://api.vultr.com",
"api_retries": 5,
"api_timeout": 60
}
}
If a similar output displays then everything is setup properly, else please ensure the proper `` VULTR_API_KEY `` has been specified and that Access Control on Vultr > Account > API page are accurate.
Usage
-----
Since `Vultr <https://www.vultr.com> `_ offers a public API, the execution of the module to manage the infrastructure on their platform will happen on localhost. This translates to:
.. code-block :: yaml
---
- hosts: localhost
tasks:
- name: Create a 10G volume
vultr_block_storage:
name: my_disk
size: 10
region: New Jersey
From that point on, only you creativity is the limit. Make sure to read the documentation of the `available modules <https://docs.ansible.com/ansible/latest/modules/list_of_cloud_modules.html#vultr> `_ .
Dynamic Inventory
-----------------
Ansible provides a dynamic inventory plugin for `Vultr <https://www.vultr.com> `_ .
The configuration process is exactly the same as the one for the modules.
2018-12-20 22:50:10 +01:00
To be able to use it you need to enable it first by specifying the following in the `` ansible.cfg `` file:
2018-08-31 16:42:07 +02:00
.. code-block :: ini
[inventory]
enable_plugins=vultr
And provide a configuration file to be used with the plugin, the minimal configuration file looks like this:
.. code-block :: yaml
---
plugin: vultr
To list the available hosts one can simply run:
.. code-block :: console
2018-12-20 22:50:10 +01:00
#> ansible-inventory -i vultr.yml --list
2018-08-31 16:42:07 +02:00
2018-12-20 22:50:10 +01:00
For example, this allows you to take action on nodes grouped by location or OS name:
2018-08-31 16:42:07 +02:00
.. code-block :: yaml
---
- hosts: Amsterdam
tasks:
- name: Rebooting the machine
shell: reboot
become: True
2019-01-07 22:23:54 +01:00
Integration tests
-----------------
Ansible includes integration tests for all Vultr modules.
These tests are meant to run against the public Vultr API and that is why they require a valid key to access the API.
Prepare the test setup:
.. code-block :: shell
$ cd ansible # location the ansible source is
$ source ./hacking/env-setup
Set the Vultr API key:
.. code-block :: shell
$ cd test/integration
$ cp cloud-config-vultr.ini.template cloud-config-vultr.ini
$ vi cloud-config-vultr.ini
Run all Vultr tests:
.. code-block :: shell
$ ansible-test integration cloud/vultr/ -v --diff --allow-unsupported
2019-08-24 17:54:17 +02:00
To run a specific test, e.g. vultr_account_info:
2019-01-07 22:23:54 +01:00
.. code-block :: shell
2019-08-24 17:54:17 +02:00
$ ansible-test integration cloud/vultr/vultr_account_info -v --diff --allow-unsupported