diff --git a/monasca_setup/detection/plugins/ovs.py b/monasca_setup/detection/plugins/ovs.py index 7f198b88..9cf6a177 100644 --- a/monasca_setup/detection/plugins/ovs.py +++ b/monasca_setup/detection/plugins/ovs.py @@ -47,12 +47,15 @@ use_health_metrics = True publish_router_capacity = False # Acceptable arguments acceptable_args = ['username', 'password', 'project_name', + 'user_domain_name', 'user_domain_id', + 'project_domain_name', 'project_domain_id' 'auth_url', 'cache_dir', 'neutron_refresh', 'ovs_cmd', 'network_use_bits', 'check_router_ha', 'region_name', 'included_interface_re', 'conf_file_path', 'use_absolute_metrics', 'use_rate_metrics', 'use_health_metrics', 'publish_router_capacity'] # Arguments which must be ignored if provided -ignorable_args = ['username', 'password', 'project_name', +ignorable_args = ['username', 'password', 'project_name', 'user_domain_name', + 'user_domain_id', 'project_domain_name', 'project_domain_id', 'auth_url', 'region_name', 'conf_file_path'] @@ -109,14 +112,29 @@ class Ovs(detection.Plugin): 'Run pip install monasca-agent[ovs] ' 'to install all dependencies.')) else: - for_opts = [{'opt': cfg.StrOpt('region', default='RegionOne'), 'group': 'service_auth'}, + for_opts = [{'opt': cfg.StrOpt('region', default='RegionOne'), + 'group': 'service_auth'}, {'opt': cfg.StrOpt('region_name'), 'group': 'nova'}, - {'opt': cfg.StrOpt('nova_region_name'), 'group': 'DEFAULT'}, - {'opt': cfg.StrOpt('username'), 'group': 'keystone_authtoken'}, - {'opt': cfg.StrOpt('password'), 'group': 'keystone_authtoken'}, - {'opt': cfg.StrOpt('project_name'), 'group': 'keystone_authtoken'}, - {'opt': cfg.StrOpt('auth_url'), 'group': 'keystone_authtoken'}, - {'opt': cfg.StrOpt('identity_uri'), 'group': 'keystone_authtoken'}] + {'opt': cfg.StrOpt('nova_region_name'), + 'group': 'DEFAULT'}, + {'opt': cfg.StrOpt('username'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('password'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('project_name'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('user_domain_name'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('user_domain_id'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('project_domain_name'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('project_domain_id'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('auth_url'), + 'group': 'keystone_authtoken'}, + {'opt': cfg.StrOpt('identity_uri'), + 'group': 'keystone_authtoken'}] self.conf = utils.load_oslo_configuration(from_cmd=self.cmd, in_project='neutron', for_opts=for_opts @@ -167,6 +185,8 @@ class Ovs(detection.Plugin): cfg_needed = {'username': 'username', 'password': 'password', 'project_name': 'project_name'} + cfg_domain = ['user_domain_name', 'user_domain_id', + 'project_domain_name', 'project_domain_id'] # Start with plugin-specific configuration parameters init_config = {'cache_dir': cache_dir, @@ -182,6 +202,10 @@ class Ovs(detection.Plugin): for option in cfg_needed: init_config[option] = self.get_option(cfg_section, cfg_needed[option]) + for option in cfg_domain: + if self.has_option(cfg_section, option): + init_config[option] = self.get_option(cfg_section, option) + # Create an identity URI (again, slightly different for Devstack) if self.has_option(cfg_section, 'auth_url'): init_config['auth_url'] = self.get_option(cfg_section, 'auth_url') diff --git a/tests/detection/test_ovs.py b/tests/detection/test_ovs.py index a722cc37..5c0f7ef4 100644 --- a/tests/detection/test_ovs.py +++ b/tests/detection/test_ovs.py @@ -52,9 +52,10 @@ class TestOvs(unittest.TestCase): unittest.TestCase.setUp(self) with patch.object(Ovs, '_detect') as mock_detect: self.ovs_obj = Ovs('temp_dir') - self.has_option = [False, True] + self.has_option = [True, False, True, False, False, True] self.get_value = [MagicMock(), MagicMock(), MagicMock(), - 'http://10.10.10.10', 'region1'] + MagicMock(), MagicMock(), 'http://10.10.10.10', + 'region1'] self.assertTrue(mock_detect.called) def _detect(self, ovs_obj, file_config_valid=True): @@ -227,6 +228,8 @@ class TestOvs(unittest.TestCase): self.ovs_obj.args = {'username': 'admin', 'password': 'password', 'project_name': 'tenant', + 'user_domain_name': 'default', + 'project_domain_name': 'default', 'auth_url': '10.10.10.20', 'region_name': 'region0', 'neutron_refresh': 13000, @@ -234,15 +237,15 @@ class TestOvs(unittest.TestCase): 'invalid_arg': 'inv-arg'} result = self._build_config_with_arg(self.ovs_obj) self.assertTrue(mock_log_warn.called) - self.assertEqual(mock_log_warn.call_count, 6) + self.assertEqual(mock_log_warn.call_count, 8) self.assertEqual(result['ovs']['init_config']['included_interface_re'], 'qg.*|vhu.*|sg.*') def test_build_config_if_auth_version(self): self.ovs_obj.neutron_conf = 'neutron-conf' - self.has_option = [True, True] - self.get_value = [MagicMock(), MagicMock(), MagicMock(), - 'http://10.10.10.10', + self.has_option = [True, False, True, False, True, True] + self.get_value = [MagicMock(), MagicMock(), MagicMock(), MagicMock(), + MagicMock(), 'http://10.10.10.10', 'http://10.10.10.10', 'region1'] result = self._build_config_without_args(self.ovs_obj) self.assertEqual(result['ovs']['init_config']['auth_url'], @@ -250,9 +253,9 @@ class TestOvs(unittest.TestCase): def test_build_config_if_auth_url_has_version(self): self.ovs_obj.neutron_conf = 'neutron-conf' - self.has_option = [True, True] - self.get_value = [MagicMock(), MagicMock(), MagicMock(), - 'http://10.10.10.10/v1', + self.has_option = [True, False, True, False, True, True] + self.get_value = [MagicMock(), MagicMock(), MagicMock(), MagicMock(), + MagicMock(), 'http://10.10.10.10/v1', 'http://10.10.10.10/v1', 'region1'] result = self._build_config_without_args(self.ovs_obj) self.assertEqual(result['ovs']['init_config']['auth_url'], @@ -260,9 +263,9 @@ class TestOvs(unittest.TestCase): def test_build_config_region_name_from_nova(self): self.ovs_obj.neutron_conf = 'neutron-conf' - self.has_option = [False, False] - self.get_value = [MagicMock(), MagicMock(), MagicMock(), - 'http://10.10.10.10', 'region2'] + self.has_option = [True, False, True, False, False, False] + self.get_value = [MagicMock(), MagicMock(), MagicMock(), MagicMock(), + MagicMock(), 'http://10.10.10.10', 'region2'] result = self._build_config_without_args(self.ovs_obj) self.assertEqual(result['ovs']['init_config']['auth_url'], 'http://10.10.10.10')