summaryrefslogtreecommitdiff
path: root/doc/source/user/python-api.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/user/python-api.rst')
-rw-r--r--doc/source/user/python-api.rst104
1 files changed, 104 insertions, 0 deletions
diff --git a/doc/source/user/python-api.rst b/doc/source/user/python-api.rst
new file mode 100644
index 00000000..b01e07f1
--- /dev/null
+++ b/doc/source/user/python-api.rst
@@ -0,0 +1,104 @@
+==================================
+ The :mod:`novaclient` Python API
+==================================
+
+.. module:: novaclient
+ :synopsis: A client for the OpenStack Nova API.
+ :noindex:
+
+.. currentmodule:: novaclient
+
+Usage
+-----
+
+First create a client instance with your credentials::
+
+ >>> from novaclient import client
+ >>> nova = client.Client(VERSION, USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
+
+Here ``VERSION`` can be a string or ``novaclient.api_versions.APIVersion`` obj.
+If you prefer string value, you can use ``1.1`` (deprecated now), ``2`` or
+``2.X`` (where X is a microversion).
+
+Alternatively, you can create a client instance using the keystoneauth
+session API::
+
+ >>> from keystoneauth1 import loading
+ >>> from keystoneauth1 import session
+ >>> from novaclient import client
+ >>> loader = loading.get_plugin_loader('password')
+ >>> auth = loader.load_from_options(auth_url=AUTH_URL,
+ ... username=USERNAME,
+ ... password=PASSWORD,
+ ... project_id=PROJECT_ID)
+ >>> sess = session.Session(auth=auth)
+ >>> nova = client.Client(VERSION, session=sess)
+
+If you have PROJECT_NAME instead of a PROJECT_ID, use the project_name
+parameter. Similarly, if your cloud uses keystone v3 and you have a DOMAIN_NAME
+or DOMAIN_ID, provide it as `user_domain_(name|id)` and if you are using a
+PROJECT_NAME also provide the domain information as `project_domain_(name|id)`.
+
+novaclient adds 'python-novaclient' and its version to the user-agent string
+that keystoneauth produces. If you are creating an application using novaclient
+and want to register a name and version in the user-agent string, pass those
+to the Session::
+
+ >>> sess = session.Session(
+ ... auth=auth, app_name'nodepool', app_version'1.2.3')
+
+If you are making a library that consumes novaclient but is not an end-user
+application, you can append a (name, version) tuple to the session's
+`additional_user_agent` property::
+
+ >>> sess = session.Session(auth=auth)
+ >>> sess.additional_user_agent.append(('shade', '1.2.3'))
+
+For more information on this keystoneauth API, see
+:keystoneauth-doc:`Using Sessions <using-sessions.html>`.
+
+It is also possible to use an instance as a context manager in which case
+there will be a session kept alive for the duration of the with statement::
+
+ >>> from novaclient import client
+ >>> with client.Client(VERSION, USERNAME, PASSWORD,
+ ... PROJECT_ID, AUTH_URL) as nova:
+ ... nova.servers.list()
+ ... nova.flavors.list()
+ ...
+
+It is also possible to have a permanent (process-long) connection pool,
+by passing a connection_pool=True::
+
+ >>> from novaclient import client
+ >>> nova = client.Client(VERSION, USERNAME, PASSWORD, PROJECT_ID,
+ ... AUTH_URL, connection_pool=True)
+
+Then call methods on its managers::
+
+ >>> nova.servers.list()
+ [<Server: buildslave-ubuntu-9.10>]
+
+ >>> nova.flavors.list()
+ [<Flavor: 256 server>,
+ <Flavor: 512 server>,
+ <Flavor: 1GiB server>,
+ <Flavor: 2GiB server>,
+ <Flavor: 4GiB server>,
+ <Flavor: 8GiB server>,
+ <Flavor: 15.5GiB server>]
+
+ >>> fl = nova.flavors.find(ram=512)
+ >>> nova.servers.create("my-server", flavor=fl)
+ <Server: my-server>
+
+.. warning:: Direct initialization of ``novaclient.v2.client.Client`` object
+ can cause you to "shoot yourself in the foot". See launchpad bug-report
+ `1493576`_ for more details.
+
+.. _1493576: https://launchpad.net/bugs/1493576
+
+Reference
+---------
+
+See :doc:`the module reference </reference/index>`.