
Prior to this patch, novaclient was handling sessions in an inconsistent manner. Every time we created a client instance, it would use a global connection pool, which made it difficult to use in a process that is meant to be forked. Obviously sessions like the ones provided by the requests library that will automatically cause connections to be kept alive should not be implicit. This patch moves the novaclient back to the age of a single session-less request call by default, but also adds two more resource-reuse friendly options that a user needs to be explicit about. The first one is that both v1_1 and v3 clients can now be used as context managers,. where the session will be kept open (and thus the connection kept-alive) for the duration of the with block. This is far more ideal for a web worker use-case as the session can be made request-long. The second one is the per-instance session. This is very similar to what we had up until now, except it is not a global object so forking is possible as long as each child instantiates it's own client. The session once created will be kept open for the duration of the client object lifetime. Please note: client instances are not thread safe. As can be seen from above forking example - if you wish to use threading/multiprocessing, you *must not* share client instances. DocImpact Related-bug: #1247056 Closes-Bug: #1297796 Co-authored-by: Nikola Dipanov <ndipanov@redhat.com> Change-Id: Id59e48f61bb3f3c6223302355c849e1e99673410
Python bindings to the OpenStack Nova API
This is a client for the OpenStack Nova API. There's a Python API
(the novaclient
module), and a command-line script
(nova
). Each implements 100% of the OpenStack Nova API.
See the OpenStack CLI
guide for information on how to use the nova
command-line tool. You may also want to look at the OpenStack API
documentation.
The project is hosted on Launchpad, where bugs can be filed. The code is hosted on Github. Patches must be submitted using Gerrit, not Github pull requests.
python-novaclient is licensed under the Apache License like the rest of OpenStack.
Contents:
Command-line API
Installing this package gets you a shell command, nova
,
that you can use to interact with any OpenStack cloud.
You'll need to provide your OpenStack username and password. You can
do this with the --os-username
, --os-password
and --os-tenant-name
params, but it's easier to just set
them as environment variables:
export OS_USERNAME=openstack
export OS_PASSWORD=yadayada
export OS_TENANT_NAME=myproject
You will also need to define the authentication url with
--os-auth-url
and the version of the API with
--os-compute-api-version
. Or set them as an environment
variables as well:
export OS_AUTH_URL=http://example.com:8774/v1.1/
export OS_COMPUTE_API_VERSION=1.1
If you are using Keystone, you need to set the OS_AUTH_URL to the keystone endpoint:
export OS_AUTH_URL=http://example.com:5000/v2.0/
Since Keystone can return multiple regions in the Service Catalog,
you can specify the one you want with --os-region-name
(or
export OS_REGION_NAME
). It defaults to the first in the
list returned.
You'll find complete documentation on the shell by running
nova help
Python API
There's also a complete Python API, but it has not yet been documented.
Quick-start using keystone:
# use v2.0 auth with http://example.com:5000/v2.0/")
>>> from novaclient.v1_1 import client
>>> nt = client.Client(USER, PASS, TENANT, AUTH_URL, service_type="compute")
>>> nt.flavors.list()
[...]
>>> nt.servers.list()
[...]
>>> nt.keypairs.list()
[...]