summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorJason Koelker <jason@koelker.net>2011-05-24 16:40:24 -0500
committerJason Koelker <jason@koelker.net>2011-05-24 16:40:24 -0500
commit8c8cefef4804ee9f67e4c4d4861e5af667577697 (patch)
tree30859234a733bb18c7c4212d1f4389f800809910 /bin
parentf41f8d2be5239dd9d2810bfaf6f432c713907c7f (diff)
parent2b0af0ccf792dd2f0420fd8eaa6bc8be8a8671bf (diff)
merge with trey
Diffstat (limited to 'bin')
-rwxr-xr-xbin/nova-dhcpbridge7
-rwxr-xr-xbin/nova-manage118
-rwxr-xr-xbin/stack2
3 files changed, 94 insertions, 33 deletions
diff --git a/bin/nova-dhcpbridge b/bin/nova-dhcpbridge
index f42dfd6b5..5926b97de 100755
--- a/bin/nova-dhcpbridge
+++ b/bin/nova-dhcpbridge
@@ -108,6 +108,13 @@ def main():
interface = os.environ.get('DNSMASQ_INTERFACE', FLAGS.dnsmasq_interface)
if int(os.environ.get('TESTING', '0')):
from nova.tests import fake_flags
+
+ #if FLAGS.fake_rabbit:
+ # LOG.debug(_("leasing ip"))
+ # network_manager = utils.import_object(FLAGS.network_manager)
+ ## reload(fake_flags)
+ # from nova.tests import fake_flags
+
action = argv[1]
if action in ['add', 'del', 'old']:
mac = argv[2]
diff --git a/bin/nova-manage b/bin/nova-manage
index 6c3561f71..b051dff0b 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -82,6 +82,7 @@ from nova import log as logging
from nova import quota
from nova import rpc
from nova import utils
+from nova import version
from nova.api.ec2 import ec2utils
from nova.auth import manager
from nova.cloudpipe import pipelib
@@ -150,7 +151,7 @@ class VpnCommands(object):
state = 'up'
print address,
print vpn['host'],
- print vpn['ec2_id'],
+ print ec2utils.id_to_ec2_id(vpn['id']),
print vpn['state_description'],
print state
else:
@@ -367,34 +368,54 @@ class ProjectCommands(object):
def add(self, project_id, user_id):
"""Adds user to project
arguments: project_id user_id"""
- self.manager.add_to_project(user_id, project_id)
+ try:
+ self.manager.add_to_project(user_id, project_id)
+ except exception.UserNotFound as ex:
+ print ex
+ raise
def create(self, name, project_manager, description=None):
"""Creates a new project
arguments: name project_manager [description]"""
- self.manager.create_project(name, project_manager, description)
+ try:
+ self.manager.create_project(name, project_manager, description)
+ except exception.UserNotFound as ex:
+ print ex
+ raise
def modify(self, name, project_manager, description=None):
"""Modifies a project
arguments: name project_manager [description]"""
- self.manager.modify_project(name, project_manager, description)
+ try:
+ self.manager.modify_project(name, project_manager, description)
+ except exception.UserNotFound as ex:
+ print ex
+ raise
def delete(self, name):
"""Deletes an existing project
arguments: name"""
- self.manager.delete_project(name)
+ try:
+ self.manager.delete_project(name)
+ except exception.ProjectNotFound as ex:
+ print ex
+ raise
def environment(self, project_id, user_id, filename='novarc'):
"""Exports environment variables to an sourcable file
arguments: project_id user_id [filename='novarc]"""
- rc = self.manager.get_environment_rc(user_id, project_id)
+ try:
+ rc = self.manager.get_environment_rc(user_id, project_id)
+ except (exception.UserNotFound, exception.ProjectNotFound) as ex:
+ print ex
+ raise
with open(filename, 'w') as f:
f.write(rc)
- def list(self):
+ def list(self, username=None):
"""Lists all projects
- arguments: <none>"""
- for project in self.manager.get_projects():
+ arguments: [username]"""
+ for project in self.manager.get_projects(username):
print project.name
def quota(self, project_id, key=None, value=None):
@@ -402,11 +423,10 @@ class ProjectCommands(object):
arguments: project_id [key] [value]"""
ctxt = context.get_admin_context()
if key:
- quo = {'project_id': project_id, key: value}
try:
- db.quota_update(ctxt, project_id, quo)
- except exception.NotFound:
- db.quota_create(ctxt, quo)
+ db.quota_update(ctxt, project_id, key, value)
+ except exception.ProjectQuotaNotFound:
+ db.quota_create(ctxt, project_id, key, value)
project_quota = quota.get_quota(ctxt, project_id)
for key, value in project_quota.iteritems():
print '%s: %s' % (key, value)
@@ -414,7 +434,11 @@ class ProjectCommands(object):
def remove(self, project_id, user_id):
"""Removes user from project
arguments: project_id user_id"""
- self.manager.remove_from_project(user_id, project_id)
+ try:
+ self.manager.remove_from_project(user_id, project_id)
+ except (exception.UserNotFound, exception.ProjectNotFound) as ex:
+ print ex
+ raise
def scrub(self, project_id):
"""Deletes data associated with project
@@ -434,6 +458,9 @@ class ProjectCommands(object):
zip_file = self.manager.get_credentials(user_id, project_id)
with open(filename, 'w') as f:
f.write(zip_file)
+ except (exception.UserNotFound, exception.ProjectNotFound) as ex:
+ print ex
+ raise
except db.api.NoMoreNetworks:
print _('No more networks available. If this is a new '
'installation, you need\nto call something like this:\n\n'
@@ -476,7 +503,7 @@ class FixedIpCommands(object):
instance = fixed_ip['instance']
hostname = instance['hostname']
host = instance['host']
- mac_address = instance['mac_address']
+ mac_address = fixed_ip['mac_address']['address']
print "%-18s\t%-15s\t%-17s\t%-15s\t%s" % (
fixed_ip['network']['cidr'],
fixed_ip['address'],
@@ -532,8 +559,10 @@ class NetworkCommands(object):
[label='public'], [flat_network_bridge=FLAG,
[bridge_interface=FLAG]"""
if not fixed_range:
- raise TypeError(_('Fixed range in the form of 10.0.0.0/8 is '
- 'required to create networks.'))
+ msg = _('Fixed range in the form of 10.0.0.0/8 is '
+ 'required to create networks.')
+ print msg
+ raise TypeError(msg)
if not num_networks:
num_networks = FLAGS.num_networks
if not network_size:
@@ -549,16 +578,21 @@ class NetworkCommands(object):
if not bridge_interface:
bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface
net_manager = utils.import_object(FLAGS.network_manager)
- net_manager.create_networks(context.get_admin_context(),
- cidr=fixed_range,
- num_networks=int(num_networks),
- network_size=int(network_size),
- vlan_start=int(vlan_start),
- vpn_start=int(vpn_start),
- cidr_v6=fixed_range_v6,
- label=label,
- bridge=flat_network_bridge,
- bridge_interface=bridge_interface)
+
+ try:
+ net_manager.create_networks(context.get_admin_context(),
+ cidr=fixed_range,
+ num_networks=int(num_networks),
+ network_size=int(network_size),
+ vlan_start=int(vlan_start),
+ vpn_start=int(vpn_start),
+ cidr_v6=fixed_range_v6,
+ label=label,
+ bridge=flat_network_bridge,
+ bridge_interface=bridge_interface)
+ except ValueError, e:
+ print e
+ raise e
def list(self):
"""List all created networks"""
@@ -774,6 +808,17 @@ class DbCommands(object):
print migration.db_version()
+class VersionCommands(object):
+ """Class for exposing the codebase version."""
+
+ def __init__(self):
+ pass
+
+ def list(self):
+ print _("%s (%s)") %\
+ (version.version_string(), version.version_string_with_vcs())
+
+
class VolumeCommands(object):
"""Methods for dealing with a cloud in an odd state"""
@@ -842,11 +887,17 @@ class InstanceTypeCommands(object):
instance_types.create(name, memory, vcpus, local_gb,
flavorid, swap, rxtx_quota, rxtx_cap)
except exception.InvalidInputException:
- print "Must supply valid parameters to create instance type"
+ print "Must supply valid parameters to create instance_type"
print e
sys.exit(1)
- except exception.DBError, e:
- print "DB Error: %s" % e
+ except exception.ApiError, e:
+ print "\n\n"
+ print "\n%s" % e
+ print "Please ensure instance_type name and flavorid are unique."
+ print "To complete remove a instance_type, use the --purge flag:"
+ print "\n # nova-manage instance_type delete <name> --purge\n"
+ print "Currently defined instance_type names and flavorids:"
+ self.list("--all")
sys.exit(2)
except:
print "Unknown error"
@@ -970,7 +1021,7 @@ class ImageCommands(object):
try:
internal_id = ec2utils.ec2_id_to_id(old_image_id)
image = self.image_service.show(context, internal_id)
- except exception.NotFound:
+ except (exception.InvalidEc2Id, exception.ImageNotFound):
image = self.image_service.show_by_name(context, old_image_id)
return image['id']
@@ -1059,7 +1110,8 @@ CATEGORIES = [
('volume', VolumeCommands),
('instance_type', InstanceTypeCommands),
('image', ImageCommands),
- ('flavor', InstanceTypeCommands)]
+ ('flavor', InstanceTypeCommands),
+ ('version', VersionCommands)]
def lazy_match(name, key_value_tuples):
@@ -1101,6 +1153,8 @@ def main():
script_name = argv.pop(0)
if len(argv) < 1:
+ print _("\nOpenStack Nova version: %s (%s)\n") %\
+ (version.version_string(), version.version_string_with_vcs())
print script_name + " category action [<args>]"
print _("Available categories:")
for k, _v in CATEGORIES:
diff --git a/bin/stack b/bin/stack
index d84a82e27..a1c6d1348 100755
--- a/bin/stack
+++ b/bin/stack
@@ -65,7 +65,7 @@ def format_help(d):
indent = MAX_INDENT - 6
out = []
- for k, v in d.iteritems():
+ for k, v in sorted(d.iteritems()):
if (len(k) + 6) > MAX_INDENT:
out.extend([' %s' % k])
initial_indent = ' ' * (indent + 6)