From 05ea3a13f1bf14938069238902008edbef69b4b3 Mon Sep 17 00:00:00 2001 From: Edward Hope-Morley Date: Mon, 6 Nov 2017 12:03:27 +0000 Subject: [PATCH] Only use PciPassthroughFilter when sriov enabled Fixes code that inadvertently interprets strings as booleans resulting in them always being True. PciPassthroughFilter will now only be added to scheduler_default_filters if sriov is enabled. Change-Id: Ie2c79e98d7880e8172ac7e77febb51af04732bec Closes-Bug: 1730369 --- hooks/nova_cc_context.py | 2 +- unit_tests/test_nova_cc_contexts.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/hooks/nova_cc_context.py b/hooks/nova_cc_context.py index 631ba400..53923e4a 100644 --- a/hooks/nova_cc_context.py +++ b/hooks/nova_cc_context.py @@ -135,7 +135,7 @@ class NeutronAPIContext(context.OSContextGenerator): rdata.get('neutron-security-groups'), 'network_manager': 'neutron', } - if rdata.get('enable-sriov'): + if rdata.get('enable-sriov', '').lower() == 'true': ctxt['additional_neutron_filters'] = 'PciPassthroughFilter' if context_complete(ctxt): return ctxt diff --git a/unit_tests/test_nova_cc_contexts.py b/unit_tests/test_nova_cc_contexts.py index 1e729307..66a5f18c 100644 --- a/unit_tests/test_nova_cc_contexts.py +++ b/unit_tests/test_nova_cc_contexts.py @@ -362,3 +362,31 @@ class NovaComputeContextTests(CharmTestCase): {'novaapi_password': 'changeme', 'novacell0_password': 'passw0rd', 'nova_password': '1234'}) + + @mock.patch.object(context, 'context_complete', lambda *args: True) + def test_NeutronAPIContext(self): + self.relation_ids.return_value = ['neutron-api:12'] + self.related_units.return_value = ['neutron-api/0'] + settings = {'neutron-plugin': 'ovs', + 'enable-sriov': 'False', + 'neutron-security-groups': 'yes', + 'neutron-url': 'http://neutron:9696'} + + def fake_rel_get(attribute=None, unit=None, rid=None): + if attribute: + return settings.get(attribute) + + return settings + + self.relation_get.side_effect = fake_rel_get + ctxt = context.NeutronAPIContext()() + expected = {'network_manager': 'neutron', + 'neutron_plugin': 'ovs', + 'neutron_security_groups': 'yes', + 'neutron_url': 'http://neutron:9696'} + self.assertEqual(ctxt, expected) + + settings['enable-sriov'] = 'True' + expected['additional_neutron_filters'] = 'PciPassthroughFilter' + ctxt = context.NeutronAPIContext()() + self.assertEqual(ctxt, expected)