RETIRED, further work has moved to Debian project infrastructure
Go to file
Brian Curtin d5149c9df0 Get endpoints directly from services
While investigating an issue with us improperly determining the Identity
endpoints between v2 and v3, it was mentioned several times that we
should really be getting endpoints directly from the services, not from
the service catalog. Part of this was a forward looking mention, as
eventually services will be unversioned in the catalog. It's also a
current issue as Identity themselves do not provide a v3 endpoint in the
service catalog--only v2.

This change introduces an implementation of Session.get_endpoint that
uses the service catalog to get started, taking only the root of a
service's endpoint, and then making a GET call to that root to find the
versions and endpoints it is configured for. Once we've received the
supported versions, we use somewhat of a fuzzy match to determine the
exact endpoint.

When a profile specifies v2 for a service, we'll look for the latest v2
offered, which could be v2.2 while it also offers v2.0 and v2.1. When a
user asks specifically for v2.1, they will get exactly that. The one
place we don't fuzzily match is across major versions, so if a user asks
for a v3 but the service is only providing v2 at the moment, an
exception will be raised.

This adds an additional field to the
ServiceFilter, requires_project_id, because there are some services that
require a project id in their URI and some don't. We were apparently
getting that straight from the service catalog before, but now we need
services to tell us when they need it.

Now for the special cases:
* object_store doesn't help us with any of this. It still comes straight
  out of the service catalog.
* some services only provide version fragments, not full URIs, so we need
  to reconstruct them to prepend the root.
* identity nests the versions within another dictionary of "values"

For any given combination of service_type and interface, a request to
determine the versions is only made once. The endpoints are cached in a
dictionary that is per-Connection instance.

Change-Id: I0958ce5d7477da106890dc7770ac013d5b9098f6
2016-08-10 08:02:21 -04:00
doc Merge "Add neutron rbac support" 2016-06-29 14:40:39 +00:00
examples Merge "Cluster user guide - part 2" 2016-06-06 09:19:29 +00:00
openstack Get endpoints directly from services 2016-08-10 08:02:21 -04:00
.coveragerc Fix coverage configuration and execution 2016-03-14 07:34:53 +00:00
.gitignore add .eggs to .gitignore 2015-07-18 09:55:48 -06:00
.gitreview Update .gitreview for new namespace 2015-10-17 22:37:27 +00:00
.mailmap setting up the initial layout; move the api proposals to api_strawman 2014-01-24 22:58:25 -06:00
.testr.conf Basic object store container functional tests 2015-05-13 13:52:04 +00:00
babel.cfg setting up the initial layout; move the api proposals to api_strawman 2014-01-24 22:58:25 -06:00
CONTRIBUTING.rst Workflow documentation is now in infra-manual 2014-12-05 03:30:46 +00:00
create_yaml.sh Create clouds.yaml for functional tests 2015-05-30 12:30:36 -06:00
docs-requirements.txt Add requirements.txt file for readthedocs 2015-05-21 08:16:44 -07:00
HACKING.rst Minor changes to top level docs 2015-05-22 17:19:16 -07:00
LICENSE setting up the initial layout; move the api proposals to api_strawman 2014-01-24 22:58:25 -06:00
MANIFEST.in setting up the initial layout; move the api proposals to api_strawman 2014-01-24 22:58:25 -06:00
post_test_hook.sh Fix post test hook script 2015-12-09 07:24:37 -07:00
README.rst Remove requests from requirements 2015-12-16 14:51:40 -06:00
requirements.txt Updated from global requirements 2016-08-05 20:28:10 +00:00
setup.cfg remove python 2.6 trove classifier 2015-12-23 01:31:15 +00:00
setup.py Updated from global requirements 2015-09-21 14:44:17 +00:00
test-requirements.txt Updated from global requirements 2016-07-21 13:44:02 +00:00
tox.ini Remove openstack/common from tox.ini 2016-04-25 06:18:52 -05:00

OpenStack Python SDK

The python-openstacksdk is a collection of libraries for building applications to work with OpenStack clouds. The project aims to provide a consistent and complete set of interactions with OpenStack's many services, along with complete documentation, examples, and tools.

This SDK is under active development, and in the interests of providing a high-quality interface, the APIs provided in this release may differ from those provided in future release.

Usage

The following example simply connects to an OpenStack cloud and lists the containers in the Object Store service.:

from openstack import connection
conn = connection.Connection(auth_url="http://openstack:5000/v3",
                             project_name="big_project",
                             username="SDK_user",
                             password="Super5ecretPassw0rd")
for container in conn.object_store.containers():
   print(container.name)

Documentation

Documentation is available at http://developer.openstack.org/sdks/python/openstacksdk/

License

Apache 2.0