Attempt to fix domain support. 47/38347/5
authorspisarski <s.pisarski@cablelabs.com>
Fri, 28 Jul 2017 14:37:35 +0000 (08:37 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Mon, 31 Jul 2017 14:59:59 +0000 (08:59 -0600)
The prior code treated *_domain_name & *_domain_id the same
where the ID was taken first and the name was used as the
fallback which was incorrect. This patch treats the name and
ID fields as separate members.

JIRA: SNAPS-154

Change-Id: I5219863de597c4db24579f4af74ece2d648b2b07
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
docs/how-to-use/LibraryUsage.rst
snaps/openstack/os_credentials.py
snaps/openstack/tests/conf/os_credentials_tests.py
snaps/openstack/tests/openstack_tests.py
snaps/openstack/utils/keystone_utils.py

index 353891e..16cf446 100644 (file)
@@ -36,7 +36,9 @@ attributes are listed below:
 -  compute\_api\_version (Nova version 2 currently only validated)
 -  heat\_api\_version (Heat version 1 currently only validated)
 -  user\_domain\_id (default='default')
+-  user\_domain\_name (default='default')
 -  project\_domain\_id (default='default')
+-  project\_domain\_name (default='default')
 -  interface (default='admin', used to specify the endpoint type for keystone: public, admin, internal)
 -  cacert (default=False, expected values T|F to denote server certificate verification, else value contains the path to an HTTPS certificate)
 -  region_name (The region name default=None)
index c93133a..fbecbfe 100644 (file)
@@ -42,8 +42,10 @@ class OSCreds:
                                     clients
         :param heat_api_version: The OpenStack's API version to use for Heat
                                     clients
-        :param user_domain_id: Used for v3 APIs (default='default')
-        :param project_domain_id: Used for v3 APIs (default='default')
+        :param user_domain_id: Used for v3 APIs (default=None)
+        :param user_domain_name: Used for v3 APIs (default='default')
+        :param project_domain_id: Used for v3 APIs (default=None)
+        :param project_domain_name: Used for v3 APIs (default='default')
         :param interface: Used to specify the endpoint type for keystone as
                           public, admin, internal
         :param proxy_settings: instance of os_credentials.ProxySettings class
@@ -83,15 +85,19 @@ class OSCreds:
         else:
             self.heat_api_version = float(kwargs['heat_api_version'])
 
-        if kwargs.get('user_domain_id') is None:
-            self.user_domain_id = 'default'
+        self.user_domain_id = kwargs.get('user_domain_id')
+
+        if kwargs.get('user_domain_name') is None:
+            self.user_domain_name = 'default'
         else:
-            self.user_domain_id = kwargs['user_domain_id']
+            self.user_domain_name = kwargs['user_domain_name']
+
+        self.project_domain_id = kwargs.get('project_domain_id')
 
-        if kwargs.get('project_domain_id') is None:
-            self.project_domain_id = 'default'
+        if kwargs.get('project_domain_name') is None:
+            self.project_domain_name = 'default'
         else:
-            self.project_domain_id = kwargs['project_domain_id']
+            self.project_domain_name = kwargs['project_domain_name']
 
         if kwargs.get('interface') is None:
             self.interface = 'admin'
@@ -141,8 +147,13 @@ class OSCreds:
                 ', image_api_version=' + str(self.image_api_version) +
                 ', network_api_version=' + str(self.network_api_version) +
                 ', compute_api_version=' + str(self.compute_api_version) +
+                ', heat_api_version=' + str(self.heat_api_version) +
                 ', user_domain_id=' + str(self.user_domain_id) +
+                ', user_domain_name=' + str(self.user_domain_name) +
+                ', project_domain_id=' + str(self.project_domain_id) +
+                ', project_domain_name=' + str(self.project_domain_name) +
                 ', interface=' + str(self.interface) +
+                ', region_name=' + str(self.region_name) +
                 ', proxy_settings=' + str(self.proxy_settings) +
                 ', cacert=' + str(self.cacert))
 
index 4a2ce3d..9c6fcdc 100644 (file)
@@ -16,8 +16,8 @@
 import logging
 import unittest
 
-from snaps.openstack.os_credentials import OSCredsError, OSCreds, \
-    ProxySettings, ProxySettingsError
+from snaps.openstack.os_credentials import (
+    OSCredsError, OSCreds, ProxySettings, ProxySettingsError)
 
 __author__ = 'spisarski'
 
@@ -157,8 +157,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(2, os_creds.image_api_version)
         self.assertEqual(2, os_creds.compute_api_version)
         self.assertEqual(1, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertIsNone(os_creds.user_domain_id)
+        self.assertEqual('default', os_creds.user_domain_name)
+        self.assertIsNone(os_creds.project_domain_id)
+        self.assertEqual('default', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertFalse(os_creds.cacert)
         self.assertIsNone(os_creds.proxy_settings)
@@ -176,8 +178,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(2, os_creds.image_api_version)
         self.assertEqual(2, os_creds.compute_api_version)
         self.assertEqual(1, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertIsNone(os_creds.user_domain_id)
+        self.assertEqual('default', os_creds.user_domain_name)
+        self.assertIsNone(os_creds.project_domain_id)
+        self.assertEqual('default', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertFalse(os_creds.cacert)
         self.assertIsNone(os_creds.proxy_settings)
@@ -198,8 +202,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(6, os_creds.image_api_version)
         self.assertEqual(7, os_creds.compute_api_version)
         self.assertEqual(8.0, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertIsNone(os_creds.user_domain_id)
+        self.assertEqual('default', os_creds.user_domain_name)
+        self.assertIsNone(os_creds.project_domain_id)
+        self.assertEqual('default', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertTrue(os_creds.cacert)
         self.assertIsNone(os_creds.proxy_settings)
@@ -220,8 +226,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(6, os_creds.image_api_version)
         self.assertEqual(7, os_creds.compute_api_version)
         self.assertEqual(8.0, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertIsNone(os_creds.user_domain_id)
+        self.assertEqual('default', os_creds.user_domain_name)
+        self.assertIsNone(os_creds.project_domain_id)
+        self.assertEqual('default', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertTrue(os_creds.cacert)
         self.assertIsNone(os_creds.proxy_settings)
@@ -240,8 +248,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(2, os_creds.image_api_version)
         self.assertEqual(2, os_creds.compute_api_version)
         self.assertEqual(1, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertIsNone(os_creds.user_domain_id)
+        self.assertEqual('default', os_creds.user_domain_name)
+        self.assertIsNone(os_creds.project_domain_id)
+        self.assertEqual('default', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertFalse(os_creds.cacert)
         self.assertEqual('foo', os_creds.proxy_settings.host)
@@ -251,11 +261,13 @@ class OSCredsUnitTests(unittest.TestCase):
 
     def test_proxy_settings_obj_kwargs(self):
         proxy_settings = ProxySettings(host='foo', port=1234)
-        os_creds = OSCreds(**{'username': 'foo', 'password': 'bar',
-                              'auth_url': 'http://foo.bar:5000/v2',
-                              'project_name': 'hello',
-                              'proxy_settings': proxy_settings,
-                              'region_name': 'test_region'})
+        os_creds = OSCreds(
+            **{'username': 'foo', 'password': 'bar',
+               'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
+               'proxy_settings': proxy_settings, 'region_name': 'test_region',
+               'user_domain_id': 'domain1', 'user_domain_name': 'domain2',
+               'project_domain_id': 'domain3',
+               'project_domain_name': 'domain4'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
@@ -264,8 +276,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(2, os_creds.image_api_version)
         self.assertEqual(2, os_creds.compute_api_version)
         self.assertEqual(1, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertEqual('domain1', os_creds.user_domain_id)
+        self.assertEqual('domain2', os_creds.user_domain_name)
+        self.assertEqual('domain3', os_creds.project_domain_id)
+        self.assertEqual('domain4', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertFalse(os_creds.cacert)
         self.assertEqual('foo', os_creds.proxy_settings.host)
@@ -276,7 +290,9 @@ class OSCredsUnitTests(unittest.TestCase):
     def test_proxy_settings_dict(self):
         os_creds = OSCreds(
             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
-            project_name='hello', proxy_settings={'host': 'foo', 'port': 1234})
+            project_name='hello', proxy_settings={'host': 'foo', 'port': 1234},
+            user_domain_id='domain1', user_domain_name='domain2',
+            project_domain_id='domain3', project_domain_name='domain4')
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
@@ -285,8 +301,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(2, os_creds.image_api_version)
         self.assertEqual(2, os_creds.compute_api_version)
         self.assertEqual(1, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertEqual('domain1', os_creds.user_domain_id)
+        self.assertEqual('domain2', os_creds.user_domain_name)
+        self.assertEqual('domain3', os_creds.project_domain_id)
+        self.assertEqual('domain4', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertFalse(os_creds.cacert)
         self.assertEqual('foo', os_creds.proxy_settings.host)
@@ -294,11 +312,11 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
 
     def test_proxy_settings_dict_kwargs(self):
-        os_creds = OSCreds(**{'username': 'foo', 'password': 'bar',
-                              'auth_url': 'http://foo.bar:5000/v2',
-                              'project_name': 'hello',
-                              'proxy_settings': {'host': 'foo', 'port': 1234},
-                              'region_name': 'test_region'})
+        os_creds = OSCreds(
+            **{'username': 'foo', 'password': 'bar',
+               'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
+               'proxy_settings': {'host': 'foo', 'port': 1234},
+               'region_name': 'test_region'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
@@ -307,8 +325,10 @@ class OSCredsUnitTests(unittest.TestCase):
         self.assertEqual(2, os_creds.image_api_version)
         self.assertEqual(2, os_creds.compute_api_version)
         self.assertEqual(1, os_creds.heat_api_version)
-        self.assertEqual('default', os_creds.user_domain_id)
-        self.assertEqual('default', os_creds.project_domain_id)
+        self.assertIsNone(os_creds.user_domain_id)
+        self.assertEqual('default', os_creds.user_domain_name)
+        self.assertIsNone(os_creds.project_domain_id)
+        self.assertEqual('default', os_creds.project_domain_name)
         self.assertEqual('admin', os_creds.interface)
         self.assertFalse(os_creds.cacert)
         self.assertEqual('foo', os_creds.proxy_settings.host)
index 927b5b3..2dab75c 100644 (file)
@@ -95,10 +95,10 @@ def get_credentials(os_env_file=None, proxy_settings_str=None,
             'network_api_version': config.get('OS_NETWORK_API_VERSION'),
             'compute_api_version': config.get('OS_COMPUTE_API_VERSION'),
             'heat_api_version': config.get('OS_HEAT_API_VERSION'),
-            'user_domain_id': config.get(
-                'OS_USER_DOMAIN_ID', config.get('OS_USER_DOMAIN_NAME')),
-            'project_domain_id': config.get(
-                'OS_PROJECT_DOMAIN_ID', config.get('OS_PROJECT_DOMAIN_NAME')),
+            'user_domain_id': config.get('OS_USER_DOMAIN_ID'),
+            'user_domain_name': config.get('OS_USER_DOMAIN_NAME'),
+            'project_domain_id': config.get('OS_PROJECT_DOMAIN_ID'),
+            'project_domain_name': config.get('OS_PROJECT_DOMAIN_NAME'),
             'interface': interface,
             'proxy_settings': proxy_settings,
             'cacert': https_cacert,
index e070a49..3fff469 100644 (file)
@@ -41,7 +41,9 @@ def get_session_auth(os_creds):
                            password=os_creds.password,
                            project_name=os_creds.project_name,
                            user_domain_id=os_creds.user_domain_id,
-                           project_domain_id=os_creds.project_domain_id)
+                           user_domain_name=os_creds.user_domain_name,
+                           project_domain_id=os_creds.project_domain_id,
+                           project_domain_name=os_creds.project_domain_name)
     else:
         auth = v2.Password(auth_url=os_creds.auth_url,
                            username=os_creds.username,