kolla-ansible/tests/test-mariadb.sh
Roman Krček 9ea63dc300 Rewrite kolla-ansible CLI to python
Moving the CLI to python allows for easier
maintenance and larger feature-set.

This patch introduces a few breaking changes!
The changes stem the nature of the cliff package.
- the order of parameters must be
  kolla-ansible <action> <arguments>
- mariadb_backup and mariadb_recovery now are
  mariadb-backup and mariadb-recovery

Closes-bug: #1589020
Signed-off-by: Roman Krček <roman.krcek@tietoevry.com>
Change-Id: I9749b320d4f5eeec601a055b597dfa7d8fb97ce2
2024-10-28 08:48:23 +00:00

101 lines
3.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -o xtrace
set -o errexit
set -o nounset
set -o pipefail
# Enable unbuffered output for Ansible in Jenkins.
export PYTHONUNBUFFERED=1
function mariadb_stop {
echo "Stopping the database cluster"
kolla-ansible stop -i ${RAW_INVENTORY} -vvv --yes-i-really-really-mean-it --tags mariadb --skip-tags common
if [[ $(sudo ${container_engine} ps -q | grep mariadb | wc -l) -ne 0 ]]; then
echo "Failed to stop MariaDB cluster"
return 1
fi
}
function mariadb_recovery {
# Recover the database cluster.
echo "Recovering the database cluster"
kolla-ansible mariadb-recovery -i ${RAW_INVENTORY} -vvv --tags mariadb --skip-tags common
}
function test_recovery {
# Stop all nodes in the cluster, then recover.
mariadb_stop
mariadb_recovery
}
function test_backup {
echo "Performing full backup"
kolla-ansible mariadb-backup -i ${RAW_INVENTORY} -vvv --full
# Sleep for 30 seconds, not because it's absolutely necessary.
# The full backup is already completed at this point, as the
# ansible job is waiting for the completion of the backup script
# in the container on the controller side. Its more of an
# attempt at a "sort of" simulation of the usual elapsed time
# since the last full backup for the incremental job, as some
# data gets written within those 30 seconds.
echo "Sleeping for 30 seconds"
sleep 30
kolla-ansible mariadb-backup -i ${RAW_INVENTORY} -vvv --incremental
}
function test_backup_with_retries {
# Retry test_backup up to 3 times if it fails
local max_retries=3
local attempt=1
while [[ $attempt -le $max_retries ]]; do
echo "Attempt $attempt of $max_retries for test_backup"
set +o errexit # Temporarily disable errexit for retry logic
test_backup
result=$?
set -o errexit # Re-enable errexit after the attempt
if [[ $result -eq 0 ]]; then
echo "test_backup succeeded on attempt $attempt"
return 0 # Exit the function if test_backup succeeds
else
echo "test_backup failed on attempt $attempt"
fi
if [[ $attempt -lt $max_retries ]]; then
echo "Sleeping for 30 seconds before the next attempt"
sleep 30 # Wait for 30 seconds before retrying
fi
attempt=$((attempt + 1))
done
echo "test_backup failed after $max_retries attempts"
return 1 # Return an error if all attempts fail
}
function test_mariadb_logged {
RAW_INVENTORY=/etc/kolla/inventory
source $KOLLA_ANSIBLE_VENV_PATH/bin/activate
test_backup_with_retries
test_recovery
}
function test_mariadb {
echo "Testing MariaDB"
test_mariadb_logged > /tmp/logs/ansible/test-mariadb 2>&1
result=$?
if [[ $result != 0 ]]; then
echo "Testing MariaDB failed. See ansible/test-mariadb for details"
else
echo "Successfully tested MariaDB. See ansible/test-mariadb for details"
fi
return $result
}
container_engine="${1:-docker}"
test_mariadb