layout | title | categories | lang | author |
---|---|---|---|---|
post |
Manage the configuration of your servers with Ansible |
instances |
en |
NicolasLM |
Ansible is a configuration management software that allows to manage your servers very easily. It focuses on keeping things simple, making it easy to begin with it.
In the Ansible world there are only two things: your computer where Ansible runs and servers to manage.
- The computer only needs the Ansible client installed.
- Servers only need an SSH access and Python installed. Basically all Unix servers match the requirements. RunAbove GNU/Linux instances are known to work out of the box with Ansible.
Ansible uses a standard SSH connection to manage the servers. The client on your computer initiates a connection to all your servers in parallel and uses Python modules to configure them.
Ansible encourages you to reuse the configuration you write by defining different elements, mainly: hosts, playbooks, roles and tasks.
Let's take a real life example that will make that clear. Imagine that you want to deploy a small cluster of web servers.
First you define a list of hosts that will be part of this cluster. This list is called an inventory file.
The next step is defining a role. Each role is a list of tasks and configuration files.
Imagine a role "HTTP server". It will contain the following tasks:
- Install the HTTP server Nginx
- Upload its configuration
- Start the service
Finally you write a playbook that connects your hosts with the role(s) you want to give them. In our example our hosts will have two roles, the common one and the HTTP server one. Now let's do that on RunAbove!
The first thing you need to do is installing Ansible, then you will be able to clone a git repository containing the files mentioned in the previous paragraphs and run the playbook on real servers.
On your local computer install Ansible. As it is just a Python software it can be installed like any other Python program with pip. As a good practice you should install it in a virtualenv.
Note, on a fresh Debian-like system you can install the requirements:
apt-get install python-dev python-virtualenv python-pip
Assuming you are using an Unix OS with Python and virtualenv installed it is as easy as:
mkdir ansible && cd ansible
virtualenv venv
source venv/bin/activate
pip install ansible
Congratulations, you are ready to use Ansible.
Clone the repository containing the web cluster example:
git clone https://github.com/NicolasLM/ansible-runabove-example.git
cd ansible-runabove-example
The repository has the following layout:
├── hosts
├── webserver.yml
└── roles
├── common
│ ├── files
│ │ └── ntp.conf
│ ├── handlers
│ │ └── main.yml
│ └── tasks
│ └── main.yml
└── nginx
├── files
│ └── testsite
├── handlers
│ └── main.yml
└── tasks
└── main.yml
hosts
is your inventory of hostswebserver.yml
is the playbookroles
is a directory containing two roles: common and nginx
The common role is meant to be shared by all your host on RunAbove. It installs a ntp server and upgrades packages. The nginx role is the one installing the HTTP server.
Launch a few RunAbove instances using Ubuntu 14.04. You can pick the flavor you want, even a Sandbox will be fine. It is important that you launch them with the key of your current computer running Ansible.
Once they are running copy their IP to the host
file of the repository like
that:
[webservers]
92.222.0.1
92.222.0.2
92.222.0.3
You can simply run the playbook:
ansible-playbook -i hosts webserver.yml
The process can take up to a few minutes, once Ansible has setup all your hosts
you can connect to http://<IP of a instance>
and check that Nginx is
responding.
You can check more examples in the Github repository ansible-examples.
Ansible has a lot of built-in modules and a great community. You can find them on IRC at #ansible.