Underpinning all of the OpenStack projects including Nova, Cinder, Keystone, Glance, Horizon, Heat, Trove, Murano and others is a set of core common libraries that provide a consistent, highly tested and compatible feature set. The Oslo project is a collection of over 30 libraries that are designed to reduce the technical debt of code duplication across projects and provide for a greater quality code path due to the frequency of use in OpenStack projects.
These libraries provide a variety of different features from the more commonly used functionality found in projects including configuration, logging, caching, messaging and database management to more specific features like deprecation management, handling plugins as well as frameworks for command line programs and state machines. The Oslo Python libraries are designed to be Python 2.7 and Python 3.4 compatible, leading the way in migration towards Python 3.
The first stable Oslo library oslo.config was included in the Grizzly release. Now over 30 libraries comprise the Oslo project. These libraries fall into a number of broad categories.
1. Stable OpenStack specific libraries
These libraries, using the olso. prefix are generally well described the library name.
- oslo.cache
- oslo.concurrency
- oslo.context
- oslo.config
- oslo.db
- oslo.i18n
- oslo.log
- oslo.messaging
- oslo.middleware
- oslo.policy
- oslo.privsep
- oslo.reports
- oslo.serialization
- oslo.service
- oslo.utils
- oslo.versionedobjects
-
oslo.vmware
2. Python libraries that can easily operate with other projects
In addition to the oslo namespace libraries, Oslo has a number of generically named libraries that are not OpenStack specific. The goal is that these libraries can be utilized outside of OpenStack by any Python project. These include:
- automaton – a framework for building state machines.
- cliff – a framework for building command line programs.
- debtcollector – a collection of python patterns that help you collect your technical debt in a non-destructive manner (following deprecation patterns and strategies and so-on).
- futurist – a collection of async functionality and additions from the future.
- osprofiler – an OpenStack cross-project profiling library.
- hacking – a library that provides a set of tools for enforcing coding style guidelines.
- pbr – (or Python Build Reasonableness) is a add-on library that helps provide (and enforce) a set of sensible default setuptools behaviours.
- pyCADF – a python implementation of the DMTF Cloud Audit (CADF) data model.
- stevedore – a library for managing plugins for Python applications.
- taskflow – a library that helps create applications that handle state/failures… in a reasonable manner.
-
tooz – a library that aims at centralizing the most common distributed primitives like group membership protocol, lock service and leader election
3. Convenience libraries
There are also several libraries that are used during the creation of, or support of OpenStack libraries.
The first was oslo-incubator where as the name suggests, initial libraries were incubated. As this code matured it was refactored into standard libraries. Projects have either graduated, been incorporated elsewhere or been deprecated. While the Oslo Incubator has been removed of libraries in Mitaka, one of the goals of the Newton cycle is to see the adoption of Oslo libraries in all projects. We will be providing a series of blogs to detail the walkthrough and reviews of existing projects for reference.
Other libraries include:
- oslosphinx is a sphinx add-on library that provides theme and extension support for generating documentation with Sphinx. The Developer Documentation
, Release Notes
, a number of the OpenStack manuals including the Configuration Reference
and now the Nova API Reference
rely on this library.
- oslotest is a helper library that provides base classes and fixtures for creating unit and functional tests.
-
oslo-cookiecutter is a project that creates a skeleton Oslo library from a set of templates.
4. Proposed or deprecated libraries
Some libraries fall outside of these categories, such as oslo.rootwrap. This was a mature library for handling fine filtering of shell commands to run as root. This is now deprecated in favor of oslo.privsep which is a mechanism for running selected python code with elevated privileges.
pylockfile is a legacy (and adopted) inter-process lock management library that was never used within OpenStack.
The oslo.version is an example of a proposed library at present to help in using python metadata to determine versioning.
The Oslo team is also evaluating what other common code may be suitable for an Oslo library.
The meaning behind the Oslo Name
Each OpenStack project has some reason behind the name. Oslo is in reference to the Oslo Peace Accords and “bringing peace” to the OpenStack project.
Oslo is also the capital of Norway, and in Norway you can find Moose. The moose is our project mascot.
-
- oslotest is a helper library that provides base classes and fixtures for creating unit and functional tests.
-
- taskflow – a library that helps create applications that handle state/failures… in a reasonable manner.
- stevedore – a library for managing plugins for Python applications.
- pyCADF – a python implementation of the DMTF Cloud Audit (CADF) data model.
- pbr – (or Python Build Reasonableness) is a add-on library that helps provide (and enforce) a set of sensible default setuptools behaviours.
- hacking – a library that provides a set of tools for enforcing coding style guidelines.
- osprofiler – an OpenStack cross-project profiling library.
- futurist – a collection of async functionality and additions from the future.
- debtcollector – a collection of python patterns that help you collect your technical debt in a non-destructive manner (following deprecation patterns and strategies and so-on).
- cliff – a framework for building command line programs.
-
- oslo.versionedobjects
- oslo.utils
- oslo.service
- oslo.serialization
- oslo.reports
- oslo.privsep
- oslo.policy
- oslo.middleware
- oslo.messaging
- oslo.log
- oslo.i18n
- oslo.db
- oslo.config
- oslo.context
- oslo.concurrency