Revision c5e38339 api/handlers.py
b/api/handlers.py | ||
---|---|---|
12 | 12 |
from util.rapi import GanetiRapiClient |
13 | 13 |
|
14 | 14 |
|
15 |
if settings.GANETI_CLUSTER_INFO:
|
|
15 |
try:
|
|
16 | 16 |
rapi = GanetiRapiClient(*settings.GANETI_CLUSTER_INFO) |
17 |
else: |
|
18 |
rapi = None |
|
17 |
rapi.GetVersion() |
|
18 |
except: |
|
19 |
raise fault.serviceUnavailable |
|
20 |
#If we can't connect to the rapi successfully, don't do anything |
|
21 |
#TODO: add logging/admin alerting |
|
19 | 22 |
|
20 | 23 |
backend_prefix_id = settings.BACKEND_PREFIX_ID |
21 | 24 |
|
... | ... | |
63 | 66 |
def read_one(self, request, id): |
64 | 67 |
virtual_servers = VirtualMachine.objects.all() |
65 | 68 |
#get all VM's for now, FIX it to take the user's VMs only yet |
66 |
if not rapi: # No ganeti backend. Return mock objects |
|
67 |
servers = VirtualMachine.objects.all()[0] |
|
68 |
return { "server": servers[0] } |
|
69 | 69 |
try: |
70 | 70 |
instance = rapi.GetInstance(id) |
71 | 71 |
servers = VirtualMachine.objects.all()[0] |
... | ... | |
78 | 78 |
virtual_servers = VirtualMachine.objects.all() |
79 | 79 |
#get all VM's for now, FIX it to take the user's VMs only yet |
80 | 80 |
|
81 |
if not rapi: # No ganeti backend. Return mock objects |
|
82 |
if detail: |
|
83 |
virtual_servers_list = [{'status': server.rsapi_state, |
|
84 |
'flavorId': server.flavor.id, |
|
85 |
'name': server.name, |
|
86 |
'id': server.id, |
|
87 |
'imageId': server.sourceimage.id, |
|
88 |
'metadata': {'Server_Label': server.description, |
|
89 |
'hostId': '9e107d9d372bb6826bd81d3542a419d6', |
|
90 |
'addresses': {'public': ['67.23.10.133'], |
|
91 |
'private': ['10.176.42.17'], |
|
92 |
} |
|
93 |
} |
|
94 |
} for server in virtual_servers] |
|
95 |
#pass some fake data regarding ip, since we don't have any such data |
|
96 |
return { "servers": virtual_servers_list } |
|
97 |
else: |
|
98 |
virtual_servers = VirtualMachine.objects.filter(owner=User.objects.all()[0]) |
|
99 |
return { "servers": [ { "id": s.id, "name": s.name } for s in virtual_servers ] } |
|
100 |
|
|
101 |
#ganeti can't ask for instances of user X. The DB is responsible for this |
|
102 |
#also here we ask for the instances of the first user, since the user system is not ready |
|
103 | 81 |
if not detail: |
104 | 82 |
virtual_servers = VirtualMachine.objects.filter(owner=User.objects.all()[0]) |
105 | 83 |
return { "servers": [ { "id": s.id, "name": s.name } for s in virtual_servers ] } |
... | ... | |
168 | 146 |
|
169 | 147 |
def create(self, request, id): |
170 | 148 |
"""Reboot, rebuild, resize, confirm resized, revert resized""" |
171 |
machine = 'machine-XXX' #VirtualMachine.objects.get(id=id_from_instance_name(id)) |
|
149 |
try: |
|
150 |
machine = VirtualMachine.objects.get(id=id) |
|
151 |
except: |
|
152 |
raise fault.itemNotFound |
|
172 | 153 |
reboot_request = request.POST.get('reboot', None) |
173 | 154 |
shutdown_request = request.POST.get('shutdown', None) |
174 | 155 |
if reboot_request: |
... | ... | |
250 | 231 |
badRequest, itemNotFound |
251 | 232 |
""" |
252 | 233 |
images = Image.objects.all() |
253 |
images = [ {'created': image.created.isoformat(), |
|
234 |
images_list = [ {'created': image.created.isoformat(),
|
|
254 | 235 |
'id': image.id, |
255 | 236 |
'name': image.name, |
256 | 237 |
'updated': image.updated.isoformat(), |
... | ... | |
258 | 239 |
'state': image.state, |
259 | 240 |
'vm_id': image.vm_id |
260 | 241 |
} for image in images] |
261 |
|
|
262 | 242 |
if rapi: # Images info is stored in the DB. Ganeti is not aware of this |
263 | 243 |
if id == "detail": |
264 |
return { "images": images } |
|
244 |
return { "images": images_list }
|
|
265 | 245 |
elif id is None: |
266 |
return { "images": [ { "id": s['id'], "name": s['name'] } for s in images ] } |
|
246 |
return { "images": [ { "id": s['id'], "name": s['name'] } for s in images_list ] }
|
|
267 | 247 |
else: |
268 |
return { "image": images[0] } |
|
248 |
try: |
|
249 |
image = images.get(id=id) |
|
250 |
return { "image": {'created': image.created.isoformat(), |
|
251 |
'id': image.id, |
|
252 |
'name': image.name, |
|
253 |
'updated': image.updated.isoformat(), |
|
254 |
'description': image.description, |
|
255 |
'state': image.state, |
|
256 |
'vm_id': image.vm_id |
|
257 |
} } |
|
258 |
except: |
|
259 |
raise fault.itemNotFound |
|
269 | 260 |
else: |
270 |
print 'return error message! TODO'
|
|
261 |
raise fault.serviceUnavailable
|
|
271 | 262 |
|
272 | 263 |
def create(self, request): |
273 | 264 |
"""Create a new image""" |
Also available in: Unified diff