# interpreted as representing official policies, either expressed
# or implied, of GRNET S.A.
-from kamaki.cli import command, set_api_description
+from kamaki.cli import command, set_api_description, CLIError
+from kamaki.utils import print_dict, print_items, print_list
set_api_description('server', "Compute/Cyclades API server commands")
set_api_description('flavor', "Compute/Cyclades API flavor commands")
set_api_description('image', "Compute/Cyclades or Glance API image commands")
set_api_description('network', "Compute/Cyclades API network commands")
-from .cyclades import CycladesClient
+from .cyclades import CycladesClient, ClientError
+from .cli_utils import raiseCLIError
from colors import yellow
def main(self):
super(self.__class__, self).main()
- servers = self.client.list_servers(self.args.detail)
- print_items(servers)
+ try:
+ servers = self.client.list_servers(self.args.detail)
+ print_items(servers)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class server_info(_init_cyclades):
super(self.__class__, self).main()
try:
server = self.client.get_server_details(int(server_id))
- except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ except ClientError as err:
+ raiseCLIError(err)
+ except ValueError as err:
+ raise CLIError(message='Server id must be positive integer',
+ importance=1)
print_dict(server)
@command()
path = p[0]
if not path:
- print("Invalid personality argument '%s'" % p)
- return 1
+ raise CLIError(message='Invalid personality argument %s'%p, importance=1)
if not exists(path):
- print("File %s does not exist" % path)
- return 1
+ raise CLIError(message="File %s does not exist" % path, importance=1)
with open(path) as f:
contents = b64encode(f.read())
d['mode'] = int(p[4])
personalities.append(d)
- reply = self.client.create_server(name, int(flavor_id), image_id,
+ try:
+ reply = self.client.create_server(name, int(flavor_id), image_id,
personalities)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(reply)
@command()
super(self.__class__, self).main()
try:
self.client.update_server_name(int(server_id), new_name)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_delete(_init_cyclades):
super(self.__class__, self).main()
try:
self.client.delete_server(int(server_id))
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_reboot(_init_cyclades):
super(self.__class__, self).main()
try:
self.client.reboot_server(int(server_id), self.args.hard)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_start(_init_cyclades):
super(self.__class__, self).main()
try:
self.client.start_server(int(server_id))
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_shutdown(_init_cyclades):
super(self.__class__, self).main()
try:
self.client.shutdown_server(int(server_id))
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_console(_init_cyclades):
super(self.__class__, self).main()
try:
reply = self.client.get_server_console(int(server_id))
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_dict(reply)
@command()
super(self.__class__, self).main()
try:
self.client.set_firewall_profile(int(server_id), profile)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
-
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_addr(_init_cyclades):
"""List a server's addresses"""
super(self.__class__, self).main()
try:
reply = self.client.list_server_nic_details(int(server_id), network)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_list(reply)
@command()
super(self.__class__, self).main()
try:
reply = self.client.get_server_metadata(int(server_id), key)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_dict(reply)
@command()
super(self.__class__, self).main()
try:
reply = self.client.create_server_metadata(int(server_id), key, val)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_dict(reply)
@command()
metadata = {key: val}
try:
reply = self.client.update_server_metadata(int(server_id), **metadata)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_dict(reply)
@command()
super(self.__class__, self).main()
try:
self.client.delete_server_metadata(int(server_id), key)
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
@command()
class server_stats(_init_cyclades):
super(self.__class__, self).main()
try:
reply = self.client.get_server_stats(int(server_id))
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Server id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_dict(reply, exclude=('serverRef',))
@command()
def main(self):
super(self.__class__, self).main()
- flavors = self.client.list_flavors(self.args.detail)
+ try:
+ flavors = self.client.list_flavors(self.args.detail)
+ except ClientError as err:
+ raiseCLIError(err)
print_items(flavors)
@command()
super(self.__class__, self).main()
try:
flavor = self.client.get_flavor_details(int(flavor_id))
+ except ClientError as err:
+ raiseCLIError(err)
except ValueError:
- print(yellow('Flavor id must be a base10 integer'))
- return
+ raise CLIError(message='Server id must be positive integer', importance=1)
print_dict(flavor)
@command()
def main(self):
super(self.__class__, self).main()
- images = self.client.list_images(self.args.detail)
+ try:
+ images = self.client.list_images(self.args.detail)
+ except ClientError as err:
+ raiseCLIError(err)
print_items(images)
@command()
def main(self, image_id):
super(self.__class__, self).main()
- image = self.client.get_image_details(image_id)
+ try:
+ image = self.client.get_image_details(image_id)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(image)
@command()
def main(self, image_id):
super(self.__class__, self).main()
- self.client.delete_image(image_id)
+ try:
+ self.client.delete_image(image_id)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class image_properties(_init_cyclades):
def main(self, image_id, key=None):
super(self.__class__, self).main()
- reply = self.client.get_image_metadata(image_id, key)
+ try:
+ reply = self.client.get_image_metadata(image_id, key)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(reply)
@command()
def main(self, image_id, key, val):
super(self.__class__, self).main()
- reply = self.client.create_image_metadata(image_id, key, val)
+ try:
+ reply = self.client.create_image_metadata(image_id, key, val)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(reply)
@command()
def main(self, image_id, key, val):
super(self.__class__, self).main()
metadata = {key: val}
- reply = self.client.update_image_metadata(image_id, **metadata)
+ try:
+ reply = self.client.update_image_metadata(image_id, **metadata)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(reply)
@command()
def main(self, image_id, key):
super(self.__class__, self).main()
- self.client.delete_image_metadata(image_id, key)
+ try:
+ self.client.delete_image_metadata(image_id, key)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class network_list(_init_cyclades):
def main(self):
super(self.__class__, self).main()
- networks = self.client.list_networks(self.args.detail)
+ try:
+ networks = self.client.list_networks(self.args.detail)
+ except ClientError as err:
+ raiseCLIError(err)
print_items(networks)
@command()
def main(self, name):
super(self.__class__, self).main()
- reply = self.client.create_network(name)
+ try:
+ reply = self.client.create_network(name)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(reply)
@command()
def main(self, network_id):
super(self.__class__, self).main()
- network = self.client.get_network_details(network_id)
+ try:
+ network = self.client.get_network_details(network_id)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(network)
@command()
def main(self, network_id, new_name):
super(self.__class__, self).main()
- self.client.update_network_name(network_id, new_name)
+ try:
+ self.client.update_network_name(network_id, new_name)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class network_delete(_init_cyclades):
def main(self, network_id):
super(self.__class__, self).main()
- self.client.delete_network(network_id)
+ try:
+ self.client.delete_network(network_id)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class network_connect(_init_cyclades):
def main(self, server_id, network_id):
super(self.__class__, self).main()
- self.client.connect_server(server_id, network_id)
+ try:
+ self.client.connect_server(server_id, network_id)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class network_disconnect(_init_cyclades):
server_id = nic_id.split('-')[1]
self.client.disconnect_server(server_id, nic_id)
except IndexError:
- print(yellow('nid_id format: nic-<server_id>-<nic_index>'))
\ No newline at end of file
+ raise CLIError(message='Incorrect nic format', importance=1,
+ details='nid_id format: nic-<server_id>-<nic_index>')
+ except ClientError as err:
+ raiseCLIError(err)
\ No newline at end of file
# or implied, of GRNET S.A.command
from kamaki.cli import command, set_api_description
+from kamaki.utils import print_dict, print_items
set_api_description('image', "Compute/Cyclades or Glance API image commands")
-from .image import ImageClient
+from .image import ImageClient, ClientError
+from .cli_utils import raiseCLIError
class _init_image(object):
def main(self):
- token = self.config.get('store', 'token') or self.config.get('global', 'token')
- base_url = self.config.get('store', 'url') or self.config.get('global', 'url')
- self.client = ImageClient(base_url=base_url, token=token)
+ try:
+ token = self.config.get('store', 'token') or self.config.get('global', 'token')
+ base_url = self.config.get('store', 'url') or self.config.get('global', 'url')
+ self.client = ImageClient(base_url=base_url, token=token)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class image_public(_init_image):
filters[filter] = val
order = self.args.order or ''
- images = self.client.list_public(self.args.detail, filters=filters,
- order=order)
+ try:
+ images = self.client.list_public(self.args.detail,
+ filters=filters, order=order)
+ except ClientError as err:
+ raiseCLIError(err)
print_items(images, title=('name',))
@command()
def main(self, image_id):
super(self.__class__, self).main()
- print('HELLO!')
- image = self.client.get_meta(image_id)
+ try:
+ image = self.client.get_meta(image_id)
+ except ClientError as err:
+ raiseCLIError(err)
print_dict(image)
@command()
for property in self.args.properties or []:
key, sep, val = property.partition('=')
if not sep:
- print("Invalid property '%s'" % property)
- return 1
+ raise CLIError(message="Invalid property '%s'" % property, importance=1)
properties[key.strip()] = val.strip()
- self.client.register(name, location, params, properties)
+ try:
+ self.client.register(name, location, params, properties)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class image_members(_init_image):
def main(self, image_id):
super(self.__class__, self).main()
- members = self.client.list_members(image_id)
+ try:
+ members = self.client.list_members(image_id)
+ except ClientError as err:
+ raiseCLIError(err)
for member in members:
print(member['member_id'])
def main(self, member):
super(self.__class__, self).main()
- images = self.client.list_shared(member)
+ try:
+ images = self.client.list_shared(member)
+ except ClientError as err:
+ raiseCLIError(err)
for image in images:
print(image['image_id'])
def main(self, image_id, member):
super(self.__class__, self).main()
- self.client.add_member(image_id, member)
+ try:
+ self.client.add_member(image_id, member)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class image_delmember(_init_image):
"""Remove a member from an image"""
def main(self, image_id, member):
- super(self.__class__, self).main()
- self.client.remove_member(image_id, member)
+ super(self.__class__, self).main()
+ try:
+ self.client.remove_member(image_id, member)
+ except ClientError as err:
+ raiseCLIError(err)
@command()
class image_setmembers(_init_image):
"""Set the members of an image"""
def main(self, image_id, *member):
- super(self.__class__, self).main()
- self.client.set_members(image_id, member)
+ super(self.__class__, self).main()
+ try:
+ self.client.set_members(image_id, member)
+ except ClientError as err:
+ raiseCLIError(err)