diff options
| author | Naveed Massjouni <naveedm9@gmail.com> | 2011-11-18 18:18:38 -0500 |
|---|---|---|
| committer | Naveed Massjouni <naveedm9@gmail.com> | 2011-11-22 11:43:56 -0500 |
| commit | a2fe46e2368c17c98844e33d0eb2f186834bde76 (patch) | |
| tree | 05710949c0a7e40ac8e586461a9d92606c227738 | |
| parent | e35ed7ce06a7ac0280d6a36c881e75e307230f76 (diff) | |
| download | nova-a2fe46e2368c17c98844e33d0eb2f186834bde76.tar.gz nova-a2fe46e2368c17c98844e33d0eb2f186834bde76.tar.xz nova-a2fe46e2368c17c98844e33d0eb2f186834bde76.zip | |
Updating {add,remove}_security_group in compute.api to use instance
uuids instead of instance ids.
blueprint internal-uuids
Change-Id: I7ba998c67a6b42961657876a8eaa797aa8c29896
| -rw-r--r-- | nova/compute/api.py | 30 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 12 | ||||
| -rw-r--r-- | nova/tests/api/openstack/v2/contrib/test_security_groups.py | 6 | ||||
| -rw-r--r-- | nova/tests/test_libvirt.py | 10 |
4 files changed, 33 insertions, 25 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py index 863fa174a..65662b2d5 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -447,10 +447,11 @@ class API(base.Base): instance = dict(launch_index=num, **base_options) instance = self.db.instance_create(context, instance) instance_id = instance['id'] + instance_uuid = instance['uuid'] for security_group_id in security_groups: self.db.instance_add_security_group(elevated, - instance_id, + instance_uuid, security_group_id) # BlockDeviceMapping table @@ -677,7 +678,7 @@ class API(base.Base): {'method': 'refresh_provider_fw_rules', 'args': {}}) def _is_security_group_associated_with_server(self, security_group, - instance_id): + instance_uuid): """Check if the security group is already associated with the instance. If Yes, return True. """ @@ -689,10 +690,9 @@ class API(base.Base): if not instances: return False - inst_id = None - for inst_id in (instance['id'] for instance in instances \ - if instance_id == instance['id']): - return True + for inst in instances: + if (instance_uuid == inst['uuid']): + return True return False @@ -703,20 +703,21 @@ class API(base.Base): security_group_name) instance_id = instance['id'] + instance_uuid = instance['uuid'] #check if the security group is associated with the server if self._is_security_group_associated_with_server(security_group, - instance_id): + instance_uuid): raise exception.SecurityGroupExistsForInstance( security_group_id=security_group['id'], - instance_id=instance_id) + instance_id=instance_uuid) #check if the instance is in running state if instance['power_state'] != power_state.RUNNING: - raise exception.InstanceNotRunning(instance_id=instance_id) + raise exception.InstanceNotRunning(instance_id=instance_uuid) self.db.instance_add_security_group(context.elevated(), - instance_id, + instance_uuid, security_group['id']) host = instance['host'] rpc.cast(context, @@ -731,20 +732,21 @@ class API(base.Base): security_group_name) instance_id = instance['id'] + instance_uuid = instance['uuid'] #check if the security group is associated with the server if not self._is_security_group_associated_with_server(security_group, - instance_id): + instance_uuid): raise exception.SecurityGroupNotExistsForInstance( security_group_id=security_group['id'], - instance_id=instance_id) + instance_id=instance_uuid) #check if the instance is in running state if instance['power_state'] != power_state.RUNNING: - raise exception.InstanceNotRunning(instance_id=instance_id) + raise exception.InstanceNotRunning(instance_id=instance_uuid) self.db.instance_remove_security_group(context.elevated(), - instance_id, + instance_uuid, security_group['id']) host = instance['host'] rpc.cast(context, diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 77d018d43..d8a52dd45 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1588,11 +1588,12 @@ def instance_update(context, instance_id, values): return instance_ref -def instance_add_security_group(context, instance_id, security_group_id): +def instance_add_security_group(context, instance_uuid, security_group_id): """Associate the given security group with the given instance""" session = get_session() with session.begin(): - instance_ref = instance_get(context, instance_id, session=session) + instance_ref = instance_get_by_uuid(context, instance_uuid, + session=session) security_group_ref = security_group_get(context, security_group_id, session=session) @@ -1601,12 +1602,13 @@ def instance_add_security_group(context, instance_id, security_group_id): @require_context -def instance_remove_security_group(context, instance_id, security_group_id): +def instance_remove_security_group(context, instance_uuid, security_group_id): """Disassociate the given security group from the given instance""" session = get_session() - + instance_ref = instance_get_by_uuid(context, instance_uuid, + session=session) session.query(models.SecurityGroupInstanceAssociation).\ - filter_by(instance_id=instance_id).\ + filter_by(instance_id=instance_ref['id']).\ filter_by(security_group_id=security_group_id).\ update({'deleted': True, 'deleted_at': utils.utcnow(), diff --git a/nova/tests/api/openstack/v2/contrib/test_security_groups.py b/nova/tests/api/openstack/v2/contrib/test_security_groups.py index 74a764cdb..9055e1bca 100644 --- a/nova/tests/api/openstack/v2/contrib/test_security_groups.py +++ b/nova/tests/api/openstack/v2/contrib/test_security_groups.py @@ -22,6 +22,7 @@ import webob from nova.api.openstack.v2.contrib import security_groups import nova.db from nova import exception +from nova import utils from nova import test from nova.tests.api.openstack import fakes @@ -86,12 +87,13 @@ def return_server_by_uuid(context, server_uuid): def return_non_running_server(context, server_id): - return {'id': server_id, 'power_state': 0x02, + return {'id': server_id, 'power_state': 0x02, 'uuid': FAKE_UUID, 'host': "localhost", 'name': 'asdf'} def return_security_group_by_name(context, project_id, group_name): - return {'id': 1, 'name': group_name, "instances": [{'id': 1}]} + return {'id': 1, 'name': group_name, + "instances": [{'id': 1, 'uuid': FAKE_UUID}]} def return_security_group_without_instances(context, project_id, group_name): diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index c1fae1df2..1e9e2ab04 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -1320,9 +1320,9 @@ class IptablesFirewallTestCase(test.TestCase): 'to_port': 81, 'group_id': src_secgroup['id']}) - db.instance_add_security_group(admin_ctxt, instance_ref['id'], + db.instance_add_security_group(admin_ctxt, instance_ref['uuid'], secgroup['id']) - db.instance_add_security_group(admin_ctxt, src_instance_ref['id'], + db.instance_add_security_group(admin_ctxt, src_instance_ref['uuid'], src_secgroup['id']) instance_ref = db.instance_get(admin_ctxt, instance_ref['id']) src_instance_ref = db.instance_get(admin_ctxt, src_instance_ref['id']) @@ -1664,6 +1664,7 @@ class NWFilterTestCase(test.TestCase): instance_ref = self._create_instance() inst_id = instance_ref['id'] + inst_uuid = instance_ref['uuid'] def _ensure_all_called(mac): instance_filter = 'nova-instance-%s-%s' % (instance_ref['name'], @@ -1679,7 +1680,7 @@ class NWFilterTestCase(test.TestCase): self.security_group = self.setup_and_return_security_group() - db.instance_add_security_group(self.context, inst_id, + db.instance_add_security_group(self.context, inst_uuid, self.security_group.id) instance = db.instance_get(self.context, inst_id) @@ -1713,10 +1714,11 @@ class NWFilterTestCase(test.TestCase): instance_ref = self._create_instance() inst_id = instance_ref['id'] + inst_uuid = instance_ref['uuid'] self.security_group = self.setup_and_return_security_group() - db.instance_add_security_group(self.context, inst_id, + db.instance_add_security_group(self.context, inst_uuid, self.security_group.id) instance = db.instance_get(self.context, inst_id) |
