DOCKER ORCHESTRATION (local environment instructions)
=====================================================

Instead of running this training on a cloud provider, you can simulate the
infrastructure locally. These instructions apply to the **PART ONE** of the
workshop.


## 1. Prerequisites
Virtualbox, Vagrant and Ansible


- Virtualbox: https://www.virtualbox.org/wiki/Downloads

- Vagrant: https://www.vagrantup.com/downloads.html
  - install vagrant-vbguest plugin (https://github.com/dotless-de/vagrant-vbguest)

- Ansible:
  - install Ansible's prerequisites:

          $ sudo pip install paramiko PyYAML Jinja2 httplib2 six pycrypto

  - clone the Ansible repository and checkout to a stable version
    (don't forget the `--recursive` argument when cloning!):

        $ git clone --recursive https://github.com/ansible/ansible.git
        $ cd ansible
        $ git checkout stable-{{ getStableVersionFromAnsibleProject }}
        $ git submodule update

  - source the setup script to make Ansible available on this terminal session:

          $ source path/to/your-ansible-clone/hacking/env-setup

  - you need to repeat the last step every time you open a new terminal session
    and want to use any Ansible command (but you'll probably only need to run
    it once).


## 2. Preparing the environment
Change into directory that has your Vagrantfile

Run the following commands:

    $ vagrant up
    $ chmod 600 private-key
    $ ansible-playbook provisioning.yml

And that's it! Now you should be able to ssh on `node1` using:

    $ ssh vagrant@10.10.10.10 -i private-key

These are the default IP addresses for the nodes:

    10.10.10.10 node1
    10.10.10.20 node2
    10.10.10.30 node3
    10.10.10.40 node4
    10.10.10.50 node5

The source code of this repo will be mounted at `~/orchestration-workshop`
(only on the `node1`), so you can edit the code externally and the changes
will reflect inside the instance.


## 3. Possible problems and solutions

- Depending on the Vagrant version, `sudo apt-get install bsdtar` may be needed

- If you get an error like "no Vagrant file found" or you have a file but  "cannot open base box" when running `vagrant up`, 
chances are good you not in the correct directory. 
Make sure you are in sub directory named "prepare-local". It has all the config files required by ansible, vagrant and virtualbox

- If you are using Python 3.7, running the ansible-playbook provisioning, see an error like "SyntaxError: invalid syntax" and it mentions
the word "async", you need to upgrade your Ansible version to 2.6 or higher to resolve the keyword conflict. 
https://github.com/ansible/ansible/issues/42105

- If you get strange Ansible errors about dependencies, try to check your pip
  version with `pip --version`. The current version is 8.1.1. If your pip is
  older than this, upgrade it with `sudo pip install --upgrade pip`, restart
  your terminal session and install the Ansible prerequisites again.

- If the IP's `10.10.10.[10-50]` are already taken in your machine, you can
  change them to other values in the `vagrant.yml` and `inventory` files in
  this directory. Make sure you pick a set of IP's inside the same subnet.

- If you suspend your computer, the simulated private network may stop to
  work. This is a known problem of Virtualbox. To fix it, reload all the VM's
  with `vagrant reload`.

- If you get a ssh error saying `WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED`
  it means that you already had in the past some other host using one of the
  IP addresses we use here. To solve this, remove the old entry in your
  `known_hosts` file with:

      $ ssh-keygen -f "~/.ssh/known_hosts" -R 10.10.10.10 -R 10.10.10.20 -R 10.10.10.30 -R 10.10.10.40 -R 10.10.10.50
