summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLvov Maxim <usrleon@gmail.com>2011-06-10 17:42:24 +0400
committerLvov Maxim <usrleon@gmail.com>2011-06-10 17:42:24 +0400
commitf9327a8930b68cbeee212c55c687de9dd8029377 (patch)
treefcfb5dda87700f5458e99bd295b014dde4785060
parent50c9ebfdc00a87d1a37a11501e5678de89e25a4f (diff)
parent3f69522284833a52373ccf1e1006d9b2f20ccb06 (diff)
rebase from trunk
-rw-r--r--.bzrignore3
-rwxr-xr-xbin/nova-manage45
-rw-r--r--nova/network/manager.py2
3 files changed, 46 insertions, 4 deletions
diff --git a/.bzrignore b/.bzrignore
index 14d8028f7..351b2bef7 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -13,3 +13,6 @@ nova/vcsversion.py
clean.sqlite
run_tests.log
tests.sqlite
+nova/tests/instance-*
+tags
+
diff --git a/bin/nova-manage b/bin/nova-manage
index 0147ae21b..ce9f07f56 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -61,6 +61,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...
@@ -104,6 +106,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'
@@ -546,10 +563,16 @@ 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)
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'):
+ gateway_v6=None, label='public', project_id=None):
"""Creates fixed ips for host by range"""
+
if not fixed_range:
msg = _('Fixed range in the form of 10.0.0.0/8 is '
'required to create networks.')
@@ -577,7 +600,8 @@ class NetworkCommands(object):
vpn_start=int(vpn_start),
cidr_v6=fixed_range_v6,
gateway_v6=gateway_v6,
- label=label)
+ label=label,
+ project_id=project_id)
except ValueError, e:
print e
raise e
@@ -1174,13 +1198,26 @@ def main():
action = argv.pop(0)
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)
+ 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(*argv)
+ 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")
diff --git a/nova/network/manager.py b/nova/network/manager.py
index b5352ca0f..ad93114fe 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -571,6 +571,8 @@ class VlanManager(NetworkManager):
net['dhcp_start'] = str(project_net[3])
net['vlan'] = vlan
net['bridge'] = 'br%s' % vlan
+ if kwargs.has_key('project_id'):
+ net['project_id'] = kwargs['project_id']
if(FLAGS.use_ipv6):
cidr_v6 = '%s/%s' % (fixed_net_v6[start_v6],
significant_bits_v6)