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