使用客户端以编程方式

身份验证

使用客户端的每个功能都需要进行身份验证。

要创建客户端,请创建 Client 类的实例。在构造函数调用中,必须指定 auth url、用户名、密码和项目名称。

from troveclient.v1 import client
tc = client.Client(username="testuser",
        password="PASSWORD",
        project_id="test_project",
        region_name="EAST",
        auth_url="http://api-server:5000/v2.0")

默认身份验证策略假定符合 Keystone 规范的身份验证系统。

一旦您拥有经过身份验证的客户端对象,您就可以使用它进行调用,例如

flavors = tc.flavors.list()
datastores = tc.datastores.list()

实例

以下示例创建一个 512 MB 的实例,并附带 1 GB 的卷

from troveclient.v1 import client
tc = client.Client(username="testuser",
        password="PASSWORD",
        project_id="test_project",
        region_name="EAST",
        auth_url="http://api-server:5000/v2.0")

flavor_id = '1'
volume = {'size':1}
databases = [{"name": "my_db",
              "character_set": "latin2",           # These two fields
              "collate": "latin2_general_ci"}]     # are optional.
datastore = 'mysql'
datastore_version = '5.6-104'
users = [{"name": "jsmith", "password": "12345",
          "databases": [{"name": "my_db"}]
         }]
instance = client.instances.create("My Instance", flavor_id, volume,
                                   databases, users, datastore=datastore,
                                   datastore_version=datastore_version)

要检索实例,请使用“instances”的“get”方法

updated_instance = client.instances.get(instance.id)
print(updated_instance.name)
print("   Status=%s Flavor=%s" %
          (updated_instance.status, updated_instance.flavor['id']))
My Instance
   Status=BUILD Flavor=1

您可以调用实例对象本身的“delete”,或者使用“instances”上的 delete 方法来删除实例。

# Wait for the instance to be ready before we delete it.
import time
from troveclient.exceptions import NotFound

while instance.status == "BUILD":
    instance.get()
    time.sleep(1)
print("Ready in an %s state." % instance.status)
instance.delete()
# Delete and wait for the instance to go away.
while True:
    try:
        instance = client.instances.get(instance.id)
        assert instance.status == "SHUTDOWN"
    except NotFound:
        break
Ready in an ACTIVE state.

列出项目和分页

列表在二十个项目后分页,这意味着即使有更多项目,您也只会获得二十个项目。要查看下一组项目,请发送一个标记 (marker)。该标记是一个键值(对于实例,是 ID),它是所有返回项目的非包含起始点。

客户端返回的列表始终包含一个“next”属性。这可以用作“marker”参数,以从服务器获取列表的下一部分。如果没有更多项目可用,则 next 属性为 None。

分页适用于所有列出的对象,例如实例、数据存储等。以下示例针对实例。

# There are currently 30 instances.

instances = client.instances.list()
print(len(instances))
print(instances.next is None)

instances2 = client.instances.list(marker=instances.next)
print(len(instances2))
print(instances2.next is None)
20
False
10
True