Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / volume / util.py @ dd339992

History | View | Annotate | Download (2.8 kB)

1 dec501fa Christos Stavrakakis
from synnefo.db import models
2 dec501fa Christos Stavrakakis
from snf_django.lib.api import faults
3 e7953d63 Christos Stavrakakis
from synnefo.api.util import get_image_dict, get_vm, image_backend
4 5f90e24c Christos Stavrakakis
from synnefo.cyclades_settings import cyclades_services, BASE_HOST
5 5f90e24c Christos Stavrakakis
from synnefo.lib import join_urls
6 5f90e24c Christos Stavrakakis
from synnefo.lib.services import get_service_path
7 dec501fa Christos Stavrakakis
8 dec501fa Christos Stavrakakis
9 dec501fa Christos Stavrakakis
def get_volume(user_id, volume_id, for_update=False,
10 dec501fa Christos Stavrakakis
               exception=faults.ItemNotFound):
11 dec501fa Christos Stavrakakis
    volumes = models.Volume.objects
12 dec501fa Christos Stavrakakis
    if for_update:
13 dec501fa Christos Stavrakakis
        volumes = volumes.select_for_update()
14 dec501fa Christos Stavrakakis
    try:
15 dd339992 Christos Stavrakakis
        volume_id = int(volume_id)
16 dd339992 Christos Stavrakakis
    except (TypeError, ValueError):
17 dd339992 Christos Stavrakakis
        raise faults.BadRequest("Invalid volume id: %s" % volume_id)
18 dd339992 Christos Stavrakakis
    try:
19 dec501fa Christos Stavrakakis
        return volumes.get(id=volume_id, userid=user_id)
20 dec501fa Christos Stavrakakis
    except models.Volume.DoesNotExist:
21 dec501fa Christos Stavrakakis
        raise exception("Volume %s not found" % volume_id)
22 dec501fa Christos Stavrakakis
23 dec501fa Christos Stavrakakis
24 dec501fa Christos Stavrakakis
def get_snapshot(user_id, snapshot_id, exception=faults.ItemNotFound):
25 63338c2d Christos Stavrakakis
    try:
26 63338c2d Christos Stavrakakis
        with image_backend(user_id) as b:
27 63338c2d Christos Stavrakakis
            return b.get_snapshot(user_id, snapshot_id)
28 63338c2d Christos Stavrakakis
    except faults.ItemNotFound:
29 63338c2d Christos Stavrakakis
        raise exception("Snapshot %s not found" % snapshot_id)
30 dec501fa Christos Stavrakakis
31 dec501fa Christos Stavrakakis
32 dec501fa Christos Stavrakakis
def get_image(user_id, image_id, exception=faults.ItemNotFound):
33 dec501fa Christos Stavrakakis
    try:
34 dec501fa Christos Stavrakakis
        return get_image_dict(image_id, user_id)
35 dec501fa Christos Stavrakakis
    except faults.ItemNotFound:
36 dec501fa Christos Stavrakakis
        raise exception("Image %s not found" % image_id)
37 dec501fa Christos Stavrakakis
38 dec501fa Christos Stavrakakis
39 dec501fa Christos Stavrakakis
def get_server(user_id, server_id, for_update=False,
40 dec501fa Christos Stavrakakis
               exception=faults.ItemNotFound):
41 dec501fa Christos Stavrakakis
    try:
42 dd339992 Christos Stavrakakis
        server_id = int(server_id)
43 dd339992 Christos Stavrakakis
    except (TypeError, ValueError):
44 dd339992 Christos Stavrakakis
        raise faults.BadRequest("Invalid server id: %s" % server_id)
45 dd339992 Christos Stavrakakis
    try:
46 dec501fa Christos Stavrakakis
        return get_vm(server_id, user_id, for_update=for_update,
47 dec501fa Christos Stavrakakis
                      non_deleted=True, non_suspended=True)
48 dec501fa Christos Stavrakakis
    except faults.ItemNotFound:
49 dec501fa Christos Stavrakakis
        raise exception("Server %s not found" % server_id)
50 5f90e24c Christos Stavrakakis
51 5f90e24c Christos Stavrakakis
52 5f90e24c Christos Stavrakakis
VOLUME_URL = \
53 5f90e24c Christos Stavrakakis
    join_urls(BASE_HOST,
54 5f90e24c Christos Stavrakakis
              get_service_path(cyclades_services, "volume", version="v2.0"))
55 5f90e24c Christos Stavrakakis
56 5f90e24c Christos Stavrakakis
VOLUMES_URL = join_urls(VOLUME_URL, "volumes/")
57 5f90e24c Christos Stavrakakis
SNAPSHOTS_URL = join_urls(VOLUME_URL, "snapshots/")
58 5f90e24c Christos Stavrakakis
59 5f90e24c Christos Stavrakakis
60 5f90e24c Christos Stavrakakis
def volume_to_links(volume_id):
61 5f90e24c Christos Stavrakakis
    href = join_urls(VOLUMES_URL, str(volume_id))
62 5f90e24c Christos Stavrakakis
    return [{"rel": rel, "href": href} for rel in ("self", "bookmark")]
63 5f90e24c Christos Stavrakakis
64 5f90e24c Christos Stavrakakis
65 5f90e24c Christos Stavrakakis
def snapshot_to_links(snapshot_id):
66 5f90e24c Christos Stavrakakis
    href = join_urls(SNAPSHOTS_URL, str(snapshot_id))
67 5f90e24c Christos Stavrakakis
    return [{"rel": rel, "href": href} for rel in ("self", "bookmark")]
68 58194535 Christos Stavrakakis
69 58194535 Christos Stavrakakis
70 58194535 Christos Stavrakakis
def get_disk_template_provider(disk_template):
71 58194535 Christos Stavrakakis
    """Extract provider from disk template.
72 58194535 Christos Stavrakakis

73 58194535 Christos Stavrakakis
    Provider for `ext` disk_template is encoded in the disk template
74 58194535 Christos Stavrakakis
    name, which is formed `ext_<provider_name>`. Provider is None
75 58194535 Christos Stavrakakis
    for all other disk templates.
76 58194535 Christos Stavrakakis

77 58194535 Christos Stavrakakis
    """
78 58194535 Christos Stavrakakis
    provider = None
79 58194535 Christos Stavrakakis
    if disk_template.startswith("ext") and "_" in disk_template:
80 58194535 Christos Stavrakakis
        disk_template, provider = disk_template.split("_", 1)
81 58194535 Christos Stavrakakis
    return disk_template, provider
82 11d4d283 Christos Stavrakakis
83 11d4d283 Christos Stavrakakis
84 11d4d283 Christos Stavrakakis
def update_snapshot_status(snapshot_id, user_id, status):
85 11d4d283 Christos Stavrakakis
    with image_backend(user_id) as b:
86 11d4d283 Christos Stavrakakis
        return b.update_status(snapshot_id, status=status)