Comment 2 for bug 1217017

Revision history for this message
Mark Miller (mark-m-miller) wrote : Re: Split LDAP/SQL Identity Frontend Domain Selection Bug

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]
    domain_specific_drivers_enabled = True
    domain_config_dir = /etc/keystone/domains

File "keystone/domains/keystone.Default.conf":

    [assignment]
    driver = keystone.assignment.backends.sql.Assignment

    [identity]
     driver = keystone.identity.backends.sql.Identity

    [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
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