Updated Sphinx documentation
- Added examples using the API - Added API reference pages - Added docstrings to classes so they would be picked up by sphinx - Removed warning about CLI coming soon Change-Id: I6e187efe508c5ae310ec97efe4650495f958306d
This commit is contained in:
25
docs/api.rst
25
docs/api.rst
@@ -1,25 +0,0 @@
|
||||
The :mod:`keystoneclient` Python API
|
||||
====================================
|
||||
|
||||
.. module:: keystoneclient
|
||||
:synopsis: A client for the OpenStack Keystone API.
|
||||
|
||||
.. currentmodule:: keystoneclient.generic.client
|
||||
|
||||
.. autoclass:: Client
|
||||
|
||||
.. automethod:: discover
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.client
|
||||
|
||||
.. autoclass:: Client
|
||||
|
||||
.. automethod:: authenticate
|
||||
|
||||
|
||||
For more information, see the reference documentation:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
ref/index
|
@@ -2,18 +2,15 @@ Python bindings to the OpenStack Keystone API
|
||||
==================================================
|
||||
|
||||
This is a client for OpenStack Keystone API. There's :doc:`a Python API
|
||||
<api>` (the :mod:`keystoneclient` module), and a :doc:`command-line script
|
||||
<using-api>` (the :mod:`keystoneclient` module), and a :doc:`command-line script
|
||||
<shell>` (installed as :program:`keystone`).
|
||||
|
||||
You'll need an `OpenStack Keystone` account, which you can get by
|
||||
using `keystone-manage`.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
api
|
||||
using-api
|
||||
shell
|
||||
ref/index
|
||||
releases
|
||||
@@ -21,9 +18,13 @@ Contents:
|
||||
Contributing
|
||||
============
|
||||
|
||||
Development takes place `on GitHub`__; please file bugs/pull requests there.
|
||||
Code is hosted `on GitHub`_. Submit bugs to the Keystone project on
|
||||
`Launchpad`_. Submit code to the openstack/python-keystoneclient project using
|
||||
`Gerrit`_.
|
||||
|
||||
__ https://github.com/4P/python-keystoneclient
|
||||
.. _on GitHub: https://github.com/openstack/python-keystoneclient
|
||||
.. _Launchpad: https://launchpad.net/keystone
|
||||
.. _Gerrit: http://wiki.openstack.org/GerritWorkflow
|
||||
|
||||
Run tests with ``python setup.py test``.
|
||||
|
||||
|
8
docs/ref/client.rst
Normal file
8
docs/ref/client.rst
Normal file
@@ -0,0 +1,8 @@
|
||||
Client
|
||||
======
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.client
|
||||
|
||||
.. autoclass:: Client
|
||||
|
||||
.. automethod:: authenticate
|
11
docs/ref/endpoints.rst
Normal file
11
docs/ref/endpoints.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
==============================
|
||||
Endpoint Manager and Endpoints
|
||||
==============================
|
||||
|
||||
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.endpoints
|
||||
|
||||
.. automodule:: keystoneclient.v2_0.endpoints
|
||||
:members:
|
||||
|
12
docs/ref/generic-client.rst
Normal file
12
docs/ref/generic-client.rst
Normal file
@@ -0,0 +1,12 @@
|
||||
Generic client
|
||||
==============
|
||||
|
||||
Use the generic client to obtain access to a specific endpoint version.
|
||||
|
||||
|
||||
.. currentmodule:: keystoneclient.generic.client
|
||||
|
||||
.. autoclass:: Client
|
||||
|
||||
.. automethod:: discover
|
||||
|
@@ -6,4 +6,11 @@ The following API reference documents are available:
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
client
|
||||
generic-client
|
||||
tenants
|
||||
users
|
||||
roles
|
||||
services
|
||||
endpoints
|
||||
exceptions
|
||||
|
9
docs/ref/roles.rst
Normal file
9
docs/ref/roles.rst
Normal file
@@ -0,0 +1,9 @@
|
||||
======================
|
||||
Role Manager and Roles
|
||||
======================
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.roles
|
||||
|
||||
.. automodule:: keystoneclient.v2_0.roles
|
||||
:members:
|
||||
|
11
docs/ref/services.rst
Normal file
11
docs/ref/services.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
============================
|
||||
Service Manager and Services
|
||||
============================
|
||||
|
||||
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.services
|
||||
|
||||
.. automodule:: keystoneclient.v2_0.services
|
||||
:members:
|
||||
|
11
docs/ref/tenants.rst
Normal file
11
docs/ref/tenants.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
==========================
|
||||
Tenant Manager and Tenants
|
||||
==========================
|
||||
|
||||
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.tenants
|
||||
|
||||
.. automodule:: keystoneclient.v2_0.tenants
|
||||
:members:
|
||||
|
9
docs/ref/users.rst
Normal file
9
docs/ref/users.rst
Normal file
@@ -0,0 +1,9 @@
|
||||
======================
|
||||
User Manager and Users
|
||||
======================
|
||||
|
||||
.. currentmodule:: keystoneclient.v2_0.users
|
||||
|
||||
.. automodule:: keystoneclient.v2_0.users
|
||||
:members:
|
||||
|
@@ -4,10 +4,6 @@ The :program:`keystone` shell utility
|
||||
.. program:: keystone
|
||||
.. highlight:: bash
|
||||
|
||||
.. warning:: COMING SOON
|
||||
|
||||
The command line interface is not yet completed. This document serves
|
||||
as a reference for the implementation.
|
||||
|
||||
The :program:`keystone` shell utility interacts with OpenStack Keystone API
|
||||
from the command line. It supports the entirety of the OpenStack Keystone API.
|
||||
|
109
docs/using-api.rst
Normal file
109
docs/using-api.rst
Normal file
@@ -0,0 +1,109 @@
|
||||
==============
|
||||
The client API
|
||||
==============
|
||||
|
||||
Introduction
|
||||
============
|
||||
The main concepts in the Keystone API are:
|
||||
|
||||
* tenants
|
||||
* users
|
||||
* roles
|
||||
* services
|
||||
* endpoints
|
||||
|
||||
The Keystone API lets you query and make changes through managers. For example,
|
||||
to maipulate tenants, you interact with a
|
||||
``keystoneclient.v2_0.tenants.TenantManger`` object.
|
||||
|
||||
You obtain access to managers through via atributes of the ``keystoneclient.v2_0.client.Client`` object. For example, the ``tenants`` attribute of the ``Client``
|
||||
class is a tenant manager::
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> keystone = client.Client(...)
|
||||
>>> keystone.tenants.list() # List tenants
|
||||
|
||||
You create a valid ``keystoneclient.v2_0.client.Client`` object by passing
|
||||
authentication data to the constructor. Authentication and examples of common
|
||||
tasks are provided below.
|
||||
|
||||
Authenticating
|
||||
==============
|
||||
|
||||
There are two ways to authenticate against Keystone:
|
||||
* against the admin endpoint with the admin token
|
||||
* against the public endpoint with a username and password
|
||||
|
||||
If you are an administrator, you can authenticate by connecting to the admin
|
||||
endpoint and using the admin token (sometimes referred to as the service
|
||||
token). The token is specified as the ``admin_token`` configuration option in your
|
||||
keystone.conf config file, which is typically in /etc/keystone::
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> token = '012345SECRET99TOKEN012345'
|
||||
>>> endpoint = 'http://192.168.206.130:35357/v2.0'
|
||||
>>> keystone = client.Client(token=token, endpoint=endpoint)
|
||||
|
||||
If you have a username and password, authentication is done against the
|
||||
public endpoint. You must also specify a tenant that is associated with the
|
||||
user::
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> username='adminUser'
|
||||
>>> password='secreetword'
|
||||
>>> tenant_name='openstackDemo'
|
||||
>>> auth_url='http://192.168.206.130:5000/v2.0'
|
||||
>>> keystone = client.Client(username=username, password=password,
|
||||
... tenant_name, auth_url=auth_url)
|
||||
|
||||
Creating tenants
|
||||
================
|
||||
|
||||
This example will create a tenant named *openStackDemo*::
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> keystone = client.Client(...)
|
||||
>>> keystone.tenants.create(tenant_name="openstackDemo",
|
||||
... description="Default Tenant", enabled=True)
|
||||
<Tenant {u'id': u'9b7962da6eb04745b477ae920ad55939', u'enabled': True, u'description': u'Default Tenant', u'name': u'openstackDemo'}>
|
||||
|
||||
Creating users
|
||||
==============
|
||||
|
||||
This example will create a user named *adminUser* with a password *secretword*
|
||||
in the opoenstackDemo tenant. We first need to retrieve the tenant::
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> keystone = client.Client(...)
|
||||
>>> tenants = keystone.tenants.list()
|
||||
>>> my_tenant = [x for x in tenants if x.name=='openstackDemo'][0]
|
||||
>>> my_user = keystone.users.create(name="adminUser", password="secretword",
|
||||
... tenant_id=my_tenant.id)
|
||||
|
||||
Creating roles and adding users
|
||||
===============================
|
||||
|
||||
This example will create an admin role and add the *my_user* user to that
|
||||
role, but only for the *my_tenant* tenant:
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> keystone = client.Client(...)
|
||||
>>> role = keystone.roles.create('admin')
|
||||
>>> my_tenant = ...
|
||||
>>> my_user = ...
|
||||
>>> keystone.roles.add_user_role(my_user, role, my_tenant)
|
||||
|
||||
Creating services and endpoints
|
||||
===============================
|
||||
|
||||
This example will create the service and corresponding endpoint for the
|
||||
Compute service::
|
||||
|
||||
>>> from keystoneclient.v2_0 import client
|
||||
>>> keystone = client.Client(...)
|
||||
>>> service = keystone.services.create(name="nova", service_type="compute",
|
||||
... description="Nova Compute Service")
|
||||
>>> keystone.endpoints.create(region="RegionOne", service_id=service.id,
|
||||
... publicurl="http://192.168.206.130:8774/v2/%(tenant_id)s",
|
||||
... adminurl="http://192.168.206.130:8774/v2/%(tenant_id)s",
|
||||
... internalurl="http://192.168.206.130:8774/v2/%(tenant_id)s")
|
@@ -17,17 +17,22 @@ from keystoneclient import base
|
||||
|
||||
|
||||
class Endpoint(base.Resource):
|
||||
"""Represents a Keystone endpoint"""
|
||||
def __repr__(self):
|
||||
return "<Endpoint %s>" % self._info
|
||||
|
||||
|
||||
class EndpointManager(base.ManagerWithFind):
|
||||
"""Manager class for manipulating Keystone endpoints"""
|
||||
|
||||
resource_class = Endpoint
|
||||
|
||||
def list(self):
|
||||
"""List all available endpoints"""
|
||||
return self._list('/endpoints', 'endpoints')
|
||||
|
||||
def create(self, region, service_id, publicurl, adminurl, internalurl):
|
||||
"""Create a new endpoint"""
|
||||
body = {'endpoint': {'region': region,
|
||||
'service_id': service_id,
|
||||
'publicurl': publicurl,
|
||||
@@ -36,4 +41,5 @@ class EndpointManager(base.ManagerWithFind):
|
||||
return self._create('/endpoints', body, 'endpoint')
|
||||
|
||||
def delete(self, id):
|
||||
"""Delete an endpoint"""
|
||||
return self._delete('/endpoints/%s' % id)
|
||||
|
@@ -18,6 +18,7 @@ from keystoneclient import base
|
||||
|
||||
|
||||
class Role(base.Resource):
|
||||
"""Represents a Keystone role"""
|
||||
def __repr__(self):
|
||||
return "<Role %s>" % self._info
|
||||
|
||||
@@ -26,6 +27,7 @@ class Role(base.Resource):
|
||||
|
||||
|
||||
class RoleManager(base.ManagerWithFind):
|
||||
"""Manager class for manipulating Keystone roles"""
|
||||
resource_class = Role
|
||||
|
||||
def get(self, role):
|
||||
|
@@ -18,24 +18,30 @@ from keystoneclient import base
|
||||
|
||||
|
||||
class Service(base.Resource):
|
||||
"""Represents a Keystone service"""
|
||||
def __repr__(self):
|
||||
return "<Service %s>" % self._info
|
||||
|
||||
|
||||
class ServiceManager(base.ManagerWithFind):
|
||||
"""Manager class for manipulating Keystone services"""
|
||||
resource_class = Service
|
||||
|
||||
def list(self):
|
||||
"""List available services"""
|
||||
return self._list("/OS-KSADM/services", "OS-KSADM:services")
|
||||
|
||||
def get(self, id):
|
||||
"""Retrieve a service by id"""
|
||||
return self._get("/OS-KSADM/services/%s" % id, "OS-KSADM:service")
|
||||
|
||||
def create(self, name, service_type, description):
|
||||
"""Create a new service"""
|
||||
body = {"OS-KSADM:service": {'name': name,
|
||||
'type': service_type,
|
||||
'description': description}}
|
||||
return self._create("/OS-KSADM/services", body, "OS-KSADM:service")
|
||||
|
||||
def delete(self, id):
|
||||
"""Delete a service"""
|
||||
return self._delete("/OS-KSADM/services/%s" % id)
|
||||
|
@@ -20,6 +20,15 @@ from keystoneclient import base
|
||||
|
||||
|
||||
class Tenant(base.Resource):
|
||||
"""Represents a Keystone tenant
|
||||
|
||||
Attributes:
|
||||
* id: a uuid that identifies the tenant
|
||||
* name: tenant name
|
||||
* description: tenant description
|
||||
* enabled: boolean to indicate if tenant is enabled
|
||||
|
||||
"""
|
||||
def __repr__(self):
|
||||
return "<Tenant %s>" % self._info
|
||||
|
||||
@@ -56,6 +65,7 @@ class Tenant(base.Resource):
|
||||
|
||||
|
||||
class TenantManager(base.ManagerWithFind):
|
||||
"""Manager class for manipulating Keystone tenants"""
|
||||
resource_class = Tenant
|
||||
|
||||
def get(self, tenant_id):
|
||||
@@ -64,6 +74,7 @@ class TenantManager(base.ManagerWithFind):
|
||||
def create(self, tenant_name, description=None, enabled=True):
|
||||
"""
|
||||
Create a new tenant.
|
||||
|
||||
"""
|
||||
params = {"tenant": {"name": tenant_name,
|
||||
"description": description,
|
||||
@@ -74,7 +85,13 @@ class TenantManager(base.ManagerWithFind):
|
||||
def list(self, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of tenants.
|
||||
|
||||
:param integer limit: maximum number to return. (optional)
|
||||
:param string marker: use when specifying a limit and making
|
||||
multiple calls for querying. (optional)
|
||||
|
||||
:rtype: list of :class:`Tenant`
|
||||
|
||||
"""
|
||||
|
||||
params = {}
|
||||
|
@@ -20,6 +20,7 @@ from keystoneclient import base
|
||||
|
||||
|
||||
class User(base.Resource):
|
||||
"""Represents a Keystone user"""
|
||||
def __repr__(self):
|
||||
return "<User %s>" % self._info
|
||||
|
||||
@@ -31,6 +32,7 @@ class User(base.Resource):
|
||||
|
||||
|
||||
class UserManager(base.ManagerWithFind):
|
||||
"""Manager class for manipulating Keystone users"""
|
||||
resource_class = User
|
||||
|
||||
def get(self, user):
|
||||
|
Reference in New Issue
Block a user