使用客户端以编程方式¶
身份验证¶
使用客户端的每个功能都需要进行身份验证。
要创建客户端,请创建 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