読者です 読者をやめる 読者になる 読者になる

NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix OVM 2015.1.0 の OpenStack Horizon Dashboard のログイン問題対応。

OpenStack

Nutanix OpenStack Servieice VM(OVM)2015.1.0 で、Horizon ダッシュボードのログイン時に、どこかがおかしくなることがあります。

f:id:gowatana:20160414051519p:plain

今回の OVM はこれです。

[root@ovm02 ~]# ovmctl --show | tail -n 6
Version:
--------
Version     : 2015.1.0
Release     : 1
Summary     : Acropolis drivers for Openstack Kilo.

ちなみに、Horizon Dashboard の RPM はこれです。

[root@ovm02 ~]# rpm -q python-django-horizon
python-django-horizon-2015.1.1-1.el7.noarch

「どこかがおかしくなりました!」の様子

ダッシュボードログイン直後にこの画面になり、Web ブラウザのクッキーを削除(+ ブラウザ再起動)しないと再ログインできるようになりません。

f:id:gowatana:20160414051714p:plain

「どこかがおかしくなりました!」では、下記のようなエラーが発生します。

/var/log/horizon/horizon.log

2016-04-13 20:03:43,745 6015 INFO openstack_auth.forms Login successful for user "admin".
2016-04-13 20:03:43,747 6015 ERROR django.request Internal Server Error: /dashboard/auth/login/
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.7/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/openstack_auth/views.py", line 111, in login
**kwargs)
File "/usr/lib/python2.7/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/contrib/auth/views.py", line 51, in login
auth_login(request, form.get_user())
File "/usr/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 102, in login
if _get_user_session_key(request) != user.pk or (
File "/usr/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 59, in _get_user_session_key
return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])
File "/usr/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 969, in to_python
params={'value': value},
ValidationError: [u"'05d43262036849f1918b57de4802b823' \u306f\u6574\u6570\u5024\u306b\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002"]

対処方法

これは、もともと Horizon Dashboard が持っている、タイムアウト後に発生する不具合のようです。

Bug 1221117 – Horizon: Re login failed after timeout

 

そして、下記のような感じで修正すればよいようです。

http://pkgs.fedoraproject.org/cgit/rpms/python-django-horizon.git/diff/0019-Add-back-reference-to-AUTH_USER_MODEL.patch

 

/usr/share/openstack-dashboard/openstack_dashboard/settings.py に、「AUTH_USER_MODEL = 'openstack_auth.User'」を追記します。

デフォルトのファイルです。

[root@ovm02 ~]# grep AUTHENTICATION_URLS -n -C2 /usr/share/openstack-dashboard/openstack_dashboard/settings.py
168-TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
169-AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',)
170:AUTHENTICATION_URLS = ['openstack_auth.urls']
171-MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
172-

171行目に追記します。

[root@ovm02 ~]# sed -i -e "171i AUTH_USER_MODEL = 'openstack_auth.User'" /usr/share/openstack-dashboard/openstack_dashboard/settings.py

追記されました。

[root@ovm02 ~]# grep AUTHENTICATION_URLS -n -C2 /usr/share/openstack-dashboard/openstack_dashboard/settings.py
168-TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
169-AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',)
170:AUTHENTICATION_URLS = ['openstack_auth.urls']
171-AUTH_USER_MODEL = 'openstack_auth.User'
172-MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'

そして httpd を再起動するとログインできるようになります。

[root@ovm02 ~]# systemctl restart httpd

以上。