Revision 4944a1f8 snf-cyclades-app/synnefo/volume/snapshots.py

b/snf-cyclades-app/synnefo/volume/snapshots.py
7 7
from synnefo.logic import backend
8 8
from synnefo.volume import util
9 9

  
10

  
11 10
SNAPSHOTS_CONTAINER = "snapshots"
12 11
SNAPSHOTS_DOMAIN = "plankton"
13 12
SNAPSHOTS_PREFIX = "plankton:"
......
23 22

  
24 23
    volume.snapshot_counter += 1
25 24
    volume.save()
25
    transaction.commit()
26 26

  
27 27
    snapshot_metadata = {}
28
    snapshot_metadata[SNAPSHOTS_PREFIX + "name"] = description
28
    snapshot_metadata[SNAPSHOTS_PREFIX + "name"] = name
29 29
    snapshot_metadata[SNAPSHOTS_PREFIX + "description"] = description
30 30
    snapshot_metadata[SNAPSHOTS_PREFIX + "metadata"] = json.dumps(metadata)
31 31
    snapshot_metadata[SNAPSHOTS_PREFIX + "volume_id"] = volume.id
32 32
    snapshot_metadata[SNAPSHOTS_PREFIX + "status"] = "CREATING"
33 33
    #XXX: just to work
34 34
    snapshot_metadata[SNAPSHOTS_PREFIX + "is_snapshot"] = True
35
    #XXX: for images
36
    snapshot_metadata[SNAPSHOTS_PREFIX + "store"] = "pithos"
37
    snapshot_metadata[SNAPSHOTS_PREFIX + "disk_format"] = "diskdump"
38
    snapshot_metadata[SNAPSHOTS_PREFIX + "default_container_format"] = "bare"
39
    # XXX: Hack-ish way to clone the metadata
40
    image_properties = {"EXCLUDE_ALL_TASKS": "yes",
41
                        "description": description}
42
    vm_metadata = dict(volume.machine.metadata.values_list("meta_key", "meta_value"))
43
    for key in ["OS", "users"]:
44
        val = vm_metadata.get(key)
45
        if val is not None:
46
            image_properties[key] = val
47
    snapshot_metadata[SNAPSHOTS_PREFIX + "properties"] = json.dumps(image_properties)
35 48

  
36 49
    snapshot_name = generate_snapshot_name(volume)
37 50
    mapfile = SNAPSHOTS_MAPFILE_PREFIX + snapshot_name
38 51

  
52
    size = volume.size << 30
39 53
    with image_backend(user_id) as pithos_backend:
40 54
        # move this to plankton backend
41 55
        snapshot_uuid = pithos_backend.backend.register_object_map(
42 56
            user=user_id,
43 57
            account=user_id,
44 58
            container=SNAPSHOTS_CONTAINER,
45
            name=name,
46
            size=volume.size,
59
            name=snapshot_name,
60
            size=size,
61
            domain=SNAPSHOTS_DOMAIN,
47 62
            type=SNAPSHOTS_TYPE,
48 63
            mapfile=mapfile,
49 64
            meta=snapshot_metadata,
50
            replace_meta=False,
65
            replace_meta=True,
51 66
            permissions=None)
52 67
            #checksum=None,
53 68

  
54
    backend.snapshot_instance(volume.machine, snapshot_name=snapshot_uuid)
69
    backend.snapshot_instance(volume.machine, snapshot_name=snapshot_name)
55 70

  
56 71
    snapshot = util.get_snapshot(user_id, snapshot_uuid)
57 72

  
......
60 75

  
61 76
def generate_snapshot_name(volume):
62 77
    time = isoformat(datetime.datetime.now())
63
    return "snf-snapshot-of-volume-%s-%s-%s" % (volume.id,
64
                                                volume.snapshot_counter, time)
78
    return "snf-snapshot-of-volume-%s-%s" % (volume.id,
79
                                                volume.snapshot_counter)
65 80

  
66 81

  
67 82
@transaction.commit_on_success

Also available in: Unified diff