Bug 888516 - Editing a project in horizon fails
Summary: Editing a project in horizon fails
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: python-django-horizon
Version: 2.1
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: snapshot4
: 2.1
Assignee: Julie Pichon
QA Contact: Nir Magnezi
URL:
Whiteboard:
: 889589 889765 (view as bug list)
Depends On: 890510
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-12-18 19:57 UTC by Russell Bryant
Modified: 2016-04-26 13:48 UTC (History)
3 users (show)

Fixed In Version: python-django-horizon-2012.2.3-3.el6ost
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2013-03-21 19:03:41 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Launchpad 1108063 0 None None None Never
OpenStack gerrit 21647 0 None MERGED Improve error message when the default role doesn't exist 2021-02-19 06:09:20 UTC
OpenStack gerrit 22339 0 None MERGED Improve error message when the default role doesn't exist 2021-02-19 06:09:21 UTC
Red Hat Product Errata RHBA-2013:0672 0 normal SHIPPED_LIVE Red Hat OpenStack 2.0 (Folsom) Preview bug fix and enhancement update 2013-03-21 23:02:46 UTC

Description Russell Bryant 2012-12-18 19:57:23 UTC
Description of problem:

Attempting to edit a project in Horizon fails.


Version-Release number of selected component (if applicable):

python-django-horizon-2012.2.1-2.el6ost.noarch


How reproducible:

Every time


Steps to Reproduce:

I set up OpenStack using the Folsom getting started guide on docs.redhat.com.  I logged in to Horizon as the admin user.  I went to Projects in the System Panel.  I have two projects defined (as directed by the docs): admin and rhsummit.  I selected the "Edit Project" action for the rhsummit project.  An error popup came up.  I checked /var/log/httpd/error_log and found the following:

[Tue Dec 18 19:50:54 2012] [error] Problem instantiating action class.
[Tue Dec 18 19:50:54 2012] [error] Traceback (most recent call last):
[Tue Dec 18 19:50:54 2012] [error]   File "/usr/lib/python2.6/site-packages/horizon/workflows/base.py", line 361, in action
[Tue Dec 18 19:50:54 2012] [error]     context)
[Tue Dec 18 19:50:54 2012] [error]   File "/usr/lib/python2.6/site-packages/horizon/dashboards/syspanel/projects/workflows.py", line 110, in __init__
[Tue Dec 18 19:50:54 2012] [error]     redirect=reverse(INDEX_URL))
[Tue Dec 18 19:50:54 2012] [error]   File "/usr/lib/python2.6/site-packages/horizon/dashboards/syspanel/projects/workflows.py", line 106, in __init__
[Tue Dec 18 19:50:54 2012] [error]     default_role = api.get_default_role(self.request).id
[Tue Dec 18 19:50:54 2012] [error] AttributeError: 'NoneType' object has no attribute 'id'
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38] mod_wsgi (pid=18172): Exception occurred processing WSGI script '/usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi'.
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38] Traceback (most recent call last):
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     response = self.get_response(request)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 179, in get_response
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return callback(request, **param_dict)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/utils/decorators.py", line 91, in _wrapped_view
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     response = view_func(request, *args, **kwargs)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/views/defaults.py", line 33, in server_error
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return http.HttpResponseServerError(t.render(Context({})))
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 140, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self._render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 134, in _render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self.nodelist.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 823, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     bit = self.render_node(node, context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 837, in render_node
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return node.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/loader_tags.py", line 123, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return compiled_parent._render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 134, in _render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self.nodelist.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 823, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     bit = self.render_node(node, context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 837, in render_node
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return node.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/loader_tags.py", line 155, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self.render_template(self.template, context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/loader_tags.py", line 137, in render_template
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     output = template.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 140, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self._render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 134, in _render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self.nodelist.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 823, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     bit = self.render_node(node, context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/django/template/base.py", line 837, in render_node
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return node.render(context)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/compressor/templatetags/compress.py", line 147, in render
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     return self.render_compressed(context, self.kind, self.mode, forced=forced)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/compressor/templatetags/compress.py", line 88, in render_compressed
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     cached_offline = self.render_offline(context, forced=forced)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]   File "/usr/lib/python2.6/site-packages/compressor/templatetags/compress.py", line 72, in render_offline
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38]     'You may need to run "python manage.py compress".' % key)
[Tue Dec 18 19:50:54 2012] [error] [client 10.3.112.38] OfflineGenerationError: You have offline compression enabled but key "1056718f92f8d4204721bac759b3871a" is missing from offline manifest. You may need to run "python manage.py compress".

Comment 2 Russell Bryant 2012-12-18 20:52:50 UTC
looks like the actions "Modify users" and "Modify quotas" for a project do the same thing.

Comment 3 Julie Pichon 2012-12-21 15:35:52 UTC
Reproduced locally.

Comment 4 Julie Pichon 2012-12-27 12:07:06 UTC
This is due to a configuration mismatch that happens following the guide -- doc bug filed at bug 890510.

Horizon expects the default Keystone role to be "Member". However following the guide we create the role "user" instead.

A temporary workaround to become able to use Horizon: 
1. Open /usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py
2. Edit OPENSTACK_KEYSTONE_DEFAULT_ROLE to be "user" instead of "Member"
3. Restart httpd

It's possible this change would be overwritten when upgrading the package later on though, so creating a "Member" role in Keystone and reassigning the regular users to it might be a more long term solution.

Comment 5 Julie Pichon 2012-12-27 12:08:16 UTC
*** Bug 889589 has been marked as a duplicate of this bug. ***

Comment 6 Julie Pichon 2012-12-27 12:11:00 UTC
*** Bug 889765 has been marked as a duplicate of this bug. ***

Comment 7 Julie Pichon 2013-01-25 16:48:47 UTC
[Tue Dec 18 19:50:54 2012] [error] Problem instantiating action class.
[Tue Dec 18 19:50:54 2012] [error] Traceback (most recent call last):
[Tue Dec 18 19:50:54 2012] [error]   File "/usr/lib/python2.6/site-packages/horizon/workflows/base.py", line 361, in action
[Tue Dec 18 19:50:54 2012] [error]     context)
[Tue Dec 18 19:50:54 2012] [error]   File "/usr/lib/python2.6/site-packages/horizon/dashboards/syspanel/projects/workflows.py", line 110, in __init__
[Tue Dec 18 19:50:54 2012] [error]     redirect=reverse(INDEX_URL))
[Tue Dec 18 19:50:54 2012] [error]   File "/usr/lib/python2.6/site-packages/horizon/dashboards/syspanel/projects/workflows.py", line 106, in __init__
[Tue Dec 18 19:50:54 2012] [error]     default_role = api.get_default_role(self.request).id
[Tue Dec 18 19:50:54 2012] [error] AttributeError: 'NoneType' object has no attribute 'id'

This error message should be changed to better highlight what is happening ("Cannot find role %s in Keystone").

Also an amendment to comment #4: the appropriate file in which to edit the setting would be /etc/openstack-dashboard/local_settings.

Comment 12 Nir Magnezi 2013-03-06 09:12:27 UTC
Verified NVR: 

Verification Steps (provided by Julie):

1. Edit /etc/openstack-dashboard/local_settings and set OPENSTACK_KEYSTONE_DEFAULT_ROLE to a role that doesn't exist e.g. "RoleThatDoesntExist" and restart httpd
2. Log in as admin, and go the Admin -> Projects panel. Click on "Modify Users" or "Edit Project". It won't work.
3. Before the fix, the output in comment 7 would appear in the error logs (/var/log/httpd/error_log)
4. Now, in the same log file, there should be instead a more specific error message saying that RoleThatDoesntExist couldn't be found in Keystone.


/var/log/httpd/error_log:

[Wed Mar 06 03:10:10 2013] [error] Problem instantiating action class.
[Wed Mar 06 03:10:10 2013] [error] Traceback (most recent call last):
[Wed Mar 06 03:10:10 2013] [error]   File "/usr/lib/python2.6/site-packages/horizon/workflows/base.py", line 361, in action
[Wed Mar 06 03:10:10 2013] [error]     context)
[Wed Mar 06 03:10:10 2013] [error]   File "/usr/lib/python2.6/site-packages/horizon/dashboards/syspanel/projects/workflows.py", line 120, in __init__
[Wed Mar 06 03:10:10 2013] [error]     redirect=reverse(INDEX_URL))
[Wed Mar 06 03:10:10 2013] [error]   File "/usr/lib/python2.6/site-packages/horizon/dashboards/syspanel/projects/workflows.py", line 116, in __init__
[Wed Mar 06 03:10:10 2013] [error]     raise exceptions.NotFound(msg)
[Wed Mar 06 03:10:10 2013] [error] NotFound: Could not find default role "RoleThatDoesntExist" in Keystone

Comment 13 Nir Magnezi 2013-03-06 09:23:11 UTC
Forgot to specify the Verified NVR: python-django-horizon-2012.2.3-5.el6ost.noarch

Comment 15 errata-xmlrpc 2013-03-21 19:03:41 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHBA-2013-0672.html


Note You need to log in before you can comment on or make changes to this bug.