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