netbox-community / netbox

The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/free-netbox-cloud/
http://netboxlabs.com/oss/netbox/
Apache License 2.0
15.98k stars 2.56k forks source link

Issues with showing child prefixes #7072

Closed trrunde closed 3 years ago

trrunde commented 3 years ago

NetBox version

v3.0

Python version

3.8

Steps to Reproduce

In version 2.x I had added some more column to be visible on the prefixes. I believe it was "Tags" after upgrading to version 3.0 I get the following error when clicking "child prefixes" on a prefix.

The complete exception is provided below:

<class 'AttributeError'>

'str' object has no attribute 'available_columns'

Python version: 3.8.6 NetBox version: 3.0.0

Expected Behavior

Page showing child prefixes

Observed Behavior

The complete exception is provided below:

<class 'AttributeError'>

'str' object has no attribute 'available_columns'

Python version: 3.8.6 NetBox version: 3.0.0

jeremystretch commented 3 years ago

Have you tried clearing out your table preferences (under your user profile)? Are you able to recreate this on v3.0.0 alone?

rodvand commented 3 years ago

I am able to reproduce on my test instance, as well as the NetBox Beta Demo instance (https://beta-demo.netbox.dev/ipam/prefixes/1/) and click Child Prefixes. And I can't see any user preferences on my profile that should result in this (nothing related to prefix).

jeremystretch commented 3 years ago

I am able to reproduce on my test instance

@rodvand can you please share the specific steps you're taking to reproduce the bug on v3.0.0?

trrunde commented 3 years ago

Have you tried clearing out your table preferences (under your user profile)? Are you able to recreate this on v3.0.0 alone?

have not tested that, will check settings to clear my profile then adding the column back after.

trrunde commented 3 years ago

Tried clearing the columns on my profile page, same result. Got some more details about the traceback error in the email sent from netbox.

`Request Method: GET Request URL: https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fnetbox1.st3.lysetele.net%2Fipam%2Fprefixes%2F6295%2Fprefixes%2F&amp;data=04%7C01%7C%7Ce2ff14718fdf4e29206508d96bfd90d4%7C22ca942f06c24f3894070e447dedbb67%7C0%7C0%7C637659559214455220%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=onWYiTCdB%2BmGau0ZDMT%2BaKeqH5DozyqYhWGXUXpqazg%3D&amp;reserved=0 Django Version: 3.2.6 Python Executable: /opt/netbox/venv/bin/python3.8 Python Version: 3.8.6 Python Path: ['/opt/netbox/netbox', '/opt/netbox', '/opt/netbox/venv/bin', '/usr/lib64/python38.zip', '/usr/lib64/python3.8', '/usr/lib64/python3.8/lib-dynload', '/opt/netbox/venv/lib64/python3.8/site-packages', '/opt/netbox/venv/lib/python3.8/site-packages'] Server time: Mon, 30 Aug 2021 23:31:43 +0200 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'corsheaders', 'debug_toolbar', 'graphiql_debug_toolbar', 'django_filters', 'django_tables2', 'django_prometheus', 'graphene_django', 'mptt', 'rest_framework', 'taggit', 'timezone_field', 'circuits', 'dcim', 'ipam', 'extras', 'tenancy', 'users', 'utilities', 'virtualization', 'django_rq', 'drf_yasg'] Installed Middleware: ['graphiql_debug_toolbar.middleware.DebugToolbarMiddleware', 'django_prometheus.middleware.PrometheusBeforeMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'netbox.middleware.ExceptionHandlingMiddleware', 'netbox.middleware.RemoteUserMiddleware', 'netbox.middleware.LoginRequiredMiddleware', 'netbox.middleware.APIVersionMiddleware', 'netbox.middleware.ObjectChangeMiddleware', 'django_prometheus.middleware.PrometheusAfterMiddleware']

Traceback (most recent call last): File "/opt/netbox/venv/lib64/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, callback_kwargs) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/views/generic/base.py", line 70, in view return self.dispatch(request, *args, *kwargs) File "/opt/netbox/netbox/utilities/views.py", line 93, in dispatch return super().dispatch(request, args, kwargs) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch return handler(request, *args, *kwargs) File "/opt/netbox/netbox/netbox/views/generic.py", line 70, in get return render(request, self.get_template_name(), { File "/opt/netbox/venv/lib64/python3.8/site-packages/django/shortcuts.py", line 19, in render content = loader.render_to_string(template_name, context, request, using=using) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 170, in render return self._render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/opt/netbox/venv/lib64/python3.8/site-packages/django/template/library.py", line 214, in render _dict = self.func(resolved_args, **resolved_kwargs) File "/opt/netbox/netbox/utilities/templatetags/helpers.py", line 404, in table_config_form 'table_config_form': TableConfigForm(table=table), File "/opt/netbox/netbox/utilities/forms/forms.py", line 207, in init self.fields['available_columns'].choices = table.available_columns

Exception Type: AttributeError at /ipam/prefixes/6295/prefixes/ Exception Value: 'str' object has no attribute 'available_columns' Request information: USER: trondar`

trrunde commented 3 years ago

I am able to reproduce on my test instance

@rodvand can you please share the specific steps you're taking to reproduce the bug on v3.0.0?

Its enough to open a prefix, then click "child prefixes" This will lead to an error with 'str' object has no attribute 'available_columns'

fkusei commented 3 years ago

Can confirm the same issue. Was upgrading from 2.11.11 to 3.0.0, cleared user preferences after upgrading. Same error, same log entry.

Can provide a copy of my logs if needed.

jeremystretch commented 3 years ago

Table configuration for the child prefixes view just recently added in #6872 (in v2.11.12), but it seems to have broken in v3.0.

jeremystretch commented 3 years ago

Looks like something got lost in the merge when we switched from a context variable to a template tag for the table configuration form.

maznu commented 3 years ago

Seeing exactly the same issue. Glad someone's already reported it!

casmith32 commented 3 years ago

I see that this has been closed. How do I apply the fix ? experiencing the same thing when showing child prefixes

The complete exception is provided below: <class 'AttributeError'> 'str' object has no attribute 'available_columns'

Python version: 3.8.10 NetBox version: 3.0.0

jeremystretch commented 3 years ago

@casmith32 it will be available in the v3.0.1 release, expected later today. Alternatively, you can clone the develop branch to pull in the current state (with the fix), however be aware that it may not be entirely stable.

casmith32 commented 3 years ago

Great - we'll sit tight. not a show stopper rightnow