Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

We have two categories of Ansible playbooks; installations and tasks. Installation playbooks follow a hierarchy to install and configure VMs in the correct order where tasks are used for one-off or repeating jobs that we need to run, e.g. adding SSH access for a developer or running database backups.

Installation

Tasks

...

Install Ansible on MacOS/Linux

Ansible is a Python so the easiest way to install it is using Pip;

...

Code Block
$ ansible jenkins -i ansible/inventory/build -m ping
10.1.0.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Inventory

We use dynamic inventory with Ansible and the logic for the inventory is held in $TIS_DEVOPS/ansible/inventory.py, the other scripts in that directory call that file with the platform name. This reduces the amount of work required to setup a new platform and reduces the capacity to make mistakes when updating the inventory across the board.

There is also a test.py file that runs unit tests against inventory.py to help avoid making breaking changes.

Creating a new stack

  1. Check out $TIS-DEVOPS
  2. Create a new directory under ansible/roles/docker-compose/templates/:stack_name, these files are treated like Jinja2 templates so variables can be used throughout.
  3. Add a docker-compose.yml in that new directory. If your application needs environment variables then use an environment section, i.e.  

    Code Block
    environment:
      DATABASE_HOST: "{{ database['host'] }}"


  4. Create new playbook under ansible/ directory that matches your service name

  5. Add the hosts to the Ansible inventory file for platforms you are targeting.
  6. Commit and push your changes to Github.

  7. Create a deploy job in Jenkins by copying the 'revalidation-dev-deploy' job and changing the export STACK=revalidation to match your stack name.

...