summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2011-09-20 03:23:34 -0400
committerScott Moser <smoser@ubuntu.com>2011-09-20 03:23:34 -0400
commit2eb2120f98cfe70ce67325ffe26cfb5cc86c6356 (patch)
tree8b2f431f158878864fa5b44abfc035270a834513 /bin
parentb399ac7b6e80d16fddd61c9b2d505cff09cb8889 (diff)
parentdcd646e6610e2a5cc6da78220ab0c8acde48d401 (diff)
downloadnova-2eb2120f98cfe70ce67325ffe26cfb5cc86c6356.tar.gz
nova-2eb2120f98cfe70ce67325ffe26cfb5cc86c6356.tar.xz
nova-2eb2120f98cfe70ce67325ffe26cfb5cc86c6356.zip
merge with trunk r1601
Diffstat (limited to 'bin')
-rwxr-xr-xbin/nova-manage66
1 files changed, 55 insertions, 11 deletions
diff --git a/bin/nova-manage b/bin/nova-manage
index 089b2eeae..1f4aa8a78 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -61,6 +61,7 @@ import math
import netaddr
from optparse import OptionParser
import os
+import StringIO
import sys
import time
@@ -274,6 +275,58 @@ class ShellCommands(object):
arguments: path"""
exec(compile(open(path).read(), path, 'exec'), locals(), globals())
+ @args('--filename', dest='filename', metavar='<path>', default=False,
+ help='Export file path')
+ def export(self, filename):
+ """Export Nova users into a file that can be consumed by Keystone"""
+
+ def create_file(filename):
+ data = generate_data()
+ with open(filename, 'w') as f:
+ f.write(data.getvalue())
+
+ def tenants(data, am):
+ for project in am.get_projects():
+ print >> data, ("tenant add '%s'" %
+ (project.name))
+ for u in project.member_ids:
+ user = am.get_user(u)
+ print >> data, ("user add '%s' '%s' '%s'" %
+ (user.name, user.access, project.name))
+ print >> data, ("credentials add 'EC2' '%s:%s' '%s' '%s'" %
+ (user.access, project.id, user.secret, project.id))
+
+ def roles(data, am):
+ for role in am.get_roles():
+ print >> data, ("role add '%s'" % (role))
+
+ def grant_roles(data, am):
+ roles = am.get_roles()
+ for project in am.get_projects():
+ for u in project.member_ids:
+ user = am.get_user(u)
+ for role in db.user_get_roles_for_project(ctxt, u,
+ project.id):
+ print >> data, ("role grant '%s', '%s', '%s')," %
+ (user.name, role, project.name))
+ print >> data
+
+ def generate_data():
+ data = StringIO.StringIO()
+ am = manager.AuthManager()
+ tenants(data, am)
+ roles(data, am)
+ grant_roles(data, am)
+ data.seek(0)
+ return data
+
+ ctxt = context.get_admin_context()
+ if filename:
+ create_file(filename)
+ else:
+ data = generate_data()
+ print data.getvalue()
+
class RoleCommands(object):
"""Class for managing roles."""
@@ -685,7 +738,7 @@ class NetworkCommands(object):
help='Multi host')
@args('--dns1', dest="dns1", metavar="<DNS Address>", help='First DNS')
@args('--dns2', dest="dns2", metavar="<DNS Address>", help='Second DNS')
- @args('--uuid', dest="net_uuid", metavar="<network uuid>",
+ @args('--uuid', dest="uuid", metavar="<network uuid>",
help='Network UUID')
@args('--project_id', dest="project_id", metavar="<project id>",
help='Project id')
@@ -710,16 +763,7 @@ class NetworkCommands(object):
bridge_required = ['nova.network.manager.FlatManager',
'nova.network.manager.FlatDHCPManager']
if FLAGS.network_manager in bridge_required:
- # TODO(tr3buchet) - swap print statement and following line for
- # raise statement in diablo 4
- print _('--bridge parameter required or FLAG '
- 'flat_network_bridge must be set to create networks\n'
- 'WARNING! ACHTUNG! Setting the bridge to br100 '
- 'automatically is deprecated and will be removed in '
- 'Diablo milestone 4. Prepare yourself accordingly.')
- time.sleep(10)
- bridge = 'br100'
- #raise exception.NetworkNotCreated(req='--bridge')
+ raise exception.NetworkNotCreated(req='--bridge')
bridge_interface = bridge_interface or FLAGS.flat_interface or \
FLAGS.vlan_interface