Jump to: navigation, search

SDK-Development/PythonOpenStackSDK

Summary

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.

Detailed Description:

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 once 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 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?:

An SDK is more than just a set of APIs. A complete SDK provides a consumer focused set of libraries for interacting with the system, and 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

Audience

There are two key audiences for this project:

  • Application Developers: Application developers are not OpenStack Operators or Developers. These are developers looking to consume a feature-rich OpenStack Cloud with its many services. These Developers require a consistent, single namespace API ("Application Programming Interface") that allows them to build and deploy their application with minimal dependencies.
  • Command line consumers: These are similar to the Application Developers, as their requirements are to use a consistent, single binary/script to interact with OpenStack Clouds. The commands they use should follow a consistent command line format, terminology and not require a large number of child dependencies to be installed onto the system.

Resources

Source code https://github.com/stackforge/python-openstacksdk
Bug tracker https://launchpad.net/python-openstacksdk
Blueprints https://launchpad.net/python-openstacksdk
Developer doc
Etherpad Notes https://etherpad.openstack.org/p/unified-sdk-notes

Project Outline

Requirements

  • 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.

Non-Requirements ("Things Not To Do")

  • Take code and ideas from the other python-* clients, but do not wrap them as openstackclient (currently) does.
  • Do not mix the CLI implementation with the SDK. The SDK can have helpers for auth caching and retries, etc, but should not get involved in the CLI implementation aspect.

IRC

The developers use IRC in #openstack-sdks on freenode for development discussion.

Meetings

Frequently Asked Questions

Please see our FAQ for answers to common questions about the Python OpenStack SDK.