1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| spUUID = '5c84a9d2-be25-49a9-bcb2-2f0f5b9066c0'
sdUUID = 'b9c4821e-e9c0-4dd4-8393-c59b82c9cd29'
imgUUID = '87f5f391-5b83-4e7f-9072-7f50266559c3'
volUUID = 'ce73fdd0-2630-40ca-b2df-a0dd90674dec'
# 这里做为测试,直接写出了将使用的 UUID,实际环境中 UUID 由 Engine 或者用户给出
def vdsOK(d):
print d
if d['status']['code']:
raise Exception(str(d))
return d
# 此函数用来判断操作成功与否
def waitTask(s, taskid):
while vdsOK(s.getTaskStatus(taskid))['taskStatus']['taskState'] != 'finished':
time.sleep(3)
vdsOK(s.clearTask(taskid))
#VDSM 的任务很多是异步的,每一个请求都是一个任务,此函数用来查询任务成功与否
def main():
s = vdscli.connect()
# 连接 VDSM,默认连接本地的 VDSM
vdsOK(s.connectStorageServer(LOCALFS_DOMAIN,
"my favorite pet", [dict(id=1, connection=path)]))
# 连接到 VDSM 的一个 StorageServer
vdsOK(s.createStorageDomain(LOCALFS_DOMAIN, sdUUID,
"my local domain", path, DATA_DOMAIN, 0))
# 创建 Storage Domain sdUUID
vdsOK(s.createStoragePool(LOCALFS_DOMAIN, spUUID,
"pool name", sdUUID, [sdUUID], masterVersion))
# 以 sdUUID 为 master domain 创建 Storage Pool
vdsOK(s.connectStoragePool(spUUID, hostID, "scsikey", sdUUID, masterVersion))
# 连接到 Storage Pool 上
tid = vdsOK(s.spmStart(spUUID, -1, -1, -1, 0))['uuid']
waitTask(s, tid)
# 启动这个 Storage Pool 上的 SPM,成功后会有一个 Node 充当 SPM
sizeGiB = 10
sectors_per_GB = 2097152
size = sizeGiB * sectors_per_GB
tid = vdsOK(s.createVolume(sdUUID, spUUID, imgUUID, size,
COW_FORMAT, SPARSE_VOL, LEAF_VOL,
volUUID, "volly",
BLANK_UUID, BLANK_UUID))['uuid']
waitTask(s, tid)
# 创建最终的 Volume,大小为 10GB,此 Volume 存在于前面创建的 Storage Domain 上。至此,
#虚拟磁盘便准备好了,可以用此磁盘的 UUID 做为参数创建虚拟机了。
main()
|