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"
以上。