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 23f2f062a74f..c2be3eb9e595 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -1054,43 +1054,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',