Fix get_project_id

This commit is contained in:
David Ames
2018-09-17 14:57:55 +00:00
parent 8e6a3e47f7
commit a1d152e737
3 changed files with 66 additions and 11 deletions

View File

@@ -744,3 +744,47 @@ class TestOpenStackUtils(ut_utils.BaseTestCase):
xenial_mitaka = openstack_utils.get_os_release('xenial_mitaka')
release_comp = xenial_queens > xenial_mitaka
self.assertTrue(release_comp)
def test_get_keystone_api_version(self):
self.patch_object(openstack_utils, "get_current_os_versions")
self.patch_object(openstack_utils, "get_application_config_option")
self.get_current_os_versions.return_value = {"keystone": "liberty"}
self.get_application_config_option.return_value = None
self.assertEqual(openstack_utils.get_keystone_api_version(), 2)
self.get_application_config_option.return_value = "3"
self.assertEqual(openstack_utils.get_keystone_api_version(), 3)
self.get_current_os_versions.return_value = {"keystone": "queens"}
self.get_application_config_option.return_value = None
self.assertEqual(openstack_utils.get_keystone_api_version(), 3)
def test_get_project_id(self):
# No domain
self.patch_object(openstack_utils, "get_keystone_api_version")
self.get_keystone_api_version.return_value = 2
ksclient = mock.MagicMock()
project_id = "project-uuid"
project_name = "myproject"
project = mock.MagicMock()
project._info = {"name": project_name, "id": project_id}
ksclient.projects.list.return_value = [project]
self.assertEqual(
openstack_utils.get_project_id(ksclient, project_name),
project_id)
ksclient.projects.list.assert_called_once_with(domain=None)
ksclient.domains.list.assert_not_called()
# With domain
ksclient.reset_mock()
domain_name = "mydomain"
domain_id = "domain-uuid"
domain = mock.MagicMock()
domain.id = domain_id
ksclient.domains.list.return_value = [domain]
self.assertEqual(
openstack_utils.get_project_id(
ksclient, project_name, domain_name=domain_name), project_id)
ksclient.domains.list.assert_called_once_with(name=domain_name)
ksclient.projects.list.assert_called_once_with(domain=domain_id)

View File

@@ -110,11 +110,14 @@ def setup_sdn(network_config, keystone_session=None):
neutron_client = openstack_utils.get_neutron_session_client(
keystone_session)
admin_domain = None
if openstack_utils.get_keystone_api_version() > 2:
admin_domain = "admin_domain"
# Resolve the project name from the overcloud openrc into a project id
project_id = openstack_utils.get_project_id(
keystone_client,
"admin",
domain_name="admin_domain",
domain_name=admin_domain,
)
# Network Setup
subnetpools = False

View File

@@ -1287,6 +1287,23 @@ def get_keystone_ip():
return unit.public_address
def get_keystone_api_version():
"""Return the keystone api version.
:returns: Keystone's api version
:rtype: int
"""
os_version = get_current_os_versions('keystone')['keystone']
api_version = get_application_config_option('keystone',
'preferred-api-version')
if os_version >= 'queens':
api_version = 3
elif api_version is None:
api_version = 2
return int(api_version)
def get_overcloud_auth(address=None):
"""Get overcloud OpenStack authentication from the environment.
@@ -1306,18 +1323,9 @@ def get_overcloud_auth(address=None):
if not address:
address = get_keystone_ip()
os_version = get_current_os_versions('keystone')['keystone']
api_version = get_application_config_option('keystone',
'preferred-api-version')
if os_version >= 'queens':
api_version = 3
elif api_version is None:
api_version = 2
password = juju_utils.leader_get('keystone', 'admin_passwd')
if api_version == 2:
if get_keystone_api_version() == 2:
# V2 Explicitly, or None when charm does not possess the config key
logging.info('Using keystone API V2 for overcloud auth')
auth_settings = {