Creating a new user fails using the hybdrid identity driver with an internal server error. This appears in keystone.log:
2014-09-04 14:53:37.568 307640 ERROR keystone.common.wsgi - (1048, "Column 'domain_id' cannot be null") 'INSERT INTO user (id, name, domain_id, password, enabled, extra, default_project_id) VALUES (%s, %s, %s, %s, %s, %s, %s)' ('df9c35a18240488296f0c611d0a6b1a0', 'hybrid-2', None, None, 1, '{"email": null}', 'e7904c3941e84b22a11d14d77dcc0f2b')
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi Traceback (most recent call last):
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/common/wsgi.py", line 212, in call
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi result = method(context, *_params)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/identity/controllers.py", line 147, in create_user
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self.identity_api.create_user(user_id, user_ref))
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/notifications.py", line 74, in wrapper
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi result = f(_args, *_kwargs)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/identity/core.py", line 189, in wrapper
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi return f(self, *args, *_kwargs)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/identity/core.py", line 305, in create_user
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi ref = driver.create_user(user_id, user)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/common/sql/core.py", line 392, in wrapper
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi return method(_args, *_kwargs)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/identity/backends/sql.py", line 125, in create_user
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi session.add(user_ref)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 447, in exit
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self.rollback()
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 58, in exit
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi compat.reraise(exc_type, exc_value, exc_tb)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 444, in exit
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self.commit()
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 354, in commit
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self._prepare_impl()
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 334, in _prepare_impl
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self.session.flush()
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/openstack/common/db/sqlalchemy/session.py", line 439, in _wrap
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi return f(self, _args, *_kwargs)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/keystone/openstack/common/db/sqlalchemy/session.py", line 705, in flush
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi return super(Session, self).flush(_args, *_kwargs)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1818, in flush
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self._flush(objects)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1936, in _flush
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi transaction.rollback(_capture_exception=True)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 58, in exit
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi compat.reraise(exc_type, exc_value, exc_tb)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1900, in _flush
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi flush_context.execute()
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi rec.execute(self)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 525, in execute
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi uow
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 64, in save_obj
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi table, insert)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 541, in _emit_insert_statements
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi execute(statement, multiparams)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 662, in execute
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi params)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 761, in _execute_clauseelement
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi compiled_sql, distilled_params
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 874, in _execute_context
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi context)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1024, in _handle_dbapi_exception
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi exc_info
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 196, in raise_from_cause
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi reraise(type(exception), exception, tb=exc_tb)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 867, in _execute_context
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi context)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 324, in do_execute
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi cursor.execute(statement, parameters)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi self.errorhandler(self, exc, value)
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi raise errorclass, errorvalue
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi OperationalError: (OperationalError) (1048, "Column 'domain_id' cannot be null") 'INSERT INTO user (id, name, domain_id, password, enabled, extra, default_project_id) VALUES (%s, %s, %s, %s, %s, %s, %s)' ('df9c35a18240488296f0c611d0a6b1a0', 'hybrid-2', None, None, 1, '{"email": null}', 'e7904c3941e84b22a11d14d77dcc0f2b')
2014-09-04 14:53:37.568 307640 TRACE keystone.common.wsgi
The issue comes from self.domain_aware = False being set in the hybrid driver (I don't know enough yet to understand why). In keystone/identity/core.py create_user() that variable is looked up and domain_id is stripped from the create request, which is causing that conflict in MySQL.
Creating a user with the sql identity driver works as expected.
I'm using only the identity hybrid driver.
keystone: 2014.1.2
hybrid_identity: master from September 2nd.