Revision 11d4d283 snf-cyclades-app/synnefo/logic/backend.py
b/snf-cyclades-app/synnefo/logic/backend.py | ||
---|---|---|
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
from django.conf import settings |
34 | 34 |
from django.db import transaction |
35 |
from django.utils import simplejson as json |
|
35 | 36 |
from datetime import datetime, timedelta |
36 | 37 |
|
37 | 38 |
from synnefo.db.models import (VirtualMachine, Network, |
... | ... | |
43 | 44 |
from synnefo.api.util import release_resource |
44 | 45 |
from synnefo.util.mac2eui64 import mac2eui64 |
45 | 46 |
from synnefo.logic import rapi |
47 |
from synnefo.volume.util import update_snapshot_status |
|
46 | 48 |
|
47 | 49 |
from logging import getLogger |
48 | 50 |
log = getLogger(__name__) |
... | ... | |
134 | 136 |
if status not in [x[0] for x in BACKEND_STATUSES]: |
135 | 137 |
raise VirtualMachine.InvalidBackendMsgError(opcode, status) |
136 | 138 |
|
139 |
if opcode == "OP_INSTANCE_SNAPSHOT": |
|
140 |
for disk_id, disk_info in job_fields.get("disks", []): |
|
141 |
snapshot_name = disk_info.get("snapshot_name") |
|
142 |
snapshot_info = json.loads(disk_info["snapshot_info"]) |
|
143 |
user_id = vm.userid |
|
144 |
_process_snapshot_status(snapshot_name, snapshot_info, |
|
145 |
user_id, etime, jobid, status) |
|
146 |
return |
|
147 |
|
|
137 | 148 |
vm.backendjobid = jobid |
138 | 149 |
vm.backendjobstatus = status |
139 | 150 |
vm.backendopcode = opcode |
... | ... | |
509 | 520 |
|
510 | 521 |
|
511 | 522 |
@transaction.commit_on_success |
523 |
def process_snapshot_status(*args, **kwargs): |
|
524 |
return _process_snapshot_status(*args, **kwargs) |
|
525 |
|
|
526 |
|
|
527 |
def _process_snapshot_status(snapshot_name, snapshot_info, user_id, etime, |
|
528 |
jobid, status): |
|
529 |
"""Process a notification for a snapshot.""" |
|
530 |
snapshot_id = snapshot_info.get("snapshot_id") |
|
531 |
assert(snapshot_id is not None), "Missing snapshot_id" |
|
532 |
if status in rapi.JOB_STATUS_FINALIZED: |
|
533 |
snapshot_status = rapi.JOB_STATUS_SUCCESS and "AVAILABLE" or "ERROR" |
|
534 |
log.debug("Updating status of snapshot '%s' to '%s'", snapshot_id, |
|
535 |
snapshot_status) |
|
536 |
update_snapshot_status(snapshot_id, user_id, status=snapshot_status) |
|
537 |
|
|
538 |
|
|
539 |
@transaction.commit_on_success |
|
512 | 540 |
def process_network_status(back_network, etime, jobid, opcode, status, logmsg): |
513 | 541 |
if status not in [x[0] for x in BACKEND_STATUSES]: |
514 | 542 |
raise Network.InvalidBackendMsgError(opcode, status) |
... | ... | |
1183 | 1211 |
return client.ModifyInstance(**kwargs) |
1184 | 1212 |
|
1185 | 1213 |
|
1186 |
def snapshot_instance(vm, snapshot_name): |
|
1214 |
def snapshot_instance(vm, snapshot_name, snapshot_id):
|
|
1187 | 1215 |
#volume = instance.volumes.all()[0] |
1216 |
reason = json.dumps({"snapshot_id": snapshot_id}) |
|
1188 | 1217 |
with pooled_rapi_client(vm) as client: |
1189 | 1218 |
return client.SnapshotInstance(instance=vm.backend_vm_id, |
1190 |
snapshot_name=snapshot_name) |
|
1219 |
snapshot_name=snapshot_name, |
|
1220 |
reason=reason) |
|
1191 | 1221 |
|
1192 | 1222 |
|
1193 | 1223 |
def get_instances(backend, bulk=True): |
Also available in: Unified diff