Revision ef0839e9

b/snf-cyclades-app/synnefo/logic/backend.py
1140 1140

  
1141 1141

  
1142 1142
def attach_volume(vm, volume, depends=[]):
1143
    log.debug("Attaching volume %s to vm %s", vm, volume)
1143
    log.debug("Attaching volume %s to vm %s", volume, vm)
1144 1144

  
1145 1145
    disk = {"size": int(volume.size) << 10,
1146 1146
            "name": volume.backend_volume_uuid,
b/snf-cyclades-app/synnefo/logic/management/commands/reconcile-servers.py
68 68
        make_option('--fix-unsynced-nics', action='store_true',
69 69
                    dest='fix_unsynced_nics', default=False,
70 70
                    help='Fix unsynced nics between DB and Ganeti'),
71
        make_option('--fix-unsynced-disks', action='store_true',
72
                    dest='fix_unsynced_disks', default=False,
73
                    help='Fix unsynced disks between DB and Ganeti'),
71 74
        make_option('--fix-unsynced-flavors', action='store_true',
72 75
                    dest='fix_unsynced_flavors', default=False,
73 76
                    help='Fix unsynced flavors between DB and Ganeti'),
b/snf-cyclades-app/synnefo/logic/reconciliation.py
326 326
                                               nics=gnt_nics)
327 327

  
328 328
    def reconcile_unsynced_disks(self, server_id, db_server, gnt_server):
329
        pass
329
        building_time = self.event_time - BUILDING_NIC_TIMEOUT
330
        db_disks = db_server.volumes.exclude(status="CREATING",
331
                                             created__lte=building_time) \
332
                                    .filter(deleted=False)\
333
                                    .order_by("id")
334
        gnt_disks = gnt_server["disks"]
335
        gnt_disks_parsed = backend_mod.process_ganeti_disks(gnt_disks)
336
        disks_changed = len(db_disks) != len(gnt_disks)
337
        for db_disk, gnt_disk in zip(db_disks,
338
                                     sorted(gnt_disks_parsed.items())):
339
            gnt_disk_id, gnt_disk = gnt_disk
340
            if (db_disk.id == gnt_disk_id) and\
341
               backend_mod.disks_are_equal(db_disk, gnt_disk):
342
                continue
343
            else:
344
                disks_changed = True
345
                break
346
        if disks_changed:
347
            msg = "Found unsynced disks for server '%s'.\n"\
348
                  "\tDB:\n\t\t%s\n\tGaneti:\n\t\t%s"
349
            db_disks_str = "\n\t\t".join(map(format_db_disk, db_disks))
350
            gnt_disks_str = "\n\t\t".join(map(format_gnt_disk,
351
                                          sorted(gnt_disks_parsed.items())))
352
            self.log.info(msg, server_id, db_disks_str, gnt_disks_str)
353
            if self.options["fix_unsynced_disks"]:
354
                vm = get_locked_server(server_id)
355
                backend_mod.process_disks_status(vm=vm,
356
                                                 etime=self.event_time,
357
                                                 disks=gnt_disks)
330 358

  
331 359
    def reconcile_pending_task(self, server_id, db_server):
332 360
        job_id = db_server.task_job_id
......
367 395
                      nic["network"].id, nic["mac"], nic["index"],
368 396
                      nic["firewall_profile"])
369 397

  
398
DISK_MSG = ": %s\t".join(["ID", "State", "Size", "Index"]) + ": %s"
399

  
400

  
401
def format_db_disk(disk):
402
    return DISK_MSG % (disk.id, disk.status, disk.size, disk.index)
403

  
404

  
405
def format_gnt_disk(disk):
406
    disk_name, disk = disk
407
    return DISK_MSG % (disk_name, disk["status"], disk["size"], disk["index"])
408

  
370 409

  
371 410
#
372 411
# Networks
b/snf-cyclades-app/synnefo/logic/tests/reconciliation.py
124 124
             "oper_state": True,
125 125
             "mtime": time(),
126 126
             "disk.sizes": [],
127
             "disk.names": [],
128
             "disk.uuids": [],
127 129
             "nic.ips": [],
128 130
             "nic.names": [],
129 131
             "nic.macs": [],
......
145 147
             "oper_state": True,
146 148
             "mtime": time(),
147 149
             "disk.sizes": [],
150
             "disk.names": [],
151
             "disk.uuids": [],
148 152
             "nic.ips": [],
149 153
             "nic.names": [],
150 154
             "nic.macs": [],
......
172 176
             "oper_state": True,
173 177
             "mtime": time(),
174 178
             "disk.sizes": [],
179
             "disk.names": [],
180
             "disk.uuids": [],
175 181
             "nic.ips": [],
176 182
             "nic.names": [],
177 183
             "nic.macs": [],
......
204 210
             "oper_state": True,
205 211
             "mtime": time(),
206 212
             "disk.sizes": [],
213
             "disk.names": [],
214
             "disk.uuids": [],
207 215
             "nic.names": [nic.backend_uuid],
208 216
             "nic.ips": ["192.168.2.5"],
209 217
             "nic.macs": ["aa:00:bb:cc:dd:ee"],

Also available in: Unified diff