The novaclient Python API

用法

首先使用您的凭据创建一个客户端实例

>>> from novaclient import client
>>> nova = client.Client(VERSION, USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)

这里 VERSION 可以是一个字符串或 novaclient.api_versions.APIVersion 对象。如果您更喜欢字符串值,可以使用 1.1 (现在已弃用), 22.X (其中 X 是一个微版本)。

或者,您可以使用 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)

如果您有 PROJECT_NAME 而不是 PROJECT_ID,请使用 project_name 参数。 同样,如果您的云使用 keystone v3 并且您有 DOMAIN_NAME 或 DOMAIN_ID,请将其作为 user_domain_(name|id) 提供,如果您正在使用 PROJECT_NAME,还应提供域信息作为 project_domain_(name|id)

novaclient 将 ‘python-novaclient’ 及其版本添加到 keystoneauth 生成的用户代理字符串中。如果您正在使用 novaclient 创建一个应用程序,并希望在用户代理字符串中注册一个名称和版本,请将其传递给 Session

>>> sess = session.Session(
...     auth=auth, app_name'nodepool', app_version'1.2.3')

如果您正在创建一个使用 novaclient 但不是最终用户应用程序的库,您可以将 (名称, 版本) 元组附加到 session 的 additional_user_agent 属性

>>> sess = session.Session(auth=auth)
>>> sess.additional_user_agent.append(('shade', '1.2.3'))

有关此 keystoneauth API 的更多信息,请参阅 使用 Sessions

也可以使用一个实例作为上下文管理器,在这种情况下,会话将在 with 语句的持续时间内保持活动状态

>>> from novaclient import client
>>> with client.Client(VERSION, USERNAME, PASSWORD,
...                    PROJECT_ID, AUTH_URL) as nova:
...     nova.servers.list()
...     nova.flavors.list()
...

也可以通过传递 connection_pool=True 来拥有一个永久的(进程长)连接池

>>> from novaclient import client
>>> nova = client.Client(VERSION, USERNAME, PASSWORD, PROJECT_ID,
...                      AUTH_URL, connection_pool=True)

然后在其管理器上调用方法

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

警告

直接初始化 novaclient.v2.client.Client 对象可能会导致您“打自己的脚”。有关更多详细信息,请参阅 launchpad bug-report 1493576

参考

请参阅 模块参考