Revision a67419d8 snf-cyclades-app/synnefo/logic/reconciliation.py

b/snf-cyclades-app/synnefo/logic/reconciliation.py
72 72
from datetime import datetime, timedelta
73 73
from collections import namedtuple
74 74

  
75
from synnefo.db.models import (VirtualMachine, NetworkInterface,
75
from synnefo.db.models import (VirtualMachine, NetworkInterface, Flavor,
76 76
                               pooled_rapi_client)
77 77
from synnefo.logic.rapi import GanetiApiError
78 78
from synnefo.logic.backend import get_instances
......
92 92
    return (now > vm.updated + timedelta(seconds=CHECK_INTERVAL)) or\
93 93
           (now > vm.backendtime + timedelta(seconds=2*CHECK_INTERVAL))
94 94

  
95
VMState = namedtuple("VMState", ["state", "nics"])
95
VMState = namedtuple("VMState", ["state", "cpu", "ram", "nics"])
96 96

  
97 97

  
98 98
def stale_servers_in_db(D, G):
......
155 155
    return unsynced
156 156

  
157 157

  
158
def unsynced_flavors(D, G):
159
    unsynced = set()
160
    idD = set(D.keys())
161
    idG = set(G.keys())
162

  
163
    for i in idD & idG:
164
        if D[i].ram != G[i].ram or D[i].cpu != G[i].cpu:
165
            db_flavor = VirtualMachine.objects.get(id=i).flavor
166
            try:
167
                gnt_flavor = Flavor.objects.get(
168
                                    ram=G[i].ram, cpu=G[i].cpu,
169
                                    disk=db_flavor.disk,
170
                                    disk_template=db_flavor.disk_template)
171
            except Flavor.DoesNotExist:
172
                gnt_flavor = None
173
            unsynced.add((i, db_flavor, gnt_flavor))
174
    return unsynced
175

  
176

  
158 177
def instances_with_build_errors(D, G):
159 178
    failed = set()
160 179
    idD = set(D.keys())
......
183 202

  
184 203
def get_servers_from_db(backends, with_nics=True):
185 204
    vms = VirtualMachine.objects.filter(deleted=False, backend__in=backends)
186
    vm_info = vms.values_list("id", "operstate")
205
    vm_info = vms.values_list("id", "operstate", "flavor__cpu", "flavor__ram")
187 206
    if with_nics:
188 207
        nics = NetworkInterface.objects.filter(machine__in=vms)\
189 208
                               .order_by("machine")\
......
199 218
                       'ipv4':     ipv4 if ipv4 != '' else None
200 219
                       }
201 220
                vm_nics[machine][index] = nic
202
    servers = dict([(vm_id, VMState(state=state, nics=vm_nics.get(vm_id, [])))
203
                    for vm_id, state in vm_info])
221
    servers = dict([(vm_id, VMState(state=state,
222
                                    cpu=cpu,
223
                                    ram=ram,
224
                                    nics=vm_nics.get(vm_id, [])))
225
                    for vm_id, state, cpu, ram in vm_info])
204 226
    return servers
205 227

  
206 228

  
......
227 249
                continue
228 250

  
229 251
            nics = get_nics_from_instance(i)
252
            beparams = i["beparams"]
253
            vcpus = beparams["vcpus"]
254
            ram = beparams["maxmem"]
230 255
            snf_instances[id] = VMState(state=i["oper_state"],
256
                                        cpu=vcpus,
257
                                        ram=ram,
231 258
                                        nics=nics)
232 259

  
233 260
    return snf_instances

Also available in: Unified diff