Vagrant
=======

Vagrant instances for local development and testing of edX instances and Ansible playbooks/roles.

- Vagrant stacks in ``base`` create new base boxes from scratch.
- Vagrant stacks in ``release`` download a base box with most requirements already installed.  The instances then update themselves with the latest versions of the application code.

If you are a developer or designer, you should use the ``release`` stacks.

For creating test edX instances, there are two versions of the stack:

- ``fullstack`` is a production-like configuration running all the services on a single server.  https://openedx.atlassian.net/wiki/display/OpenOPS/Running+Fullstack
- ``devstack`` is designed for local development. It uses the same system requirements as in production, but simplifies certain settings to make development more convenient.  https://openedx.atlassian.net/wiki/display/OpenOPS/Running+Devstack

For testing Ansible playbooks and roles, there are two directories under the ``base`` directory:

- ``test_playbook`` is used for testing the playbooks in the Ansible configuration scripts.
- ``test_role`` is used for testing the roles in the Ansible configuration scripts.

To test an Ansible playbook using Vagrant:

- Create/modify a playbook under ``/playbooks`` (e.g. "foo.yml")
- Export its name as the value of the environment variable ``VAGRANT_ANSIBLE_PLAYBOOK``, like this:
 - ``export VAGRANT_ANSIBLE_PLAYBOOK=foo``
- Execute ``vagrant up`` from within the ``test_playbook`` directory.

To test an Ansible role using Vagrant:

- Create/modify a role under ``/playbooks/roles`` (e.g. "bar-role")
- Export its name as the value of the environment variable ``VAGRANT_ANSIBLE_ROLE``, like this:
 - ``export VAGRANT_ANSIBLE_ROLE=bar-role``
- Execute ``vagrant up`` from within the ``test_role`` directory.