ansible
We've been testing ansible for our development
virtual machine.
It's using yaml as base configuration provisioning and a cfg config file for the hosts.
The Vagrantfile
can be defined like this for an ansible provision:
<span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">network</span> <span class="ss">:private_network</span><span class="p">,</span> <span class="ss">ip</span><span class="p">:</span> <span class="s2">"192.168.111.223"</span><span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provision</span> <span class="ss">:ansible</span> <span class="k">do</span> <span class="o">|</span><span class="n">ansible</span><span class="o">|</span> <span class="n">ansible</span><span class="o">.</span><span class="n">playbook</span> <span class="o">=</span> <span class="s2">"provisioning/playbook.yml"</span> <span class="n">ansible</span><span class="o">.</span><span class="n">inventory_file</span> <span class="o">=</span> <span class="s2">"provisioning/ansible_hosts"</span> <span class="n">ansible</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="kp">true</span> <span class="n">ansible</span><span class="o">.</span><span class="n">extra_vars</span> <span class="o">=</span> <span class="p">{</span><span class="ss">user</span><span class="p">:</span> <span class="s1">'vagrant'</span><span class="p">,</span> <span class="ss">hosts</span><span class="p">:</span> <span class="s1">'vagrant'</span><span class="p">}</span> <span class="n">ansible</span><span class="o">.</span><span class="n">sudo</span> <span class="o">=</span> <span class="kp">true</span><span class="k">end</span>
Notice extra_vars
user and hosts, it will allow customizing the variables for
a local provision.
You can create the ansible_hosts
file with something like that:
<span class="k">[vagrant]</span><span class="err">192.168.111.223</span><span class="k">[localhost]</span><span class="err">127.0.0.1</span>
For a very simple playbook.yml
that just updates your apt repository:
<span class="nn">---</span><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">user</span><span class="p-Indicator">:</span> <span class="s">'{{</span><span class="nv"> </span><span class="s">user</span><span class="nv"> </span><span class="s">}}'</span> <span class="l-Scalar-Plain">hosts</span><span class="p-Indicator">:</span> <span class="s">'{{</span><span class="nv"> </span><span class="s">hosts</span><span class="nv"> </span><span class="s">}}'</span> <span class="l-Scalar-Plain">tasks</span><span class="p-Indicator">:</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">ensure packages list is at the latest version</span> <span class="l-Scalar-Plain">apt</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">update_cache=yes</span>
I recommend to install latest version of
ansible. If you are a Debian user you can
build package with a make deb
.
Now with vagrant you can simply do a vagrant up
and after provisioning with vagrant provision
.
You can also use your recipe for your local machine with:
<span class="go">sudo ansible-playbook provisioning/playbook.yml -vvv --connection=local \</span><span class="go"> --inventory-file=provisioning/ansible_hosts \</span><span class="go"> --extra-vars "hosts=localhost user=$USER"</span>
Ansible is a very simple tool to understand and maintain with its yaml files.