Update OVS detection plugin for Keystone v3
To properly support Keystone V3, we must also properly convey the domain information to the underlaying Keystone client. Story: 2005045 Task: 29542 Change-Id: I57f233578132a3689a2182c53483d8110f15bcea
This commit is contained in:
parent
4fd4b26f54
commit
5fe2a6d7b9
|
@ -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')
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue