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
|