Debian: Horizon returns 500 error caused by permission error

Bug #2047799 reported by Takashi Kajinami
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
puppet-horizon
New
Undecided
Unassigned

Bug Description

While we attempted to add the debian integration job, we noticed horizon tempest test consistently fails.
Looking at horizon log it seems the following permission error is causing the 500 error.

```
2023-12-13 13:48:29,187 35592 INFO openstack_dashboard.django_pyscss_fix Error precreating path /usr/lib/python3/dist-packages/static/scss/assets, [Errno 13] Permission denied: '/usr/lib/python3/dist-packages/static'
2023-12-13 13:48:29,927 35592 DEBUG horizon.base Load condition failed for panel: backups
2023-12-13 13:48:29,967 35592 DEBUG horizon.base Load condition failed for panel: backups
2023-12-13 13:48:30,006 35592 DEBUG horizon.base Load condition failed for panel: identity_providers
2023-12-13 13:48:30,009 35592 DEBUG horizon.base Load condition failed for panel: mappings
2023-12-13 13:48:32,537 35591 INFO openstack_dashboard.django_pyscss_fix Error precreating path /usr/lib/python3/dist-packages/static/scss/assets, [Errno 13] Permission denied: '/usr/lib/python3/dist-packages/static'
2023-12-13 13:48:33,118 35591 DEBUG horizon.base Load condition failed for panel: backups
2023-12-13 13:48:33,135 35591 DEBUG horizon.base Load condition failed for panel: backups
2023-12-13 13:48:33,150 35591 DEBUG horizon.base Load condition failed for panel: identity_providers
2023-12-13 13:48:33,151 35591 DEBUG horizon.base Load condition failed for panel: mappings
2023-12-13 13:48:33,619 35591 ERROR django.request Internal Server Error: /horizon/auth/login/
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
               ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
                   ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 170, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/loader_tags.py", line 195, in render
    return template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 172, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/templatetags/compress.py", line 151, in render
    return self.render_compressed(context, self.kind, self.mode, forced=forced, log=log, verbosity=verbosity)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/templatetags/compress.py", line 121, in render_compressed
    rendered_output = compressor.output(mode, forced=forced, basename=file_basename)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/css.py", line 46, in output
    ret.append(subnode.output(*args, **kwargs))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/css.py", line 48, in output
    return super().output(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/base.py", line 330, in output
    return self.handle_output(mode, filtered_output, forced, basename)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/base.py", line 338, in handle_output
    return output_func(mode, content, forced, basename)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compressor/base.py", line 350, in output_file
    self.storage.save(new_filepath, ContentFile(content.encode(self.charset)))
  File "/usr/lib/python3/dist-packages/compressor/storage.py", line 37, in save
    temp_filename = super().save(filename, content)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/files/storage.py", line 54, in save
    name = self._save(name, content)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/files/storage.py", line 260, in _save
    os.makedirs(directory, exist_ok=True)
  File "<frozen os>", line 215, in makedirs
  File "<frozen os>", line 215, in makedirs
  File "<frozen os>", line 225, in makedirs
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3/dist-packages/static'
```

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.