Nutanix OpenStack Servieice VM(OVM)2015.1.0 で、Horizon ダッシュボードでオブジェクト(インスタンスなど)を削除すると必ずエラーになってしまいます。
問題の様子
ためしに、インスタンスを削除すると・・・

どこかがおかしくなりました。

しかし「ホーム」リンクなどから戻ると、オブジェクトは削除できています。

今回の 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 -qa | grep horizon python-django-horizon-2015.1.1-1.el7.noarch
対処方法
この問題と同じようです。どうやら、Horizon のバグのようです。
下記のあるような感じで、OpenStack コントローラ にある Horizon 関連のファイルを編集してしまいます。
とりあえず、下記のファイルだけ修正します。
/usr/lib/python2.7/site-packages/horizon/tables/actions.py
ちなみにこのファイルは、python-django-horizon に含まれています。
[root@ovm02 ~]# rpm -qf /usr/lib/python2.7/site-packages/horizon/tables/actions.py python-django-horizon-2015.1.1-1.el7.noarch
編集するのは、対象ファイルのこのあたりです。
とりあえず周辺の 20行を表示しておきます。
[root@ovm02 ~]# cat -n /usr/lib/python2.7/site-packages/horizon/tables/actions.py | sed 800,820p -n
800 action_not_allowed = []
801 for datum_id in obj_ids:
802 datum = table.get_object_by_id(datum_id)
803 datum_display = table.get_object_display(datum) or datum_id
804 if not table._filter_action(self, request, datum):
805 action_not_allowed.append(datum_display)
806 LOG.info('Permission denied to %s: "%s"' %
807 (self._get_action_name(past=True).lower(),
808 datum_display))
809 continue
810 try:
811 self.action(request, datum_id)
812 # Call update to invoke changes if needed
813 self.update(request, datum)
814 action_success.append(datum_display)
815 self.success_ids.append(datum_id)
816 LOG.info('%s: "%s"' %
817 (self._get_action_name(past=True), datum_display))
818 except Exception as ex:
819 # Handle the exception but silence it since we'll display
820 # an aggregate error message later. Otherwise we'd get
編集します。
[root@ovm02 ~]# cp -p /usr/lib/python2.7/site-packages/horizon/tables/actions.py actions.py_bk [root@ovm02 ~]# sed -i -e '800,820 s/LOG.info(/LOG.warning(u/g' /usr/lib/python2.7/site-packages/horizon/tables/actions.py
編集した内容です。
[root@ovm02 ~]# diff actions.py_bk /usr/lib/python2.7/site-packages/horizon/tables/actions.py
806c806
< LOG.info('Permission denied to %s: "%s"' %
---
> LOG.warning(u'Permission denied to %s: "%s"' %
816c816
< LOG.info('%s: "%s"' %
---
> LOG.warning(u'%s: "%s"' %
そして HTTPD を再起動しておきます。
[root@ovm02 ~]# systemctl restart httpd
これで、オブジェクトを削除してもエラー画面が表示されなくなります。
ログファイルの様子
ためしに、インスタンスを削除した時の /var/log/horizon/horizon.log ファイルを見てみました。
対処前
2016-05-06 17:49:01,653 4974 ERROR django.request Internal Server Error: /dashboard/project/instances/
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/horizon/decorators.py", line 36, in dec
return view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 52, in dec
return view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 36, in dec
return view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 84, in dec
return view_func(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/generic/base.py", line 89, in dispatch
return handler(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/horizon/tables/views.py", line 223, in post
return self.get(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/horizon/tables/views.py", line 159, in get
handled = self.construct_tables()
File "/usr/lib/python2.7/site-packages/horizon/tables/views.py", line 150, in construct_tables
handled = self.handle_table(table)
File "/usr/lib/python2.7/site-packages/horizon/tables/views.py", line 125, in handle_table
handled = self._tables[name].maybe_handle()
File "/usr/lib/python2.7/site-packages/horizon/tables/base.py", line 1640, in maybe_handle
return self.take_action(action_name, obj_id)
File "/usr/lib/python2.7/site-packages/horizon/tables/base.py", line 1482, in take_action
response = action.multiple(self, self.request, obj_ids)
File "/usr/lib/python2.7/site-packages/horizon/tables/actions.py", line 302, in multiple
return self.handle(data_table, request, object_ids)
File "/usr/lib/python2.7/site-packages/horizon/tables/actions.py", line 827, in handle
exceptions.handle(request, ignore=ignore)
File "/usr/lib/python2.7/site-packages/horizon/exceptions.py", line 364, in handle
six.reraise(exc_type, exc_value, exc_traceback)
File "/usr/lib/python2.7/site-packages/horizon/tables/actions.py", line 817, in handle
(self._get_action_name(past=True), datum_display))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
対処後
2016-05-06 17:54:59,535 14754 WARNING horizon.tables.actions インスタンスの終了を予約しました。: "vm01"
以上。
