Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / flavors.py @ eec66d97

History | View | Annotate | Download (4 kB)

1 e440e835 Christos Stavrakakis
# Copyright 2011, 2012, 2013 GRNET S.A. All rights reserved.
2 e440e835 Christos Stavrakakis
#
3 adee02b8 Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 adee02b8 Giorgos Verigakis
# without modification, are permitted provided that the following
5 adee02b8 Giorgos Verigakis
# conditions are met:
6 e440e835 Christos Stavrakakis
#
7 adee02b8 Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 adee02b8 Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 adee02b8 Giorgos Verigakis
#      disclaimer.
10 e440e835 Christos Stavrakakis
#
11 adee02b8 Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 adee02b8 Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 adee02b8 Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 adee02b8 Giorgos Verigakis
#      provided with the distribution.
15 e440e835 Christos Stavrakakis
#
16 adee02b8 Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 adee02b8 Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 adee02b8 Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 adee02b8 Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 adee02b8 Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 adee02b8 Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 adee02b8 Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 adee02b8 Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 adee02b8 Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 adee02b8 Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 adee02b8 Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 adee02b8 Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 e440e835 Christos Stavrakakis
#
29 adee02b8 Giorgos Verigakis
# The views and conclusions contained in the software and
30 adee02b8 Giorgos Verigakis
# documentation are those of the authors and should not be
31 adee02b8 Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 adee02b8 Giorgos Verigakis
# or implied, of GRNET S.A.
33 c36934a7 Giorgos Verigakis
34 2035039b Giorgos Verigakis
from logging import getLogger
35 2035039b Giorgos Verigakis
36 d8e50a39 Giorgos Verigakis
from django.conf.urls.defaults import patterns
37 c36934a7 Giorgos Verigakis
from django.http import HttpResponse
38 c36934a7 Giorgos Verigakis
from django.template.loader import render_to_string
39 29a59bc1 Giorgos Verigakis
from django.utils import simplejson as json
40 c36934a7 Giorgos Verigakis
41 b3fd98ae Christos Stavrakakis
from snf_django.lib import api
42 b36f78fa Giorgos Verigakis
from synnefo.api import util
43 d8e50a39 Giorgos Verigakis
from synnefo.db.models import Flavor
44 9e98ba3c Giorgos Verigakis
45 9e98ba3c Giorgos Verigakis
46 9e98ba3c Giorgos Verigakis
log = getLogger('synnefo.api')
47 d8e50a39 Giorgos Verigakis
48 c36934a7 Giorgos Verigakis
49 e440e835 Christos Stavrakakis
urlpatterns = patterns(
50 e440e835 Christos Stavrakakis
    'synnefo.api.flavors',
51 c36934a7 Giorgos Verigakis
    (r'^(?:/|.json|.xml)?$', 'list_flavors'),
52 c36934a7 Giorgos Verigakis
    (r'^/detail(?:.json|.xml)?$', 'list_flavors', {'detail': True}),
53 c36934a7 Giorgos Verigakis
    (r'^/(\d+)(?:.json|.xml)?$', 'get_flavor_details'),
54 c36934a7 Giorgos Verigakis
)
55 c36934a7 Giorgos Verigakis
56 c36934a7 Giorgos Verigakis
57 c36934a7 Giorgos Verigakis
def flavor_to_dict(flavor, detail=True):
58 c36934a7 Giorgos Verigakis
    d = {'id': flavor.id, 'name': flavor.name}
59 c36934a7 Giorgos Verigakis
    if detail:
60 c36934a7 Giorgos Verigakis
        d['ram'] = flavor.ram
61 c36934a7 Giorgos Verigakis
        d['disk'] = flavor.disk
62 f1641e4d Markos Gogoulos
        d['cpu'] = flavor.cpu
63 c909cbbd Giorgos Verigakis
        d['SNF:disk_template'] = flavor.disk_template
64 c36934a7 Giorgos Verigakis
    return d
65 c36934a7 Giorgos Verigakis
66 c36934a7 Giorgos Verigakis
67 b3fd98ae Christos Stavrakakis
@api.api_method(http_method='GET', user_required=True, logger=log)
68 c36934a7 Giorgos Verigakis
def list_flavors(request, detail=False):
69 c36934a7 Giorgos Verigakis
    # Normal Response Codes: 200, 203
70 c36934a7 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
71 c36934a7 Giorgos Verigakis
    #                       serviceUnavailable (503),
72 c36934a7 Giorgos Verigakis
    #                       unauthorized (401),
73 c36934a7 Giorgos Verigakis
    #                       badRequest (400),
74 c36934a7 Giorgos Verigakis
    #                       overLimit (413)
75 cd2b0bf5 Christos Stavrakakis
76 9e98ba3c Giorgos Verigakis
    log.debug('list_flavors detail=%s', detail)
77 2c60cbef Giorgos Verigakis
    active_flavors = Flavor.objects.exclude(deleted=True)
78 e440e835 Christos Stavrakakis
    flavors = [flavor_to_dict(flavor, detail)
79 cd2b0bf5 Christos Stavrakakis
               for flavor in active_flavors.order_by('id')]
80 cd2b0bf5 Christos Stavrakakis
81 d8e50a39 Giorgos Verigakis
    if request.serialization == 'xml':
82 b36f78fa Giorgos Verigakis
        data = render_to_string('list_flavors.xml', {
83 b36f78fa Giorgos Verigakis
            'flavors': flavors,
84 b36f78fa Giorgos Verigakis
            'detail': detail})
85 c36934a7 Giorgos Verigakis
    else:
86 c36934a7 Giorgos Verigakis
        data = json.dumps({'flavors': {'values': flavors}})
87 aa197ee4 Vangelis Koukis
88 d8e50a39 Giorgos Verigakis
    return HttpResponse(data, status=200)
89 c36934a7 Giorgos Verigakis
90 cd2b0bf5 Christos Stavrakakis
91 b3fd98ae Christos Stavrakakis
@api.api_method(http_method='GET', user_required=True, logger=log)
92 c36934a7 Giorgos Verigakis
def get_flavor_details(request, flavor_id):
93 c36934a7 Giorgos Verigakis
    # Normal Response Codes: 200, 203
94 c36934a7 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
95 c36934a7 Giorgos Verigakis
    #                       serviceUnavailable (503),
96 c36934a7 Giorgos Verigakis
    #                       unauthorized (401),
97 c36934a7 Giorgos Verigakis
    #                       badRequest (400),
98 c36934a7 Giorgos Verigakis
    #                       itemNotFound (404),
99 c36934a7 Giorgos Verigakis
    #                       overLimit (413)
100 cd2b0bf5 Christos Stavrakakis
101 9e98ba3c Giorgos Verigakis
    log.debug('get_flavor_details %s', flavor_id)
102 aa8230bd Christos Stavrakakis
    flavor = util.get_flavor(flavor_id, include_deleted=True)
103 529178b1 Giorgos Verigakis
    flavordict = flavor_to_dict(flavor, detail=True)
104 aa197ee4 Vangelis Koukis
105 d8e50a39 Giorgos Verigakis
    if request.serialization == 'xml':
106 529178b1 Giorgos Verigakis
        data = render_to_string('flavor.xml', {'flavor': flavordict})
107 c36934a7 Giorgos Verigakis
    else:
108 529178b1 Giorgos Verigakis
        data = json.dumps({'flavor': flavordict})
109 aa197ee4 Vangelis Koukis
110 c36934a7 Giorgos Verigakis
    return HttpResponse(data, status=200)