Add security group calls missing from latest compute rpc api version bump

The recent compute rpc api version bump missed out on the security group
related calls that are part of the api.

One possible reason is that both compute and security group client side
rpc api:s share a single target, which is of little value and only cause
mistakes like this.

This change eliminates future problems like this by combining them into
one to get a 1:1 relationship between client and server api:s.

Change-Id: I9207592a87fab862c04d210450cbac47af6a3fd7
Closes-Bug: #1448075
(cherry picked from commit bebd00b117)
This commit is contained in:
Hans Lindgren 2015-04-24 13:10:39 +02:00 committed by Dan Smith
parent a0efbbcfc7
commit f191a2147a
5 changed files with 39 additions and 44 deletions

View File

@ -3833,7 +3833,7 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
def __init__(self, skip_policy_check=False, **kwargs):
super(SecurityGroupAPI, self).__init__(**kwargs)
self.skip_policy_check = skip_policy_check
self.security_group_rpcapi = compute_rpcapi.SecurityGroupAPI()
self.compute_rpcapi = compute_rpcapi.ComputeAPI()
def validate_property(self, value, property, allowed):
"""Validate given security group property.
@ -4030,7 +4030,7 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
security_group['id'])
# NOTE(comstud): No instance_uuid argument to this compute manager
# call
self.security_group_rpcapi.refresh_security_group_rules(context,
self.compute_rpcapi.refresh_security_group_rules(context,
security_group['id'], host=instance.host)
@wrap_check_security_groups_policy
@ -4053,7 +4053,7 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
security_group['id'])
# NOTE(comstud): No instance_uuid argument to this compute manager
# call
self.security_group_rpcapi.refresh_security_group_rules(context,
self.compute_rpcapi.refresh_security_group_rules(context,
security_group['id'], host=instance.host)
def get_rule(self, context, id):
@ -4158,7 +4158,7 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
for instance in security_group['instances']:
if instance.host is not None:
self.security_group_rpcapi.refresh_instance_security_rules(
self.compute_rpcapi.refresh_instance_security_rules(
context, instance.host, instance)
def trigger_members_refresh(self, context, group_ids):
@ -4194,7 +4194,7 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
# ..then we send a request to refresh the rules for each instance.
for instance in instances.values():
if instance.host:
self.security_group_rpcapi.refresh_instance_security_rules(
self.compute_rpcapi.refresh_instance_security_rules(
context, instance.host, instance)
def get_instance_security_groups(self, context, instance_uuid,

View File

@ -6704,6 +6704,17 @@ class _ComputeV4Proxy(object):
bdms, recreate, on_shared_storage,
preserve_ephemeral=preserve_ephemeral)
def refresh_security_group_rules(self, ctxt, security_group_id):
return self.manager.refresh_security_group_rules(ctxt,
security_group_id)
def refresh_security_group_members(self, ctxt, security_group_id):
return self.manager.refresh_security_group_members(ctxt,
security_group_id)
def refresh_instance_security_rules(self, ctxt, instance):
return self.manager.refresh_instance_security_rules(ctxt, instance)
def refresh_provider_fw_rules(self, ctxt):
return self.manager.refresh_provider_fw_rules(ctxt)

View File

@ -1052,43 +1052,21 @@ class ComputeAPI(object):
cctxt.cast(ctxt, 'unquiesce_instance', instance=instance,
mapping=mapping)
class SecurityGroupAPI(object):
'''Client side of the security group rpc API.
API version history:
1.0 - Initial version.
1.41 - Adds refresh_instance_security_rules()
2.0 - Remove 1.x backwards compat
3.0 - Identical to 2.x, but has to be bumped at the same time as the
compute API since it's all together on the server side.
'''
def __init__(self):
super(SecurityGroupAPI, self).__init__()
target = messaging.Target(topic=CONF.compute_topic, version='3.0')
version_cap = ComputeAPI.VERSION_ALIASES.get(
CONF.upgrade_levels.compute, CONF.upgrade_levels.compute)
self.client = rpc.get_client(target, version_cap)
def refresh_security_group_rules(self, ctxt, security_group_id, host):
version = '3.0'
version = self._compat_ver('4.0', '3.0')
cctxt = self.client.prepare(server=host, version=version)
cctxt.cast(ctxt, 'refresh_security_group_rules',
security_group_id=security_group_id)
def refresh_security_group_members(self, ctxt, security_group_id,
host):
version = '3.0'
version = self._compat_ver('4.0', '3.0')
cctxt = self.client.prepare(server=host, version=version)
cctxt.cast(ctxt, 'refresh_security_group_members',
security_group_id=security_group_id)
def refresh_instance_security_rules(self, ctxt, host, instance):
version = '3.0'
version = self._compat_ver('4.0', '3.0')
instance_p = jsonutils.to_primitive(instance)
cctxt = self.client.prepare(server=_compute_host(None, instance),
version=version)

View File

@ -9642,7 +9642,7 @@ class ComputeAPITestCase(BaseTestCase):
rule_get)
self.stubs.Set(self.compute_api.db, 'security_group_get', group_get)
rpcapi = self.security_group_api.security_group_rpcapi
rpcapi = compute_rpcapi.ComputeAPI
self.mox.StubOutWithMock(rpcapi, 'refresh_instance_security_rules')
rpcapi.refresh_instance_security_rules(self.context,
instance['host'],
@ -9668,7 +9668,7 @@ class ComputeAPITestCase(BaseTestCase):
rule_get)
self.stubs.Set(self.compute_api.db, 'security_group_get', group_get)
rpcapi = self.security_group_api.security_group_rpcapi
rpcapi = compute_rpcapi.ComputeAPI
self.mox.StubOutWithMock(rpcapi, 'refresh_instance_security_rules')
rpcapi.refresh_instance_security_rules(self.context,
instance['host'],
@ -9692,7 +9692,7 @@ class ComputeAPITestCase(BaseTestCase):
rule_get)
self.stubs.Set(self.compute_api.db, 'security_group_get', group_get)
rpcapi = self.security_group_api.security_group_rpcapi
rpcapi = compute_rpcapi.ComputeAPI
self.mox.StubOutWithMock(rpcapi, 'refresh_instance_security_rules')
self.mox.ReplayAll()
@ -9708,7 +9708,7 @@ class ComputeAPITestCase(BaseTestCase):
self.stubs.Set(self.compute_api.db, 'security_group_get', group_get)
rpcapi = self.security_group_api.security_group_rpcapi
rpcapi = compute_rpcapi.ComputeAPI
self.mox.StubOutWithMock(rpcapi, 'refresh_instance_security_rules')
rpcapi.refresh_instance_security_rules(self.context,
instance['host'],
@ -9726,7 +9726,7 @@ class ComputeAPITestCase(BaseTestCase):
self.stubs.Set(self.compute_api.db, 'security_group_get', group_get)
rpcapi = self.security_group_api.security_group_rpcapi
rpcapi = compute_rpcapi.ComputeAPI
self.mox.StubOutWithMock(rpcapi, 'refresh_instance_security_rules')
rpcapi.refresh_instance_security_rules(self.context,
instance['host'],
@ -9742,7 +9742,7 @@ class ComputeAPITestCase(BaseTestCase):
self.stubs.Set(self.compute_api.db, 'security_group_get', group_get)
rpcapi = self.security_group_api.security_group_rpcapi
rpcapi = compute_rpcapi.ComputeAPI
self.mox.StubOutWithMock(rpcapi, 'refresh_instance_security_rules')
self.mox.ReplayAll()

View File

@ -579,23 +579,29 @@ class ComputeRpcAPITestCase(test.NoDBTestCase):
def test_refresh_security_group_rules(self):
self._test_compute_api('refresh_security_group_rules', 'cast',
rpcapi_class=compute_rpcapi.SecurityGroupAPI,
security_group_id='id', host='host')
security_group_id='id', host='host', version='4.0')
self.flags(compute='kilo', group='upgrade_levels')
self._test_compute_api('refresh_security_group_rules', 'cast',
rpcapi_class=compute_rpcapi.SecurityGroupAPI,
security_group_id='id', host='host')
security_group_id='id', host='host', version='3.0')
def test_refresh_security_group_members(self):
self._test_compute_api('refresh_security_group_members', 'cast',
rpcapi_class=compute_rpcapi.SecurityGroupAPI,
security_group_id='id', host='host')
security_group_id='id', host='host', version='4.0')
self.flags(compute='kilo', group='upgrade_levels')
self._test_compute_api('refresh_security_group_members', 'cast',
rpcapi_class=compute_rpcapi.SecurityGroupAPI,
security_group_id='id', host='host')
security_group_id='id', host='host', version='3.0')
def test_refresh_instance_security_rules(self):
self._test_compute_api('refresh_instance_security_rules', 'cast',
host='fake_host', instance=self.fake_instance_obj,
version='4.0', assert_dict=True)
self.flags(compute='kilo', group='upgrade_levels')
self._test_compute_api('refresh_instance_security_rules', 'cast',
host='fake_host', instance=self.fake_instance_obj,
version='3.0', assert_dict=True)
def test_remove_aggregate_host(self):
self._test_compute_api('remove_aggregate_host', 'cast',