summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-04-26 15:48:28 -0700
committerBrian Waldon <brian.waldon@rackspace.com>2011-04-26 15:48:28 -0700
commit64f40320a586d28345c38e4079b257e7a130c5db (patch)
treebebe2cb4803913fa9b1518c7abb5e45c0427c12b /nova
parenta3f16d7efbdc51c75c1a729d9194ee3a66841bab (diff)
parent5ea80e2f62e7a35967fc509aef8e7158577a2980 (diff)
merging trunk
Diffstat (limited to 'nova')
-rw-r--r--nova/api/ec2/cloud.py3
-rw-r--r--nova/auth/dbdriver.py5
-rw-r--r--nova/auth/ldapdriver.py11
-rw-r--r--nova/exception.py48
-rw-r--r--nova/tests/test_virt.py37
-rw-r--r--nova/virt/hyperv.py3
-rw-r--r--nova/virt/libvirt_conn.py2
-rw-r--r--nova/virt/vmwareapi/vmops.py3
-rw-r--r--nova/virt/xenapi/vm_utils.py3
-rw-r--r--nova/virt/xenapi/vmops.py3
10 files changed, 96 insertions, 22 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 049ca269f..94fbf19ff 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -61,8 +61,7 @@ def _gen_key(context, user_id, key_name):
# creation before creating key_pair
try:
db.key_pair_get(context, user_id, key_name)
- raise exception.Duplicate(_("The key_pair %s already exists")
- % key_name)
+ raise exception.KeyPairExists(key_name=key_name)
except exception.NotFound:
pass
private_key, public_key, fingerprint = crypto.generate_key_pair()
diff --git a/nova/auth/dbdriver.py b/nova/auth/dbdriver.py
index 813cba36d..a429b7812 100644
--- a/nova/auth/dbdriver.py
+++ b/nova/auth/dbdriver.py
@@ -81,7 +81,7 @@ class DbDriver(object):
user_ref = db.user_create(context.get_admin_context(), values)
return self._db_user_to_auth_user(user_ref)
except exception.Duplicate, e:
- raise exception.Duplicate(_('User %s already exists') % name)
+ raise exception.UserExists(user=name)
def _db_user_to_auth_user(self, user_ref):
return {'id': user_ref['id'],
@@ -128,8 +128,7 @@ class DbDriver(object):
try:
project = db.project_create(context.get_admin_context(), values)
except exception.Duplicate:
- raise exception.Duplicate(_("Project can't be created because "
- "project %s already exists") % name)
+ raise exception.ProjectExists(project=name)
for member in members:
db.project_add_member(context.get_admin_context(),
diff --git a/nova/auth/ldapdriver.py b/nova/auth/ldapdriver.py
index 093462b93..3f8432851 100644
--- a/nova/auth/ldapdriver.py
+++ b/nova/auth/ldapdriver.py
@@ -171,7 +171,7 @@ class LdapDriver(object):
def create_user(self, name, access_key, secret_key, is_admin):
"""Create a user"""
if self.__user_exists(name):
- raise exception.Duplicate(_("LDAP user %s already exists") % name)
+ raise exception.LDAPUserExists(user=name)
if FLAGS.ldap_user_modify_only:
if self.__ldap_user_exists(name):
# Retrieve user by name
@@ -225,8 +225,7 @@ class LdapDriver(object):
description=None, member_uids=None):
"""Create a project"""
if self.__project_exists(name):
- raise exception.Duplicate(_("Project can't be created because "
- "project %s already exists") % name)
+ raise exception.ProjectExists(project=name)
if not self.__user_exists(manager_uid):
raise exception.LDAPUserNotFound(user_id=manager_uid)
manager_dn = self.__uid_to_dn(manager_uid)
@@ -464,8 +463,7 @@ class LdapDriver(object):
description, member_uids=None):
"""Create a group"""
if self.__group_exists(group_dn):
- raise exception.Duplicate(_("Group can't be created because "
- "group %s already exists") % name)
+ raise exception.LDAPGroupExists(group=name)
members = []
if member_uids is not None:
for member_uid in member_uids:
@@ -500,8 +498,7 @@ class LdapDriver(object):
if not self.__group_exists(group_dn):
raise exception.LDAPGroupNotFound(group_id=group_dn)
if self.__is_in_group(uid, group_dn):
- raise exception.Duplicate(_("User %(uid)s is already a member of "
- "the group %(group_dn)s") % locals())
+ raise exception.LDAPMembershipExists(uid=uid, group_dn=group_dn)
attr = [(self.ldap.MOD_ADD, 'member', self.__uid_to_dn(uid))]
self.conn.modify_s(group_dn, attr)
diff --git a/nova/exception.py b/nova/exception.py
index 2a1b29559..67b9d95ef 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -55,10 +55,22 @@ class ApiError(Error):
super(ApiError, self).__init__('%s: %s' % (code, message))
-class Duplicate(Error):
+class NotFound(Error):
pass
+class InstanceNotFound(NotFound):
+ def __init__(self, message, instance_id):
+ self.instance_id = instance_id
+ super(InstanceNotFound, self).__init__(message)
+
+
+class VolumeNotFound(NotFound):
+ def __init__(self, message, volume_id):
+ self.volume_id = volume_id
+ super(VolumeNotFound, self).__init__(message)
+
+
class NotAuthorized(Error):
pass
@@ -487,3 +499,37 @@ class NotAllowed(NovaException):
class GlobalRoleNotAllowed(NotAllowed):
message = _("Unable to use global role %(role_id)s")
+
+
+#TODO(bcwaldon): EOL this exception!
+class Duplicate(NovaException):
+ pass
+
+
+class KeyPairExists(Duplicate):
+ message = _("Key pair %(key_name)s already exists.")
+
+
+class UserExists(Duplicate):
+ message = _("User %(user)s already exists.")
+
+
+class LDAPUserExists(UserExists):
+ message = _("LDAP user %(user)s already exists.")
+
+
+class LDAPGroupExists(Duplicate):
+ message = _("LDAP group %(group)s already exists.")
+
+
+class LDAPMembershipExists(Duplicate):
+ message = _("User %(uid)s is already a member of "
+ "the group %(group_dn)s")
+
+
+class ProjectExists(Duplicate):
+ message = _("Project %(project)s already exists.")
+
+
+class InstanceExists(Duplicate):
+ message = _("Instance %(name)s already exists.")
diff --git a/nova/tests/test_virt.py b/nova/tests/test_virt.py
index d99ffce95..498ec7012 100644
--- a/nova/tests/test_virt.py
+++ b/nova/tests/test_virt.py
@@ -549,6 +549,43 @@ class LibvirtConnTestCase(test.TestCase):
db.volume_destroy(self.context, volume_ref['id'])
db.instance_destroy(self.context, instance_ref['id'])
+ def test_spawn_with_network_info(self):
+ # Skip if non-libvirt environment
+ if not self.lazy_load_library_exists():
+ return
+
+ # Preparing mocks
+ def fake_none(self, instance):
+ return
+
+ self.create_fake_libvirt_mock()
+ instance = db.instance_create(self.context, self.test_instance)
+
+ # Start test
+ self.mox.ReplayAll()
+ conn = libvirt_conn.LibvirtConnection(False)
+ conn.firewall_driver.setattr('setup_basic_filtering', fake_none)
+ conn.firewall_driver.setattr('prepare_instance_filter', fake_none)
+
+ network = db.project_get_network(context.get_admin_context(),
+ self.project.id)
+ ip_dict = {'ip': self.test_ip,
+ 'netmask': network['netmask'],
+ 'enabled': '1'}
+ mapping = {'label': network['label'],
+ 'gateway': network['gateway'],
+ 'mac': instance['mac_address'],
+ 'dns': [network['dns']],
+ 'ips': [ip_dict]}
+ network_info = [(network, mapping)]
+
+ try:
+ conn.spawn(instance, network_info)
+ except Exception, e:
+ count = (0 <= e.message.find('Unexpected method call'))
+
+ self.assertTrue(count)
+
def tearDown(self):
self.manager.delete_project(self.project)
self.manager.delete_user(self.user)
diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py
index 507ea5457..9026e737e 100644
--- a/nova/virt/hyperv.py
+++ b/nova/virt/hyperv.py
@@ -143,8 +143,7 @@ class HyperVConnection(driver.ComputeDriver):
""" Create a new VM and start it."""
vm = self._lookup(instance.name)
if vm is not None:
- raise exception.Duplicate(_('Attempt to create duplicate vm %s') %
- instance.name)
+ raise exception.InstanceExists(name=instance.name)
user = manager.AuthManager().get_user(instance['user_id'])
project = manager.AuthManager().get_project(instance['project_id'])
diff --git a/nova/virt/libvirt_conn.py b/nova/virt/libvirt_conn.py
index 41610546f..15adcccee 100644
--- a/nova/virt/libvirt_conn.py
+++ b/nova/virt/libvirt_conn.py
@@ -621,7 +621,7 @@ class LibvirtConnection(driver.ComputeDriver):
xml = self.to_xml(instance, False, network_info)
self.firewall_driver.setup_basic_filtering(instance, network_info)
self.firewall_driver.prepare_instance_filter(instance, network_info)
- self._create_image(instance, xml, network_info)
+ self._create_image(instance, xml, network_info=network_info)
domain = self._create_new_domain(xml)
LOG.debug(_("instance %s: is running"), instance['name'])
self.firewall_driver.apply_instance_filter(instance)
diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py
index 033a511f8..c3e79a92f 100644
--- a/nova/virt/vmwareapi/vmops.py
+++ b/nova/virt/vmwareapi/vmops.py
@@ -100,8 +100,7 @@ class VMWareVMOps(object):
"""
vm_ref = self._get_vm_ref_from_the_name(instance.name)
if vm_ref:
- raise exception.Duplicate(_("Attempted to create a VM with a name"
- " %s, but that already exists on the host") % instance.name)
+ raise exception.InstanceExists(name=instance.name)
client_factory = self._session._get_vim().client.factory
service_content = self._session._get_vim().get_service_content()
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index 8f30a6d7c..c8f342aa8 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -641,8 +641,7 @@ class VMHelper(HelperBase):
if n == 0:
return None
elif n > 1:
- raise exception.Duplicate(_('duplicate name found: %s') %
- name_label)
+ raise exception.InstanceExists(name=name_label)
else:
return vm_refs[0]
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index 69b1a163d..808708e8b 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -127,8 +127,7 @@ class VMOps(object):
instance_name = instance.name
vm_ref = VMHelper.lookup(self._session, instance_name)
if vm_ref is not None:
- raise exception.Duplicate(_('Attempted to create'
- ' non-unique name %s') % instance_name)
+ raise exception.InstanceExists(name=instance_name)
#ensure enough free memory is available
if not VMHelper.ensure_free_mem(self._session, instance):