Problem Description: The new multi-domain functionality breaks when you configure both an SQL domain and an LDAP domain in directory "keystone/domains". Specifically, when you configure file "keystone/domains/keystone.Default.conf" to use SQL.
Without the fix previously described, you get the following error:
2013-08-28 15:26:33,776 INFO sqlalchemy.engine.base.Engine SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33 INFO [sqlalchemy.engine.base.Engine] SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33,777 INFO sqlalchemy.engine.base.Engine ('MyDomain',)
2013-08-28 15:26:33 INFO [sqlalchemy.engine.base.Engine] ('MyDomain',)
2013-08-28 15:26:33,780 INFO sqlalchemy.engine.base.Engine SELECT project.id AS project_id, project.name AS project_name, project.domain_id AS project_domain_id, project.description AS project_description, project.enabled AS project_enabled, project.extra AS project_extra
FROM project
WHERE project.name = %s AND project.domain_id = %s
2013-08-28 15:26:33 INFO [sqlalchemy.engine.base.Engine] SELECT project.id AS project_id, project.name AS project_name, project.domain_id AS project_domain_id, project.description AS project_description, project.enabled AS project_enabled, project.extra AS project_extra
FROM project
WHERE project.name = %s AND project.domain_id = %s
2013-08-28 15:26:33,781 INFO sqlalchemy.engine.base.Engine ('myapp', '464bdc5784a446378a85f99a25d216b4')
2013-08-28 15:26:33 INFO [sqlalchemy.engine.base.Engine] ('myapp', '464bdc5784a446378a85f99a25d216b4')
2013-08-28 15:26:33,784 INFO sqlalchemy.engine.base.Engine SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33 INFO [sqlalchemy.engine.base.Engine] SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33,785 INFO sqlalchemy.engine.base.Engine ('Default',)
2013-08-28 15:26:33 INFO [sqlalchemy.engine.base.Engine] ('Default',)
2013-08-28 15:26:33 ERROR [keystone.common.wsgi] object.__init__() takes no parameters
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 237, in __call__
result = method(context, **params)
File "/usr/local/lib/python2.7/dist-packages/keystone/auth/controllers.py", line 287, in authenticate_for_token
self.authenticate(context, auth_info, auth_context)
File "/usr/local/lib/python2.7/dist-packages/keystone/auth/controllers.py", line 344, in authenticate
auth_context)
File "/usr/local/lib/python2.7/dist-packages/keystone/auth/plugins/password.py", line 103, in authenticate
user_info = UserAuthInfo(auth_payload)
File "/usr/local/lib/python2.7/dist-packages/keystone/auth/plugins/password.py", line 34, in __init__
self._validate_and_normalize_auth_data(auth_payload)
File "/usr/local/lib/python2.7/dist-packages/keystone/auth/plugins/password.py", line 87, in _validate_and_normalize_auth_data
user_ref = self.identity_api.get_user(user_id)
File "/usr/local/lib/python2.7/dist-packages/keystone/identity/core.py", line 168, in wrapper
self.driver, self.assignment_api)
File "/usr/local/lib/python2.7/dist-packages/keystone/identity/core.py", line 124, in setup_domain_drivers
names[1])
File "/usr/local/lib/python2.7/dist-packages/keystone/identity/core.py", line 104, in _load_config
self._load_driver(assignment_api, domain)
File "/usr/local/lib/python2.7/dist-packages/keystone/identity/core.py", line 81, in _load_driver
domain_config['cfg'].identity.driver, domain_config['cfg']))
File "/usr/local/lib/python2.7/dist-packages/keystone/openstack/common/importutils.py", line 40, in import_object
return import_class(import_str)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keystone/common/dependency.py", line 51, in wrapper
self.__wrapped_init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
Problem Description: The new multi-domain functionality breaks when you configure both an SQL domain and an LDAP domain in directory "keystone/domains". Specifically, when you configure file "keystone/ domains/ keystone. Default. conf" to use SQL.
File "keystone/ keystone. conf" excerpt:
[identity] specific_ drivers_ enabled = True config_ dir = /etc/keystone/ domains
domain_
domain_
File "keystone/ domains/ keystone. Default. conf":
[assignment] assignment. backends. sql.Assignment
driver = keystone.
[identity] identity. backends. sql.Identity
driver = keystone.
[ldap]
Without the fix previously described, you get the following error:
2013-08-28 15:26:33,776 INFO sqlalchemy. engine. base.Engine SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra engine. base.Engine] SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra engine. base.Engine ('MyDomain',) engine. base.Engine] ('MyDomain',) engine. base.Engine SELECT project.id AS project_id, project.name AS project_name, project.domain_id AS project_domain_id, project.description AS project_ description, project.enabled AS project_enabled, project.extra AS project_extra engine. base.Engine] SELECT project.id AS project_id, project.name AS project_name, project.domain_id AS project_domain_id, project.description AS project_ description, project.enabled AS project_enabled, project.extra AS project_extra engine. base.Engine ('myapp', '464bdc5784a446 378a85f99a25d21 6b4') engine. base.Engine] ('myapp', '464bdc5784a446 378a85f99a25d21 6b4') engine. base.Engine SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra engine. base.Engine] SELECT domain.id AS domain_id, domain.name AS domain_name, domain.enabled AS domain_enabled, domain.extra AS domain_extra engine. base.Engine ('Default',) engine. base.Engine] ('Default',) common. wsgi] object.__init__() takes no parameters lib/python2. 7/dist- packages/ keystone/ common/ wsgi.py" , line 237, in __call__ lib/python2. 7/dist- packages/ keystone/ auth/controller s.py", line 287, in authenticate_ for_token authenticate( context, auth_info, auth_context) lib/python2. 7/dist- packages/ keystone/ auth/controller s.py", line 344, in authenticate lib/python2. 7/dist- packages/ keystone/ auth/plugins/ password. py", line 103, in authenticate auth_payload) lib/python2. 7/dist- packages/ keystone/ auth/plugins/ password. py", line 34, in __init__ _validate_ and_normalize_ auth_data( auth_payload) lib/python2. 7/dist- packages/ keystone/ auth/plugins/ password. py", line 87, in _validate_ and_normalize_ auth_data api.get_ user(user_ id) lib/python2. 7/dist- packages/ keystone/ identity/ core.py" , line 168, in wrapper _api) lib/python2. 7/dist- packages/ keystone/ identity/ core.py" , line 124, in setup_domain_ drivers lib/python2. 7/dist- packages/ keystone/ identity/ core.py" , line 104, in _load_config _load_driver( assignment_ api, domain) lib/python2. 7/dist- packages/ keystone/ identity/ core.py" , line 81, in _load_driver config[ 'cfg']. identity. driver, domain_ config[ 'cfg']) ) lib/python2. 7/dist- packages/ keystone/ openstack/ common/ importutils. py", line 40, in import_object class(import_ str)(*args, **kwargs) lib/python2. 7/dist- packages/ keystone/ common/ dependency. py", line 51, in wrapper __wrapped_ init__( *args, **kwargs)
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33 INFO [sqlalchemy.
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33,777 INFO sqlalchemy.
2013-08-28 15:26:33 INFO [sqlalchemy.
2013-08-28 15:26:33,780 INFO sqlalchemy.
FROM project
WHERE project.name = %s AND project.domain_id = %s
2013-08-28 15:26:33 INFO [sqlalchemy.
FROM project
WHERE project.name = %s AND project.domain_id = %s
2013-08-28 15:26:33,781 INFO sqlalchemy.
2013-08-28 15:26:33 INFO [sqlalchemy.
2013-08-28 15:26:33,784 INFO sqlalchemy.
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33 INFO [sqlalchemy.
FROM domain
WHERE domain.name = %s
2013-08-28 15:26:33,785 INFO sqlalchemy.
2013-08-28 15:26:33 INFO [sqlalchemy.
2013-08-28 15:26:33 ERROR [keystone.
Traceback (most recent call last):
File "/usr/local/
result = method(context, **params)
File "/usr/local/
self.
File "/usr/local/
auth_context)
File "/usr/local/
user_info = UserAuthInfo(
File "/usr/local/
self.
File "/usr/local/
user_ref = self.identity_
File "/usr/local/
self.driver, self.assignment
File "/usr/local/
names[1])
File "/usr/local/
self.
File "/usr/local/
domain_
File "/usr/local/
return import_
File "/usr/local/
self.
TypeError: object.__init__() takes no parameters