Statistics
| Branch: | Tag: | Revision:

root / api / handlers.py @ 427a9220

History | View | Annotate | Download (3.5 kB)

1
# vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
2
#
3
# Copyright © 2010 Greek Research and Technology Network
4
#
5

    
6
from piston.handler import BaseHandler, AnonymousBaseHandler
7
from synnefo.api.faults import fault, noContent, accepted
8

    
9
VERSIONS = [
10
    {
11
        "status": "CURRENT",
12
        "id": "v1.0",
13
        "docURL" : "http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20090714.pdf ",
14
        "wadl" : "http://docs.rackspacecloud.com/servers/api/v1.0/application.wadl"
15
    },
16
]
17

    
18
class VersionHandler(AnonymousBaseHandler):
19
    allowed_methods = ('GET',)
20

    
21
    def read(self, request, number=None):
22
        if number is None:
23
            versions = map(lambda v: {
24
                        "status": v["status"],
25
                        "id": v["id"],
26
                    }, VERSIONS)
27
            return { "versions": versions }
28
        else:
29
            for version in VERSIONS:
30
                if version["id"] == number:
31
                    return { "version": version }
32
            return fault.itemNotFound
33

    
34

    
35
# XXX: incomplete
36
class ServerHandler(BaseHandler):
37
    def read(self, request, id=None):
38
        if id is None:
39
            return self.read_all(request)
40
        elif id is "detail":
41
            return self.read_all(request, detail=True)
42
        else:
43
            return self.read_one(request, id)
44

    
45
    def read_one(self, request, id):
46
        print ("server info %s" % id)
47
        return {}
48

    
49
    def read_all(self, request, detail=False):
50
        if not detail:
51
            print "server info all"
52
        else:
53
            print "server info all detail"
54
        return {}
55

    
56
    def create(self, request):
57
        return accepted
58

    
59
    def update(self, request, id):
60
        return noContent
61

    
62
    def delete(self, request, id):
63
        return accepted
64

    
65

    
66
class ServerAddressHandler(BaseHandler):
67
    allowed_methods = ('GET', 'PUT', 'DELETE')
68

    
69
    def read(self, request, id, type=None):
70
        """List IP addresses for a server"""
71
        if type is None:
72
            pass
73
        elif type == "private":
74
            pass
75
        elif type == "public":
76
            pass
77
        return {}
78

    
79
    def update(self, request, id, address):
80
        """Share an IP address to another in the group"""
81
        return accepted
82

    
83
    def delete(self, request, id, address):
84
        """Unshare an IP address"""
85
        return accepted
86

    
87

    
88
class ServerActionHandler(BaseHandler):
89
    allowed_methods = ('POST',)
90

    
91
    def create(self, request, id):
92
        """Reboot, rebuild, resize, confirm resized, revert resized"""
93
        print ("server action %s" % id)
94
        return accepted
95

    
96

    
97
class FlavorHandler(BaseHandler):
98
    allowed_methods = ('GET',)
99
    flavors = [
100
          {
101
            "id" : 1,
102
            "name" : "256 MB Server",
103
            "ram" : 256,
104
            "disk" : 10
105
          },
106
          {
107
            "id" : 2,
108
            "name" : "512 MB Server",
109
            "ram" : 512,
110
            "disk" : 20
111
          }
112
        ]
113

    
114
    def read(self, request, id=None):
115
        """List flavors
116

117
        Returns: OK
118
        Faults: cloudServersFault, serviceUnavailable, unauthorized, badRequest
119
        """
120
        if id is None:
121
            simple = map(lambda v: {
122
                        "id": v["id"],
123
                        "name": v["name"],
124
                    }, self.flavors)
125
            return { "flavors": simple }
126
        elif id == "detail":
127
            return { "flavors": self.flavors }
128
        else:
129
            for flavor in self.flavors:
130
                if str(flavor["id"]) == id:
131
                    return { "flavor": flavor }
132
            return fault.itemNotFound