details = unicode(r.request.method)+' '+unicode(r.request.url)
raise ClientError(message, r.status_code, details)
+ def servers_get(self, server_id='', command='', **kwargs):
+ """GET base_url/servers[/server_id][/command] request
+ @param server_id or ''
+ @param command: can be 'ips', 'stats', or ''
+ """
+ path = path4url('servers', server_id, command)
+ success = kwargs.pop('success', 200)
+ return self.get(path, success=success, **kwargs)
+
+ def servers_delete(self, server_id='', command='', **kwargs):
+ """DEL ETE base_url/servers[/server_id][/command] request
+ @param server_id or ''
+ @param command: can be 'ips', 'stats', or ''
+ """
+ path = path4url('servers', server_id, command)
+ success = kwargs.pop('success', 204)
+ return self.delete(path, success=success, **kwargs)
+
+ def servers_post(self, server_id='', command='', json_data=None, **kwargs):
+ """POST base_url/servers[/server_id]/[command] request
+ @param server_id or ''
+ @param command: can be 'action' or ''
+ @param json_data: a json valid dict that will be send as data
+ """
+ data = json_data
+ if json_data is not None:
+ data = json.dumps(json_data)
+ self.set_header('Content-Type', 'application/json')
+ self.set_header('Content-Length', len(data))
+
+ path = path4url('servers', server_id, command)
+ success = kwargs.pop('success', 202)
+ return self.post(path, data=data, success=success, **kwargs)
+
+ def servers_put(self, server_id='', command='', json_data=None, **kwargs):
+ """PUT base_url/servers[/server_id]/[command] request
+ @param server_id or ''
+ @param command: can be 'action' or ''
+ @param json_data: a json valid dict that will be send as data
+ """
+ data = json_data
+ if json_data is not None:
+ data = json.dumps(json_data)
+ self.set_header('Content-Type', 'application/json')
+ self.set_header('Content-Length', len(data))
+
+ path = path4url('servers', server_id, command)
+ success = kwargs.pop('success', 204)
+ return self.put(path, data=data, success=success, **kwargs)
+
def list_servers(self, detail=False):
"""List servers, returned detailed output if detailed is True"""
-
- path = path4url('servers','detail') if detail else path4url('servers')
- r = self.get(path, success=200)
+ detail = 'detail' if detail else ''
+ r = self.servers_get(command=detail)
return r.json['servers']['values']
def get_server_details(self, server_id):
"""Return detailed output on a server specified by its id"""
-
- path = path4url('servers', server_id)
- r = self.get(path, success=200)
+ r = self.servers_get(server_id)
return r.json['server']
def create_server(self, name, flavor_id, image_id, personality=None):
if personality:
req['server']['personality'] = personality
- r = self.post(path4url('servers'), json=req, success=202)
+ r = self.servers_post(json_data=req)
return r.json['server']
def update_server_name(self, server_id, new_name):
This call does not modify the hostname actually used by the server
internally.
"""
- path = path4url('servers', server_id)
req = {'server': {'name': new_name}}
- self.put(path, json=req, success=204)
+ self.servers_put(server_id, json_data=req)
def delete_server(self, server_id):
"""Submit a deletion request for a server specified by id"""
- path = path4url('servers', server_id)
- self.delete(path, success=204)
+ self.servers_delete(server_id)
def reboot_server(self, server_id, hard=False):
"""Submit a reboot request for a server specified by id"""
- path = path4url('servers', server_id, 'action')
type = 'HARD' if hard else 'SOFT'
req = {'reboot': {'type': type}}
- self.post(path, json=req, success=202)
+ self.servers_post(server_id, 'action', json_data=req)
- def get_server_metadata(self, server_id, key=None):
- path = path4url('servers', server_id, 'meta')
- if key:
- path = path4url(path, key)
- r = self.get(path, success=200)
- return r.json['meta'] if key else r.json['metadata']['values']
+ def get_server_metadata(self, server_id, key=''):
+ command = path4url('meta', key)
+ r = self.servers_get(server_id, command)
+ return r.json['meta'] if key != '' else r.json['metadata']['values']
def create_server_metadata(self, server_id, key, val):
- path = path4url('servers', server_id, 'meta', key)
+ command = path4url('meta', key)
req = {'meta': {key: val}}
- r = self.put(path, json=req, success=201)
+ r = self.servers_put(server_id, command, json_data=req, success=201)
return r.json['meta']
def update_server_metadata(self, server_id, **metadata):
- path = path4url('servers', server_id, 'meta')
req = {'metadata': metadata}
- r = self.post(path, json=req, success=201)
+ r = self.servers_post(server_id, 'meta', json_data=req, success=201)
return r.json['metadata']
def delete_server_metadata(self, server_id, key):
- path = path4url('servers', server_id, 'meta', key)
- self.delete(path, success=204)
-
-
+ command = path4url('meta', key)
+ self.servers_delete(server_id, command)
+
+
+ def flavors_get(self, flavor_id='', command='', **kwargs):
+ """GET base_url[/flavor_id][/command]
+ @param flavor_id
+ @param command
+ """
+ path = path4url('flavors', flavor_id, command)
+ success=kwargs.pop('success', 200)
+ return self.get(path, success=success**kwargs)
+
def list_flavors(self, detail=False):
- path = path4url('flavors', 'detail') if detail else path4url('flavors')
- r = self.get(path, success=200)
+ detail = 'detail' if detail else ''
+ r.self.flavors_get(command='detail')
return r.json['flavors']['values']
def get_flavor_details(self, flavor_id):
- path = path4url('flavors', flavor_id)
- r = self.get(path, success=200)
+ r = self.flavors_get(flavor_id)
return r.json['flavor']
-
+
+ def images_get(self, image_id='', command='', **kwargs):
+ """GET base_url[/image_id][/command]
+ @param image_id
+ @param command
+ """
+ path = path4url('images', image_id, command)
+ success=kwargs.pop('success', 200)
+ return self.get(path, success=success**kwargs)
+
+ def images_delete(self, image_id='', command='', **kwargs):
+ """DEL ETE base_url[/image_id][/command]
+ @param image_id
+ @param command
+ """
+ path = path4url('images', image_id, command)
+ success=kwargs.pop('success', 204)
+ return self.delete(path, success=success**kwargs)
+
+ def images_post(self, image_id='', command='', json_data=None, **kwargs):
+ """POST base_url/images[/image_id]/[command] request
+ @param image_id or ''
+ @param command: can be 'action' or ''
+ @param json_data: a json valid dict that will be send as data
+ """
+ data = json_data
+ if json_data is not None:
+ data = json.dumps(json_data)
+ self.set_header('Content-Type', 'application/json')
+ self.set_header('Content-Length', len(data))
+
+ path = path4url('images', image_id, command)
+ success = kwargs.pop('success', 201)
+ return self.post(path, data=data, success=success, **kwargs)
+
+ def images_put(self, image_id='', command='', json_data=None, **kwargs):
+ """PUT base_url/images[/image_id]/[command] request
+ @param image_id or ''
+ @param command: can be 'action' or ''
+ @param json_data: a json valid dict that will be send as data
+ """
+ data = json_data
+ if json_data is not None:
+ data = json.dumps(json_data)
+ self.set_header('Content-Type', 'application/json')
+ self.set_header('Content-Length', len(data))
+
+ path = path4url('images', image_id, command)
+ success = kwargs.pop('success', 201)
+ return self.put(path, data=data, success=success, **kwargs)
+
def list_images(self, detail=False):
- path = path4url('images','detail') if detail else path4url('images')
- r = self.get(path, success=200)
+ detail = 'detail' if details else ''
+ r = self.images_get(command=detail)
return r.json['images']['values']
def get_image_details(self, image_id):
- path = path4url('images', image_id)
- r = self.get(path, success=200)
+ r = self.images_get(image_id)
return r.json['image']
def delete_image(self, image_id):
- path = path4url('images', image_id)
- self.delete(path, success=204)
-
- def get_image_metadata(self, image_id, key=None):
- path = path4url('images', image_id, 'meta')
- if key:
- path = path4url(path, key)
- r = self.get(path, success=200)
- return r.json['meta'] if key else r.json['metadata']['values']
+ self.images_delete(image_id)
+
+ def get_image_metadata(self, image_id, key=''):
+ command = path4url('meta', key)
+ r = self.images_get(image_id, command)
+ return r.json['meta'] if key != '' else r.json['metadata']['values']
def create_image_metadata(self, image_id, key, val):
- path = path4url('images', image_id, 'meta', key)
+ command = path4url('meta', key)
req = {'meta': {key: val}}
- r = self.put(path, json=req, success=201)
+ r = self.images_put(image_id, command, json_data=req)
return r.json['meta']
def update_image_metadata(self, image_id, **metadata):
- path = path4url('images', image_id, 'meta')
req = {'metadata': metadata}
- r = self.post(path, json=req, success=201)
+ r - self.images_post(image_id, 'meta', json_data=req)
return r.json['metadata']
def delete_image_metadata(self, image_id, key):
- path = path4url('images', image_id, 'meta', key)
- self.delete(path, success=204)
+ command = path4url('meta', key)
+ self.images_delete(image_id, command)