Running TripleO Quickstart in Docker

TripleO Quickstart is a set of Ansible scripts that will configure a remote host with several virtual machines and install OpenStack TripleO on the nodes. This allows full testing of automated OpenStack deployment inside a virtual baremetal environment using limited hardware.

The one downside of TripleO Quickstart for many developers, is that the scripts only run on Red Hat operating systems (CentOS, RHEL, and Fedora). If your workstation is not running one of the compatible operating systems, you can now use Docker to run tripleo-quickstart in its own container.

Thanks to Bogdan Dobrelya for the following RFE and patch:

RFE: https://bugs.launchpad.net/tripleo/+bug/1676373

Code: https://review.openstack.org/#/q/topic:rfe1676373

Docker config: https://github.com/bogdando/oooq-warp/blob/master/oooq-warp.yaml

You can fit a simple configuration of one node each of type Undercloud, Controller, and Compute in a 32GB system, but more nodes or more RAM per node will require additional system memory on the virtual host. For reference, here is the config that I use to launch a 6-node cluster (plus one installation node, or “undercloud”), with 6 virtual network interfaces for each virtual host (on a system with 128GB of RAM).

undercloud_memory: 16384  # Should be at least 12GB
control_memory: 12192     # Should be at least 8GB
compute_memory: 8192      # Should be at least 5GB
enable_vnc_console: true

overcloud_nodes:
  - name: control_0
    flavor: control
    virtualbmc_port: 6230
  - name: control_1
    flavor: control
    virtualbmc_port: 6231
  - name: control_2
    flavor: control
    virtualbmc_port: 6232

  - name: compute_0
    flavor: compute
    virtualbmc_port: 6233
  - name: compute_1
    flavor: compute
    virtualbmc_port: 6234
  - name: compute_2
    flavor: compute
    virtualbmc_port: 6235

  #- name: ceph_0
  #  flavor: ceph


networks:
  - name: external
    bridge: brext
    forward_mode: nat
    address: "{{ external_network_cidr|nthhost(1) }}"
    netmask: "{{ external_network_cidr|ipaddr('netmask') }}"
    dhcp_range:
      - "{{ external_network_cidr|nthhost(10) }}"
      - "{{ external_network_cidr|nthhost(50) }}"
    nat_port_range:
      - 1024
      - 65535
 
  - name: overcloud
    bridge: brovc
 
  - name: overcloud1
    bridge: brovc1
 
  - name: overcloud2
    bridge: brovc2
 
  - name: overcloud3
    bridge: brovc3
 
  - name: overcloud4
    bridge: brovc4

To get started, clone the tripleo-quickstart git repository from: https://github.com/openstack/tripleo-quickstart

Once you have cloned the repo locally, run this command to install the various dependencies:

[user@host ~/tripleo-quickstart]$ bash quickstart.sh --install-deps

Here is the command-line that I use to launch the above config, run from the directory where I cloned the tripleo-quickstart git repo:

bash quickstart.sh --extra-vars @config/general_config/my_config.yml \
  --teardown all --release master-tripleo-ci <remote_host>

Note that you can also deploy to multiple remote hosts. You need to set a different working directory for each remote host, and you will need to copy some of the files from the tripleo-quickstart directory in order for the working directory to be used. I haven’t figured out exactly which files are needed in the working directory, so I just copy all the files from the git repo each time I deploy (using “git pull” to update the local repo). Here is how I deploy to two different remote hosts.

# Deploy undercloud1 (run from tripleo-quickstart git directory):
mkdir $HOME/workspace/quickstart-undercloud1
export WD=$HOME/workspace/quickstart-undercloud1
cp -r * $WD
bash quickstart.sh --extra-vars @config/general_config/my_config.yml -w $WD \
  --teardown all --release master-tripleo-ci <remote_host_1>

# Deply undercloud2 (run from tripleo-quickstart git directory):
mkdir $HOME/workspace/quickstart-undercloud2
export WD=$HOME/workspace/quickstart-undercloud2
cp -r * $WD
bash quickstart.sh --extra-vars @config/general_config/my_config_spine_leaf.yml -w $WD \
  --teardown all --release master-tripleo-ci <remote_host_2>