merged trunk and resolved conflict

This commit is contained in:
Chris Behrens
2011-09-19 15:32:45 -07:00
3 changed files with 82 additions and 0 deletions

View File

@@ -61,6 +61,7 @@ import math
import netaddr import netaddr
from optparse import OptionParser from optparse import OptionParser
import os import os
import StringIO
import sys import sys
import time import time
@@ -274,6 +275,58 @@ class ShellCommands(object):
arguments: path""" arguments: path"""
exec(compile(open(path).read(), path, 'exec'), locals(), globals()) 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 RoleCommands(object):
"""Class for managing roles.""" """Class for managing roles."""

View File

@@ -18,6 +18,8 @@
"""Unit tests for the DB API""" """Unit tests for the DB API"""
import datetime
from nova import test from nova import test
from nova import context from nova import context
from nova import db from nova import db
@@ -98,3 +100,26 @@ class DbApiTestCase(test.TestCase):
self.assertTrue(result[0].deleted) self.assertTrue(result[0].deleted)
else: else:
self.assertTrue(result[1].deleted) self.assertTrue(result[1].deleted)
def test_migration_get_all_unconfirmed(self):
ctxt = context.get_admin_context()
# Ensure no migrations are returned.
results = db.migration_get_all_unconfirmed(ctxt, 10)
self.assertEqual(0, len(results))
# Ensure one migration older than 10 seconds is returned.
updated_at = datetime.datetime(2000, 01, 01, 12, 00, 00)
values = {"status": "FINISHED", "updated_at": updated_at}
migration = db.migration_create(ctxt, values)
results = db.migration_get_all_unconfirmed(ctxt, 10)
self.assertEqual(1, len(results))
db.migration_update(ctxt, migration.id, {"status": "CONFIRMED"})
# Ensure the new migration is not returned.
updated_at = datetime.datetime.utcnow()
values = {"status": "FINISHED", "updated_at": updated_at}
migration = db.migration_create(ctxt, values)
results = db.migration_get_all_unconfirmed(ctxt, 10)
self.assertEqual(0, len(results))
db.migration_update(ctxt, migration.id, {"status": "CONFIRMED"})

View File

@@ -176,6 +176,10 @@ class _VirtDriverTestCase(test.TestCase):
def test_poll_rescued_instances(self): def test_poll_rescued_instances(self):
self.connection.poll_rescued_instances(10) self.connection.poll_rescued_instances(10)
@catch_notimplementederror
def test_poll_unconfirmed_resizes(self):
self.connection.poll_unconfirmed_resizes(10)
@catch_notimplementederror @catch_notimplementederror
def test_migrate_disk_and_power_off(self): def test_migrate_disk_and_power_off(self):
instance_ref = test_utils.get_test_instance() instance_ref = test_utils.get_test_instance()