-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnova
executable file
·163 lines (128 loc) · 4.23 KB
/
nova
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/env python
import requests, sys, json, getopt
endpoint_keystone = 'http://127.0.0.1:5000/v2.0/'
endpoint_nova = 'http://127.0.0.1:8774/v2/612427e5408e41a0a35604fe8a3e5370'
# KEYSTONE
def get_tokens(auth):
'api connect'
print 'User ' + auth['auth']['passwordCredentials']['username']
print "wait request tokens..."
r = requests.post(endpoint_keystone+'/tokens', json = auth)
if r.status_code == requests.codes.ok:
# print r.json()
res = r.json()
return res['access']['token']['id']
return False
# Create instance
def post_server(tokens, name, flavor, image):
'api connect'
payload = {"server": {"name":name, 'imageRef': image, 'flavorRef':flavor}}
headers = {'X-Auth-Token': tokens}
r = requests.post(endpoint_nova+'/servers', headers = headers, json=payload)
ret = {'status': r.status_code, 'content': r.text}
return ret
# Images
def get_images(tokens):
'api connect'
headers = {'X-Auth-Token': tokens}
r = requests.get(endpoint_nova+'/images/detail', headers = headers)
if r.status_code == 200:
return r.json()
return False
# Flavors
def get_flavors(tokens):
'api connect'
headers = {'X-Auth-Token': tokens}
r = requests.get(endpoint_nova+'/flavors', headers = headers)
if r.status_code == 200:
return r.json()
return False
# Servers
def get_servers(tokens):
'api connect'
headers = {'X-Auth-Token': tokens}
r = requests.get(endpoint_nova+'/servers', headers = headers)
if r.status_code == requests.codes.ok:
return r.json();
return False;
def create_server(auth):
tokens = get_tokens(auth)
#nhap ten
name_server = raw_input('Please new name server: ')
# Chon flavors
print '\033[32m-> List availble flavors\033[0m'
flavors = get_flavors(tokens)
for i in range(len(flavors['flavors'])):
print str(i) + ': ' +flavors['flavors'][i]['name']
id_flavor = input('Please select: ')
if (id_flavor > i ) or (id_flavor < 0):
print 'Err: Out of select'
sys.exit()
#chon file image
print '\033[32m-> List availble images\033[0m'
images = get_images(tokens)
for i in range(len(images['images'])):
print str(i) + ': ' +images['images'][i]['name'] + ' '+ images['images'][i]['status']
id_image = input('Please select: ')
if (id_image > i ) or (id_image < 0):
print 'Err: Out of select'
sys.exit()
#post create server
ret = post_server(tokens,name_server, flavors['flavors'][id_flavor]['id'], images['images'][id_image]['id'])
print '-----------------------------------------'
if ret['status'] == 202:
print '\033[32mSuccessed!'
print ret['content']
else:
print '\033[31mFaild!'
print ret['content']
sys.exit()
def list_flavors(auth):
tokens = get_tokens(auth)
flavors = get_flavors(tokens)
print '\033[32m---------list availble flavors --------------\033[0m'
for i in range(len(flavors['flavors'])):
print str(i) + ': ' +flavors['flavors'][i]['name']
def list_images(auth):
tokens = get_tokens(auth)
images = get_images(tokens)
print '\033[32m---------list availble images ---------------\033[0m'
for i in range(len(images['images'])):
print str(i) + ': ' +images['images'][i]['name']
def list_servers(auth):
tokens = get_tokens(auth)
servers = get_servers(tokens)
print '\033[32m---------list servers ---------------\033[0m'
for i in range(len(servers['servers'])):
print str(i) + ': ' +servers['servers'][i]['name'] +"\t"+servers['servers'][i]['id']
def help():
print "Script use: list image, list flavor, creat server "
print "\t-h, --help\t\tshow this help"
print "\t-i, --image\t\tlist image"
print "\t-f, --flavor\t\tlist flavor"
print "\t-c, --create\t\tcreate server"
print "\t-s, --servers\t\tlist servers"
sys.exit()
if __name__ == "__main__":
if len(sys.argv) == 1:
help()
sys.exit()
options , remainder = getopt.getopt(sys.argv[1:], 'cifsh', ['create', 'images','flavors', 'servers', 'help'])
#auth user, password
auth = {"auth":{"tenantName":"demo","passwordCredentials":{"username":"demo","password":"demo"}}}
for opt, args in options:
if opt in ('-h', '--help'):
help()
sys.exit()
if opt in ('-c', '--create'):
create_server(auth)
sys.exit()
if opt in ('-i', '--images'):
list_images(auth)
sys.exit()
if opt in ('-f', '--flavors'):
list_flavors(auth)
sys.exit()
if opt in ('-s', '--servers'):
list_servers(auth)
sys.exit()