Go to admin info error

Bug #1579982 reported by yangyide
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
OpenStack Dashboard (Horizon)
Invalid
Undecided
Unassigned
python-cinderclient
Fix Released
Undecided
Unassigned

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

Revision history for this message
Rob Cresswell (robcresswell-deactivatedaccount) wrote :

This doesn't appear in master. Are you running any customisations? Are you services all intact?

Changed in horizon:
status: New → Incomplete
Revision history for this message
yangyide (yangyide01) wrote :

It's cinderclient bug . I fixed class Service in python-cinderclient/cinderclient/v2/services.py .It works .

Changed in horizon:
status: Incomplete → Fix Released
Revision history for this message
yangyide (yangyide01) wrote : Re:[Bug 1579982] Re: Go to admin info error
Download full text (14.6 KiB)

Thank you . <br/>It's cinderclient bug . I fixed method __repr__ in class Service in python-cinderclient/cinderclient/v2/services.py .It works .
At 2016-05-10 22:23:46, "Rob Cresswell" <email address hidden> wrote:
>This doesn't appear in master. Are you running any customisations? Are
>you services all intact?
>
>** Changed in: horizon
> Status: New => Incomplete
>
>--
>You received this bug notification because you are subscribed to the bug
>report.
>https://bugs.launchpad.net/bugs/1579982
>
>Title:
> Go to admin info error
>
>Status in OpenStack Dashboard (Horizon):
> Incomplete
>
>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 l...

Changed in horizon:
status: Fix Released → Invalid
Revision history for this message
Paulo Matias (paulo-matias) wrote :

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
Revision history for this message
Paulo Matias (paulo-matias) wrote :

Additional info: This is in a standard multi-node OpenStack-Ansible deployment.

Revision history for this message
Matthew Taylor (matthew-taylor-f) wrote :

Kolla (Mitaka) users can update their docker "./docker/horizon/extend_start.sh" file just after the shebang:

```
--- extend_start.sh.orig 2016-07-01 03:20:38.428188470 +0000
+++ extend_start.sh 2016-07-01 03:20:55.659401796 +0000
@@ -1,5 +1,8 @@
 #!/bin/bash

+# Temp fix cinderclient v2 bug which causes errors in Horizon https://bugs.launchpad.net/horizon/+bug/1579982/ -- JIRA: OSC-445
+sed -i 's/return "<Service: %s>" % self.service/return "<Service: %s>" % self._info/g' /usr/lib/python2.7/site-packages/cinderclient/v2/services.py
+
 # NOTE(pbourke): httpd will not clean up after itself in some cases which
 # results in the container not being able to restart. (bug #1489676, 1557036)
 if [[ "${KOLLA_BASE_DISTRO}" =~ debian|ubuntu ]]; then
```

Re-build your docker container, pull and restart.

Revision history for this message
Matthew Taylor (matthew-taylor-f) wrote :

Ah, excuse my Jira tag :) I can't edit my comment.

Revision history for this message
Paulo Matias (paulo-matias) wrote :

Fixed in master. Not sure if it is still affecting stable/mitaka.

Revision history for this message
Andrew Balfour (andrew-balfour) wrote :

I'm slightly confused; the previous note states this was fixed in master, but the master as of Aug. 20 2016 shows it's still _service :

https://github.com/openstack/python-cinderclient/blob/master/cinderclient/v3/services.py#L26

so is this fixed in master, or was it fixed somewhere else?

Revision history for this message
Sean McGinnis (sean-mcginnis) wrote :

Fixed in python-cinderclient with https://review.openstack.org/#/c/331596/

Changed in python-cinderclient:
status: New → Fix Released
Revision history for this message
Gary W. Smith (gary-w-smith) wrote :

As indicated above, the python-cinderclient was updated. It does not appear to have been a horizon problem.

Changed in horizon:
status: Confirmed → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.