This change moves the tests into classes that handle the logging, set up, and teardown of necessary data (like files). These classes are provided to the test loop by a dictionary look up of the test cases. Currently implemented are Glance and Keystone. There is also functionality to query the registered tests and provide descriptions. Change-Id: I164b85f1ca800dd58146c6793696adaf80634621
2.9 KiB
Bowling Ball - OpenStack-Ansible Rolling Downtime Simulator
- date
-
2017-03-09
- tags
-
rackspace, openstack, ansible
- category
-
*openstack, *nix
About
This project aims to test for issues with rolling downtime on OpenStack-Ansible deployments. It's comprised of two main components:
- The
rolling_restart.py
script - The
rolling_test.py
script
The rolling_restart.py
script will stop containers from
a specified group in a rolling fashion - node 1 will stop, then start,
then node 2, then node 3 and so on. This script runs from the
deployment host.
The tests
directory contains scripts to generate traffic
against the target services. system that will be restarted by
rolling_restart.py
in order to measure the effects. These
scripts run from a utility container.
The rolling_test.py
script contains tests to generate
traffic against the target services. These vary per service, but attempt
to apply usage to a system that will be restarted by
rolling_restart.py
in order to measure the effects. This
script runs from a utility container.
Usage
Start your test from a utility container.
./rolling_test.py keystone
runs the Keystone test../rolling_test.py list
will list tests and their descriptionsFrom the deployment node, run
rolling_restart.py
in the playbooks directory (necessary to find the inventory script). Specify the service you're targeting with the-s
parameter.rolling_restart.py -s keystone_container
You can specify a wait time in seconds between stopping and starting individual nodes.
rolling_restart.py -s keystone_container -w 60
Assumptions
These tools are currently coupled to OSA, and they assume paths to
files as specified by the multi-node-aio
scripts.
Container stopping and starting is done with an ansible command, and the physical host to target is derived from the current inventory.
rolling_restart.py
must currently be run from the
playbooks
directory. This will be fixed later.
You must source openrc
before running
rolling_test.py
.
Creating New Tests
Tests should subclass from the ServiceTest
class in the
same file and implement the following properties and methods:
run
- The actual test to run should be placed in this method. Timings-
will be gathered based on when this function starts and stops.
pre_test
- Any pre-test setup that needs to happen, like creating a-
file for Glance, Cinder, or Swift upload.
post_test
- Any post-test teardown that might be needed.service_name
- The primary service that is being tested.description
- Brief description of what the test does.
Finally, add the test to the available_tests
dictionary
with the invocation name as the key and the class as the value.
Why the name?
It sets 'em up and knocks em down.