NetBox v2.7.10 Released

177 views
Skip to first unread message

Jeremy Stretch

unread,
Mar 10, 2020, 2:02:38 PM3/10/20
to NetBox

Note: If your deployment requires any non-core Python packages (such as napalm, django-storages, or django-auth-ldap), list them in a file named local_requirements.txt in the NetBox root directory (alongside requirements.txt). This will ensure they are detected and re-installed by the upgrade script when the Python virtual environment is rebuilt.

Enhancements

  • #4217 - Embed model documentation within web UI
  • #4323 - Add bulk edit view for power panels
  • #4324 - Add CSV import view for services
  • #4325 - Add CSV import view for rack reservations
  • #4332 - Redirect to a user-friendly error page when CSS/JS resources fail to load

Bug Fixes

  • #4326 - Exclude Python modules without Script classes from scripts list
  • #4337 - Allow bulk editing/deletion of all device components matching a query
  • #4338 - Catch AddrFormatError exception when filtering aggregates/prefixes by an invalid prefix

--
Jeremy Stretch
Sr. Network Automation Engineer
Network to Code, LLC

Brian Candler

unread,
Mar 10, 2020, 4:06:01 PM3/10/20
to NetBox
This release breaks me completely (Ubuntu 16.04).  When I click on Devices > Add:

Internal Server Error: /dcim/devices/add/

VersionConflict at /dcim/devices/add/
(setuptools 20.7.0 (/opt/netbox/venv/lib/python3.5/site-packages), Requirement.parse('setuptools>=36'))

Request Method: GET
Request URL: http://netbox.example.net/dcim/devices/add/
Django Version: 2.2.11
Python Executable: /opt/netbox/venv/bin/python3
Python Version: 3.5.2
Python Path: ['/opt/netbox/netbox', '/opt/netbox/venv/bin', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/opt/netbox/venv/lib/python3.5/site-packages']
Server time: Tue, 10 Mar 2020 19:58:59 +0000
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'cacheops',
 'corsheaders',
 'debug_toolbar',
 'django_filters',
 'django_rq',
 'django_tables2',
 'django_prometheus',
 'mptt',
 'rest_framework',
 'taggit',
 'taggit_serializer',
 'timezone_field',
 'circuits',
 'dcim',
 'ipam',
 'extras',
 'secrets',
 'tenancy',
 'users',
 'utilities',
 'virtualization',
 'drf_yasg']
Installed Middleware:
('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',
 'utilities.middleware.ExceptionHandlingMiddleware',
 'utilities.middleware.LoginRequiredMiddleware',
 'utilities.middleware.APIVersionMiddleware',
 'extras.middleware.ObjectChangeMiddleware',
 'django_prometheus.middleware.PrometheusAfterMiddleware')


Traceback:

File "/opt/netbox/venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/contrib/auth/mixins.py" in dispatch
  85.         return super().dispatch(request, *args, **kwargs)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch
  97.         return handler(request, *args, **kwargs)

File "/opt/netbox/netbox/utilities/views.py" in get
  234.             'return_url': self.get_return_url(request, obj),

File "/opt/netbox/venv/lib/python3.5/site-packages/django/shortcuts.py" in render
  36.     content = loader.render_to_string(template_name, context, request, using=using)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/loader.py" in render_to_string
  62.     return template.render(context, request)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  183.             for name, var in self.extra_context.items()

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in <dictcomp>
  183.             for name, var in self.extra_context.items()

File "/opt/netbox/venv/lib/python3.5/site-packages/django/template/base.py" in resolve
  698.                 new_obj = func(obj, *arg_vals)

File "/opt/netbox/netbox/utilities/templatetags/helpers.py" in get_docs
  199.     content = markdown(content, extensions=['admonition', 'fenced_code'])

File "/opt/netbox/venv/lib/python3.5/site-packages/markdown/core.py" in markdown
  387.     md = Markdown(**kwargs)

File "/opt/netbox/venv/lib/python3.5/site-packages/markdown/core.py" in __init__
  97.                                 configs=kwargs.get('extension_configs', {}))

File "/opt/netbox/venv/lib/python3.5/site-packages/markdown/core.py" in registerExtensions
  123.                 ext = self.build_extension(ext, configs.get(ext, {}))

File "/opt/netbox/venv/lib/python3.5/site-packages/markdown/core.py" in build_extension
  156.             ext = entry_points[0].load()

File "/opt/netbox/venv/lib/python3.5/site-packages/pkg_resources/__init__.py" in load
  2228.             self.require(*args, **kwargs)

File "/opt/netbox/venv/lib/python3.5/site-packages/pkg_resources/__init__.py" in require
  2245.         items = working_set.resolve(reqs, env, installer)

File "/opt/netbox/venv/lib/python3.5/site-packages/pkg_resources/__init__.py" in resolve
  834.                 raise VersionConflict(dist, req).with_context(dependent_req)

Exception Type: VersionConflict at /dcim/devices/add/
Exception Value: (setuptools 20.7.0 (/opt/netbox/venv/lib/python3.5/site-packages), Requirement.parse('setuptools>=36'))
Request information:
USER: admin

GET: No GET data

POST: No POST data
 
FILES: No FILES data 

-----

My personal view: creating a venv with top-level packages pinned, but letting the system resolve indirect dependencies based on what currently exists on the Internet at the time, is not stable enough.

"pip freeze" is what I'd use; it's the only way to be sure that the set of packages installed are the same as the set of packages the developer was using.

Example:


What version of MarkupSafe am I running? Is it the same as yours?  Depends on exactly when you installed yours, when I installed mine, and whether there was an intervening release of MarkupSafe.

Brian Candler

unread,
Mar 10, 2020, 4:51:23 PM3/10/20
to NetBox
Made it work:

echo "setuptools>=36" >local_requirements.txt
./upgrade.sh

Reply all
Reply to author
Forward
0 new messages