openstack-ansible-ops/bowling_ball/README.rst
Nolan Brubaker 0c3ddf20b1 Implement CLI test picker
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
2017-05-19 11:47:49 +00:00

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.