ansible-role-ara-web

_images/ansible-role-ara-web.png

This Ansible role provides a framework for installing one or many instances of ara-web in a variety of opinionated deployment topologies.

It is currently tested and supported against Ubuntu 18.04 and Fedora 29.

Role Variables

See defaults/main.yaml.

# Root of where files will be stored for ara-web
ara_web_root_dir: "{{ ansible_user_dir }}/.ara"

# When using static builds without the dev server, path to ara-web static assets
ara_web_static_dir: "{{ ara_web_root_dir }}/www/ara-web"

# How ara-web will be installed
# - source (default): installs from a local or remote git repository specified by ara_web_source
# - npm (planned): installs from npm
ara_web_install_method: source

# When installing from source, the location of the remote or local git repository
ara_web_source: "https://opendev.org/recordsansible/ara-web"

# Location where ara-web will be checked out
ara_web_source_checkout: "{{ ara_web_root_dir }}/git/ara-web"

# Location where node_modules will be installed
ara_web_node_modules_dir: "{{ ara_web_source_checkout }}"

# Version of ara-web to install
# This can be a git ref (tag, branch, commit) when installed from source
# When using "latest" as the source version, HEAD will be used
ara_web_version: latest

# Whether to use the embedded react web server or not
# Setting this to false means ara-web will be statically built instead
ara_web_dev_server: true

# When the development server is enabled, the address it will be listening on
ara_web_dev_server_bind_address: 127.0.0.1

# When the development server is enabled, the port it will be listening on
ara_web_dev_server_bind_port: 3000

# Version of nodesource nodejs repositories to install
ara_web_nodejs_version: 10

# ara-server API endpoint to use
ara_web_api_endpoint: "http://127.0.0.1:8000"

# The frontend server for serving ara-web
# - null (default): none, users are expected to use the development server directly or deploy their own web server
# - nginx: when performance of the development server is an issue
# - apache (planned)
ara_web_frontend_server: null

# When using a frontend server, you can override the default vhost configuration
# template by specifying the path to your own template file.
ara_web_frontend_vhost: null

# When using a frontend server, the hostname to listen on
ara_web_fqdn: "{{ ansible_default_ipv4['address'] }}"

TL;DR

This is what the role does by default out of the box:

  • Retrieves ara-web from source
  • Installs nodejs LTS (v10)
  • Installs ara-web dependencies with npm
  • Configures an ara-server API endpoint in ara-web’s public/config.json file
  • Sets up a systemd unit file for running ara-web with the embedded development server

About deployment topologies

This Ansible role is designed to support different opinionated topologies that can be selected with role variables.

For example, the following role variables are defaults used to provide the topology from the TL;DR above:

  • ara_web_install_method: source
  • ara_web_dev_server: true
  • ara_web_frontend_server: null

The intent is that as the role gains support for other install methods or frontend servers, it will be possible to mix and match according to preference or requirements.

Example playbooks

Deploy the ARA API and web client on the same machine with defaults:

- name: Deploy ARA API and web client
  hosts: all
  gather_facts: yes
  vars:
    # ara_api
    ara_api_fqdn: api.ara.example.org
    ara_api_wsgi_server: gunicorn
    ara_api_allowed_hosts:
    - api.ara.example.org
    ara_api_cors_origin_whitelist:
    - web.ara.example.org
    # ara_web
    ara_web_fqdn: web.ara.example.org
    ara_web_api_endpoint: "http://api.ara.example.org"
roles:
    - ara_api
    - ara_web

Deploy only ara-web behind nginx and point it to a remote API endpoint:

# Note: Don't forget to add the web fqdn in the remote cors_origin_whitelist.
# Otherwise, the web client might not be authorized to query the API.
- name: Deploy ara-web for remote API endpoint
  hosts: all
  gather_facts: yes
  vars:
    ara_web_fqdn: web.ara.example.org
    ara_web_api_endpoint: "http://api.remoteara.example.org"
    ara_web_frontend_server: nginx
    ara_web_frontend_vhost: custom-web-vhost.conf.j2
roles:
    - ara_web