The instance action log for admin doesn't work if ANGULAR_FEATURES.users_panel is True
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Dashboard (Horizon) |
In Progress
|
Medium
|
Unassigned |
Bug Description
# Problem description
I'm using horizon of openstack wallaby on Ubuntu 20.04. I installed it with devstack.
And I set ANGULAR_
========
ANGULAR_FEATURES = {
'images_panel': True,
'key_
'flavors_
'domains_
'users_panel': True,
'groups_panel': False,
'roles_panel': True
}
========
As a result, the loading icon was kept spinning when I saw the following action log panel for admin. I couldn't saw action logs.
Admin -> Compute -> Instances -> Click a instance -> Click "Action Log"
I confirmed that openstack queens cloud-archive of Ubuntu 18.04 has same issue.
# My guess
The action log for admin shows operation performer's user id. I think that it is relevant to users_panel.
# Error message
The following error messages appeared in the horizon log file.
(Ubuntu 20.04 + wallaby environment)
2021-07-07 05:14:59.566074 Traceback (most recent call last):
2021-07-07 05:14:59.566083 File "/usr/local/
2021-07-07 05:14:59.566094 response = get_response(
2021-07-07 05:14:59.566103 File "/usr/local/
2021-07-07 05:14:59.566113 response = self.process_
2021-07-07 05:14:59.566123 File "/usr/local/
2021-07-07 05:14:59.566134 response = wrapped_
2021-07-07 05:14:59.566144 File "/opt/stack/
2021-07-07 05:14:59.566153 return view_func(request, *args, **kwargs)
2021-07-07 05:14:59.566162 File "/opt/stack/
2021-07-07 05:14:59.566172 return view_func(request, *args, **kwargs)
2021-07-07 05:14:59.566181 File "/opt/stack/
2021-07-07 05:14:59.566190 return view_func(request, *args, **kwargs)
2021-07-07 05:14:59.566199 File "/opt/stack/
2021-07-07 05:14:59.566209 return view_func(request, *args, **kwargs)
2021-07-07 05:14:59.566218 File "/opt/stack/
2021-07-07 05:14:59.566228 return view_func(request, *args, **kwargs)
2021-07-07 05:14:59.566239 File "/usr/local/
2021-07-07 05:14:59.566253 return self.dispatch(
2021-07-07 05:14:59.566265 File "/usr/local/
2021-07-07 05:14:59.566278 return handler(request, *args, **kwargs)
2021-07-07 05:14:59.566287 File "/opt/stack/
2021-07-07 05:14:59.566297 return self.handle_
2021-07-07 05:14:59.566307 File "/opt/stack/
2021-07-07 05:14:59.566334 return http.HttpRespon
2021-07-07 05:14:59.566343 File "/opt/stack/
2021-07-07 05:14:59.566355 return render_
2021-07-07 05:14:59.566367 File "/usr/local/
2021-07-07 05:14:59.566380 return template.
2021-07-07 05:14:59.566392 File "/usr/local/
2021-07-07 05:14:59.566405 return self.template.
2021-07-07 05:14:59.566414 File "/usr/local/
2021-07-07 05:14:59.566424 return self._render(
2021-07-07 05:14:59.566433 File "/usr/local/
2021-07-07 05:14:59.566443 return self.nodelist.
2021-07-07 05:14:59.566452 File "/usr/local/
2021-07-07 05:14:59.566462 bit = node.render_
2021-07-07 05:14:59.566472 File "/usr/local/
2021-07-07 05:14:59.566482 return self.render(
2021-07-07 05:14:59.566491 File "/usr/local/
2021-07-07 05:14:59.566502 output = self.filter_
2021-07-07 05:14:59.566514 File "/usr/local/
2021-07-07 05:14:59.566527 obj = self.var.
2021-07-07 05:14:59.566538 File "/usr/local/
2021-07-07 05:14:59.566551 value = self._resolve_
2021-07-07 05:14:59.566561 File "/usr/local/
2021-07-07 05:14:59.566586 current = current()
2021-07-07 05:14:59.566598 File "/opt/stack/
2021-07-07 05:14:59.566610 return table_template.
2021-07-07 05:14:59.566621 File "/usr/local/
2021-07-07 05:14:59.566632 return self.template.
2021-07-07 05:14:59.566641 File "/usr/local/
2021-07-07 05:14:59.566651 return self._render(
2021-07-07 05:14:59.566660 File "/usr/local/
2021-07-07 05:14:59.566671 return self.nodelist.
2021-07-07 05:14:59.566680 File "/usr/local/
2021-07-07 05:14:59.566690 bit = node.render_
2021-07-07 05:14:59.566699 File "/usr/local/
2021-07-07 05:14:59.566709 return self.render(
2021-07-07 05:14:59.566718 File "/usr/local/
2021-07-07 05:14:59.566729 return self.nodelist.
2021-07-07 05:14:59.566738 File "/usr/local/
2021-07-07 05:14:59.566748 bit = node.render_
2021-07-07 05:14:59.566757 File "/usr/local/
2021-07-07 05:14:59.566768 return self.render(
2021-07-07 05:14:59.566776 File "/usr/local/
2021-07-07 05:14:59.566787 return self.nodelist.
2021-07-07 05:14:59.566816 File "/usr/local/
2021-07-07 05:14:59.566826 bit = node.render_
2021-07-07 05:14:59.566835 File "/usr/local/
2021-07-07 05:14:59.566846 return self.render(
2021-07-07 05:14:59.566855 File "/usr/local/
2021-07-07 05:14:59.566865 result = self.nodelist.
2021-07-07 05:14:59.566874 File "/usr/local/
2021-07-07 05:14:59.566884 bit = node.render_
2021-07-07 05:14:59.566893 File "/usr/local/
2021-07-07 05:14:59.566903 return self.render(
2021-07-07 05:14:59.566912 File "/usr/local/
2021-07-07 05:14:59.566923 result = self.nodelist.
2021-07-07 05:14:59.566932 File "/usr/local/
2021-07-07 05:14:59.566942 bit = node.render_
2021-07-07 05:14:59.566951 File "/usr/local/
2021-07-07 05:14:59.566987 return self.render(
2021-07-07 05:14:59.566999 File "/usr/local/
2021-07-07 05:14:59.567010 nodelist.
2021-07-07 05:14:59.567019 File "/usr/local/
2021-07-07 05:14:59.567029 return self.render(
2021-07-07 05:14:59.567038 File "/usr/local/
2021-07-07 05:14:59.567048 output = self.filter_
2021-07-07 05:14:59.567060 File "/usr/local/
2021-07-07 05:14:59.567075 obj = self.var.
2021-07-07 05:14:59.567086 File "/usr/local/
2021-07-07 05:14:59.567098 value = self._resolve_
2021-07-07 05:14:59.567110 File "/usr/local/
2021-07-07 05:14:59.567121 current = current()
2021-07-07 05:14:59.567132 File "/opt/stack/
2021-07-07 05:14:59.567144 return render_
2021-07-07 05:14:59.567157 File "/usr/local/
2021-07-07 05:14:59.567170 return template.
2021-07-07 05:14:59.567180 File "/usr/local/
2021-07-07 05:14:59.567191 return self.template.
2021-07-07 05:14:59.567200 File "/usr/local/
2021-07-07 05:14:59.567210 return self._render(
2021-07-07 05:14:59.567219 File "/usr/local/
2021-07-07 05:14:59.567229 return self.nodelist.
2021-07-07 05:14:59.567238 File "/usr/local/
2021-07-07 05:14:59.567248 bit = node.render_
2021-07-07 05:14:59.567257 File "/usr/local/
2021-07-07 05:14:59.567268 return self.render(
2021-07-07 05:14:59.567276 File "/usr/local/
2021-07-07 05:14:59.567332 return strip_spaces_
2021-07-07 05:14:59.567343 File "/usr/local/
2021-07-07 05:14:59.567354 bit = node.render_
2021-07-07 05:14:59.567363 File "/usr/local/
2021-07-07 05:14:59.567373 return self.render(
2021-07-07 05:14:59.567384 File "/usr/local/
2021-07-07 05:14:59.567397 nodelist.
2021-07-07 05:14:59.567409 File "/usr/local/
2021-07-07 05:14:59.567422 return self.render(
2021-07-07 05:14:59.567433 File "/usr/local/
2021-07-07 05:14:59.567443 return template.
2021-07-07 05:14:59.567452 File "/usr/local/
2021-07-07 05:14:59.567462 return self._render(
2021-07-07 05:14:59.567471 File "/usr/local/
2021-07-07 05:14:59.567481 return self.nodelist.
2021-07-07 05:14:59.567491 File "/usr/local/
2021-07-07 05:14:59.567501 bit = node.render_
2021-07-07 05:14:59.567510 File "/usr/local/
2021-07-07 05:14:59.567520 return self.render(
2021-07-07 05:14:59.567531 File "/usr/local/
2021-07-07 05:14:59.567544 return nodelist.
2021-07-07 05:14:59.567555 File "/usr/local/
2021-07-07 05:14:59.567577 bit = node.render_
2021-07-07 05:14:59.567588 File "/usr/local/
2021-07-07 05:14:59.567601 return self.render(
2021-07-07 05:14:59.567612 File "/usr/local/
2021-07-07 05:14:59.567625 return nodelist.
2021-07-07 05:14:59.567637 File "/usr/local/
2021-07-07 05:14:59.567647 bit = node.render_
2021-07-07 05:14:59.567656 File "/usr/local/
2021-07-07 05:14:59.567667 return self.render(
2021-07-07 05:14:59.567676 File "/usr/local/
2021-07-07 05:14:59.567686 output = self.filter_
2021-07-07 05:14:59.567695 File "/usr/local/
2021-07-07 05:14:59.567705 obj = self.var.
2021-07-07 05:14:59.567714 File "/usr/local/
2021-07-07 05:14:59.567724 value = self._resolve_
2021-07-07 05:14:59.567734 File "/usr/local/
2021-07-07 05:14:59.567744 current = getattr(current, bit)
2021-07-07 05:14:59.567753 File "/opt/stack/
2021-07-07 05:14:59.567762 return flatatt(
2021-07-07 05:14:59.567771 File "/opt/stack/
2021-07-07 05:14:59.567781 final_attrs[
2021-07-07 05:14:59.567800 File "/opt/stack/
2021-07-07 05:14:59.567810 default = " ".join(
2021-07-07 05:14:59.567819 File "/opt/stack/
2021-07-07 05:14:59.567829 if not self.url:
2021-07-07 05:14:59.567837 File "/opt/stack/
2021-07-07 05:14:59.567847 url = self.column.
2021-07-07 05:14:59.567856 File "/opt/stack/
2021-07-07 05:14:59.567866 return self.link(datum)
2021-07-07 05:14:59.567875 File "/opt/stack/
2021-07-07 05:14:59.567885 return urls.reverse(
2021-07-07 05:14:59.567895 File "/usr/local/
2021-07-07 05:14:59.567905 return iri_to_
2021-07-07 05:14:59.567915 File "/usr/local/
2021-07-07 05:14:59.567933 raise NoReverseMatch(msg)
2021-07-07 05:14:59.567942 django.
tags: | added: sts |
/releasenotes/ notes/bp- ng-users- 01212620d644289 f.yaml
--- /blueprints. launchpad. net/horizon/ +spec/ng- users>`_] /bugs.launchpad .net/horizon/ 1744271>`_]. /bugs.launchpad .net/horizon/ 1744271>`_] Users panel
features:
- |
[`blueprint ng-users <https:/
AngularJS-based Users panel is added. The features in the legacy
panel are almost implemented. The Users panel now may be configured
to use either the legacy or AngularJS-based codes.
The ANGULAR_FEATURES setting now allows for a `users_panel`.
If set to True, then the AngularJS-Based Users panel will be used,
while the Django version will be used if set to False.
Default value for users_panel is False, due to lack of extensional
buttons, i.e. for showing password and adding project, see also
[`bug/1733271 <https:/
issues:
- |
[`bug/1733271 <https:/
has Angularized, but buttons showing passwords is not implemented, i.e.
for Password, Confirm Password and Admin password. Also, button adding
project for selection of Primary Project is not implemented.
https:/ /bugs.launchpad .net/horizon/ +bug/1744271