There's some remainings of Python 2 in a few .py that this patch
intends to fix. This patch has been in Debian for the last 2
years, it's probably about time to get this in upstream Cinder too.
This patch adds a new static method to drivers to expose their
configuration options. This also adds the same call to backup drivers
as well as the zone manager drivers.
Updated the generate_driver_list to expose the options as well.
This patch also orders the driver list alphabetically to make it easier
and consistent to find drivers. The driver list is now broken down
into supported and unsupported drivers as well.
The driver list generation takes driver docstrings and attempts
to parse that into rst formatted output for publication. With the
way this content is formatted within the docstring, this would
cause some slightly off formatting in the html output.
This attempts to better extract that information to make the
output cleaner and more readable.
In the project, some of the terminology, like URL, URLs, API, APIs, OpenStack,
UUID, Cinder are neglectfully written as url, api, openstack, uuid, cinder.
This patch is to keep consistent of naming convention.
There's been an intermittent issue where getting a list of all
drivers would fail to get all defined classes. With recent local
tests, once it got 103 drivers, but several times it got 69
This appears to be from exceptions thrown while loading the
decorated classes with various cinder.objects classes not being
defined. To get around this, this adds an explicit load of all
cinder.objects before attempting to get the driver classes.
For lack of a better way, for drivers that have CI run by Jenkins we
denote this using the name 'Cinder_Jenkins'. CI links were added to
the generated driver list, but for these drivers this results in a
link to an invalid wiki page. For these drivers we should just skip
adding the CI info link.
Appending "unsupported" to the driver name in the driver listing
for unsupported drivers. The instance variable "_supported" in
BaseVD is changed to class variable "SUPPORTED" so that the supported
status of drivers can be read after loading the driver modules.
This patch adds a CI_WIKI_NAME to each driver object. The value is the exact
name of the ThirdPartySystems wiki page. This allows us to create an
automated tool to associated jobs to drivers and track their CI reporting
This patch also updates the generate_driver_list.py script to output the
driver list as a python list of dicts that can be directly consumed.
When you run the generate_driver_list.py file from inside the
tools dir, it pukes out an AttributeError for NoneType object
has no attribute 'close'. This patch makes sure that exiting
doesn't cause a puke.
We have tox -e gendriverlist that outputs an RST-ish report of all drivers
in the tree. This output can be used in the docs build to automatically
publish the list of drivers to make it easier to find officially supported
This effectively removes the existing drivers.html that was generated prior
that did not actually contain any useful information.
tools/generate_driver_list.py assumes that the current directory is
the Cinder root directory. If the script is run from a different
directory, it doesn't generate the driver info. This patch changes
the current directory to the root directory before calling the
utility functions to generate the driver list.
This is the start of an effort to both validate that drivers fully
implement the expected minimum requirements as well as to create a clear
place for driver developers to learn what needs to be implemented and get
documentation explaining what is expected for each method.
This also enables us to create tooling for documenting the available
drivers and their capabilities, to some degree. A follow up patch will
show some of what I'm thinking there, but it will make it possible to write
scripts for different needs.
This is somewhat a cleanup attempt to the ABC work that was started a
while back. This does not aim to replace that effort, but give a
mechanism for some of the things expected out of that effort that ended
up not being possible with how it evolved.
In most cases we do not really care if a driver is inherited from a
certain base class, just that it conforms to the given interface.
The interface/inheritance work really centers around two separate
* Ensuring drivers conform to an expected interface
* Allowing code reuse and common implementation
This is really for the first item. Additional work is needed to complete
the ABC work we've done, but that really focuses on the second item, and
is out of scope for the intent of this patch.
It is useful to have a maintained (in source control) list
of drivers that exist in Cinder. It could be used in docs
and unit tests to check method impl on backend drivers.
This change add tool for generate list of drivers based on
existing BaseVD class in class hierarchy of volume drivers.
Implements: blueprint drivers-list-generator