ansible/docsite/rst/guide_vagrant.rst

136 lines
5 KiB
ReStructuredText
Raw Normal View History

Using Vagrant and Ansible
=========================
.. _vagrant_intro:
Introduction
````````````
2013-11-23 19:10:43 +00:00
Vagrant is a tool to manage virtual machine environments, and allows you to
2014-03-30 23:45:55 +00:00
configure and use reproducible work environments on top of various
2013-11-23 19:10:43 +00:00
virtualization and cloud platforms. It also has integration with Ansible as a
provisioner for these virtual machines, and the two tools work together well.
This guide will describe how to use Vagrant and Ansible together.
If you're not familiar with Vagrant, you should visit `the documentation
2013-11-23 19:10:43 +00:00
<http://docs.vagrantup.com/v2/>`_.
2013-11-23 22:59:35 +00:00
This guide assumes that you already have Ansible installed and working.
Running from a Git checkout is fine. Follow the :doc:`intro_installation`
guide for more information.
.. _vagrant_setup:
Vagrant Setup
`````````````
2013-11-23 22:59:35 +00:00
The first step once you've installed Vagrant is to create a ``Vagrantfile``
and customize it to suit your needs. This is covered in detail in the Vagrant
2013-11-23 19:10:43 +00:00
documentation, but here is a quick example:
.. code-block:: bash
$ mkdir vagrant-test
$ cd vagrant-test
$ vagrant init precise32 http://files.vagrantup.com/precise32.box
2013-11-23 19:10:43 +00:00
This will create a file called Vagrantfile that you can edit to suit your
needs. The default Vagrantfile has a lot of comments. Here is a simplified
example that includes a section to use the Ansible provisioner:
.. code-block:: ruby
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "precise32"
config.vm.box_url = "http://files.vagrantup.com/precise32.box"
config.vm.network :public_network
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
end
end
2013-11-23 19:10:43 +00:00
The Vagrantfile has a lot of options, but these are the most important ones.
2013-11-23 22:59:35 +00:00
Notice the ``config.vm.provision`` section that refers to an Ansible playbook
called ``playbook.yml`` in the same directory as the Vagrantfile. Vagrant runs
2013-11-23 19:10:43 +00:00
the provisioner once the virtual machine has booted and is ready for SSH
access.
.. code-block:: bash
$ vagrant up
This will start the VM and run the provisioning playbook.
2013-11-23 22:59:35 +00:00
There are a lot of Ansible options you can configure in your Vagrantfile. Some
particularly useful options are ``ansible.extra_vars``, ``ansible.sudo`` and
``ansible.sudo_user``, and ``ansible.host_key_checking`` which you can disable
to avoid SSH connection problems to new virtual machines.
2013-11-23 19:10:43 +00:00
Visit the `Ansible Provisioner documentation
<http://docs.vagrantup.com/v2/provisioning/ansible.html>`_ for more
information.
2013-11-23 22:59:35 +00:00
To re-run a playbook on an existing VM, just run:
.. code-block:: bash
$ vagrant provision
This will re-run the playbook.
.. _running_ansible:
Running Ansible Manually
````````````````````````
2013-11-23 22:59:35 +00:00
Sometimes you may want to run Ansible manually against the machines. This is
pretty easy to do.
2013-11-23 19:10:43 +00:00
Vagrant automatically creates an inventory file for each Vagrant machine in
the same directory located under ``.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory``.
It configures the inventory file according to the SSH tunnel that Vagrant
2013-11-23 22:59:35 +00:00
automatically creates, and executes ``ansible-playbook`` with the correct
2013-11-23 19:10:43 +00:00
username and SSH key options to allow access. A typical automatically-created
inventory file may look something like this:
.. code-block:: none
# Generated by Vagrant
machine ansible_host=127.0.0.1 ansible_port=2222
.. note::
Ansible 2.0 moved away from using ``ansible_ssh_*`` variables to accepting ``ansible_*`` variables. If you are using a version of Ansible prior to 2.0, you should continue using the older style variables (``ansible_ssh_*``), such as ``ansible_ssh_host`` instead of ``ansible_host`` and ``ansible_ssh_port`` instead of ``ansible_port``, which appear in the above content. These shorter variables are ignored, without warning, in older versions of Ansible.
2013-11-23 19:10:43 +00:00
If you want to run Ansible manually, you will want to make sure to pass
2013-11-23 22:59:35 +00:00
``ansible`` or ``ansible-playbook`` commands the correct arguments for the
username (usually ``vagrant``) and the SSH key (since Vagrant 1.7.0, this will be something like
``.vagrant/machines/[machine name]/[provider]/private_key``), and the autogenerated inventory file.
Here is an example:
.. code-block:: bash
$ ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=.vagrant/machines/default/virtualbox/private_key -u vagrant playbook.yml
Note: Vagrant versions prior to 1.7.0 will use the private key located at ``~/.vagrant.d/insecure_private_key.``
.. seealso::
`Vagrant Home <http://www.vagrantup.com/>`_
The Vagrant homepage with downloads
`Vagrant Documentation <http://docs.vagrantup.com/v2/>`_
Vagrant Documentation
`Ansible Provisioner <http://docs.vagrantup.com/v2/provisioning/ansible.html>`_
The Vagrant documentation for the Ansible provisioner
:doc:`playbooks`
An introduction to playbooks