Revision b3b32add
b/kamaki/cli.py | ||
---|---|---|
257 | 257 |
self.client.reboot_server(int(server_id), self.options.hard) |
258 | 258 |
|
259 | 259 |
|
260 |
@command(api='asterias')
|
|
260 |
@command(api='cyclades')
|
|
261 | 261 |
class server_start(object): |
262 | 262 |
"""start server""" |
263 | 263 |
|
... | ... | |
265 | 265 |
self.client.start_server(int(server_id)) |
266 | 266 |
|
267 | 267 |
|
268 |
@command(api='asterias')
|
|
268 |
@command(api='cyclades')
|
|
269 | 269 |
class server_shutdown(object): |
270 | 270 |
"""shutdown server""" |
271 | 271 |
|
... | ... | |
273 | 273 |
self.client.shutdown_server(int(server_id)) |
274 | 274 |
|
275 | 275 |
|
276 |
@command(api='asterias')
|
|
276 |
@command(api='cyclades')
|
|
277 | 277 |
class server_console(object): |
278 | 278 |
"""get a VNC console""" |
279 | 279 |
|
... | ... | |
282 | 282 |
print_dict(reply) |
283 | 283 |
|
284 | 284 |
|
285 |
@command(api='asterias')
|
|
285 |
@command(api='cyclades')
|
|
286 | 286 |
class server_firewall(object): |
287 | 287 |
"""set the firewall profile""" |
288 | 288 |
|
... | ... | |
290 | 290 |
self.client.set_firewall_profile(int(server_id), profile) |
291 | 291 |
|
292 | 292 |
|
293 |
@command(api='asterias')
|
|
293 |
@command(api='cyclades')
|
|
294 | 294 |
class server_addr(object): |
295 | 295 |
"""list server addresses""" |
296 | 296 |
|
... | ... | |
336 | 336 |
self.client.delete_server_metadata(int(server_id), key) |
337 | 337 |
|
338 | 338 |
|
339 |
@command(api='asterias')
|
|
339 |
@command(api='cyclades')
|
|
340 | 340 |
class server_stats(object): |
341 | 341 |
"""get server statistics""" |
342 | 342 |
|
... | ... | |
392 | 392 |
|
393 | 393 |
|
394 | 394 |
@command(api='compute') |
395 |
class image_create(object): |
|
396 |
"""create image""" |
|
397 |
|
|
398 |
def main(self, server_id, name): |
|
399 |
reply = self.client.create_image(int(server_id), name) |
|
400 |
print_dict(reply) |
|
401 |
|
|
402 |
|
|
403 |
@command(api='compute') |
|
404 | 395 |
class image_delete(object): |
405 | 396 |
"""delete image""" |
406 | 397 |
|
... | ... | |
444 | 435 |
self.client.delete_image_metadata(image_id, key) |
445 | 436 |
|
446 | 437 |
|
447 |
@command(api='asterias')
|
|
438 |
@command(api='cyclades')
|
|
448 | 439 |
class network_list(object): |
449 | 440 |
"""list networks""" |
450 | 441 |
|
... | ... | |
458 | 449 |
print_items(networks) |
459 | 450 |
|
460 | 451 |
|
461 |
@command(api='asterias')
|
|
452 |
@command(api='cyclades')
|
|
462 | 453 |
class network_create(object): |
463 | 454 |
"""create a network""" |
464 | 455 |
|
... | ... | |
467 | 458 |
print_dict(reply) |
468 | 459 |
|
469 | 460 |
|
470 |
@command(api='asterias')
|
|
461 |
@command(api='cyclades')
|
|
471 | 462 |
class network_info(object): |
472 | 463 |
"""get network details""" |
473 | 464 |
|
... | ... | |
476 | 467 |
print_dict(network) |
477 | 468 |
|
478 | 469 |
|
479 |
@command(api='asterias')
|
|
470 |
@command(api='cyclades')
|
|
480 | 471 |
class network_rename(object): |
481 | 472 |
"""update network name""" |
482 | 473 |
|
... | ... | |
484 | 475 |
self.client.update_network_name(network_id, new_name) |
485 | 476 |
|
486 | 477 |
|
487 |
@command(api='asterias')
|
|
478 |
@command(api='cyclades')
|
|
488 | 479 |
class network_delete(object): |
489 | 480 |
"""delete a network""" |
490 | 481 |
|
... | ... | |
492 | 483 |
self.client.delete_network(network_id) |
493 | 484 |
|
494 | 485 |
|
495 |
@command(api='asterias')
|
|
486 |
@command(api='cyclades')
|
|
496 | 487 |
class network_connect(object): |
497 | 488 |
"""connect a server to a network""" |
498 | 489 |
|
... | ... | |
500 | 491 |
self.client.connect_server(server_id, network_id) |
501 | 492 |
|
502 | 493 |
|
503 |
@command(api='asterias')
|
|
494 |
@command(api='cyclades')
|
|
504 | 495 |
class network_disconnect(object): |
505 | 496 |
"""disconnect a server from a network""" |
506 | 497 |
|
b/kamaki/clients/compute.py | ||
---|---|---|
33 | 33 |
|
34 | 34 |
import json |
35 | 35 |
|
36 |
from . import ClientError |
|
36 | 37 |
from .http import HTTPClient |
37 | 38 |
|
38 | 39 |
|
... | ... | |
146 | 147 |
path = '/images/detail' if detail else '/images' |
147 | 148 |
reply = self.http_get(path) |
148 | 149 |
return reply['images']['values'] |
149 |
|
|
150 |
|
|
150 | 151 |
def get_image_details(self, image_id): |
151 |
path = '/images/%d' % image_id
|
|
152 |
path = '/images/%s' % image_id
|
|
152 | 153 |
reply = self.http_get(path) |
153 | 154 |
return reply['image'] |
154 |
|
|
155 |
def create_image(self, server_id, name): |
|
156 |
req = {'name': name, 'serverRef': server_id} |
|
157 |
body = json.dumps({'image': req}) |
|
158 |
reply = self.http_post('/images', body) |
|
159 |
return reply['image'] |
|
160 |
|
|
155 |
|
|
161 | 156 |
def delete_image(self, image_id): |
162 |
path = '/images/%d' % image_id
|
|
157 |
path = '/images/%s' % image_id
|
|
163 | 158 |
self.http_delete(path) |
164 | 159 |
|
165 | 160 |
def get_image_metadata(self, image_id, key=None): |
166 |
path = '/images/%d/meta' % image_id
|
|
161 |
path = '/images/%s/meta' % image_id
|
|
167 | 162 |
if key: |
168 | 163 |
path += '/%s' % key |
169 | 164 |
reply = self.http_get(path) |
170 | 165 |
return reply['meta'] if key else reply['metadata']['values'] |
171 | 166 |
|
172 | 167 |
def create_image_metadata(self, image_id, key, val): |
173 |
path = '/images/%d/meta/%s' % (image_id, key)
|
|
168 |
path = '/images/%s/meta/%s' % (image_id, key)
|
|
174 | 169 |
body = json.dumps({'meta': {key: val}}) |
175 | 170 |
reply = self.http_put(path, body, success=201) |
176 |
reply['meta'] |
|
171 |
return reply['meta']
|
|
177 | 172 |
|
178 | 173 |
def update_image_metadata(self, image_id, **metadata): |
179 |
path = '/images/%d/meta' % image_id
|
|
174 |
path = '/images/%s/meta' % image_id
|
|
180 | 175 |
body = json.dumps({'metadata': metadata}) |
181 | 176 |
reply = self.http_post(path, body, success=201) |
182 | 177 |
return reply['metadata'] |
183 | 178 |
|
184 | 179 |
def delete_image_metadata(self, image_id, key): |
185 |
path = '/images/%d/meta/%s' % (image_id, key) |
|
186 |
reply = self.http_delete(path) |
|
180 |
path = '/images/%s/meta/%s' % (image_id, key) |
|
181 |
self.http_delete(path) |
b/kamaki/clients/image.py | ||
---|---|---|
37 | 37 |
|
38 | 38 |
from urllib import quote |
39 | 39 |
|
40 |
from . import ClientError |
|
40 | 41 |
from .http import HTTPClient |
41 | 42 |
|
42 | 43 |
|
b/kamaki/clients/pithos.py | ||
---|---|---|
73 | 73 |
if resp.status == 201: |
74 | 74 |
return |
75 | 75 |
|
76 |
hashes = set(reply.split())
|
|
76 |
hashes = set(json.loads(reply))
|
|
77 | 77 |
|
78 | 78 |
f.seek(0) |
79 | 79 |
data = f.read(blocksize) |
Also available in: Unified diff