Fix get_project_id
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user