\n to check authentication: /astakos authenticate\
\n to set authentication token: /config set token <token>'
-howto_token = [
- 'Make sure a valid token is provided:',
- ' to check if the token is valid: /astakos authenticate',
- ' to set a token: /config set [.server.]token <token>',
- ' to get current token: /config get [server.]token']
-
howto_personality = [
'Defines a file to be injected to VMs personality.',
'Personality value syntax: PATH,[SERVER_PATH,[OWNER,[GROUP,[MODE]]]]',
def raise_if_connection_error(err):
+ if err.status == 401:
+ raiseCLIError(err, 'Authorization failed', details=[
+ 'Make sure a valid token is provided:',
+ ' to check if the token is valid: /astakos authenticate',
+ ' to set a token: /config set [.server.]token <token>',
+ ' to get current token: /config get [server.]token'])
if err.status in range(-12, 200):
raiseCLIError(err, details=[
'Check if service is up or set compute.url',
except ValueError as err:
raiseCLIError(err, 'Server id must be a positive integer', 1)
except ClientError as ce:
- if ce.status == 401:
- raiseCLIError(ce, 'Authorization failed', details=howto_token)
- elif ce.status == 404:
+ if ce.status == 404:
raiseCLIError(ce, 'Server with id %s not found' % server_id)
raise_if_connection_error(ce)
raiseCLIError(ce)
@command(server_cmds)
class server_rename(_init_cyclades):
- """Update a server's name"""
+ """Set/update a server (VM) name
+ VM names are not unique, therefore multiple server may share the same name
+ """
def main(self, server_id, new_name):
super(self.__class__, self).main()
try:
self.client.update_server_name(int(server_id), new_name)
- except ClientError as err:
- raiseCLIError(err)
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
raiseCLIError(err, 'Invalid server id %s ' % server_id,
- details='Server id must be positive integer\n',
+ details=['Server id must be positive integer\n'],
importance=1)
@command(server_cmds)
class server_delete(_init_cyclades):
- """Delete a server"""
+ """Delete a server (VM)"""
def main(self, server_id):
super(self.__class__, self).main()
try:
self.client.delete_server(int(server_id))
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
@command(server_cmds)
class server_reboot(_init_cyclades):
- """Reboot a server"""
+ """Reboot a server (VM)"""
arguments = dict(
hard=FlagArgument('perform a hard reboot', '-f')
super(self.__class__, self).main()
try:
self.client.reboot_server(int(server_id), self['hard'])
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
@command(server_cmds)
class server_start(_init_cyclades):
- """Start a server"""
+ """Start an existing server (VM)"""
def main(self, server_id):
super(self.__class__, self).main()
try:
self.client.start_server(int(server_id))
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
@command(server_cmds)
class server_shutdown(_init_cyclades):
- """Shutdown a server"""
+ """Shutdown an active server (VM)"""
def main(self, server_id):
super(self.__class__, self).main()
try:
self.client.shutdown_server(int(server_id))
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
@command(server_cmds)
class server_console(_init_cyclades):
- """Get a VNC console"""
+ """Get a VNC console to access an existing server (VM)
+ Console connection information provided (at least):
+ host: (url or address) a VNC host
+ port: (int) the gateway to enter VM on host
+ password: for VNC authorization
+ """
def main(self, server_id):
super(self.__class__, self).main()
try:
reply = self.client.get_server_console(int(server_id))
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
print_dict(reply)
@command(server_cmds)
class server_firewall(_init_cyclades):
- """Set the server's firewall profile"""
+ """Set the server (VM) firewall profile on VMs public network
+ Values for profile:
+ DISABLED: Shutdown firewall
+ ENABLED: Firewall in normal mode
+ PROTECTED: Firewall in secure mode
+ """
def main(self, server_id, profile):
super(self.__class__, self).main()
try:
- self.client.set_firewall_profile(int(server_id), profile)
+ self.client.set_firewall_profile(
+ int(server_id),
+ unicode(profile).upper())
+ except ClientError as ce:
+ if ce.status == 400 and 'firewall' in '%s' % ce:
+ raiseCLIError(ce,
+ '%s is an unsupported firewall profile' % profile)
+ elif ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
@command(server_cmds)
class server_addr(_init_cyclades):
- """List a server's nic address"""
+ """List the addresses of all network interfaces on a server (VM)"""
def main(self, server_id):
super(self.__class__, self).main()
try:
reply = self.client.list_server_nics(int(server_id))
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
print_list(reply, with_enumeration=len(reply) > 1)
@command(server_cmds)
class server_meta(_init_cyclades):
- """Get a server's metadata"""
+ """Get a server's metadatum
+ Metadata are formed as key:value pairs where key is used to retrieve them
+ """
def main(self, server_id, key=''):
super(self.__class__, self).main()
try:
reply = self.client.get_server_metadata(int(server_id), key)
+ except ClientError as ce:
+ if ce.status == 404:
+ msg = 'No metadata with key %s' % key\
+ if 'Metadata' in '%s' % ce\
+ else 'Server with id %s not found' % server_id
+ raiseCLIError(ce, msg)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
- except Exception as err:
- raiseCLIError(err)
- print_dict(reply)
-
-
-@command(server_cmds)
-class server_addmeta(_init_cyclades):
- """Add server metadata"""
-
- def main(self, server_id, key, val):
- super(self.__class__, self).main()
- try:
- reply = self.client.create_server_metadata(\
- int(server_id), key, val)
- except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
print_dict(reply)
@command(server_cmds)
class server_setmeta(_init_cyclades):
- """Update server's metadata"""
+ """set server (VM) metadata
+ Metadata are formed as key:value pairs, both needed to set one
+ """
def main(self, server_id, key, val):
super(self.__class__, self).main()
try:
reply = self.client.update_server_metadata(int(server_id),
**metadata)
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
print_dict(reply)
@command(server_cmds)
class server_delmeta(_init_cyclades):
- """Delete server metadata"""
+ """Delete server (VM) metadata"""
def main(self, server_id, key):
super(self.__class__, self).main()
try:
self.client.delete_server_metadata(int(server_id), key)
+ except ClientError as ce:
+ if ce.status == 404:
+ msg = 'No metadata with key %s' % key\
+ if 'Metadata' in '%s' % ce\
+ else 'Server with id %s not found' % server_id
+ raiseCLIError(ce, msg)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
@command(server_cmds)
class server_stats(_init_cyclades):
- """Get server statistics"""
+ """Get server (VM) statistics"""
def main(self, server_id):
super(self.__class__, self).main()
try:
reply = self.client.get_server_stats(int(server_id))
+ except ClientError as ce:
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
except ValueError as err:
- raiseCLIError(err, 'Server id must be positive integer', 1)
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception as err:
raiseCLIError(err)
print_dict(reply, exclude=('serverRef',))
progress_bar = self.arguments['progress_bar']
wait_cb = progress_bar.get_generator(\
'Server %s still in %s mode' % (server_id, currect_status))
+ except ValueError as err:
+ raiseCLIError(err, 'Invalid server id %s ' % server_id,
+ details=['Server id must be positive integer\n'],
+ importance=1)
except Exception:
wait_cb = None
try:
print('\nCanceled')
progress_bar.finish()
return
- except ClientError as err:
+ except ClientError as ce:
progress_bar.finish()
- raiseCLIError(err)
+ if ce.status == 404:
+ raiseCLIError(ce, 'Server with id %s not found' % server_id)
+ raise_if_connection_error(ce)
+ raiseCLIError(ce)
if new_mode:
print('Server %s is now in %s mode' % (server_id, new_mode))
else: