Test on Juju OpenStack provider

This document explain how to setup the testing environment on top of the Juju OpenStack provider and how to run COU testing.

Bootstrap juju controller on openstack cloud

Follow the step on the official documentation to bootstrap a Juju Openstack controller

Deploy openstack with juju openstack-provider

Follow the step on STSStack Bundles to deploy the openstack cloud

git clone https://github.com/canonical/stsstack-bundles.git
cd openstack

# Some of the overlays may be missing here, check all the supported overlays with:
./generate-bundle.sh --list-overlays

# ussuri-focal is the lowest version that COU supports
./generate-bundle.sh --name some-juju-model-name -r ussuri -s focal --ovn --telemetry

(Optional) sshuttle as proxy

If your openstack environment is behind the vpn and you have the bastion server, you can use sshuttle:

sshuttle --ssh-cmd "ssh -i /home/myuser/.ssh/mykey" -v -r ubuntu@your-bastion-ip 10.5.0.0/16

Install COU for testing

There are two ways to execute COU:

  • Use snap

  • Use Python

Using python is more useful to debugging the code base bugs. However Snap is a official way to run COU on production, and we need to make sure all the parts in snap is working fine.

(Optional) Prepare local python environment for COU

One way to execute COU is to run it in your python environment

virtualenv ./.venv
source .venv/bin/activate

# Install COU in editable mode
pip install -e .

# Verify cou is installed in the environment
which cou

# Execute cou in python environment
cou

(Optional) Install COU from local snap build

# Running snapcraft command in the project's root directory.
snapcraft

# Install local snap with --dangerous
sudo snap install ./LOCAL_SNAP_FILE --dangerous

# snap list command should show the COU
snap list

(Optional) Copy the JUJU_DATA

If you don’t want to mix the configuration with your local.

export JUJU_DATA=./juju-data

Execute the COU

Run cou plan and review the steps generate by COU

cou plan

(Optional) Run upgrade to execute the upgrade steps

cou upgrade

(Optional) Tail COU log message

Use below script to tail all the log files, old and new created, in follow mode:

#!/bin/bash

DIRECTORY="/home/myuser/.local/share/cou/log/"
CHECK_INTERVAL=2  # Check for new files every 2 seconds
LOGFILE=".tailed_files.log"

# Function to tail new files
tail_files() {
    for file in "$DIRECTORY"/*; do
        if [ -f "$file" ] && ! grep -q "$file" "$LOGFILE"; then
            echo "Tailing new file: $file"
            tail -F "$file" &
            echo "$file" >> "$LOGFILE"
        fi
    done
}

# Function to clean up logfile on exit
cleanup() {
    echo "Cleaning up..."
    rm -f "$LOGFILE"
    exit 0
}

# Set trap to clean up logfile on exit
trap cleanup EXIT

# Create or clear the log file
> "$LOGFILE"

# Initial tailing of existing files
tail_files

# Periodically check for new files and tail them
while true; do
    sleep "$CHECK_INTERVAL"
    tail_files
done