Revision c19ad1e9 snf-cyclades-app/synnefo/volume/volumes.py

b/snf-cyclades-app/synnefo/volume/volumes.py
4 4
from synnefo.db.models import Volume
5 5
from snf_django.lib.api import faults
6 6
from synnefo.volume import util
7
from synnefo.logic import backend
7
from synnefo.logic import backend, servers
8 8

  
9 9
log = logging.getLogger(__name__)
10 10

  
......
43 43
            msg = ("Cannot take a snapshot while snapshot is in '%s' state"
44 44
                   % source_volume.status)
45 45
            raise faults.BadRequest(msg)
46
        source = Volume.SOURCE_VOLUME_PREFIX + str(source_volume_id)
46
        source = Volume.prefix_source(source_volume_id, source_type="volume")
47 47
        origin = source_volume.backend_volume_uuid
48 48
    elif source_snapshot_id is not None:
49 49
        source_snapshot = util.get_snapshot(user_id, source_snapshot_id,
50 50
                                            exception=faults.BadRequest)
51 51
        # TODO: Check the state of the snapshot!!
52
        source = Volume.prefix_source(source_snapshot_id,
53
                                      source_type="snapshot")
52 54
        origin = source_snapshot["checksum"]
53
        source = Volume.SOURCE_SNAPSHOT_PREFIX + str(source_snapshot_id)
54 55
    elif source_image_id is not None:
55 56
        source_image = util.get_image(user_id, source_image_id,
56 57
                                      exception=faults.BadRequest)
58
        source = Volume.prefix_source(source_image_id, source_type="image")
57 59
        origin = source_image["checksum"]
58
        source = Volume.SOURCE_IMAGE_PREFIX + str(source_image_id)
59 60

  
60 61
    volume = Volume.objects.create(userid=user_id,
61 62
                                   size=size,
......
71 72
        for meta_key, meta_val in metadata.items():
72 73
            volume.metadata.create(key=meta_key, value=meta_val)
73 74

  
74
    # Create the disk in the backend
75
    volume.backendjobid = backend.attach_volume(server, volume)
76
    volume.save()
75
    servers.attach_volume(server, volume)
77 76

  
78 77
    return volume
79 78

  
......
83 82
    """Delete a Volume"""
84 83
    # A volume is deleted by detaching it from the server that is attached.
85 84
    # Deleting a detached volume is not implemented.
86
    if volume.index == 0:
87
        raise faults.BadRequest("Cannot detach the root volume of a server")
88

  
89 85
    if volume.machine_id is not None:
90
        volume.backendjobid = backend.detach_volume(volume.machine, volume)
86
        servers.detach_volume(volume.machine, volume)
91 87
        log.info("Detach volume '%s' from server '%s', job: %s",
92 88
                 volume.id, volume.machine_id, volume.backendjobid)
93 89
    else:

Also available in: Unified diff