0c3ddf20b1
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
89 lines
2.9 KiB
ReStructuredText
89 lines
2.9 KiB
ReStructuredText
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 descriptions
|
|
#. From 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.
|