summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNaveed Massjouni <naveedm9@gmail.com>2011-11-18 18:18:38 -0500
committerNaveed Massjouni <naveedm9@gmail.com>2011-11-22 11:43:56 -0500
commita2fe46e2368c17c98844e33d0eb2f186834bde76 (patch)
tree05710949c0a7e40ac8e586461a9d92606c227738
parente35ed7ce06a7ac0280d6a36c881e75e307230f76 (diff)
downloadnova-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.py30
-rw-r--r--nova/db/sqlalchemy/api.py12
-rw-r--r--nova/tests/api/openstack/v2/contrib/test_security_groups.py6
-rw-r--r--nova/tests/test_libvirt.py10
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)