From bebd00b117c68097203adc2e56e972d74254fc59 Mon Sep 17 00:00:00 2001 From: Hans Lindgren Date: Fri, 24 Apr 2015 13:10:39 +0200 Subject: [PATCH] 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 --- nova/compute/api.py | 10 ++++----- nova/compute/manager.py | 11 ++++++++++ nova/compute/rpcapi.py | 28 +++---------------------- nova/tests/unit/compute/test_compute.py | 12 +++++------ nova/tests/unit/compute/test_rpcapi.py | 22 ++++++++++++------- 5 files changed, 39 insertions(+), 44 deletions(-) diff --git a/nova/compute/api.py b/nova/compute/api.py index 1ed8fc0b2049..fa10da2c3d39 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -3825,7 +3825,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. @@ -4022,7 +4022,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 @@ -4045,7 +4045,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): @@ -4150,7 +4150,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): @@ -4186,7 +4186,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, diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 3c687dba6ea6..3fde84349790 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -6745,6 +6745,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) diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index fe116f6d13d6..9ea77553bcd1 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -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) diff --git a/nova/tests/unit/compute/test_compute.py b/nova/tests/unit/compute/test_compute.py index 11159a40cebe..e1648cfc8782 100644 --- a/nova/tests/unit/compute/test_compute.py +++ b/nova/tests/unit/compute/test_compute.py @@ -9640,7 +9640,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'], @@ -9666,7 +9666,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'], @@ -9690,7 +9690,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() @@ -9706,7 +9706,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'], @@ -9724,7 +9724,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'], @@ -9740,7 +9740,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() diff --git a/nova/tests/unit/compute/test_rpcapi.py b/nova/tests/unit/compute/test_rpcapi.py index eca124d7ad0f..89c5b297e72b 100644 --- a/nova/tests/unit/compute/test_rpcapi.py +++ b/nova/tests/unit/compute/test_rpcapi.py @@ -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',