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