Statistics
| Branch: | Tag: | Revision:

root / api / handlers.py @ ed66d976

History | View | Annotate | Download (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 ServerBackupHandler(BaseHandler):
98
    """ Backup Schedules are not implemented yet, return notImplemented """
99
    allowed_methods = ('GET', 'POST', 'DELETE')
100

    
101
    def read(self, request, id):
102
        return fault.notImplemented
103

    
104
    def create(self, request, id):
105
        return fault.notImplemented
106

    
107
    def delete(self, request, id):
108
        return fault.notImplemented
109

    
110

    
111
class FlavorHandler(BaseHandler):
112
    allowed_methods = ('GET',)
113
    flavors = [
114
          {
115
            "id" : 1,
116
            "name" : "256 MB Server",
117
            "ram" : 256,
118
            "disk" : 10
119
          },
120
          {
121
            "id" : 2,
122
            "name" : "512 MB Server",
123
            "ram" : 512,
124
            "disk" : 20
125
          }
126
        ]
127

    
128
    def read(self, request, id=None):
129
        """
130
        List flavors or retrieve one
131

132
        Returns: OK
133
        Faults: cloudServersFault, serviceUnavailable, unauthorized,
134
                badRequest, itemNotFound
135
        """
136
        if id is None:
137
            simple = map(lambda v: {
138
                        "id": v["id"],
139
                        "name": v["name"],
140
                    }, self.flavors)
141
            return { "flavors": simple }
142
        elif id == "detail":
143
            return { "flavors": self.flavors }
144
        else:
145
            for flavor in self.flavors:
146
                if str(flavor["id"]) == id:
147
                    return { "flavor": flavor }
148
            return fault.itemNotFound
149

    
150

    
151
class ImageHandler(BaseHandler):
152
    allowed_methods = ('GET', 'POST')
153

    
154
    def read(self, request, id=None):
155
        """
156
        List images or retrieve one
157

158
        Returns: OK
159
        Faults: cloudServersFault, serviceUnavailable, unauthorized,
160
                badRequest, itemNotFound
161
        """
162
        if id is None:
163
            return {}
164
        elif id == "detail":
165
            return {}
166
        else:
167
            return fault.itemNotFound
168

    
169
    def create(self, request):
170
        """Create a new image"""
171
        return accepted
172

    
173

    
174
class SharedIPGroupHandler(BaseHandler):
175
    allowed_methods = ('GET', 'POST', 'DELETE')
176

    
177
    def read(self, request, id=None):
178
        """List Shared IP Groups"""
179
        if id is None:
180
            return {}
181
        elif id == "detail":
182
            return {}
183
        else:
184
            return fault.itemNotFound
185

    
186
    def create(self, request, id):
187
        """Creates a new Shared IP Group"""
188
        return created
189

    
190
    def delete(self, request, id):
191
        """Deletes a Shared IP Group"""
192
        return noContent