From 1aadd5e961a6f1983454f5f49f077f0be0d6cba8 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Fri, 20 May 2011 12:53:49 +0400 Subject: added support for reserving certain network for certain project --- bin/nova-manage | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index db964064d..c64f25c23 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -515,11 +515,11 @@ class NetworkCommands(object): """Class for managing networks.""" def create(self, fixed_range=None, num_networks=None, - network_size=None, vlan_start=None, + network_size=None, vlan_start=None, project_id=None, vpn_start=None, fixed_range_v6=None, label='public'): """Creates fixed ips for host by range arguments: fixed_range=FLAG, [num_networks=FLAG], - [network_size=FLAG], [vlan_start=FLAG], + [network_size=FLAG], [vlan_start=FLAG], [project_id=None], [vpn_start=FLAG], [fixed_range_v6=FLAG]""" if not fixed_range: msg = _('Fixed range in the form of 10.0.0.0/8 is ' @@ -545,7 +545,8 @@ class NetworkCommands(object): vlan_start=int(vlan_start), vpn_start=int(vpn_start), cidr_v6=fixed_range_v6, - label=label) + label=label, + project_id=project_id) except ValueError, e: print e raise e -- cgit From 4c1fd8a303a8eb1287fd83b04bd767171221d117 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Mon, 30 May 2011 11:25:21 +0400 Subject: add support for keyword arguments --- bin/nova-manage | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index c64f25c23..3d09f9064 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1132,9 +1132,18 @@ def main(): action = argv.pop(0) matches = lazy_match(action, actions) action, fn = matches[0] + + fn_args, fn_kwargs = [], {} + for arg in argv: + if '=' in arg: + key, value = arg.split('=') + fn_kwargs[key] = value + else: + fn_args.append(arg) + # call the action with the remaining arguments try: - fn(*argv) + fn(*fn_args, **fn_kwargs) sys.exit(0) except TypeError: print _("Possible wrong number of arguments supplied") -- cgit From b85e089f807249eacc66172e56a1a69d450fafba Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Mon, 30 May 2011 11:30:22 +0400 Subject: project_id moved to be last --- bin/nova-manage | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 3d09f9064..8faf072bc 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -515,12 +515,12 @@ class NetworkCommands(object): """Class for managing networks.""" def create(self, fixed_range=None, num_networks=None, - network_size=None, vlan_start=None, project_id=None, - vpn_start=None, fixed_range_v6=None, label='public'): + network_size=None, vlan_start=None, vpn_start=None, + fixed_range_v6=None, label='public', project_id=None): """Creates fixed ips for host by range arguments: fixed_range=FLAG, [num_networks=FLAG], - [network_size=FLAG], [vlan_start=FLAG], [project_id=None], - [vpn_start=FLAG], [fixed_range_v6=FLAG]""" + [network_size=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], + [fixed_range_v6=FLAG], [project_id=None]""" if not fixed_range: msg = _('Fixed range in the form of 10.0.0.0/8 is ' 'required to create networks.') -- cgit From f53e7d16181e0a7141956d835f71c09d76508c2d Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Thu, 9 Jun 2011 22:02:01 +0400 Subject: parse options with optparse, options prepended '--' --- bin/nova-manage | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 8faf072bc..76bed16f7 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -62,6 +62,8 @@ import sys import time import IPy +from inspect import getargspec +from optparse import OptionParser # If ../nova/__init__.py exists, add ../ to Python search path, so that # it will override what happens to be installed in /usr/(local/)lib/python... @@ -1133,14 +1135,18 @@ def main(): matches = lazy_match(action, actions) action, fn = matches[0] - fn_args, fn_kwargs = [], {} - for arg in argv: - if '=' in arg: - key, value = arg.split('=') - fn_kwargs[key] = value - else: - fn_args.append(arg) - + func_args = getargspec(fn).args + parser = OptionParser() + for arg in func_args: + dasharg = "--%s" % arg + parser.add_option(dasharg) + + (opts, fn_args) = parser.parse_args(argv) + fn_kwargs = vars(opts) + for k, v in fn_kwargs.items(): + if v is None: + del fn_kwargs[k] + # call the action with the remaining arguments try: fn(*fn_args, **fn_kwargs) -- cgit From 3f69522284833a52373ccf1e1006d9b2f20ccb06 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Fri, 10 Jun 2011 17:33:54 +0400 Subject: decorators for action methods added --- bin/nova-manage | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 76bed16f7..2903e411c 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -105,6 +105,21 @@ flags.DEFINE_flag(flags.HelpshortFlag()) flags.DEFINE_flag(flags.HelpXMLFlag()) +# Decorators for actions +def positionargs(*args, **kwargs): + def _decorator(func): + req = args[-1] + func.__dict__['arguments'] = ' '.join("%s" % i for i in args[:req]) + func.__dict__['optargs'] = ' '.join("%s" % i for i in args[req:-1]) + return func + return _decorator + +def optionargs(*args, **kwargs): + def _decorator(func): + func.__dict__.setdefault('options', []).insert(0, (args, kwargs)) + return func + return _decorator + def param2id(object_id): """Helper function to convert various id types to internal id. args: [object_id], e.g. 'vol-0000000a' or 'volume-0000000a' or '10' @@ -515,7 +530,11 @@ class FloatingIpCommands(object): class NetworkCommands(object): """Class for managing networks.""" - + @optionargs('--project', dest="project_id", help='Project for network') + @optionargs('--vlan', dest="vlan_start", help='VLAN ID') + @positionargs('fixed_range', 'num_networks', + 'network_size', 'vlan_start', 'vpn_start', + 'fixed_range_v6', 'label', 'project_id', 1) def create(self, fixed_range=None, num_networks=None, network_size=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, label='public', project_id=None): @@ -1135,25 +1154,25 @@ def main(): matches = lazy_match(action, actions) action, fn = matches[0] - func_args = getargspec(fn).args - parser = OptionParser() - for arg in func_args: - dasharg = "--%s" % arg - parser.add_option(dasharg) - + usage = "%prog " + "%s %s %s [%s] [options]" % (sys.argv[2], + sys.argv[3], fn.arguments, fn.optargs) + parser = OptionParser(usage=usage) + for ar, kw in fn.options: + parser.add_option(*ar, **kw) (opts, fn_args) = parser.parse_args(argv) fn_kwargs = vars(opts) + for k, v in fn_kwargs.items(): if v is None: del fn_kwargs[k] - + # call the action with the remaining arguments try: fn(*fn_args, **fn_kwargs) sys.exit(0) except TypeError: print _("Possible wrong number of arguments supplied") - print "%s %s: %s" % (category, action, fn.__doc__) + print "" raise except Exception: print _("Command failed, please check log for more info") -- cgit From 8de8ed78c2d3d6ca8342134234e0cc361611de54 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Sat, 11 Jun 2011 00:30:30 +0400 Subject: removed posargs decorator, all methods decorated --- bin/nova-manage | 146 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 126 insertions(+), 20 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index ce9f07f56..0b92c349a 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -61,7 +61,6 @@ import sys import time import IPy -from inspect import getargspec from optparse import OptionParser # If ../nova/__init__.py exists, add ../ to Python search path, so that @@ -107,15 +106,7 @@ flags.DEFINE_flag(flags.HelpXMLFlag()) # Decorators for actions -def positionargs(*args, **kwargs): - def _decorator(func): - req = args[-1] - func.__dict__['arguments'] = ' '.join("%s" % i for i in args[:req]) - func.__dict__['optargs'] = ' '.join("%s" % i for i in args[req:-1]) - return func - return _decorator - -def optionargs(*args, **kwargs): +def args(*args, **kwargs): def _decorator(func): func.__dict__.setdefault('options', []).insert(0, (args, kwargs)) return func @@ -138,6 +129,7 @@ class VpnCommands(object): self.manager = manager.AuthManager() self.pipe = pipelib.CloudPipe() + @args('--project', dest="project", metavar='', help='Project name') def list(self, project=None): """Print a listing of the VPN data for one or all projects. @@ -183,10 +175,12 @@ class VpnCommands(object): self.pipe.launch_vpn_instance(p.id) time.sleep(10) + @args('--project', dest="project_id", metavar='', help='Project name') def run(self, project_id): """Start the VPN for a given project.""" self.pipe.launch_vpn_instance(project_id) + @args('--project', dest="project_id", metavar='', help='Project name') def change(self, project_id, ip, port): """Change the ip and port for a vpn. @@ -222,6 +216,7 @@ class ShellCommands(object): Falls back to Python shell if unavailable""" self.run('python') + @args('--shell', dest="shell", metavar='', help='Python shell') def run(self, shell=None): """Runs a Python interactive interpreter. @@ -259,6 +254,7 @@ class ShellCommands(object): readline.parse_and_bind("tab:complete") code.interact() + @args('--path', dest='path', metavar='', help='Script path') def script(self, path): """Runs the script from the specifed path with flags set properly. arguments: path""" @@ -271,12 +267,18 @@ class RoleCommands(object): def __init__(self): self.manager = manager.AuthManager() + @args('--user', dest="user", metavar='', help='User name') + @args('--role', dest="role", metavar='', help='User role') + @args('--project', dest="project", metavar='', help='Project name') def add(self, user, role, project=None): """adds role to user if project is specified, adds project specific role arguments: user, role [project]""" self.manager.add_role(user, role, project) + @args('--user', dest="user", metavar='', help='User name') + @args('--role', dest="role", metavar='', help='User role') + @args('--project', dest="project", metavar='', help='Project name') def has(self, user, role, project=None): """checks to see if user has role if project is specified, returns True if user has @@ -284,6 +286,9 @@ class RoleCommands(object): arguments: user, role [project]""" print self.manager.has_role(user, role, project) + @args('--user', dest="user", metavar='', help='User name') + @args('--role', dest="role", metavar='', help='User role') + @args('--project', dest="project", metavar='', help='Project name') def remove(self, user, role, project=None): """removes role from user if project is specified, removes project specific role @@ -311,6 +316,9 @@ class UserCommands(object): def __init__(self): self.manager = manager.AuthManager() + @args('--name', dest="name", metavar='', help='Admin name') + @args('--access', dest="access", metavar='', help='Access') + @args('--secret', dest="secret", metavar='', help='Secret') def admin(self, name, access=None, secret=None): """creates a new admin and prints exports arguments: name [access] [secret]""" @@ -320,6 +328,9 @@ class UserCommands(object): _db_error(e) self._print_export(user) + @args('--name', dest="name", metavar='', help='User name') + @args('--access', dest="access", metavar='', help='Access') + @args('--secret', dest="secret", metavar='', help='Secret') def create(self, name, access=None, secret=None): """creates a new user and prints exports arguments: name [access] [secret]""" @@ -329,11 +340,13 @@ class UserCommands(object): _db_error(e) self._print_export(user) + @args('--name', dest="name", metavar='', help='User name') def delete(self, name): """deletes an existing user arguments: name""" self.manager.delete_user(name) + @args('--name', dest="name", metavar='', help='User name') def exports(self, name): """prints access and secrets for user in export format arguments: name""" @@ -349,6 +362,10 @@ class UserCommands(object): for user in self.manager.get_users(): print user.name + @args('--name', dest="name", metavar='', help='User name') + @args('--access', dest="access_key", metavar='', help='Access key') + @args('--secret', dest="secret_key", metavar='', help='Secret key') + @args('--is_admin', dest='is_admin', metavar="<'T'|'F'>", help='Is admin?') def modify(self, name, access_key, secret_key, is_admin): """update a users keys & admin flag arguments: accesskey secretkey admin @@ -362,6 +379,8 @@ class UserCommands(object): is_admin = False self.manager.modify_user(name, access_key, secret_key, is_admin) + @args('--name', dest="user_id", metavar='', help='User name') + @args('--project', dest="project_id", metavar='', help='Project name') def revoke(self, user_id, project_id=None): """revoke certs for a user arguments: user_id [project_id]""" @@ -377,6 +396,8 @@ class ProjectCommands(object): def __init__(self): self.manager = manager.AuthManager() + @args('--project', dest="project_id", metavar='', help='Project name') + @args('--user', dest="user_id", metavar='', help='User name') def add(self, project_id, user_id): """Adds user to project arguments: project_id user_id""" @@ -386,6 +407,9 @@ class ProjectCommands(object): print ex raise + @args('--project', dest="name", metavar='', help='Project name') + @args('--user', dest="project_manager", metavar='', help='Project manager') + @args('--desc', dest="description", metavar='', help='Description') def create(self, name, project_manager, description=None): """Creates a new project arguments: name project_manager [description]""" @@ -395,6 +419,9 @@ class ProjectCommands(object): print ex raise + @args('--project', dest="name", metavar='', help='Project name') + @args('--user', dest="project_manager", metavar='', help='Project manager') + @args('--desc', dest="description", metavar='', help='Description') def modify(self, name, project_manager, description=None): """Modifies a project arguments: name project_manager [description]""" @@ -404,6 +431,7 @@ class ProjectCommands(object): print ex raise + @args('--project', dest="name", metavar='', help='Project name') def delete(self, name): """Deletes an existing project arguments: name""" @@ -413,6 +441,9 @@ class ProjectCommands(object): print ex raise + @args('--project', dest="project_id", metavar='', help='Project name') + @args('--user', dest="user_id", metavar='', help='User name') + @args('--file', dest="filename", metavar='', help='File name(Default: novarc)') def environment(self, project_id, user_id, filename='novarc'): """Exports environment variables to an sourcable file arguments: project_id user_id [filename='novarc]""" @@ -424,12 +455,16 @@ class ProjectCommands(object): with open(filename, 'w') as f: f.write(rc) + @args('--user', dest="username", metavar='', help='User name') def list(self, username=None): """Lists all projects arguments: [username]""" for project in self.manager.get_projects(username): print project.name + @args('--project', dest="project_id", metavar='', help='Project name') + @args('--key', dest="key", metavar='', help='Key') + @args('--value', dest="value", metavar='', help='Value') def quota(self, project_id, key=None, value=None): """Set or display quotas for project arguments: project_id [key] [value]""" @@ -447,6 +482,8 @@ class ProjectCommands(object): value = 'unlimited' print '%s: %s' % (key, value) + @args('--project', dest="project_id", metavar='', help='Project name') + @args('--user', dest="user_id", metavar='', help='User name') def remove(self, project_id, user_id): """Removes user from project arguments: project_id user_id""" @@ -456,6 +493,7 @@ class ProjectCommands(object): print ex raise + @args('--project', dest="project_id", metavar='', help='Project name') def scrub(self, project_id): """Deletes data associated with project arguments: project_id""" @@ -466,6 +504,9 @@ class ProjectCommands(object): for group in groups: db.security_group_destroy(ctxt, group['id']) + @args('--project', dest="project_id", metavar='', help='Project name') + @args('--user', dest="user_id", metavar='', help='User name') + @args('--file', dest="filename", metavar='', help='File name(Default: nova.zip)') def zipfile(self, project_id, user_id, filename='nova.zip'): """Exports credentials for project to a zip file arguments: project_id user_id [filename='nova.zip]""" @@ -492,6 +533,7 @@ AccountCommands = ProjectCommands class FixedIpCommands(object): """Class for managing fixed ip.""" + @args('--host', dest="host", metavar='', help='Host') def list(self, host=None): """Lists all fixed ips (optionally by host) arguments: [host]""" ctxt = context.get_admin_context() @@ -528,6 +570,8 @@ class FixedIpCommands(object): class FloatingIpCommands(object): """Class for managing floating ip.""" + @args('--host', dest="host", metavar='', help='Host') + @args('--ip_range', dest="range", metavar='', help='IP range') def create(self, host, range): """Creates floating ips for host by range arguments: host ip_range""" @@ -536,6 +580,7 @@ class FloatingIpCommands(object): {'address': str(address), 'host': host}) + @args('--ip_range', dest="ip_range", metavar='', help='IP range') def delete(self, ip_range): """Deletes floating ips by range arguments: range""" @@ -543,6 +588,7 @@ class FloatingIpCommands(object): db.floating_ip_destroy(context.get_admin_context(), str(address)) + @args('--host', dest="host", metavar='', help='Host') def list(self, host=None): """Lists all floating ips (optionally by host) arguments: [host]""" @@ -563,11 +609,14 @@ class FloatingIpCommands(object): class NetworkCommands(object): """Class for managing networks.""" - @optionargs('--project', dest="project_id", help='Project for network') - @optionargs('--vlan', dest="vlan_start", help='VLAN ID') - @positionargs('fixed_range', 'num_networks', - 'network_size', 'vlan_start', 'vpn_start', - 'fixed_range_v6', 'gateway_v6', 'label', 'project_id', 1) + @args('--network', dest="fixed_range", metavar='', help='Network') + @args('--num_networks', dest="num_networks", metavar='', help='How many networks create') + @args('--network_size', dest="network_size", metavar='', help='How many hosts in network') + @args('--vlan', dest="vlan_start", metavar='', help='vlan id') + @args('--vpn', dest="vpn_start", help='vpn start') + @args('--fixed_range_v6', dest="fixed_range_v6", help='fixed ipv6 range') + @args('--gateway_v6', dest="gateway_v6", help='ipv6 gateway') + @args('--project', dest="project_id", metavar='', help='Project for network') def create(self, fixed_range=None, num_networks=None, network_size=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, label='public', project_id=None): @@ -618,6 +667,7 @@ class NetworkCommands(object): network.dhcp_start, network.dns) + @args('--network', dest="fixed_range", metavar='', help='Network to delete') def delete(self, fixed_range): """Deletes a network""" network = db.network_get_by_cidr(context.get_admin_context(), \ @@ -631,6 +681,7 @@ class NetworkCommands(object): class VmCommands(object): """Class for mangaging VM instances.""" + @args('--host', dest="host", metavar='', help='Host') def list(self, host=None): """Show a list of all instances @@ -674,6 +725,8 @@ class VmCommands(object): instance['availability_zone'], instance['launch_index']) + @args('--ec2_id', dest='ec2_id', metavar='', help='EC2 ID') + @args('--dest', dest='dest', metavar='', help='destanation node') def live_migration(self, ec2_id, dest): """Migrates a running instance to a new machine. @@ -710,6 +763,8 @@ class VmCommands(object): class ServiceCommands(object): """Enable and disable running services""" + @args('--host', dest='host', metavar='', help='Host') + @args('--service', dest='service', metavar='', help='Nova service') def list(self, host=None, service=None): """Show a list of all running services. Filter by host & service name. args: [host] [service]""" @@ -731,6 +786,8 @@ class ServiceCommands(object): active, art, svc['updated_at']) + @args('--host', dest='host', metavar='', help='Host') + @args('--service', dest='service', metavar='', help='Nova service') def enable(self, host, service): """Enable scheduling for a service args: host service""" @@ -741,6 +798,8 @@ class ServiceCommands(object): return db.service_update(ctxt, svc['id'], {'disabled': False}) + @args('--host', dest='host', metavar='', help='Host') + @args('--service', dest='service', metavar='', help='Nova service') def disable(self, host, service): """Disable scheduling for a service args: host service""" @@ -751,6 +810,7 @@ class ServiceCommands(object): return db.service_update(ctxt, svc['id'], {'disabled': True}) + @args('--host', dest='host', metavar='', help='Host') def describe_resource(self, host): """Describes cpu/memory/hdd info for host. @@ -784,6 +844,7 @@ class ServiceCommands(object): val['memory_mb'], val['local_gb']) + @args('--host', dest='host', metavar='', help='Host') def update_resource(self, host): """Updates available vcpu/memory/disk info for host. @@ -811,6 +872,7 @@ class DbCommands(object): def __init__(self): pass + @args('--version', dest='version', metavar='', help='Database version') def sync(self, version=None): """Sync the database up to the most recent version.""" return migration.db_sync(version) @@ -834,10 +896,11 @@ class VersionCommands(object): class VolumeCommands(object): """Methods for dealing with a cloud in an odd state""" + @args('--volume', dest='volume_id', metavar='', help='Volume ID') def delete(self, volume_id): """Delete a volume, bypassing the check that it must be available. - args: volume_id_id""" + args: volume_id""" ctxt = context.get_admin_context() volume = db.volume_get(ctxt, param2id(volume_id)) host = volume['host'] @@ -858,6 +921,7 @@ class VolumeCommands(object): {"method": "delete_volume", "args": {"volume_id": volume['id']}}) + @args('--volume', dest='volume_id', metavar='', help='Volume ID') def reattach(self, volume_id): """Re-attach a volume that has previously been attached to an instance. Typically called after a compute host @@ -889,6 +953,14 @@ class InstanceTypeCommands(object): val["flavorid"], val["swap"], val["rxtx_quota"], val["rxtx_cap"], deleted) + @args('--name', dest='name', metavar='', help='Name of instance type/flavor') + @args('--memory', dest='memory', metavar='', help='Memory size') + @args('--cpu', dest='vcpus', metavar='', help='Number cpus') + @args('--local_gb', dest='local_gb', metavar='', help='local_gb') + @args('--flavor', dest='flavorid', metavar='', help='Flavor ID') + @args('--swap', dest='swap', metavar='', help='Swap') + @args('--rxtx_quota', dest='rxtx_quota', metavar='', help='rxtx_quota') + @args('--rxtx_cap', dest='rxtx_cap', metavar='', help='rxtx_cap') def create(self, name, memory, vcpus, local_gb, flavorid, swap=0, rxtx_quota=0, rxtx_cap=0): """Creates instance types / flavors @@ -917,6 +989,7 @@ class InstanceTypeCommands(object): else: print "%s created" % name + @args('--name', dest='name', metavar='', help='Name of instance type/flavor') def delete(self, name, purge=None): """Marks instance types / flavors as deleted arguments: name""" @@ -938,6 +1011,7 @@ class InstanceTypeCommands(object): else: print "%s %s" % (name, verb) + @args('--name', dest='name', metavar='', help='Name of instance type/flavor') def list(self, name=None): """Lists all active or specific instance types / flavors arguments: [name]""" @@ -988,6 +1062,13 @@ class ImageCommands(object): except Exception as exc: print _("Failed to register %(path)s: %(exc)s") % locals() + @args('--image', dest='image', metavar='', help='Image') + @args('--kernel', dest='kernel', metavar='', help='Kernel') + @args('--ram', dest='ramdisk', metavar='', help='RAM disk') + @args('--owner', dest='owner', metavar='', help='Image owner') + @args('--name', dest='name', metavar='', help='Image name') + @args('--public', dest='is_public', metavar="<'T'|'F'>", help='Image public or not') + @args('--arch', dest='architecture', metavar='', help='Architecture') def all_register(self, image, kernel, ramdisk, owner, name=None, is_public='T', architecture='x86_64'): """Uploads an image, kernel, and ramdisk into the image_service @@ -1001,6 +1082,15 @@ class ImageCommands(object): architecture, 'ami', 'ami', kernel_id, ramdisk_id) + @args('--path', dest='path', metavar='', help='Image path') + @args('--owner', dest='owner', metavar='', help='Image owner') + @args('--name', dest='name', metavar='', help='Image name') + @args('--public', dest='is_public', metavar="<'T'|'F'>", help='Image public or not') + @args('--arch', dest='architecture', metavar='', help='Architecture') + @args('--cont_format', dest='container_format', metavar='', help='Container format(default: bare)') + @args('--disk_format', dest='disk_format', metavar='', help='Disk format(default: raw)') + @args('--kernel', dest='kernel_id', metavar='', help='Kernel') + @args('--ram', dest='ramdisk_id', metavar='', help='RAM disk') def image_register(self, path, owner, name=None, is_public='T', architecture='x86_64', container_format='bare', disk_format='raw', kernel_id=None, ramdisk_id=None): @@ -1013,6 +1103,11 @@ class ImageCommands(object): owner, name, is_public, architecture, kernel_id, ramdisk_id) + @args('--path', dest='path', metavar='', help='Image path') + @args('--owner', dest='owner', metavar='', help='Image owner') + @args('--name', dest='name', metavar='', help='Image name') + @args('--public', dest='is_public', metavar="<'T'|'F'>", help='Image public or not') + @args('--arch', dest='architecture', metavar='', help='Architecture') def kernel_register(self, path, owner, name=None, is_public='T', architecture='x86_64'): """Uploads a kernel into the image_service @@ -1021,6 +1116,11 @@ class ImageCommands(object): return self._register('aki', 'aki', path, owner, name, is_public, architecture) + @args('--path', dest='path', metavar='', help='Image path') + @args('--owner', dest='owner', metavar='', help='Image owner') + @args('--name', dest='name', metavar='', help='Image name') + @args('--public', dest='is_public', metavar="<'T'|'F'>", help='Image public or not') + @args('--arch', dest='architecture', metavar='', help='Architecture') def ramdisk_register(self, path, owner, name=None, is_public='T', architecture='x86_64'): """Uploads a ramdisk into the image_service @@ -1074,6 +1174,7 @@ class ImageCommands(object): except Exception as exc: print _("Failed to convert %(old)s: %(exc)s") % locals() + @args('--dir', dest='directory', metavar='', help='Images directory') def convert(self, directory): """Uploads old objectstore images in directory to new service arguments: directory""" @@ -1199,10 +1300,14 @@ def main(): matches = lazy_match(action, actions) action, fn = matches[0] - usage = "%prog " + "%s %s %s [%s] [options]" % (sys.argv[2], - sys.argv[3], fn.arguments, fn.optargs) + # For not decorated methods + arguments = getattr(fn ,'arguments', '') + optargs = getattr(fn ,'optargs', '') + options = getattr(fn ,'options', '') + + usage = "%prog " + "%s %s [options]" % (sys.argv[2], sys.argv[3]) parser = OptionParser(usage=usage) - for ar, kw in fn.options: + for ar, kw in options: parser.add_option(*ar, **kw) (opts, fn_args) = parser.parse_args(argv) fn_kwargs = vars(opts) @@ -1217,7 +1322,8 @@ def main(): sys.exit(0) except TypeError: print _("Possible wrong number of arguments supplied") - print "" + print fn.__doc__ + parser.print_help() raise except Exception: print _("Command failed, please check log for more info") -- cgit From 8ded8e4bde3825efc8a886aad40d54d0c9d126dc Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Sat, 11 Jun 2011 00:42:44 +0400 Subject: small pep8 fixes --- bin/nova-manage | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 0b92c349a..23ebe3c93 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1301,9 +1301,9 @@ def main(): action, fn = matches[0] # For not decorated methods - arguments = getattr(fn ,'arguments', '') - optargs = getattr(fn ,'optargs', '') - options = getattr(fn ,'options', '') + arguments = getattr(fn, 'arguments', '') + optargs = getattr(fn, 'optargs', '') + options = getattr(fn, 'options', '') usage = "%prog " + "%s %s [options]" % (sys.argv[2], sys.argv[3]) parser = OptionParser(usage=usage) -- cgit From 3a83aaf4f14ac25dee8b5a84779a61ca4633012a Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Sat, 11 Jun 2011 00:49:03 +0400 Subject: 'network list' prints project id --- bin/nova-manage | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 23ebe3c93..67cf0bd51 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -657,15 +657,17 @@ class NetworkCommands(object): def list(self): """List all created networks""" - print "%-18s\t%-15s\t%-15s\t%-15s" % (_('network'), + print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s" % (_('network'), _('netmask'), _('start address'), - 'DNS') + 'DNS', + 'project') for network in db.network_get_all(context.get_admin_context()): - print "%-18s\t%-15s\t%-15s\t%-15s" % (network.cidr, + print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s" % (network.cidr, network.netmask, network.dhcp_start, - network.dns) + network.dns, + network.project_id) @args('--network', dest="fixed_range", metavar='', help='Network to delete') def delete(self, fixed_range): -- cgit From ff195162d97f4a1ffaa6127f92cca102705b023b Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Tue, 28 Jun 2011 16:46:50 +0400 Subject: remove network to project bind --- bin/nova-manage | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 67cf0bd51..a4b221b8c 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -619,7 +619,7 @@ class NetworkCommands(object): @args('--project', dest="project_id", metavar='', help='Project for network') def create(self, fixed_range=None, num_networks=None, network_size=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, - gateway_v6=None, label='public', project_id=None): + gateway_v6=None, label='public'): """Creates fixed ips for host by range""" if not fixed_range: @@ -649,8 +649,7 @@ class NetworkCommands(object): vpn_start=int(vpn_start), cidr_v6=fixed_range_v6, gateway_v6=gateway_v6, - label=label, - project_id=project_id) + label=label) except ValueError, e: print e raise e -- cgit From 01b9d211e606ee0be221b27edae8aab1d35096ff Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Tue, 5 Jul 2011 11:51:46 -0700 Subject: First round of changes for ha-flatdhcp. * added 'host' column to fixed_ips to allow associating with a host * added 'multi_host' column to network for multi_host possibility * moved extra db access from linux_net to manager * added host parameter to network calls --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 7dfe91698..71c99138f 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -494,7 +494,7 @@ class FixedIpCommands(object): if host is None: fixed_ips = db.fixed_ip_get_all(ctxt) else: - fixed_ips = db.fixed_ip_get_all_by_host(ctxt, host) + fixed_ips = db.fixed_ip_get_all_by_instance_host(ctxt, host) except exception.NotFound as ex: print "error: %s" % ex sys.exit(2) -- cgit From 8e1a74e5604e1569e314af67b72966122940330b Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Tue, 5 Jul 2011 16:06:20 -0700 Subject: filter the dhcp to only respond to requests from this host --- bin/nova-dhcpbridge | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-dhcpbridge b/bin/nova-dhcpbridge index 6d9d85896..325642d52 100755 --- a/bin/nova-dhcpbridge +++ b/bin/nova-dhcpbridge @@ -91,7 +91,7 @@ def init_leases(interface): """Get the list of hosts for an interface.""" ctxt = context.get_admin_context() network_ref = db.network_get_by_bridge(ctxt, interface) - return linux_net.get_dhcp_leases(ctxt, network_ref['id']) + return linux_net.get_dhcp_leases(ctxt, network_ref) def main(): -- cgit From 53213dc4cd0f6f940d707c5d5932f4af7e5f988a Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Tue, 5 Jul 2011 16:22:41 -0700 Subject: add ability to set multi_host in nova-manage and remove debugging issues --- bin/nova-manage | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 71c99138f..cd43f734f 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -558,12 +558,12 @@ class NetworkCommands(object): """Class for managing networks.""" def create(self, label=None, fixed_range=None, num_networks=None, - network_size=None, vlan_start=None, + network_size=None, multi_host=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, flat_network_bridge=None, bridge_interface=None): """Creates fixed ips for host by range arguments: label, fixed_range, [num_networks=FLAG], - [network_size=FLAG], [vlan_start=FLAG], + [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], [flat_network_bridge=FLAG], [bridge_interface=FLAG] If you wish to use a later argument fill in the gaps with 0s @@ -583,6 +583,10 @@ class NetworkCommands(object): num_networks = FLAGS.num_networks if not network_size: network_size = FLAGS.network_size + if not multi_host: + multi_host = FLAGS.multi_host + else: + multi_host = multi_host == 'T' if not vlan_start: vlan_start = FLAGS.vlan_start if not vpn_start: @@ -601,6 +605,7 @@ class NetworkCommands(object): net_manager.create_networks(context.get_admin_context(), label=label, cidr=fixed_range, + multi_host=multi_host, num_networks=int(num_networks), network_size=int(network_size), vlan_start=int(vlan_start), -- cgit From 40a9488b4b96fa809bd18f4a06018186a488507a Mon Sep 17 00:00:00 2001 From: Ilya Alekseyev Date: Thu, 14 Jul 2011 22:34:49 +0400 Subject: added commands --- bin/nova-manage | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 7dfe91698..5a934b613 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -518,6 +518,27 @@ class FixedIpCommands(object): fixed_ip['address'], mac_address, hostname, host) + def reserve(self, address): + """Mark fixed ip as reserved + arguments: address""" + self._set_reserved(address, True) + + def waste(self, address): + """Mark fixed ip as free to use + arguments: address""" + self._set_reserved(address, False) + + def _set_reserved(self, address, reserved): + ctxt = context.get_admin_context() + + try: + fixed_ip = db.fixed_ip_get_by_address(ctxt, address) + db.fixed_ip_update(ctxt, fixed_ip['address'], + {'reserved': reserved}) + except exception.NotFound as ex: + print "error: %s" % ex + sys.exit(2) + class FloatingIpCommands(object): """Class for managing floating ip.""" -- cgit From 8a9c8bdc0cf6a79ed37090e595d2290fc900537c Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Fri, 15 Jul 2011 08:27:16 +0400 Subject: fix redundency --- bin/nova-manage | 2 -- 1 file changed, 2 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 7b78a0b5c..a845ab7a9 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1389,8 +1389,6 @@ def main(): action, fn = matches[0] # For not decorated methods - arguments = getattr(fn, 'arguments', '') - optargs = getattr(fn, 'optargs', '') options = getattr(fn, 'options', '') usage = "%prog " + "%s %s [options]" % (sys.argv[2], sys.argv[3]) -- cgit From 2d645197eb21a783de57cf10366db58fd41866fe Mon Sep 17 00:00:00 2001 From: Yuriy Taraday Date: Fri, 15 Jul 2011 10:39:23 +0400 Subject: Add possibility to call commands without subcommands. --- bin/nova-manage | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index a845ab7a9..da285042f 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -925,6 +925,9 @@ class VersionCommands(object): print _("%s (%s)") %\ (version.version_string(), version.version_string_with_vcs()) + def __call__(self): + self.list() + class VolumeCommands(object): """Methods for dealing with a cloud in an odd state""" @@ -1379,14 +1382,19 @@ def main(): command_object = fn() actions = methods_of(command_object) if len(argv) < 1: - print script_name + " category action []" - print _("Available actions for %s category:") % category - for k, _v in actions: - print "\t%s" % k - sys.exit(2) - action = argv.pop(0) - matches = lazy_match(action, actions) - action, fn = matches[0] + if hasattr(command_object, '__call__'): + action = '__call__' + fn = command_object.__call__ + else: + print script_name + " category action []" + print _("Available actions for %s category:") % category + for k, _v in actions: + print "\t%s" % k + sys.exit(2) + else: + action = argv.pop(0) + matches = lazy_match(action, actions) + action, fn = matches[0] # For not decorated methods options = getattr(fn, 'options', '') -- cgit From bfb4a870e44a90c004cd7d568eb35a50221c7bd5 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Fri, 15 Jul 2011 11:13:21 +0400 Subject: remove argument help from docstrings + minor fix --- bin/nova-manage | 163 +++++++++++++++++--------------------------------------- 1 file changed, 48 insertions(+), 115 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index da285042f..f5c140fa9 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -131,9 +131,8 @@ class VpnCommands(object): @args('--project', dest="project", metavar='', help='Project name') def list(self, project=None): - """Print a listing of the VPN data for one or all projects. + """Print a listing of the VPN data for one or all projects.""" - args: [project=all]""" print "%-12s\t" % 'project', print "%-20s\t" % 'ip:port', print "%-20s\t" % 'private_ip', @@ -181,13 +180,15 @@ class VpnCommands(object): self.pipe.launch_vpn_instance(project_id) @args('--project', dest="project_id", metavar='', help='Project name') + @args('--ip', dest="ip", metavar='', help='IP Address') + @args('--port', dest="port", metavar='', help='Port') def change(self, project_id, ip, port): """Change the ip and port for a vpn. this will update all networks associated with a project not sure if that's the desired behavior or not, patches accepted - args: project, ip, port""" + """ # TODO(tr3buchet): perhaps this shouldn't update all networks # associated with a project in the future project = self.manager.get_project(project_id) @@ -224,9 +225,7 @@ class ShellCommands(object): @args('--shell', dest="shell", metavar='', help='Python shell') def run(self, shell=None): - """Runs a Python interactive interpreter. - - args: [shell=bpython]""" + """Runs a Python interactive interpreter.""" if not shell: shell = 'bpython' @@ -278,8 +277,7 @@ class RoleCommands(object): @args('--project', dest="project", metavar='', help='Project name') def add(self, user, role, project=None): """adds role to user - if project is specified, adds project specific role - arguments: user, role [project]""" + if project is specified, adds project specific role""" if project: projobj = self.manager.get_project(project) if not projobj.has_member(user): @@ -293,8 +291,7 @@ class RoleCommands(object): def has(self, user, role, project=None): """checks to see if user has role if project is specified, returns True if user has - the global role and the project role - arguments: user, role [project]""" + the global role and the project role""" print self.manager.has_role(user, role, project) @args('--user', dest="user", metavar='', help='User name') @@ -302,8 +299,7 @@ class RoleCommands(object): @args('--project', dest="project", metavar='', help='Project name') def remove(self, user, role, project=None): """removes role from user - if project is specified, removes project specific role - arguments: user, role [project]""" + if project is specified, removes project specific role""" self.manager.remove_role(user, role, project) @@ -331,8 +327,7 @@ class UserCommands(object): @args('--access', dest="access", metavar='', help='Access') @args('--secret', dest="secret", metavar='', help='Secret') def admin(self, name, access=None, secret=None): - """creates a new admin and prints exports - arguments: name [access] [secret]""" + """creates a new admin and prints exports""" try: user = self.manager.create_user(name, access, secret, True) except exception.DBError, e: @@ -343,8 +338,7 @@ class UserCommands(object): @args('--access', dest="access", metavar='', help='Access') @args('--secret', dest="secret", metavar='', help='Secret') def create(self, name, access=None, secret=None): - """creates a new user and prints exports - arguments: name [access] [secret]""" + """creates a new user and prints exports""" try: user = self.manager.create_user(name, access, secret, False) except exception.DBError, e: @@ -359,8 +353,7 @@ class UserCommands(object): @args('--name', dest="name", metavar='', help='User name') def exports(self, name): - """prints access and secrets for user in export format - arguments: name""" + """prints access and secrets for user in export format""" user = self.manager.get_user(name) if user: self._print_export(user) @@ -368,8 +361,7 @@ class UserCommands(object): print "User %s doesn't exist" % name def list(self): - """lists all users - arguments: """ + """lists all users""" for user in self.manager.get_users(): print user.name @@ -393,8 +385,7 @@ class UserCommands(object): @args('--name', dest="user_id", metavar='', help='User name') @args('--project', dest="project_id", metavar='', help='Project name') def revoke(self, user_id, project_id=None): - """revoke certs for a user - arguments: user_id [project_id]""" + """revoke certs for a user""" if project_id: crypto.revoke_certs_by_user_and_project(user_id, project_id) else: @@ -410,8 +401,7 @@ class ProjectCommands(object): @args('--project', dest="project_id", metavar='', help='Project name') @args('--user', dest="user_id", metavar='', help='User name') def add(self, project_id, user_id): - """Adds user to project - arguments: project_id user_id""" + """Adds user to project""" try: self.manager.add_to_project(user_id, project_id) except exception.UserNotFound as ex: @@ -422,8 +412,7 @@ class ProjectCommands(object): @args('--user', dest="project_manager", metavar='', help='Project manager') @args('--desc', dest="description", metavar='', help='Description') def create(self, name, project_manager, description=None): - """Creates a new project - arguments: name project_manager [description]""" + """Creates a new project""" try: self.manager.create_project(name, project_manager, description) except exception.UserNotFound as ex: @@ -434,8 +423,7 @@ class ProjectCommands(object): @args('--user', dest="project_manager", metavar='', help='Project manager') @args('--desc', dest="description", metavar='', help='Description') def modify(self, name, project_manager, description=None): - """Modifies a project - arguments: name project_manager [description]""" + """Modifies a project""" try: self.manager.modify_project(name, project_manager, description) except exception.UserNotFound as ex: @@ -444,8 +432,7 @@ class ProjectCommands(object): @args('--project', dest="name", metavar='', help='Project name') def delete(self, name): - """Deletes an existing project - arguments: name""" + """Deletes an existing project""" try: self.manager.delete_project(name) except exception.ProjectNotFound as ex: @@ -456,8 +443,7 @@ class ProjectCommands(object): @args('--user', dest="user_id", metavar='', help='User name') @args('--file', dest="filename", metavar='', help='File name(Default: novarc)') def environment(self, project_id, user_id, filename='novarc'): - """Exports environment variables to an sourcable file - arguments: project_id user_id [filename='novarc]""" + """Exports environment variables to an sourcable file""" try: rc = self.manager.get_environment_rc(user_id, project_id) except (exception.UserNotFound, exception.ProjectNotFound) as ex: @@ -468,8 +454,7 @@ class ProjectCommands(object): @args('--user', dest="username", metavar='', help='User name') def list(self, username=None): - """Lists all projects - arguments: [username]""" + """Lists all projects""" for project in self.manager.get_projects(username): print project.name @@ -477,8 +462,7 @@ class ProjectCommands(object): @args('--key', dest="key", metavar='', help='Key') @args('--value', dest="value", metavar='', help='Value') def quota(self, project_id, key=None, value=None): - """Set or display quotas for project - arguments: project_id [key] [value]""" + """Set or display quotas for project""" ctxt = context.get_admin_context() if key: if value.lower() == 'unlimited': @@ -496,8 +480,7 @@ class ProjectCommands(object): @args('--project', dest="project_id", metavar='', help='Project name') @args('--user', dest="user_id", metavar='', help='User name') def remove(self, project_id, user_id): - """Removes user from project - arguments: project_id user_id""" + """Removes user from project""" try: self.manager.remove_from_project(user_id, project_id) except (exception.UserNotFound, exception.ProjectNotFound) as ex: @@ -506,8 +489,7 @@ class ProjectCommands(object): @args('--project', dest="project_id", metavar='', help='Project name') def scrub(self, project_id): - """Deletes data associated with project - arguments: project_id""" + """Deletes data associated with project""" admin_context = context.get_admin_context() networks = db.project_get_networks(admin_context, project_id) for network in networks: @@ -520,8 +502,7 @@ class ProjectCommands(object): @args('--user', dest="user_id", metavar='', help='User name') @args('--file', dest="filename", metavar='', help='File name(Default: nova.zip)') def zipfile(self, project_id, user_id, filename='nova.zip'): - """Exports credentials for project to a zip file - arguments: project_id user_id [filename='nova.zip]""" + """Exports credentials for project to a zip file""" try: zip_file = self.manager.get_credentials(user_id, project_id) with open(filename, 'w') as f: @@ -547,7 +528,7 @@ class FixedIpCommands(object): @args('--host', dest="host", metavar='', help='Host') def list(self, host=None): - """Lists all fixed ips (optionally by host) arguments: [host]""" + """Lists all fixed ips (optionally by host)""" ctxt = context.get_admin_context() try: @@ -584,16 +565,14 @@ class FloatingIpCommands(object): @args('--ip_range', dest="range", metavar='', help='IP range') def create(self, range): - """Creates floating ips for zone by range - arguments: ip_range""" + """Creates floating ips for zone by range""" for address in netaddr.IPNetwork(range): db.floating_ip_create(context.get_admin_context(), {'address': str(address)}) @args('--ip_range', dest="ip_range", metavar='', help='IP range') def delete(self, ip_range): - """Deletes floating ips by range - arguments: range""" + """Deletes floating ips by range""" for address in netaddr.IPNetwork(ip_range): db.floating_ip_destroy(context.get_admin_context(), str(address)) @@ -601,7 +580,6 @@ class FloatingIpCommands(object): @args('--host', dest="host", metavar='', help='Host') def list(self, host=None): """Lists all floating ips (optionally by host) - arguments: [host] Note: if host is given, only active floating IPs are returned""" ctxt = context.get_admin_context() if host is None: @@ -635,10 +613,6 @@ class NetworkCommands(object): vpn_start=None, fixed_range_v6=None, gateway_v6=None, flat_network_bridge=None, bridge_interface=None): """Creates fixed ips for host by range - arguments: label, fixed_range, [num_networks=FLAG], - [network_size=FLAG], [vlan_start=FLAG], - [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], - [flat_network_bridge=FLAG], [bridge_interface=FLAG] If you wish to use a later argument fill in the gaps with 0s Ex: network create private 10.0.0.0/8 1 15 0 0 0 0 xenbr1 eth1 network create private 10.0.0.0/8 1 15 @@ -716,11 +690,8 @@ class VmCommands(object): @args('--host', dest="host", metavar='', help='Host') def list(self, host=None): - """Show a list of all instances + """Show a list of all instances""" - :param host: show all instance on specified host. - :param instance: show specificed instance. - """ print "%-10s %-15s %-10s %-10s %-26s %-9s %-9s %-9s" \ " %-10s %-10s %-10s %-5s" % ( _('instance'), @@ -761,12 +732,7 @@ class VmCommands(object): @args('--ec2_id', dest='ec2_id', metavar='', help='EC2 ID') @args('--dest', dest='dest', metavar='', help='destanation node') def live_migration(self, ec2_id, dest): - """Migrates a running instance to a new machine. - - :param ec2_id: instance id which comes from euca-describe-instance. - :param dest: destination host name. - - """ + """Migrates a running instance to a new machine.""" ctxt = context.get_admin_context() instance_id = ec2utils.ec2_id_to_id(ec2_id) @@ -799,8 +765,7 @@ class ServiceCommands(object): @args('--host', dest='host', metavar='', help='Host') @args('--service', dest='service', metavar='', help='Nova service') def list(self, host=None, service=None): - """Show a list of all running services. Filter by host & service name. - args: [host] [service]""" + """Show a list of all running services. Filter by host & service name.""" ctxt = context.get_admin_context() now = utils.utcnow() services = db.service_get_all(ctxt) @@ -822,8 +787,7 @@ class ServiceCommands(object): @args('--host', dest='host', metavar='', help='Host') @args('--service', dest='service', metavar='', help='Nova service') def enable(self, host, service): - """Enable scheduling for a service - args: host service""" + """Enable scheduling for a service""" ctxt = context.get_admin_context() svc = db.service_get_by_args(ctxt, host, service) if not svc: @@ -834,8 +798,7 @@ class ServiceCommands(object): @args('--host', dest='host', metavar='', help='Host') @args('--service', dest='service', metavar='', help='Nova service') def disable(self, host, service): - """Disable scheduling for a service - args: host service""" + """Disable scheduling for a service""" ctxt = context.get_admin_context() svc = db.service_get_by_args(ctxt, host, service) if not svc: @@ -845,11 +808,7 @@ class ServiceCommands(object): @args('--host', dest='host', metavar='', help='Host') def describe_resource(self, host): - """Describes cpu/memory/hdd info for host. - - :param host: hostname. - - """ + """Describes cpu/memory/hdd info for host.""" result = rpc.call(context.get_admin_context(), FLAGS.scheduler_topic, @@ -879,11 +838,7 @@ class ServiceCommands(object): @args('--host', dest='host', metavar='', help='Host') def update_resource(self, host): - """Updates available vcpu/memory/disk info for host. - - :param host: hostname. - - """ + """Updates available vcpu/memory/disk info for host.""" ctxt = context.get_admin_context() service_refs = db.service_get_all_by_host(ctxt, host) @@ -935,8 +890,7 @@ class VolumeCommands(object): @args('--volume', dest='volume_id', metavar='', help='Volume ID') def delete(self, volume_id): """Delete a volume, bypassing the check that it - must be available. - args: volume_id""" + must be available.""" ctxt = context.get_admin_context() volume = db.volume_get(ctxt, param2id(volume_id)) host = volume['host'] @@ -961,8 +915,7 @@ class VolumeCommands(object): def reattach(self, volume_id): """Re-attach a volume that has previously been attached to an instance. Typically called after a compute host - has been rebooted. - args: volume_id_id""" + has been rebooted.""" ctxt = context.get_admin_context() volume = db.volume_get(ctxt, param2id(volume_id)) if not volume['instance_id']: @@ -999,10 +952,7 @@ class InstanceTypeCommands(object): @args('--rxtx_cap', dest='rxtx_cap', metavar='', help='rxtx_cap') def create(self, name, memory, vcpus, local_gb, flavorid, swap=0, rxtx_quota=0, rxtx_cap=0): - """Creates instance types / flavors - arguments: name memory vcpus local_gb flavorid [swap] [rxtx_quota] - [rxtx_cap] - """ + """Creates instance types / flavors""" try: instance_types.create(name, memory, vcpus, local_gb, flavorid, swap, rxtx_quota, rxtx_cap) @@ -1027,8 +977,7 @@ class InstanceTypeCommands(object): @args('--name', dest='name', metavar='', help='Name of instance type/flavor') def delete(self, name, purge=None): - """Marks instance types / flavors as deleted - arguments: name""" + """Marks instance types / flavors as deleted""" try: if purge == "--purge": instance_types.purge(name) @@ -1049,8 +998,7 @@ class InstanceTypeCommands(object): @args('--name', dest='name', metavar='', help='Name of instance type/flavor') def list(self, name=None): - """Lists all active or specific instance types / flavors - arguments: [name]""" + """Lists all active or specific instance types / flavors""" try: if name is None: inst_types = instance_types.get_all_types() @@ -1107,9 +1055,7 @@ class ImageCommands(object): @args('--arch', dest='architecture', metavar='', help='Architecture') def all_register(self, image, kernel, ramdisk, owner, name=None, is_public='T', architecture='x86_64'): - """Uploads an image, kernel, and ramdisk into the image_service - arguments: image kernel ramdisk owner [name] [is_public='T'] - [architecture='x86_64']""" + """Uploads an image, kernel, and ramdisk into the image_service""" kernel_id = self.kernel_register(kernel, owner, None, is_public, architecture) ramdisk_id = self.ramdisk_register(ramdisk, owner, None, @@ -1130,11 +1076,7 @@ class ImageCommands(object): def image_register(self, path, owner, name=None, is_public='T', architecture='x86_64', container_format='bare', disk_format='raw', kernel_id=None, ramdisk_id=None): - """Uploads an image into the image_service - arguments: path owner [name] [is_public='T'] [architecture='x86_64'] - [container_format='bare'] [disk_format='raw'] - [kernel_id=None] [ramdisk_id=None] - """ + """Uploads an image into the image_service""" return self._register(container_format, disk_format, path, owner, name, is_public, architecture, kernel_id, ramdisk_id) @@ -1146,9 +1088,7 @@ class ImageCommands(object): @args('--arch', dest='architecture', metavar='', help='Architecture') def kernel_register(self, path, owner, name=None, is_public='T', architecture='x86_64'): - """Uploads a kernel into the image_service - arguments: path owner [name] [is_public='T'] [architecture='x86_64'] - """ + """Uploads a kernel into the image_service""" return self._register('aki', 'aki', path, owner, name, is_public, architecture) @@ -1159,9 +1099,7 @@ class ImageCommands(object): @args('--arch', dest='architecture', metavar='', help='Architecture') def ramdisk_register(self, path, owner, name=None, is_public='T', architecture='x86_64'): - """Uploads a ramdisk into the image_service - arguments: path owner [name] [is_public='T'] [architecture='x86_64'] - """ + """Uploads a ramdisk into the image_service""" return self._register('ari', 'ari', path, owner, name, is_public, architecture) @@ -1212,8 +1150,7 @@ class ImageCommands(object): @args('--dir', dest='directory', metavar='', help='Images directory') def convert(self, directory): - """Uploads old objectstore images in directory to new service - arguments: directory""" + """Uploads old objectstore images in directory to new service""" machine_images = {} other_images = {} directory = os.path.abspath(directory) @@ -1238,8 +1175,7 @@ class AgentBuildCommands(object): def create(self, os, architecture, version, url, md5hash, hypervisor='xen'): - """Creates a new agent build. - arguments: os architecture version url md5hash [hypervisor='xen']""" + """Creates a new agent build.""" ctxt = context.get_admin_context() agent_build = db.agent_build_create(ctxt, {'hypervisor': hypervisor, @@ -1250,8 +1186,7 @@ class AgentBuildCommands(object): 'md5hash': md5hash}) def delete(self, os, architecture, hypervisor='xen'): - """Deletes an existing agent build. - arguments: os architecture [hypervisor='xen']""" + """Deletes an existing agent build.""" ctxt = context.get_admin_context() agent_build_ref = db.agent_build_get_by_triple(ctxt, hypervisor, os, architecture) @@ -1285,9 +1220,7 @@ class AgentBuildCommands(object): def modify(self, os, architecture, version, url, md5hash, hypervisor='xen'): - """Update an existing agent build. - arguments: os architecture version url md5hash [hypervisor='xen'] - """ + """Update an existing agent build.""" ctxt = context.get_admin_context() agent_build_ref = db.agent_build_get_by_triple(ctxt, hypervisor, os, architecture) @@ -1397,9 +1330,9 @@ def main(): action, fn = matches[0] # For not decorated methods - options = getattr(fn, 'options', '') + options = getattr(fn, 'options', []) - usage = "%prog " + "%s %s [options]" % (sys.argv[2], sys.argv[3]) + usage = "%%prog %s %s [options]" % (sys.argv[2], sys.argv[3]) parser = OptionParser(usage=usage) for ar, kw in options: parser.add_option(*ar, **kw) -- cgit From 86fe4915eeb656abb2abb5fb3c6875a77443b105 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Mon, 18 Jul 2011 15:09:39 -0400 Subject: fixing bad lookup --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index b892d958a..2446309e8 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -518,7 +518,7 @@ class FixedIpCommands(object): instance = fixed_ip['instance'] hostname = instance['hostname'] host = instance['host'] - mac_address = fixed_ip['mac_address']['address'] + mac_address = fixed_ip['virtual_interface']['address'] print "%-18s\t%-15s\t%-17s\t%-15s\t%s" % ( fixed_ip['network']['cidr'], fixed_ip['address'], -- cgit From 67e5492d6723a00b0ad5d7e8c44f5762a9b0a206 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Mon, 18 Jul 2011 12:16:10 -0700 Subject: fix issues that were breaking vlan mode --- bin/nova-manage | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index cd43f734f..a37d68f42 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -473,7 +473,7 @@ class ProjectCommands(object): except db.api.NoMoreNetworks: print _('No more networks available. If this is a new ' 'installation, you need\nto call something like this:\n\n' - ' nova-manage network create 10.0.0.0/8 10 64\n\n') + ' nova-manage network create pvt 10.0.0.0/8 10 64\n\n') except exception.ProcessExecutionError, e: print e print _("The above error may show that the certificate db has not " @@ -566,9 +566,9 @@ class NetworkCommands(object): [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], [flat_network_bridge=FLAG], [bridge_interface=FLAG] - If you wish to use a later argument fill in the gaps with 0s - Ex: network create private 10.0.0.0/8 1 15 0 0 0 0 xenbr1 eth1 - network create private 10.0.0.0/8 1 15 + If you wish to use a later argument fill in the gaps with ""s + Ex: network create private 10.0.0.0/8 1 16 T "" "" "" "" xenbr1 eth1 + network create private 10.0.0.0/8 1 16 """ if not label: msg = _('a label (ex: public) is required to create networks.') -- cgit From 5f47389f6151d7ae80d91382d8dab32d6fb2f0c8 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Thu, 21 Jul 2011 21:05:55 +0400 Subject: minor fix --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 2e9b52d74..3e15d9fe3 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -613,7 +613,7 @@ class NetworkCommands(object): @args('--fixed_range_v6', dest="fixed_range_v6", help='fixed ipv6 range') @args('--gateway_v6', dest="gateway_v6", help='ipv6 gateway') @args('--flat_network_bridge', dest="flat_network_bridge", metavar='', help='Flat_network_bridge') - @args('--bridge', dest="bridge_interface", metavar='', help='Bridge_interface') + @args('--bridge_interface', dest="bridge_interface", metavar='', help='Bridge_interface') def create(self, label=None, fixed_range=None, num_networks=None, network_size=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, -- cgit From 848de98876aecd084bb568907c3b121a7f5e38f0 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 12:45:53 -0500 Subject: allow 2 dns servers to be specified on network create --- bin/nova-manage | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index b6029bb52..11d254597 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -566,12 +566,14 @@ class NetworkCommands(object): def create(self, label=None, fixed_range=None, num_networks=None, network_size=None, multi_host=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, - flat_network_bridge=None, bridge_interface=None): + flat_network_bridge=None, bridge_interface=None, + dns=None, dns2=None): """Creates fixed ips for host by range arguments: label, fixed_range, [num_networks=FLAG], [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], [flat_network_bridge=FLAG], [bridge_interface=FLAG] + [dns=FLAG], [dns2] If you wish to use a later argument fill in the gaps with ""s Ex: network create private 10.0.0.0/8 1 16 T "" "" "" "" xenbr1 eth1 network create private 10.0.0.0/8 1 16 @@ -605,6 +607,8 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 + if not dns: + dns = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) try: @@ -619,17 +623,21 @@ class NetworkCommands(object): cidr_v6=fixed_range_v6, gateway_v6=gateway_v6, bridge=flat_network_bridge, - bridge_interface=bridge_interface) + bridge_interface=bridge_interface, + dns=dns, + dns2=dns2) except ValueError, e: print e raise e def list(self): """List all created networks""" - print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % (_('network'), + print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % ( + _('network'), _('netmask'), _('start address'), _('DNS'), + _('DNS2'), _('VlanID'), 'project') for network in db.network_get_all(context.get_admin_context()): @@ -637,6 +645,7 @@ class NetworkCommands(object): network.netmask, network.dhcp_start, network.dns, + network.dns2, network.vlan, network.project_id) -- cgit From 419b928ea2eb71fdcda66b4c83717120309ff36a Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 15:26:48 -0500 Subject: only use the flag if it evaluates true --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 11d254597..c5ea30fcd 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -607,7 +607,7 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 - if not dns: + if not dns and FLAGS.flat_network_dns: dns = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) -- cgit From 2b03601d6659376ebfcdcade1937ec85e262c3b8 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 16:15:18 -0500 Subject: add in the right number of fields --- bin/nova-manage | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index c5ea30fcd..ece63e54d 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -641,7 +641,8 @@ class NetworkCommands(object): _('VlanID'), 'project') for network in db.network_get_all(context.get_admin_context()): - print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % (network.cidr, + print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % ( + network.cidr, network.netmask, network.dhcp_start, network.dns, -- cgit From 88a0dd185ebef93845c026dceff0c32eaaffda11 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Fri, 22 Jul 2011 08:58:34 +0400 Subject: remove IPy --- bin/nova-manage | 1 - 1 file changed, 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 3e15d9fe3..8614a253b 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -61,7 +61,6 @@ import os import sys import time -import IPy from optparse import OptionParser # If ../nova/__init__.py exists, add ../ to Python search path, so that -- cgit From c4affeaffd77b21a528c09b94f65d66fb07f5231 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Fri, 22 Jul 2011 13:21:02 +0400 Subject: add decorator for multi host option --- bin/nova-manage | 1 + 1 file changed, 1 insertion(+) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index d30ed04cb..c0994271f 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -613,6 +613,7 @@ class NetworkCommands(object): @args('--gateway_v6', dest="gateway_v6", help='ipv6 gateway') @args('--flat_network_bridge', dest="flat_network_bridge", metavar='', help='Flat_network_bridge') @args('--bridge_interface', dest="bridge_interface", metavar='', help='Bridge_interface') + @args('--multi_host', dest="multi_host", metavar="<'T'|'F'>", help='Multi host') def create(self, label=None, fixed_range=None, num_networks=None, network_size=None, multi_host=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, -- cgit From e54f0cb05a3e10ad4234c672e2096da2a3eaa2da Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Fri, 22 Jul 2011 16:47:37 -0500 Subject: default to None in the method signature --- bin/nova-manage | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index ece63e54d..e97596a54 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -567,7 +567,7 @@ class NetworkCommands(object): network_size=None, multi_host=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, flat_network_bridge=None, bridge_interface=None, - dns=None, dns2=None): + dns1=None, dns2=None): """Creates fixed ips for host by range arguments: label, fixed_range, [num_networks=FLAG], [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], @@ -607,8 +607,8 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 - if not dns and FLAGS.flat_network_dns: - dns = FLAGS.flat_network_dns + if not dns1 and FLAGS.flat_network_dns: + dns1 = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) try: @@ -624,7 +624,7 @@ class NetworkCommands(object): gateway_v6=gateway_v6, bridge=flat_network_bridge, bridge_interface=bridge_interface, - dns=dns, + dns1=dns1, dns2=dns2) except ValueError, e: print e @@ -636,7 +636,7 @@ class NetworkCommands(object): _('network'), _('netmask'), _('start address'), - _('DNS'), + _('DNS1'), _('DNS2'), _('VlanID'), 'project') @@ -645,7 +645,7 @@ class NetworkCommands(object): network.cidr, network.netmask, network.dhcp_start, - network.dns, + network.dns1, network.dns2, network.vlan, network.project_id) -- cgit From 5593006970e56c7f53ce946cf234af7c8bd07690 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Fri, 22 Jul 2011 17:02:31 -0500 Subject: docstring update --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index e97596a54..7477c213d 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -573,7 +573,7 @@ class NetworkCommands(object): [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], [flat_network_bridge=FLAG], [bridge_interface=FLAG] - [dns=FLAG], [dns2] + [dns1=FLAG], [dns2] If you wish to use a later argument fill in the gaps with ""s Ex: network create private 10.0.0.0/8 1 16 T "" "" "" "" xenbr1 eth1 network create private 10.0.0.0/8 1 16 -- cgit From 9088c9b51a0884b3ce1689dcebc28e985000d267 Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Mon, 25 Jul 2011 09:42:58 +0400 Subject: fix 'version' command --- bin/nova-manage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index c0994271f..e77e3a244 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1348,7 +1348,7 @@ def main(): actions = methods_of(command_object) if len(argv) < 1: if hasattr(command_object, '__call__'): - action = '__call__' + action = '' fn = command_object.__call__ else: print script_name + " category action []" @@ -1364,7 +1364,7 @@ def main(): # For not decorated methods options = getattr(fn, 'options', []) - usage = "%%prog %s %s [options]" % (sys.argv[2], sys.argv[3]) + usage = "%%prog %s %s [options]" % (category, action) parser = OptionParser(usage=usage) for ar, kw in options: parser.add_option(*ar, **kw) -- cgit From 31b9bb98b067d45b7fcdf11fc5791b4b1379280b Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Mon, 25 Jul 2011 17:38:42 +0400 Subject: add decorator for 'dns' params --- bin/nova-manage | 2 ++ 1 file changed, 2 insertions(+) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 8165665cc..2d69e4d57 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -614,6 +614,8 @@ class NetworkCommands(object): @args('--flat_network_bridge', dest="flat_network_bridge", metavar='', help='Flat_network_bridge') @args('--bridge_interface', dest="bridge_interface", metavar='', help='Bridge_interface') @args('--multi_host', dest="multi_host", metavar="<'T'|'F'>", help='Multi host') + @args('--dns1', dest="dns1", metavar="", help='First DNS') + @args('--dns2', dest="dns2", metavar="", help='Second DNS') def create(self, label=None, fixed_range=None, num_networks=None, network_size=None, multi_host=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, -- cgit From 88ee72fbb50b5f7ead636ef65933489b0e099c2b Mon Sep 17 00:00:00 2001 From: Lvov Maxim Date: Tue, 26 Jul 2011 09:37:48 +0400 Subject: fix pep8 --- bin/nova-manage | 192 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 128 insertions(+), 64 deletions(-) (limited to 'bin') diff --git a/bin/nova-manage b/bin/nova-manage index 2d69e4d57..b63bd326f 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -111,6 +111,7 @@ def args(*args, **kwargs): return func return _decorator + def param2id(object_id): """Helper function to convert various id types to internal id. args: [object_id], e.g. 'vol-0000000a' or 'volume-0000000a' or '10' @@ -128,7 +129,8 @@ class VpnCommands(object): self.manager = manager.AuthManager() self.pipe = pipelib.CloudPipe() - @args('--project', dest="project", metavar='', help='Project name') + @args('--project', dest="project", metavar='', + help='Project name') def list(self, project=None): """Print a listing of the VPN data for one or all projects.""" @@ -173,12 +175,14 @@ class VpnCommands(object): self.pipe.launch_vpn_instance(p.id) time.sleep(10) - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') def run(self, project_id): """Start the VPN for a given project.""" self.pipe.launch_vpn_instance(project_id) - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') @args('--ip', dest="ip", metavar='', help='IP Address') @args('--port', dest="port", metavar='', help='Port') def change(self, project_id, ip, port): @@ -222,7 +226,8 @@ class ShellCommands(object): Falls back to Python shell if unavailable""" self.run('python') - @args('--shell', dest="shell", metavar='', help='Python shell') + @args('--shell', dest="shell", metavar='', + help='Python shell') def run(self, shell=None): """Runs a Python interactive interpreter.""" if not shell: @@ -273,7 +278,8 @@ class RoleCommands(object): @args('--user', dest="user", metavar='', help='User name') @args('--role', dest="role", metavar='', help='User role') - @args('--project', dest="project", metavar='', help='Project name') + @args('--project', dest="project", metavar='', + help='Project name') def add(self, user, role, project=None): """adds role to user if project is specified, adds project specific role""" @@ -286,7 +292,8 @@ class RoleCommands(object): @args('--user', dest="user", metavar='', help='User name') @args('--role', dest="role", metavar='', help='User role') - @args('--project', dest="project", metavar='', help='Project name') + @args('--project', dest="project", metavar='', + help='Project name') def has(self, user, role, project=None): """checks to see if user has role if project is specified, returns True if user has @@ -295,7 +302,8 @@ class RoleCommands(object): @args('--user', dest="user", metavar='', help='User name') @args('--role', dest="role", metavar='', help='User role') - @args('--project', dest="project", metavar='', help='Project name') + @args('--project', dest="project", metavar='', + help='Project name') def remove(self, user, role, project=None): """removes role from user if project is specified, removes project specific role""" @@ -365,9 +373,12 @@ class UserCommands(object): print user.name @args('--name', dest="name", metavar='', help='User name') - @args('--access', dest="access_key", metavar='', help='Access key') - @args('--secret', dest="secret_key", metavar='', help='Secret key') - @args('--is_admin', dest='is_admin', metavar="<'T'|'F'>", help='Is admin?') + @args('--access', dest="access_key", metavar='', + help='Access key') + @args('--secret', dest="secret_key", metavar='', + help='Secret key') + @args('--is_admin', dest='is_admin', metavar="<'T'|'F'>", + help='Is admin?') def modify(self, name, access_key, secret_key, is_admin): """update a users keys & admin flag arguments: accesskey secretkey admin @@ -382,7 +393,8 @@ class UserCommands(object): self.manager.modify_user(name, access_key, secret_key, is_admin) @args('--name', dest="user_id", metavar='', help='User name') - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') def revoke(self, user_id, project_id=None): """revoke certs for a user""" if project_id: @@ -397,7 +409,8 @@ class ProjectCommands(object): def __init__(self): self.manager = manager.AuthManager() - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') @args('--user', dest="user_id", metavar='', help='User name') def add(self, project_id, user_id): """Adds user to project""" @@ -407,9 +420,12 @@ class ProjectCommands(object): print ex raise - @args('--project', dest="name", metavar='', help='Project name') - @args('--user', dest="project_manager", metavar='', help='Project manager') - @args('--desc', dest="description", metavar='', help='Description') + @args('--project', dest="name", metavar='', + help='Project name') + @args('--user', dest="project_manager", metavar='', + help='Project manager') + @args('--desc', dest="description", metavar='', + help='Description') def create(self, name, project_manager, description=None): """Creates a new project""" try: @@ -418,9 +434,12 @@ class ProjectCommands(object): print ex raise - @args('--project', dest="name", metavar='', help='Project name') - @args('--user', dest="project_manager", metavar='', help='Project manager') - @args('--desc', dest="description", metavar='', help='Description') + @args('--project', dest="name", metavar='', + help='Project name') + @args('--user', dest="project_manager", metavar='', + help='Project manager') + @args('--desc', dest="description", metavar='', + help='Description') def modify(self, name, project_manager, description=None): """Modifies a project""" try: @@ -429,7 +448,8 @@ class ProjectCommands(object): print ex raise - @args('--project', dest="name", metavar='', help='Project name') + @args('--project', dest="name", metavar='', + help='Project name') def delete(self, name): """Deletes an existing project""" try: @@ -438,9 +458,11 @@ class ProjectCommands(object): print ex raise - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') @args('--user', dest="user_id", metavar='', help='User name') - @args('--file', dest="filename", metavar='', help='File name(Default: novarc)') + @args('--file', dest="filename", metavar='', + help='File name(Default: novarc)') def environment(self, project_id, user_id, filename='novarc'): """Exports environment variables to an sourcable file""" try: @@ -460,7 +482,8 @@ class ProjectCommands(object): for project in self.manager.get_projects(username): print project.name - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') @args('--key', dest="key", metavar='', help='Key') @args('--value', dest="value", metavar='', help='Value') def quota(self, project_id, key=None, value=None): @@ -479,7 +502,8 @@ class ProjectCommands(object): value = 'unlimited' print '%s: %s' % (key, value) - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') @args('--user', dest="user_id", metavar='', help='User name') def remove(self, project_id, user_id): """Removes user from project""" @@ -489,7 +513,8 @@ class ProjectCommands(object): print ex raise - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') def scrub(self, project_id): """Deletes data associated with project""" admin_context = context.get_admin_context() @@ -500,9 +525,11 @@ class ProjectCommands(object): for group in groups: db.security_group_destroy(admin_context, group['id']) - @args('--project', dest="project_id", metavar='', help='Project name') + @args('--project', dest="project_id", metavar='', + help='Project name') @args('--user', dest="user_id", metavar='', help='User name') - @args('--file', dest="filename", metavar='', help='File name(Default: nova.zip)') + @args('--file', dest="filename", metavar='', + help='File name(Default: nova.zip)') def zipfile(self, project_id, user_id, filename='nova.zip'): """Exports credentials for project to a zip file""" try: @@ -521,9 +548,9 @@ class ProjectCommands(object): ' nova-manage network create pvt 10.0.0.0/8 10 64\n\n') except exception.ProcessExecutionError, e: print e - print _("The above error may show that the certificate db has not " - "been created.\nPlease create a database by running a " - "nova-api server on this host.") + print _("The above error may show that the certificate db has " + "not been created.\nPlease create a database by running " + "a nova-api server on this host.") AccountCommands = ProjectCommands @@ -603,17 +630,24 @@ class FloatingIpCommands(object): class NetworkCommands(object): """Class for managing networks.""" - @args('--label', dest="label", metavar='