-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathzstack_api.py
More file actions
88 lines (61 loc) · 2.55 KB
/
zstack_api.py
File metadata and controls
88 lines (61 loc) · 2.55 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import httplib
import json
import time
# return a dict containing API return value
def api_call(session_uuid, api_id, api_content):
conn = httplib.HTTPConnection("10.0.3.120", 8080)
headers = {"Content-Type": "application/json"}
if session_uuid:
api_content["session"] = {"uuid": session_uuid}
api_body = {api_id: api_content}
conn.request("POST", "/zstack/api", json.dumps(api_body))
response = conn.getresponse()
if response.status != 200:
raise Exception("failed to make an API call, %s, %s" % (response.status, response.reason))
rsp_body = response.read()
rsp = json.loads(rsp_body)
if rsp["state"] == "Done":
return json.loads(rsp["result"])
job_uuid = rsp["uuid"]
def query_until_done():
conn.request("GET", "/zstack/api/result/%s" % job_uuid)
response = conn.getresponse()
if response.status != 200:
raise Exception("failed to query API result, %s, %s" % (response.status, response.reason))
rsp_body = response.read()
rsp = json.loads(rsp_body)
if rsp["state"] == "Done":
return json.loads(rsp["result"])
time.sleep(1)
print "Job[uuid:%s] is still in processing" % job_uuid
return query_until_done()
return query_until_done()
def error_if_fail(rsp):
result = rsp.values()
success = rsp.values()[0]["success"]
if not success:
error = rsp.values()[0]["error"]
raise Exception("failed to login, %s" % json.dumps(error))
def login():
content = {
"accountName": "admin",
"password": "b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86"
}
rsp = api_call(None, "org.zstack.header.identity.APILogInByAccountMsg", content)
error_if_fail(rsp)
session_uuid = rsp.values()[0]["inventory"]["uuid"]
print "successfully login, session uuid is: %s" % session_uuid
return session_uuid
def create_zone(session_uuid):
content = {"name": "zone-zll"}
rsp = api_call(session_uuid, "org.zstack.header.zone.APICreateZoneMsg", content)
error_if_fail(rsp)
print "successfully created %s" % "zone-zll"
def logout(session_uuid):
content = {"sessionUuid": session_uuid}
rsp = api_call(None, "org.zstack.header.identity.APILogOutMsg", content)
error_if_fail(rsp)
print "successfully logout"
session_uuid = login()
create_zone(session_uuid)
logout(session_uuid)