The OpenStack SDK is an project to improve the overall experience of users of OpenStack clouds, from application developers to operators, by providing one place to work with OpenStack's many services. As a a software development kit, the project aims to offer a complete set of libraries to work with OpenStack services, as well as complete documentation and examples for working with the ecosystem.
Currently, OpenStack's user stories for both command-line and application developer consumers of OpenStack based clouds is confusing, fractured, and inconsistent. If a consumer who is not "in the know" - read: not an operator or developer involved in creation of OpenStack - attempts to consume more than one service, their complexity increases almost linearly. With each service currently providing its own client, which includes both the library and a command line tool, the number of dependencies along with the varying interfaces used by them offers a less than welcoming experience.
The python-openstacksdk project is an attempt at providing one place for consumers of OpenStack clouds to look for their interactions. It aims to provide a clean and consistent interface to write Python code that works with any service that your OpenStack cloud provides. Given that it will provide one entry point for working with OpenStack, it then becomes easier for tools to build on top of, such as command line tools, including OpenStackClient.
What's in an SDK?
The root of a complete SDK is a consumer focused set of libraries for interacting with the system. It additionally includes:
- Documentation aimed at users consuming OpenStack clouds, whether internally at their company or commercially available
- Documentation aimed at OpenStack developers, enabling them to extend libraries or contribute their own libraries, including extensions
- Examples of usage, including fully functional applications that demo the various services the SDK works with
There are two key audiences for this project:
- Application Developers: Application developers are consumers of OpenStack clouds. While they can be operators or contributors to the services themselves, the primary application developer persona is anyone wanting to develop an application to leverage one or more services provided by OpenStack. These developers require a consistent set of usable APIs with minimal dependencies to manage.
- Command line Users: These are similar to the Application Developers, as their requirements include a consistent set of interactions but they're carried out through a single executable that communicates with their OpenStack cloud. As with Application Developers, minimal dependencies to complete their tasks is of high importance.
Important to both audiences is that terminology is jargon free and doesn't use nicknames or require knowledge of project history or internals. For example, working with the compute service should be done through library or command line interactions utilizing the compute name, not Nova.
- Verified mocks/stubs for testing at all layers.
- python-requests based REST client (built as "requests first").
- Minimize external dependencies. This includes inter-openstack-project dependencies.
- Do not dictate a concurrency paradigm. Ensure that the design is sound, but allow users to use gevent/threads/asyncio/etc.
- Ensure thread safety. Avoid the use of and modification of global objects.
- Documentation must be assumption free. The target audience are not intimately familiar with the internals or designs of the services exposed by the SDK.
- Jargon free. APIs should go by program names ("compute", "storage", "messaging"), rather than the project names ("nova", "swift", "marconi") to ensure the library is accessible to people without significant OpenStack familiarity.
- Vendors / Hosts of OpenStack Clouds should be able to easily layer in or plug into the SDK in order to make necessary changes or customizations, and to easily package and ship without requiring a complete fork of the codebase.
- No "Least Common Denominator". The client (Layer 4) code for keystoneclient might be in openstack.api.auth, but it would be able to be as advanced as it would like from an api standpoint, and whatever subset of functionality could be exposed in higher level abstractions (such as a CLI). Bonus is that horizon could potentially use this work.
The developers use IRC in #openstack-sdks on freenode for development discussion.
- The weekly Python-OpenStackSDK IRC meeting is held at 1900 UTC in #openstack-meeting-3
- 2014 python-openstacksdk Meeting Archive
- 2015 python-openstacksdk Meeting Archive
Frequently Asked Questions
Please see our FAQ for answers to common questions about the Python OpenStack SDK.