Bug confirmed in stable/mitaka. In openstack_dashboard.dashboards.admin.info.tabs.CinderServicesTab.get_cinder_services_data, cinder.service_list gets called (admin/info/tabs.py, line 74) and returns a list of cinderclient.v2.services.Service objects which do not contain a "service" attribute, as would be expected by the Service.__repr__ method.
Just for the sake of testing, if the "service" attribute is added to each Service object before the get_cinder_services_data method returns (for s in services: s.service = 'cinder'), the bug ceases to occur. Looking at python-cinderclient code, I did not spot any place where the "service" attribute would have been set, which led me to believe the root issue is not in horizon, but in python-cinderclient, as yangyide suggested. I believe the correct way to fix this bug would be to change python- cinderclient and make Service.__repr__ refer to self._info instead of self.service, just as it is done in python-heatclient, python- keystoneclient, etc. --- cinderclient/v2/services.py.orig 2016-06-11 12:10:38.006331350 -0300 +++ cinderclient/v2/services.py 2016-06-11 12:13:47.140773653 -0300 @@ -22,7 +22,7 @@ class Service(base.Resource): def __repr__(self): - return "<Service: %s>" % self.service + return "<Service %s>" % self._info class ServiceManager(base.ManagerWithFind): The same goes for v3/services.py in master. I am not sure if this is the correct procedure for informing the python- cinderclient project about the issue, but I will mark this issue as "also affecting" python-cinderclient. I did not try to reproduce the bug with master, but I did not spot any code changes in the relevant files (from stable/mitaka to master) which would cause this issue to be fixed. ** Changed in: horizon Status: Invalid => Confirmed ** Also affects: python-cinderclient Importance: Undecided Status: New -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to OpenStack Dashboard (Horizon). https://bugs.launchpad.net/bugs/1579982 Title: Go to admin info error Status in OpenStack Dashboard (Horizon): Confirmed Status in python-cinderclient: New Bug description: I used openstack version is M ,when I go to /admin/info/ path will show info 'TemplateSyntaxError at /admin/info/' Browser show info: TemplateSyntaxError at /admin/info/ service Request Method: GET Request URL: http://192.168.22.1:8888/admin/info/ Django Version: 1.8.7 Exception Type: TemplateSyntaxError Exception Value: service Exception Location: /usr/lib/python2.7/site-packages/cinderclient/openstack/common/apiclient/base.py in __getattr__, line 505 Python Executable: /usr/bin/python2 Python Version: 2.7.5 Python Path: ['/mnt/horizon_new', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages', '/mnt/horizon_new/openstack_dashboard'] Error during template rendering Console show info: Error while rendering table rows. Traceback (most recent call last): File "/mnt/horizon_new/horizon/tables/base.py", line 1781, in get_rows row = self._meta.row_class(self, datum) File "/mnt/horizon_new/horizon/tables/base.py", line 534, in __init__ self.load_cells() File "/mnt/horizon_new/horizon/tables/base.py", line 560, in load_cells cell = table._meta.cell_class(datum, column, self) File "/mnt/horizon_new/horizon/tables/base.py", line 666, in __init__ self.data = self.get_data(datum, column, row) File "/mnt/horizon_new/horizon/tables/base.py", line 710, in get_data data = column.get_data(datum) File "/mnt/horizon_new/horizon/tables/base.py", line 381, in get_data data = self.get_raw_data(datum) File "/mnt/horizon_new/horizon/tables/base.py", line 363, in get_raw_data "%(obj)s.") % {'attr': self.transform, 'obj': datum} File "/usr/lib/python2.7/site-packages/django/utils/functional.py", line 178, in __mod__ return six.text_type(self) % rhs File "/usr/lib/python2.7/site-packages/cinderclient/v2/services.py", line 25, in __repr__ return "<Service: %s>" % self.service File "/usr/lib/python2.7/site-packages/cinderclient/openstack/common/apiclient/base.py", line 505, in __getattr__ raise AttributeError(k) AttributeError: service Internal Server Error: /admin/info/ 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 "/mnt/horizon_new/horizon/decorators.py", line 36, in dec return view_func(request, *args, **kwargs) File "/mnt/horizon_new/horizon/decorators.py", line 84, in dec return view_func(request, *args, **kwargs) File "/mnt/horizon_new/horizon/decorators.py", line 52, in dec return view_func(request, *args, **kwargs) File "/mnt/horizon_new/horizon/decorators.py", line 36, 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 "/mnt/horizon_new/horizon/tabs/views.py", line 147, in get return self.handle_tabbed_response(context["tab_group"], context) File "/mnt/horizon_new/horizon/tabs/views.py", line 68, in handle_tabbed_response return self.render_to_response(context) File "/mnt/horizon_new/horizon/tabs/views.py", line 81, in render_to_response response.render() File "/usr/lib/python2.7/site-packages/django/template/response.py", line 158, in render self.content = self.rendered_content File "/usr/lib/python2.7/site-packages/django/template/response.py", line 135, in rendered_content content = template.render(context, self._request) File "/usr/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render return self.template.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 210, in render return self._render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 202, in _render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py", line 135, in render return compiled_parent._render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 202, in _render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py", line 65, in render result = block.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py", line 65, in render result = block.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 89, in render output = self.filter_expression.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 648, in resolve obj = self.var.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 789, in resolve value = self._resolve_lookup(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 849, in _resolve_lookup current = current() File "/mnt/horizon_new/horizon/tabs/base.py", line 176, in render return render_to_string(self.template_name, {"tab_group": self}) File "/usr/lib/python2.7/site-packages/django/template/loader.py", line 99, in render_to_string return template.render(context, request) File "/usr/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render return self.template.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 210, in render return self._render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 202, in _render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 576, in render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 329, in render return nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 217, in render nodelist.append(node.render(context)) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 89, in render output = self.filter_expression.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 648, in resolve obj = self.var.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 789, in resolve value = self._resolve_lookup(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 849, in _resolve_lookup current = current() File "/mnt/horizon_new/horizon/tabs/base.py", line 323, in render return render_to_string(self.get_template_name(self.request), context) File "/usr/lib/python2.7/site-packages/django/template/loader.py", line 99, in render_to_string return template.render(context, request) File "/usr/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render return self.template.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 210, in render return self._render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 202, in _render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 89, in render output = self.filter_expression.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 648, in resolve obj = self.var.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 789, in resolve value = self._resolve_lookup(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 849, in _resolve_lookup current = current() File "/mnt/horizon_new/horizon/tables/base.py", line 1291, in render return table_template.render(context) File "/usr/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render return self.template.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 210, in render return self._render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 202, in _render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 576, in render return self.nodelist.render(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 905, in render bit = self.render_node(node, context) File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 79, in render_node return node.render(context) File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 574, in render six.iteritems(self.extra_context)} File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 573, in <dictcomp> values = {key: val.resolve(context) for key, val in File "/usr/lib/python2.7/site-packages/django/template/base.py", line 648, in resolve obj = self.var.resolve(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 789, in resolve value = self._resolve_lookup(context) File "/usr/lib/python2.7/site-packages/django/template/base.py", line 849, in _resolve_lookup current = current() File "/mnt/horizon_new/horizon/tables/base.py", line 1792, in get_rows exc_info[2]) File "/mnt/horizon_new/horizon/tables/base.py", line 1781, in get_rows row = self._meta.row_class(self, datum) File "/mnt/horizon_new/horizon/tables/base.py", line 534, in __init__ self.load_cells() File "/mnt/horizon_new/horizon/tables/base.py", line 560, in load_cells cell = table._meta.cell_class(datum, column, self) File "/mnt/horizon_new/horizon/tables/base.py", line 666, in __init__ self.data = self.get_data(datum, column, row) File "/mnt/horizon_new/horizon/tables/base.py", line 710, in get_data data = column.get_data(datum) File "/mnt/horizon_new/horizon/tables/base.py", line 381, in get_data data = self.get_raw_data(datum) File "/mnt/horizon_new/horizon/tables/base.py", line 363, in get_raw_data "%(obj)s.") % {'attr': self.transform, 'obj': datum} File "/usr/lib/python2.7/site-packages/django/utils/functional.py", line 178, in __mod__ return six.text_type(self) % rhs File "/usr/lib/python2.7/site-packages/cinderclient/v2/services.py", line 25, in __repr__ return "<Service: %s>" % self.service File "/usr/lib/python2.7/site-packages/cinderclient/openstack/common/apiclient/base.py", line 505, in __getattr__ raise AttributeError(k) TemplateSyntaxError: service Can somebody help me? Thanks To manage notifications about this bug go to: https://bugs.launchpad.net/horizon/+bug/1579982/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp