Nautobot is a Network Source of Truth and Network Automation Platform.

Related tags

Networkingnautobot
Overview

Nautobot

Nautobot is a Network Source of Truth and Network Automation Platform.

Nautobot was initially developed as a fork of NetBox (v2.10.4). NetBox was originally developed by Jeremy Stretch at DigitalOcean and the NetBox Community.

Nautobot runs as a web application atop the Django Python framework with a PostgreSQL database.

The complete documentation for Nautobot can be found at Read the Docs.

Questions? Comments? Start by perusing our GitHub discussions for the topic you have in mind, or join us in the #nautobot Slack channel on Network to Code!

Build Status

Branch Status
main Build Status
develop Build Status

Screenshots

Screenshot of main page


Screenshot of rack elevation


Screenshot of prefix hierarchy

Installation

Please see the documentation for instructions on installing Nautobot.

Providing Feedback

The best platform for general feedback, assistance, and other discussion is our GitHub discussions. To report a bug or request a specific feature, please open a GitHub issue using the appropriate template.

If you are interested in contributing to the development of Nautobot, please read our contributing guide prior to beginning any work.

Related projects

Please see our wiki for a list of relevant community projects.

Comments
  • Spike: Investigate GraphWrap to see if it is worth implementing

    Spike: Investigate GraphWrap to see if it is worth implementing

    Proposed Changes

    I am proposing that we perform a spike with the intent of determining whether it would be feasible and valuable to implement GraphWrap to replace our custom schema generation code in nautobot.core.graphql.

    No more than a day should be spent attempting to implement GraphWrap and to identify and assess how it compares to our current custom implementation. The outcome of this spike should be a decision and a level of effort estimation to the tactical steps required to move forward.

    Justification

    While our current implementation works for the common case there are a growing number of edge cases that we have yet to solve (See: #446, #596, #464). The GraphWrap library appears to do largely the same thing, but requires almost no code on our side "by adding only two lines of code to your django project" (according to the project documentation).

    GraphWrap is also fully tested. Ideally, it would result in us having approximately 600 fewer lines of code to maintain, but it remains to be seen whether we would still get the desired behavior we want. All the same, from a maintainability perspective, it would be better to contribute upstream to an already established project than to continue to maintain our own implementation.

    Acceptance Criteria

    • [x] Evaluate if we no longer need to restart to update schema changes
    • [x] Evaluate performance impact by switching to GraphWrap
    • [x] Evaluate maintenance difference (currently hybrid of declarative & dynamic vs entirely dynamic with GraphWrap)
    • [x] Determine any breaking schemas changes
    • [x] Evaluate licensing, currentness, and stability of GraphWrap
    • [ ] Can we add backwards compatibility to address breaking changes
    type: housekeeping 
    opened by jathanism 25
  • django.core.signing.BadSignature error on listing Git repositories

    django.core.signing.BadSignature error on listing Git repositories

    Environment

    • Python version: 3.6.8
    • Nautobot version: 1.0.1

    Steps to Reproduce

    1. Just enter extras/git-repositories/ page

    Expected Behavior

    Would give me the ability to launch the refresh

    Observed Behavior

    <class 'django.core.signing.BadSignature'>
    
    Signature "b'mG5+660ye92rJBEtyZxuorLD6A6tcRmeS7mrGCP9ayg=\n'" does not match
    
    Python version: 3.6.8
    Nautobot version: 1.0.1
    
    type: bug 
    opened by crupib 24
  • SSL error: decryption failed or bad record mac  &  SSL SYSCALL error: EOF detected

    SSL error: decryption failed or bad record mac & SSL SYSCALL error: EOF detected

    Environment

    • Python version: 3.8.5
    • Nautobot version: 1.0.0b2

    Steps to Reproduce

    1. become user nautobot
    2. Download & extract 1.0.0b2
    3. Execute install.ssh (use existing config except unicorn.py; Adapt changes in systemd service files)
    4. Start nautobot
    5. Open Nautobot WebUI and surf a bit

    This only happens after a fresh start of nautobot. The error disappears after a while until a nautobot restart.

    Expected Behavior

    no HTTP500

    Observed Behavior

    fyi: /opt/nautobot/current is a symlink to /opt/nautobot/1.0.0b2/

    Server Error
    There was a problem with your request. Please contact an administrator.
    
    The complete exception is provided below:
    
    <class 'django.db.utils.OperationalError'>
    
    SSL error: decryption failed or bad record mac
    
    Python version: 3.8.5
    Nautobot version: 1.0.0b2
    
    
    OperationalError at /plugins/device-onboarding/
    SSL error: decryption failed or bad record mac
    Request Method:	GET
    Request URL:	https://<schnipp>/plugins/device-onboarding/
    Django Version:	3.1.7
    Exception Type:	OperationalError
    Exception Value:	
    SSL error: decryption failed or bad record mac
    Exception Location:	/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py, line 84, in _execute
    Python Executable:	/usr/bin/python3.8
    Python Version:	3.8.5
    Python Path:	
    ['.',
     '',
     '/opt/nautobot/1.0.0b2/venv/bin',
     '/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/git/ext/gitdb',
     '/usr/lib/python38.zip',
     '/usr/lib/python3.8',
     '/usr/lib/python3.8/lib-dynload',
     '/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages',
     '/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/gitdb/ext/smmap']
    Server time:	Wed, 10 Mar 2021 12:34:59 +0000
    
    Environment:
    
    
    Request Method: GET
    Request URL: https://<schnipp>/plugins/device-onboarding/
    
    Django Version: 3.1.7
    Python Version: 3.8.5
    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',
     'django_filters',
     'django_tables2',
     'django_prometheus',
     'mptt',
     'rest_framework',
     'taggit',
     'timezone_field',
     'nautobot.core',
     'nautobot.circuits',
     'nautobot.dcim',
     'nautobot.ipam',
     'nautobot.extras',
     'nautobot.tenancy',
     'nautobot.users',
     'nautobot.utilities',
     'nautobot.virtualization',
     'django_rq',
     'drf_yasg',
     'graphene_django',
     'nautobot_device_onboarding.OnboardingConfig']
    Installed Middleware:
    ['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',
     'nautobot.core.middleware.ExceptionHandlingMiddleware',
     'nautobot.core.middleware.RemoteUserMiddleware',
     'nautobot.core.middleware.APIVersionMiddleware',
     'nautobot.core.middleware.ObjectChangeMiddleware',
     'django_prometheus.middleware.PrometheusAfterMiddleware']
    
    
    
    Traceback (most recent call last):
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py", line 233, in _get_session
        return self._session_cache
    
    During handling of the above exception ('SessionStore' object has no attribute '_session_cache'), another exception occurred:
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
    
    The above exception (SSL error: decryption failed or bad record mac
    ) was the direct cause of the following exception:
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
        response = get_response(request)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
        return self.dispatch(request, *args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/nautobot/utilities/views.py", line 91, in dispatch
        if not self.has_permission():
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/nautobot/utilities/views.py", line 73, in has_permission
        if user.has_perms((permission_required, *self.additional_permissions)):
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/utils/functional.py", line 240, in inner
        self._setup()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/utils/functional.py", line 376, in _setup
        self._wrapped = self._setupfunc()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/middleware.py", line 23, in <lambda>
        request.user = SimpleLazyObject(lambda: get_user(request))
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/middleware.py", line 11, in get_user
        request._cached_user = auth.get_user(request)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 174, in get_user
        user_id = _get_user_session_key(request)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 58, in _get_user_session_key
        return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py", line 65, in __getitem__
        return self._session[key]
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py", line 238, in _get_session
        self._session_cache = self.load()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/db.py", line 43, in load
        s = self._get_session_from_db()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/db.py", line 32, in _get_session_from_db
        return self.model.objects.get(
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/cacheops/query.py", line 353, in get
        return qs._no_monkey.get(qs, *args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 425, in get
        num = len(clone)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 269, in __len__
        self._fetch_all()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/cacheops/query.py", line 273, in _fetch_all
        return self._no_monkey._fetch_all(self)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 1308, in _fetch_all
        self._result_cache = list(self._iterable_class(self))
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 53, in __iter__
        results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1156, in execute_sql
        cursor.execute(sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 98, in execute
        return super().execute(sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/cacheops/transaction.py", line 93, in execute
        result = self._no_monkey.execute(self, sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 66, in execute
        return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
        return executor(sql, params, many, context)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
        raise dj_exc_value.with_traceback(traceback) from exc_value
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
    
    Exception Type: OperationalError at /plugins/device-onboarding/
    Exception Value: SSL error: decryption failed or bad record mac
    

    Seconde error:

    OperationalError at /
    SSL SYSCALL error: EOF detected
    Request Method:	GET
    Request URL:	https://<schnipp>/
    Django Version:	3.1.7
    Exception Type:	OperationalError
    Exception Value:	
    SSL SYSCALL error: EOF detected
    Exception Location:	/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py, line 84, in _execute
    Python Executable:	/usr/bin/python3.8
    Python Version:	3.8.5
    Python Path:	
    ['.',
     '',
     '/opt/nautobot/1.0.0b2/venv/bin',
     '/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/git/ext/gitdb',
     '/usr/lib/python38.zip',
     '/usr/lib/python3.8',
     '/usr/lib/python3.8/lib-dynload',
     '/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages',
     '/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/gitdb/ext/smmap']
    Server time:	Wed, 10 Mar 2021 13:06:33 +0000
    
    Environment:
    
    
    Request Method: GET
    Request URL: https://<schnipp>/
    
    Django Version: 3.1.7
    Python Version: 3.8.5
    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',
     'django_filters',
     'django_tables2',
     'django_prometheus',
     'mptt',
     'rest_framework',
     'taggit',
     'timezone_field',
     'nautobot.core',
     'nautobot.circuits',
     'nautobot.dcim',
     'nautobot.ipam',
     'nautobot.extras',
     'nautobot.tenancy',
     'nautobot.users',
     'nautobot.utilities',
     'nautobot.virtualization',
     'django_rq',
     'drf_yasg',
     'graphene_django',
     'nautobot_device_onboarding.OnboardingConfig']
    Installed Middleware:
    ['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',
     'nautobot.core.middleware.ExceptionHandlingMiddleware',
     'nautobot.core.middleware.RemoteUserMiddleware',
     'nautobot.core.middleware.APIVersionMiddleware',
     'nautobot.core.middleware.ObjectChangeMiddleware',
     'django_prometheus.middleware.PrometheusAfterMiddleware']
    
    
    
    Traceback (most recent call last):
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py", line 233, in _get_session
        return self._session_cache
    
    During handling of the above exception ('SessionStore' object has no attribute '_session_cache'), another exception occurred:
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
    
    The above exception (SSL SYSCALL error: EOF detected
    ) was the direct cause of the following exception:
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
        response = get_response(request)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
        return self.dispatch(request, *args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
        return handler(request, *args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/nautobot/core/views/__init__.py", line 45, in get
        ConsolePort.objects.restrict(request.user, "view")
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/nautobot/utilities/querysets.py", line 21, in restrict
        if user.is_superuser or permission_is_exempt(permission_required):
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/utils/functional.py", line 240, in inner
        self._setup()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/utils/functional.py", line 376, in _setup
        self._wrapped = self._setupfunc()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/middleware.py", line 23, in <lambda>
        request.user = SimpleLazyObject(lambda: get_user(request))
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/middleware.py", line 11, in get_user
        request._cached_user = auth.get_user(request)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 174, in get_user
        user_id = _get_user_session_key(request)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 58, in _get_user_session_key
        return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py", line 65, in __getitem__
        return self._session[key]
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py", line 238, in _get_session
        self._session_cache = self.load()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/db.py", line 43, in load
        s = self._get_session_from_db()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/contrib/sessions/backends/db.py", line 32, in _get_session_from_db
        return self.model.objects.get(
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/cacheops/query.py", line 353, in get
        return qs._no_monkey.get(qs, *args, **kwargs)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 425, in get
        num = len(clone)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 269, in __len__
        self._fetch_all()
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/cacheops/query.py", line 273, in _fetch_all
        return self._no_monkey._fetch_all(self)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 1308, in _fetch_all
        self._result_cache = list(self._iterable_class(self))
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/query.py", line 53, in __iter__
        results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1156, in execute_sql
        cursor.execute(sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 98, in execute
        return super().execute(sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/cacheops/transaction.py", line 93, in execute
        result = self._no_monkey.execute(self, sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 66, in execute
        return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
        return executor(sql, params, many, context)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
        raise dj_exc_value.with_traceback(traceback) from exc_value
      File "/opt/nautobot/1.0.0b2/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
    
    Exception Type: OperationalError at /
    Exception Value: SSL SYSCALL error: EOF detected
    
    type: bug type: documentation 
    opened by mkrsn 23
  • Jobs results can be very slow / unable to display due to thousands of `ensure_git_repository` calls

    Jobs results can be very slow / unable to display due to thousands of `ensure_git_repository` calls

    Environment

    • Python version: 3.10
    • Nautobot version: 1.2.8

    Steps to Reproduce

    1. Configure Git backed Jobs
    2. Call them thousand times
    3. (probably not related, but to be complete on the history: disable the Jobs provider for that Git source, add again the same Git source with another slug and enable Jobs provider)
    4. Navigate to the Extra > Job results page

    Expected Behavior

    Job results are displayed in less than a few seconds max

    Observed Behavior

    Navigation fails, reverse proxy displays 502 Bad Gateway after 60s or more time, or if there's too much trafic, the container itself is considered unhealthy and a reverse proxy like Traefik can remove it as backend, resulting in 404.

    Additional informations

    (maybe this title could be added by default to the bug template ?)

    In the container logs (of the nautobot container, not the celery_worker one), I've noticed thousands of thoses lines:

    Attaching to nautobot_nautobot_1
    nautobot_1       |   Repository successfully refreshed
    nautobot_1       | 10:56:00.816 INFO    nautobot.jobs :
    nautobot_1       |   Repository successfully refreshed
    nautobot_1       | 10:56:00.889 INFO    nautobot.jobs :
    nautobot_1       |   Repository successfully refreshed
    [..]
    

    I've noticed this in the past (https://github.com/nautobot/nautobot/issues/744) but it seemed harmless at the time; today, with way more JobResults, it's impossible for the page to display.

    The ensure_git_repository call seems to be made for each JobResult related to a Git job, maybe limited to the MAX_PAGE_SIZE count or the user page count, but I'm not sure since there's really a lot of logs.

    This can be critical, because when called multiple times, it can cause the healthcheck to fail / timeout, and it may be possible to DoS the instance this way.

    In the Docker (itself) logs, it's also possible to notice:

    # journalctl -fu docker
    Mar 17 10:47:13 my_hostname dockerd[12283]: time="2022-03-17T10:47:13.700931230+01:00" level=warning msg="Health check for container <my_container_id> error: context deadline exceeded
    [..]
    

    I tried to find where this call originate from and noted:

    ensure_git_repository
    >pull_git_repository_and_refresh_data
    >>enqueue_pull_git_repository_and_refresh_data
    >Jobs._get_job_source_paths
    >>Jobs.get_jobs
    >>>get_job_classpaths
    >>>get_job
    >>>>JobResult.related_object()
    >>>JobListView.get()
    >>>JobView.get()
    

    The path I think is problematic is JobResult.related_object() > Jobs.get_job > Jobs.get_jobs > Jobs._get_job_source_paths -> ensure_git_repository.

    Maybe Jobs.get_jobs could be cached (per request?) (to deduplicate ensure_git_repository calls)? Or maybe ensure_git_repository should not be called at all (updating list on git creation/sync only? And a beat/watcher could monitor changes for local jobs). And shouldn't ensure_git_repository run only on the celery worker?

    type: bug 
    opened by u1735067 21
  • REST API endpoint for tokens

    REST API endpoint for tokens

    Taken from: https://github.com/netbox-community/netbox/pull/6592

    author: jeremystretch [email protected]

    Fixes: #1374

    Port over patches to allow API token creation.

    type: feature 
    opened by imranh2 21
  • API: Custom Relationships API Serializer Mixin

    API: Custom Relationships API Serializer Mixin

    Environment

    • Python version: 3.7
    • Nautobot version: 1.0.0b4

    Proposed Functionality

    ~~Provide a custom relationships API serializer and attach to core models.~~ Add API serializer mixin to allow serialization of custom defined relationships.

    May make use of https://github.com/nautobot/nautobot/blob/develop/nautobot/extras/models/relationships.py#L35-L146 to find the relationships.

    Use Case

    Serialize custom relationships and be able to use in inventory sources, etc.

    Database Changes

    None

    External Dependencies

    None

    TODO:

    In this first implementation we will support only read-only. A user will continue to use the relationship associations endpoints to modify and create relationships.

    type: feature 
    opened by FragmentedPacket 21
  • Add ability to store configuration settings in the database

    Add ability to store configuration settings in the database

    Environment

    • Python version: 3.7
    • Nautobot version: 1.0

    Proposed Functionality

    Provide some amount of settings via a singleton pattern.

    Use Case

    In developing the golden config plugin, I have settings that requires only a single instance in a database. Provide a pattern for singletons with configuration. This should include core, but a pattern for plugins too.

    Database Changes

    Not directly

    External Dependencies

    It could make sense to leverage a library, such as django-solo or django-constance.

    type: feature 
    opened by itdependsnetworks 20
  • Device Cluster/HA Modeling

    Device Cluster/HA Modeling

    As ...

    Nelly - Network Engineer

    I want ...

    To model various network device clustering and high availability topologies & configuration

    So that ...

    I can easily track cluster peers, clustering type, and other high availability constraints for network devices like firewalls and router pairs.

    I know this is done when...

    • I can create device clusters depicting Active/Passive with 2 or more nodes
    • I can create device clusters depicting Active/Active with 2 or more nodes
    • The concept of the cluster is its own model which supports extensibility features like custom fields

    Optional - Feature groups this request pertains to.

    • DCIM

    Database Changes

    • A new model for clusters (will need to consider naming here with virtualization.cluster)

    External Dependencies

    None

    Specific User Stories

    As a user I would like to store/retrieve in Nautobot information to be able to deploy a Palo Alto firewall cluster. I will need to know what devices are in the cluster, the cluster's redundancy strategy, the order of which devices will be used (priority/weight).

    As a user I would like to be able to constrain a cluster type to a specific set of device types.

    As a user I would like to be prevented from changing attributes of the cluster type that would cause the current data to be invalid (example removing support for a particular device type while an existing cluster included one).

    TODO:

    • [x] #2275
    • To be defined based upon outcome of spike
    • Name: RedundancyGroup
    • Failover strategy on RedundancyGroup model (ENUM, "Active/Active", "Active/Passive")
    • FK relationship from Device to RedundancyGroup
    • Device holds priority attribute in RedundancyGroup
    type: feature type: epic 
    opened by lampwins 18
  • pynautobot reqeust error

    pynautobot reqeust error

    Environment

    • Python version: 3.6.8
    • Nautobot version: 1.0.3

    Steps to Reproduce

    When I am trying to match a tag when running a nornir script

    nb_url= 'https://test-nautobot.lab.com'
        nb_token= "hiddenhidden"
        """Nornir testing."""
        nr = InitNornir(
            inventory={
                "plugin": "NautobotInventory",
                "options": {
                    "nautobot_url": nb_url,
                    "nautobot_token": nb_token,
                    "ssl_verify": False,
                },
                "transform_function": "populate_creds",
            },
        )
    

    Expected Behavior

    to match the filtered tag

    Observed Behavior

    File "/home/test/pynet_nautobot/lib64/python3.6/site-packages/pynautobot/core/query.py", line 226, in _make_call
        raise RequestError(req)
    pynautobot.core.query.RequestError: The request failed with code 504 Gateway Time-out but more specific details were not returned in json. Check the Nautobot Logs or investigate this exception's error attribute.
    
    
    type: bug question 
    opened by nanisyako 17
  • Unable to stand up nautobot in a HA mode (one write instance & one read-only instance)

    Unable to stand up nautobot in a HA mode (one write instance & one read-only instance)

    Environment

    • Nautobot version (Docker tag too if applicable): 1.3.6
    • Python version: 3.10
    • Database platform, version: postgres
    • Middleware(s):

    Steps to Reproduce

    1. Standup nautobot using docker-compose but change the compose file so the database port is exposed
    2. Connect to the postgres database and create a read-only user and set transactions to read-only
    CREATE USER nautobot_read WITH PASSWORD 'readonly';
    GRANT CONNECT ON DATABASE nautobot TO nautobot_read;
    GRANT USAGE ON SCHEMA public TO nautobot_read;
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO nautobot_read;
    GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO nautobot_read;
    ALTER USER nautobot_read set default_transaction_read_only = on;
    
    1. Copy the docker-compose directory to another folder and change the compose file to use a different port for exposing the web interface and remove the db container and volume
    2. Change the local.env to update the DB settings so they use a DB host of the local IP on the machine and the database port that was exposed in step 1 and the DB account/password for the read user setup in Step 2.

    Expected Behavior

    I'm able to spin up a write instance and a separate read-only instance.

    The idea being that nautobot can be hosted in two different sites, one site with write the other for read, the redis cluster is synced cross-site and the database has read-only replicas in the other site.

    Observed Behavior

    The read-only instance complains it doesn't have the permissions to perform INSERT/UPDATE statements in different tables.

    nauto_read-celery_beat-1      | Traceback (most recent call last):
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
    nauto_read-celery_beat-1      |     return self.cursor.execute(sql, params)
    nauto_read-celery_beat-1      | psycopg2.errors.ReadOnlySqlTransaction: cannot execute UPDATE in a read-only transaction
    nauto_read-celery_beat-1      | 
    nauto_read-celery_beat-1      | 
    nauto_read-celery_beat-1      | The above exception was the direct cause of the following exception:
    nauto_read-celery_beat-1      | 
    nauto_read-celery_beat-1      | Traceback (most recent call last):
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 320, in update_from_dict
    nauto_read-celery_beat-1      |     entry = self.Entry.from_entry(name,
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 180, in from_entry
    nauto_read-celery_beat-1      |     name=name, defaults=cls._unpack_fields(**entry),
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 187, in _unpack_fields
    nauto_read-celery_beat-1      |     model_schedule, model_field = cls.to_model_schedule(schedule)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django_celery_beat/schedulers.py", line 172, in to_model_schedule
    nauto_read-celery_beat-1      |     model_schedule.save()
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 739, in save
    nauto_read-celery_beat-1      |     self.save_base(using=using, force_insert=force_insert,
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 776, in save_base
    nauto_read-celery_beat-1      |     updated = self._save_table(
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 858, in _save_table
    nauto_read-celery_beat-1      |     updated = self._do_update(base_qs, using, pk_val, values, update_fields,
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 912, in _do_update
    nauto_read-celery_beat-1      |     return filtered._update(values) > 0
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 802, in _update
    nauto_read-celery_beat-1      |     return query.get_compiler(self.db).execute_sql(CURSOR)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1559, in execute_sql
    nauto_read-celery_beat-1      |     cursor = super().execute_sql(result_type)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1175, in execute_sql
    nauto_read-celery_beat-1      |     cursor.execute(sql, params)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/cacheops/transaction.py", line 97, in execute
    nauto_read-celery_beat-1      |     result = self._no_monkey.execute(self, sql, params)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 66, in execute
    nauto_read-celery_beat-1      |     return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    nauto_read-celery_beat-1      |     return executor(sql, params, many, context)
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 79, in _execute
    nauto_read-celery_beat-1      |     with self.db.wrap_database_errors:
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 90, in __exit__
    nauto_read-celery_beat-1      |     raise dj_exc_value.with_traceback(traceback) from exc_value
    nauto_read-celery_beat-1      |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
    nauto_read-celery_beat-1      |     return self.cursor.execute(sql, params)
    nauto_read-celery_beat-1      | django.db.utils.InternalError: cannot execute UPDATE in a read-only transaction
    nauto_read-celery_beat-1      | 
    
    nauto_read-nautobot-1         | Traceback (most recent call last):
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 581, in get_or_create
    nauto_read-nautobot-1         |     return self.get(**kwargs), False
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/cacheops/query.py", line 351, in get
    nauto_read-nautobot-1         |     return qs._no_monkey.get(qs, *args, **kwargs)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 435, in get
    nauto_read-nautobot-1         |     raise self.model.DoesNotExist(
    nauto_read-nautobot-1         | django.contrib.contenttypes.models.ContentType.DoesNotExist: ContentType matching query does not exist.
    nauto_read-nautobot-1         | 
    nauto_read-nautobot-1         | During handling of the above exception, another exception occurred:
    nauto_read-nautobot-1         | 
    nauto_read-nautobot-1         | Traceback (most recent call last):
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
    nauto_read-nautobot-1         |     return self.cursor.execute(sql, params)
    nauto_read-nautobot-1         | psycopg2.errors.ReadOnlySqlTransaction: cannot execute INSERT in a read-only transaction
    nauto_read-nautobot-1         | 
    nauto_read-nautobot-1         | 
    nauto_read-nautobot-1         | The above exception was the direct cause of the following exception:
    nauto_read-nautobot-1         | 
    nauto_read-nautobot-1         | Traceback (most recent call last):
    nauto_read-nautobot-1         |   File "/usr/local/bin/nautobot-server", line 8, in <module>
    nauto_read-nautobot-1         |     sys.exit(main())
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/nautobot/core/cli.py", line 54, in main
    nauto_read-nautobot-1         |     run_app(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/nautobot/core/runner/runner.py", line 266, in run_app
    nauto_read-nautobot-1         |     management.execute_from_command_line([runner_name, command] + command_args)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    nauto_read-nautobot-1         |     utility.execute()
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 413, in execute
    nauto_read-nautobot-1         |     self.fetch_command(subcommand).run_from_argv(self.argv)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 354, in run_from_argv
    nauto_read-nautobot-1         |     self.execute(*args, **cmd_options)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 398, in execute
    nauto_read-nautobot-1         |     output = self.handle(*args, **options)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/nautobot/core/management/commands/post_upgrade.py", line 78, in handle
    nauto_read-nautobot-1         |     call_command(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 181, in call_command
    nauto_read-nautobot-1         |     return command.execute(*args, **defaults)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 398, in execute
    nauto_read-nautobot-1         |     output = self.handle(*args, **options)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 89, in wrapped
    nauto_read-nautobot-1         |     res = handle_func(*args, **kwargs)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 268, in handle
    nauto_read-nautobot-1         |     emit_post_migrate_signal(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/core/management/sql.py", line 42, in emit_post_migrate_signal
    nauto_read-nautobot-1         |     models.signals.post_migrate.send(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 180, in send
    nauto_read-nautobot-1         |     return [
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
    nauto_read-nautobot-1         |     (receiver, receiver(signal=self, sender=sender, **named))
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/constance/apps.py", line 28, in create_perm
    nauto_read-nautobot-1         |     content_type, created = ContentType.objects.using(using).get_or_create(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 588, in get_or_create
    nauto_read-nautobot-1         |     return self.create(**params), True
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 453, in create
    nauto_read-nautobot-1         |     obj.save(force_insert=True, using=self.db)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 739, in save
    nauto_read-nautobot-1         |     self.save_base(using=using, force_insert=force_insert,
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 776, in save_base
    nauto_read-nautobot-1         |     updated = self._save_table(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 881, in _save_table
    nauto_read-nautobot-1         |     results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 919, in _do_insert
    nauto_read-nautobot-1         |     return manager._insert(
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/manager.py", line 85, in manager_method
    nauto_read-nautobot-1         |     return getattr(self.get_queryset(), name)(*args, **kwargs)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 1270, in _insert
    nauto_read-nautobot-1         |     return query.get_compiler(using=using).execute_sql(returning_fields)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
    nauto_read-nautobot-1         |     cursor.execute(sql, params)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/cacheops/transaction.py", line 97, in execute
    nauto_read-nautobot-1         |     result = self._no_monkey.execute(self, sql, params)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 66, in execute
    nauto_read-nautobot-1         |     return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    nauto_read-nautobot-1         |     return executor(sql, params, many, context)
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 79, in _execute
    nauto_read-nautobot-1         |     with self.db.wrap_database_errors:
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 90, in __exit__
    nauto_read-nautobot-1         |     raise dj_exc_value.with_traceback(traceback) from exc_value
    nauto_read-nautobot-1         |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute
    nauto_read-nautobot-1         |     return self.cursor.execute(sql, params)
    nauto_read-nautobot-1         | django.db.utils.InternalError: cannot execute INSERT in a read-only transaction
    
    question 
    opened by gneville-ot 16
  • nautobot:1.3.10-py3.9 ---> ff1962d125a0 (v1.4.3) in GUI

    nautobot:1.3.10-py3.9 ---> ff1962d125a0 (v1.4.3) in GUI

    Environment

    • Nautobot version (Docker tag too if applicable): 1.3.10 Tag 1.3.10-py3.9
    • Python version:py3.9
    • Database platform, version: postgres PG_VERSION=14.5-1.pgdg110+1"
    • Middleware(s):

    Steps to Reproduce

    1. docker pull networktocode/nautobot:1.3.10-py3.9
    2. Update docker-compose files to reflect new image
    3. docker-compose build / up

    Expected Behavior

    Nautobot version 1.3.10 not 1.4.3

    Observed Behavior

    question 
    opened by telescope40 16
  • Path Status: Not Reachable when a port is connected to a Circuit Termination

    Path Status: Not Reachable when a port is connected to a Circuit Termination

    Environment

    • Nautobot version (Docker tag too if applicable): 1.5.6 (was the same on 1.4, 1.5.1, 1.5.5)
    • Python version: 3.9.16
    • Database platform, version: Postgres 13
    • Middleware(s):

    Steps to Reproduce

    Connection is shown incorrectly (Path Status: Not Reachable ) when connecting a port to a Circuit Termination Side A, and the Circuit Termination Side Z is connected to a Provider Network.

    1. Create new Provider - TestProvider
    2. Create new Provider Network - TestProviderNetwork bound to the TestProvider
    3. Add a new circuit type - TestCircuitType
    4. Add a new circuit - Provider: TestProvider, Circuit ID: 123456, Type: TestCircuitType, Status: Active
    5. Circuits -> 123456 -> "Termination - A Site" Add -> Site - TestSite
    6. Circuits -> 123456 -> "Termination - Z Site" Add -> TestProvider TestProviderNetwork
    7. Add a new device of some arbitrary Device role and Device type, Site: TestSite, Status: Active
    8. Device -> Add components -> Interfaces, add an interface 1/1 (doesn't really matter), Status: Active, Type: 1GE, Enabled
    9. Device -> Interfaces -> Connection - Connect - Circuit Termination
    10. Connect test-switch 1/1 to Circuit Termination - Site: TestSite, Circuit: 123456, Side: Termination A: TestSite, Status: Connected
    11. Cable UUID assigned, Path Status: Not Reachable
    12. Devices -> Cables -> the UUID - Status: Connected, Termination A and Z are correct

    Expected Behavior

    The Device's interface shows the Provider Network in the Connection

    Observed Behavior

    Connection field is empty, Path status in "Not Reachable", while "Cable trace" shows "Connected" Screenshot 2023-01-02 100632 Screenshot 2023-01-02 100702 Screenshot 2023-01-02 100729

    type: bug 
    opened by anton-wg2 0
  • Update dependency watchdog to v2.2.1 (next)

    Update dependency watchdog to v2.2.1 (next)

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | watchdog (changelog) | 2.2.0 -> 2.2.1 | age | adoption | passing | confidence |


    Release Notes

    gorakhargosh/watchdog

    v2.2.1: 2.2.1

    Compare Source

    • Enable mypy to discover type hints as specified in PEP 561 (#​933)
    • [ci] Set the expected Python version when building release files
    • [ci] Update actions versions in use
    • [watchmedo] [regression] Fix usage of missing signal.SIGHUP attribute on non-Unix OSes (#​935)

    :heart_decoration: Thanks to our beloved contributors: @​BoboTiG, @​simon04, @​piotrpdev


    Configuration

    📅 Schedule: Branch creation - "before 2am" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • Celery Beat does not update `last_run_at` field on ScheduledJob model

    Celery Beat does not update `last_run_at` field on ScheduledJob model

    Environment

    • Nautobot version (Docker tag too if applicable): v1.5.6b1
    • Python version: 3.7.15
    • Database platform, version: Postgres 13
    • Middleware(s):

    Steps to Reproduce

    1. Schedule a job for once in the future
    2. Wait for the job to run
    3. Check the ScheduledJob instance's last_run_at

    Expected Behavior

    last_run_at field set to the time that the job ran

    Observed Behavior

    last_run_at field was null

    >>> JobResult.objects.first().status
    'completed'
    >>> JobResult.objects.first().schedule
    <ScheduledJob: testsch: future>
    >>> JobResult.objects.first().schedule.last_run_at
    >>> 
    
    type: bug 
    opened by gsnider2195 1
  • Nautobot dev with react

    Nautobot dev with react

    Closes: #

    What's Changed

    Routing

    The goal of moving routing to React using a JSON-like configuration is to simplify the process of creating and defining routes.

    One reason for doing this is that not all routes need to interact with a database or API, and in those cases, it may be unnecessary to create a route in Django. By using a JSON-like configuration in React, these types of routes can be defined more easily and efficiently.

    Another benefit of using this approach is that it allows plugin developers to create custom routes in React, rather than having to define them in both Django and React. This avoids the need to maintain two separate sets of routes and simplifies the process of adding new routes.

    Finally, defining routes using this method is generally easier and more convenient than using either Django routing or React routing alone. By combining the advantages of both systems, it is possible to create a more flexible and user-friendly routing system that is better suited to a variety of different use cases.

    TODO

    • [ ] Explanation of Change(s)
    • [ ] Added change log fragment(s) (for more information see the documentation)
    • [ ] Attached Screenshots, Payload Example
    • [ ] Unit, Integration Tests
    • [ ] Documentation Updates (when adding/changing features)
    • [ ] Example Plugin Updates (when adding/changing features)
    • [ ] Outline Remaining Work, Constraints from Design
    opened by timizuoebideri1 0
  • Update Lock-file Patch Releases for Develop (develop)

    Update Lock-file Patch Releases for Develop (develop)

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | GitPython | 3.1.29 -> 3.1.30 | age | adoption | passing | confidence | | django-health-check | 3.16.5 -> 3.16.7 | age | adoption | passing | confidence |


    Release Notes

    gitpython-developers/GitPython

    v3.1.30: - with important security fixes

    Compare Source

    See https://github.com/gitpython-developers/GitPython/issues/1515 for details.

    KristianOellegaard/django-health-check

    v3.16.7

    Compare Source

    What's Changed

    Full Changelog: https://github.com/KristianOellegaard/django-health-check/compare/3.16.6...3.16.7

    v3.16.6

    Compare Source

    Version support

    • Django 2.2, 4.0, 4.1
    • Python 3.8 – 3.10

    This release mostly includes changes to the CI suite, packaging and distribution.

    What's Changed

    New Contributors

    Full Changelog: https://github.com/KristianOellegaard/django-health-check/compare/3.16.5...3.16.6


    Configuration

    📅 Schedule: Branch creation - "before 3am on Friday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • Disable persistent database connections in dev server

    Disable persistent database connections in dev server

    Environment

    • Nautobot version (Docker tag too if applicable): All
    • Python version: All
    • Database platform, version: Postgres
    • Middleware(s):

    Django docs recommend disabling persistent database connections when using the development server and this is causing connections to the database to be persisted until they're exhausted and the database refuses new connections.

    Steps to Reproduce

    From a nautobot development container:

    invoke cli
    apt update
    apt install net-tools
    while :; do echo -n "8080: "; netstat -an | grep '8080.*ESTA' | wc -l; echo -n "db: "; netstat -an | grep '5432.*ESTA' | wc -l; sleep 3; done
    

    Then from your local machine run curl "http://localhost:8080/" a few times and watch the number of database connections grow and never time out.

    Expected Behavior

    Connections time out after CONN_MAX_AGE is reached

    Observed Behavior

    Connections never time out

    type: bug 
    opened by gsnider2195 0
Releases(v1.5.6)
  • v1.5.6(Dec 26, 2022)

    Added

    • #1768 - Added the display of half-depth rack items from the rear face.
    • #2481 - Added clone_fields definition to Custom Field class.
    • #2511 - Added mouseover help text for cable connect buttons on DeviceConsolePortTable, DeviceConsoleServerPortTable, DevicePowerPortTable, DeviceInterfaceTable, DeviceFrontPortTable, DeviceRearPortTable.
    • #2951 - Added change logging when relationships are changed.
    • #2966 - Added device name to rack elevation with images.
    • #3014 - Added support for Git repositories to provide config contexts filtered by Location.
    • #3025 - Added plugin banner test back to ListObjectsViewTestCase and ensured example_plugin installation before running it.

    Changed

    • #2589 - Updated all screenshots on the README.md to gifs.
    • #2970 - Updated certifi to 2022.12.7 for CVE-2022-23491. This is a nested dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.
    • #2994 - Updated mkdocs-material to 8.5.11.
    • #2995 - Updated Poetry lockfile to use new v2 version format (requiring Poetry>=1.3).
    • #2995 - Updated included poetry version in nautobot-dev container to 1.3.1.

    Fixed

    • #2898 - Disabled sorting on Computed Field column.
    • #2967 - Fixed inverted device images in dark mode.
    • #2989 - Fixed legacy filters displaying UUIDs instead of user-friendly display names.
    • #2999 - Fixed several missing fields in the UI when bulk-adding components to a list of devices.
    • #3018 - Fixed rendering of Select2 widgets in modal dialogs.
    • #3028 - Fixed filter fields on advanced filter form not being alpha-sorted.
    • #3036 - Fixed MultiValueUUIDFilter's value input field in ObjectListView Advanced FilterSet Form.

    Contributors

    • @HanlinMiao
    • @zackt25
    • @bryanculver
    • @glennmatthews
    • @gsnider2195
    • @lschweiss

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.5...v1.5.6

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.6-py3-none-any.whl(84.83 MB)
    nautobot-1.5.6.tar.gz(84.07 MB)
  • v1.5.5(Dec 12, 2022)

    Changed

    • #2663 - Changed tags field in ConfigContextForm to DynamicModelMultipleChoiceField.

    Fixed

    • #2948 - Fixed incorrect assumption in test base that example_plugin would always be installed.
    • #2962 - Fixed an error raised when logging errors about a Secret with an invalid provider.
    • #2963 - Fixed 500 error when combining filtering on relationships with concrete fields.

    Contributors

    • @bryanculver
    • @HanlinMiao
    • @glennmatthews
    • @jathanism

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.4...v1.5.5

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.5-py3-none-any.whl(50.19 MB)
    nautobot-1.5.5.tar.gz(49.44 MB)
  • v1.5.4(Dec 2, 2022)

    Added

    • #86 - Added user-guide for relationships and S3 storage backends.

    Fixed

    • #2154 - Fixed SwaggerUI use of Authorization Token, API calls in SwaggerUI now use appropriate token pattern and curl command match the correct pattern.
    • #2931 - Fixed title and breadcrumb rendering in NautobotUIViewSet list views.
    • #2936 - Fixed NautobotUIViewSet views not being able to delete objects.

    Contributors

    • @HanlinMiao
    • @whitej6
    • @jeffkala
    • @bryanculver

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.3...v1.5.4

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.4-py3-none-any.whl(50.19 MB)
    nautobot-1.5.4.tar.gz(49.44 MB)
  • v1.5.3(Nov 29, 2022)

  • v1.5.2(Nov 28, 2022)

    Added

    • #1273 - Added section "VS Code Remote Debugging Configuration" to development chapter in documentation.
    • #2473 - Added multipart/form-data support to Job run API.
    • #2723 - Added nautobot.apps module to provide a central location for code that is recommended for use by Nautobot apps (plugins).
    • #2723 - Added code reference documentation for the nautobot.apps module.
    • #2759 - Add prometheus metrics for health check results
    • #2798 - Added LOG_DEPRECATION_WARNINGS configuration variable and corresponding environment-variable support.

    Changed

    • #2644 - Changed published accepted content types for REST API to remove unsupported types.
    • #2723 - Moved app (plugin) development documentation into its own section.
    • #2723 - Revised "plugin" development documentation to refer to "apps" instead where appropriate.
    • #2779 - Renamed many mixin classes for clarity and consistency. Aliases remain but will raise DeprecationWarning.
    • #2779 - Reorganized filterset code and created nautobot.dcim.filters.mixins, nautobot.extras.filters.mixins, and nautobot.tenancy.filters.mixins submodules.
    • #2798 - Changed logging of Nautobot deprecation warnings to be silent by default (can be enabled with DEBUG or LOG_DEPRECATION_WARNINGS settings).
    • #2814 - Update dependency netutils to ~1.3.0.
    • #2817 - Update docs to not indicate prompt, makes for better use of copy code snippet feature of MkDocs
    • #2838 - Fixed filter selection box colors in dark mode.
    • #2878 - Changed Upstream Workflow Job to continue on error for group, not each specific job.

    Fixed

    • #1519 - Extending the model table columns that need to display copy button when hovered over.
    • #2477 - Fixed last login time being updated during maintenance mode when remote user authentication is used.
    • #2744 - Enforced required Relationships when bulk editing or creating objects that have required relationships. Bulk edit via API or UI. Bulk create via API.
    • #2774 - Fixed SiteFactory time_zone attribute to use only pytz.common_timezones.
    • #2795 - Fixed changelog diff data to fall back to object_data when object_data_v2 is not present for both ObjectChange instances.
    • #2816 - Fixed issue where changing the interface mode first required removing tagged_vlans in a different request.
    • #2819 - Adds appropriate invoke task for running docs locally and adds how to run manually.
    • #2833 - Fixed plugin banner issue and breadcrumb rendering issue in NautobotHTMLRenderer.
    • #2837 - Fixed incorrect logic in nautobot.utilities.utils.is_single_choice_field that was causing valid filters to report as invalid.

    Contributors

    • @glennmatthews
    • @HanlinMiao
    • @gsnider2195
    • @jifox
    • @matt852
    • @timizuoebideri1
    • @briddo
    • @christhant
    • @bryanculver
    • @joaopsys
    • @Kircheneer
    • @jvanderaa

    New Contributors

    • @joaopsys made their first contribution in https://github.com/nautobot/nautobot/pull/2656

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.1...v1.5.2

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.2-py3-none-any.whl(48.10 MB)
    nautobot-1.5.2.tar.gz(47.36 MB)
  • v1.5.1(Nov 14, 2022)

    Added

    • #2500 - Added try/except block to catch NoReverseMatch exception in NotesSerializerMixin and return helpful message.
    • #2556 - Revised TODO/FIXME comments for more clarity.
    • #2740 - Added ObjectChangeLogView and ObjectNotesView Viewset mixins and routes.

    Changed

    • #1813 - Updated Example_Plugin to use NautobotUIViewSet.

    Fixed

    • #2470 - Fixed incorrect automatic generation of Location slugs in the UI.
    • #2757 - Fixed filters on default filter form replaces filters on dynamic filter form on submit
    • #2761 - Fixed failover strategy not being displayed on Device Redundancy Group page.
    • #2789 - Fixed web UI footer margin and swagger UI authorization box size.
    • #2824 - Fixed an issue when filtering on nested related fields for Dynamic Groups.

    Contributors

    • @glennmatthews
    • @HanlinMiao
    • @jathanism
    • @smk4664
    • @timizuoebideri1
    • @gsnider2195

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.0...v1.5.1

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.1-py3-none-any.whl(47.50 MB)
    nautobot-1.5.1.tar.gz(46.79 MB)
  • v1.5.0(Nov 8, 2022)

    Release Overview

    Added

    Custom Field Grouping (#899)

    Custom fields can now be assigned to a free-text "grouping" to improve usability when a large number of custom fields are defined on a given model. In the UI, fields in the same grouping will be grouped together, and groupings can be expanded/collapsed for display purposes.

    Device Redundancy Groups (#1892)

    Device Redundancy Groups have been added to model groups of distinct devices that perform device clustering or failover high availability functions. This may be used to model whole device redundancy strategies across devices with separate control planes (ex: ASA failover), not devices that share a control plane (ex: stackwise switch stacks), or interface specific redundancy strategies (ex: hsrp). Device Redundancy Groups support grouping an arbitrary number of devices and may be assigned an optional secrets group and one or more optional failover strategies.

    Custom Celery Task Queues (#2421)

    A new optional job property task_queues has been introduced to allow Nautobot to leverage custom celery queues for jobs. This will allow you to send jobs to specific workers based on which queue is selected. This property can be set on the job class and overridden in the job model, similar to other overridable job fields. If task_queues is not defined on the job class or job model, the job will only be able to use the default queue. A new field has been added to the job run form to allow you to select a queue when you run the job and an optional field task_queue has been added to the REST API job run endpoint for the same purpose.

    The default celery queue name has been changed from celery to default. If you have any workers or tasks hard coded to use celery you will need to update those workers/tasks or change the CELERY_TASK_DEFAULT_QUEUE setting in your nautobot_config.py.

    Added nautobot-server generate_test_data command (#2536)

    A new management command, nautobot-server generate_test_data, has been added that can be used to populate the Nautobot database with various data as a baseline for manual or automated testing. This is now used internally by Nautobot's unit testing suite to create a synthetic data set that looks and feels like real data with randomly-generated values. Most importantly, the objects are created with all of the fields fully and correctly populated, to assert that each object in the database is properly exercising all features.

    Be very cautious about running this command on your server instance. It is not intended to be used in production environments and will result in data loss.

    Nestable LocationTypes (#2608)

    LocationType definitions can now be flagged as nestable. When this flag is set, Locations of this type may nest within one another, similar to how Regions work at present. This allows you to have a variable-depth hierarchy of Locations, for example:

    • Main Campus ("Building Group" location type)
      • West Campus (Building Group)
        • Building A ("Building" location type)
        • Building B (Building)
      • East Campus (Building Group)
        • Building C (Building)
        • Building D (Building)
      • South Campus (Building Group)
        • Western South Campus (Building Group)
          • Building G (Building)
    • Satellite Campus (Building Group)
      • Building Z (Building)

    In the above example, only two LocationTypes are defined ("Building Group" and "Building") but the "Building Group" type is flagged as nestable, so one Building Group may contain another Building Group.

    Required Relationships (#873)

    Relationships can be marked as being required. By default, relationships are not marked as being required.

    To mark a relationship as being required, select "Source objects MUST implement this relationship" or conversely " Destination objects MUST implement this relationship" from the "Required on" field when editing or creating a relationship:

    • If "Destination objects MUST implement this relationship" is selected, objects of the type selected in "Destination Type" will enforce this relationship when they are created or edited.
    • If "Source objects MUST implement this relationship" is selected, objects of the type selected in "Source Type" will enforce this relationship when they are created or edited.

    Changed

    Database Query Caching is now Disabled by Default (#1721)

    In prior versions of Nautobot, database query caching using the django-cacheops application (aka Cacheops) was enabled by default. This is determined by the default value of the CACHEOPS_ENABLED setting being set to True.

    Through much trial and error we ultimately decided that this feature is more trouble than it is worth and we have begun to put more emphasis on improving performance of complex database queries over continuing to rely upon the various benefits and pitfalls of utilizing Cacheops.

    As a result, the value of this setting now defaults to False, disabling database query caching entirely for new deployments. Cacheops will be removed entirely in a future release.

    Users with existing nautobot_config.py files generated from earlier versions of Nautobot will still have CACHEOPS_ENABLED = True unless they modify or regenerate their configuration. If users no longer desire caching, please be sure to explicitly toggle the value of this setting to False and restart your Nautobot services.

    Redesigned List Filtering UI (#1998)

    Added a dynamic filter form that allows users to filter object tables/lists by any field and lookup expression combination supported by the corresponding FilterSet and API.


    v1.5.0 is unchanged from v1.5.0-beta.1

    Added

    • #270 - Added custom fields user guide to documentation.
    • #873 - Made it possible to require Relationships to be included when editing or creating the related models.
    • #899 - Added support for grouping of Custom Fields.
    • #1468 - Added relationship columns to ObjectListTableView and disabled sorting.
    • #1892 - Added DeviceRedundancyGroup model for representing a logical grouping of physical hardware for the purposes of high-availability.
    • #2063 - Added documentation and initial support for custom celery queues.
    • #2064 - Added task_queues job property to support custom celery queues.
    • #2227 - Added generating performance report options to 'invoke unittest'.
    • #2227 - Added invoke performance-test to tasks.py.
    • #2281 - Added test database fixtures for Tag and Status models.
    • #2282 - Added fixture factory for Region, Site, Location, LocationType.
    • #2283 - Added test fixture factories for Prefix and IPAddress models.
    • #2460 - Added search box filter form to generic list views.
    • #2479 - Added factory-boy as development dependency. Added factories for Tenant, TenantGroup, RIR, and Aggregate models. Updated test runner global setup to use these factories to pre-populate baseline data.
    • #2514 - Added test factories for RouteTarget, VRF, Role, VLANGroup, and VLAN models.
    • #2514 - Added OrganizationalModelFactory and PrimaryModelFactory base classes.
    • #2514 - Added TenancyFilterTestCaseMixin class.
    • #2518 - Added base_site and subtree filters to LocationFilterSet, allowing for filtering Locations by their root ancestor or its Site.
    • #2536 - Added nautobot-server generate_test_data command.
    • #2536 - Added TEST_USE_FACTORIES and TEST_FACTORY_SEED optional settings.
    • #2593 - Added StatusFactory and TagFactory classes.
    • #2594 - Added factories for DCIM DeviceRole, DeviceType, Manufacturer, and Platform.
    • #2608 - Added the option for certain LocationTypes to be nestable (similar to Regions).
    • #2617 - Added dynamic filter form support to specialized list views.
    • #2686 - Added test helper method to FilterTestCases to find values suitable for testing multiple choice filters.

    Changed

    • #1892 - Updated Device to have device_redundancy_group relationship, device_redundancy_group_priority numeric property.
    • #1892 - Updated ConfigContext to have ManyToManyField to dcim.DeviceRedundancyGroup for the purposes of applying a ConfigContext based upon a Devices DeviceRedundancyGroup membership.
    • #1983 - Updated django-taggit dependency to 3.0.0.
    • #1998 - Added DynamicFilterForm to list views.
    • #2064 - Changed default celery queue name from celery to default.
    • #2170 - Updated django-constance dependency to 2.9.1; updated Jinja2 dependency to 3.1.2; updated black development dependency to 22.8.0.
    • #2282 - Changed unittests to use Site, Region, Location, LocationType fixtures.
    • #2320 - Removed PKs from Tag test database fixture.
    • #2482 - Updated djangorestframework to ~3.14.0, drf-spectacular to 0.24.2.
    • #2483 - Updated mkdocs to 1.4.2 and mkdocs-material to 8.5.8.
    • #2484 - Updated django-debug-toolbar to ~3.7.0
    • #2551 - Updated development dependency on coverage to version 6.5.0.
    • #2562 - Updated django-mptt dependency to 0.14.0.
    • #2597 - Updated GitPython dependency from 3.1.27 to 3.1.29.
    • #2615 - Changed ConfigContextFilterForms schema filter form field to support added filter field on ConfigContextFilterSet.
    • #2615 - Changed BaseNetworkQuerySet and IPAddressQuerySet to search both IPv6 and IPv4 when given search string is ambiguous.
    • #2615 - Changed test_slug_not_modified to ensure no collision on new slug source value as well as changing lookup expression from __contains to __exact.
    • #2615 - Changed DeleteObjectViewTestCase.get_deletable_object to throw a helpful failure message when deletable object not found.
    • #2645 - Updated psycopg2-binary dependency from 2.9.3 to 2.9.5.
    • #2710 - Updated pyuwsgi minimum version from 2.0.20 to 2.0.21.
    • #2711 - Updated Pillow package dependency from 9.2.0 to 9.3.0.
    • #2746 - Changed LocationType test case to not attempt to re-parent a LocationType with descendant Locations.

    Fixed

    • #192 - Eliminated Unit Test noisy output.
    • #2266 - Fixed navbar floating over main viewport scrollbar.
    • #2388 - Return "—" instead of "None" when relationship column is empty.
    • #2536 - Made use of test factories optional when using Nautobot test runner.
    • #2555 - Fixed broken accordion for Job list view.
    • #2615 - Fixed ConfigContextFilterSet missing schema filter but existed on form.
    • #2615 - Fixed Device(Form)TestCase flaky test setup possibly not finding a DeviceType with a Manufacturer with associated Platforms that is full depth and 1U height.
    • #2615 - Fixed Location(View)TestCase, RouteTarget(View)TestCase flaky test setup possibly finding names for csv_data that might include commas but not escaped.
    • #2615 - Fixed PrefixFactory may randomly decide to create a child of 2.2.2.2/32.
    • #2615 - Fixed BaseNetworkQuerySet and IPAddressQuerySet only searching non-abbreviated first hextet IPv6 addresses.
    • #2615 - Fixed DynamicFilterLookupExpressionTest, VirtualChassis(Filter)TestCase, Cluster(Filter)TestCase, VirtualMachine(Filter)TestCase had too narrow of a region lookup for supported tests.
    • #2615 - Fixed RackGroup(Model)Test, Prefix(Model)Test, VLANGroup(Model)Test may randomly choose to update to the same site.
    • #2615 - Fixed Tenant(View)TestCase, RIR(View)TestCase may not find deletable objects.
    • #2615 - Fixed VLAN(View)TestCase may not find enough Sites with Locations.
    • #2691 - Fixed hard coded tests that were failing after factory fixtures were integrated.
    • #2746 - Fixed Site latitude, longitude clean method for when valid string value entered.

    Removed

    • #2593 - Removed static test fixtures since we're using factories now instead.

    Contributors

    • @glennmatthews
    • @HanlinMiao
    • @gsnider2195
    • @jathanism
    • @timizuoebideri1
    • @bryanculver
    • @briddo

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.10...v1.5.0

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.0-py3-none-any.whl(47.49 MB)
    nautobot-1.5.0.tar.gz(46.79 MB)
  • v1.5.0-beta.1(Nov 7, 2022)

    Release Overview

    Added

    Custom Field Grouping (#899)

    Custom fields can now be assigned to a free-text "grouping" to improve usability when a large number of custom fields are defined on a given model. In the UI, fields in the same grouping will be grouped together, and groupings can be expanded/collapsed for display purposes.

    Device Redundancy Groups (#1892)

    Device Redundancy Groups have been added to model groups of distinct devices that perform device clustering or failover high availability functions. This may be used to model whole device redundancy strategies across devices with separate control planes (ex: ASA failover), not devices that share a control plane (ex: stackwise switch stacks), or interface specific redundancy strategies (ex: hsrp). Device Redundancy Groups support grouping an arbitrary number of devices and may be assigned an optional secrets group and one or more optional failover strategies.

    Custom Celery Task Queues (#2421)

    A new optional job property task_queues has been introduced to allow Nautobot to leverage custom celery queues for jobs. This will allow you to send jobs to specific workers based on which queue is selected. This property can be set on the job class and overridden in the job model, similar to other overridable job fields. If task_queues is not defined on the job class or job model, the job will only be able to use the default queue. A new field has been added to the job run form to allow you to select a queue when you run the job and an optional field task_queue has been added to the REST API job run endpoint for the same purpose.

    The default celery queue name has been changed from celery to default. If you have any workers or tasks hard coded to use celery you will need to update those workers/tasks or change the CELERY_TASK_DEFAULT_QUEUE setting in your nautobot_config.py.

    Added nautobot-server generate_test_data command (#2536)

    A new management command, nautobot-server generate_test_data, has been added that can be used to populate the Nautobot database with various data as a baseline for manual or automated testing. This is now used internally by Nautobot's unit testing suite to create a synthetic data set that looks and feels like real data with randomly-generated values. Most importantly, the objects are created with all of the fields fully and correctly populated, to assert that each object in the database is properly exercising all features.

    Be very cautious about running this command on your server instance. It is not intended to be used in production environments and will result in data loss.

    Nestable LocationTypes (#2608)

    LocationType definitions can now be flagged as nestable. When this flag is set, Locations of this type may nest within one another, similar to how Regions work at present. This allows you to have a variable-depth hierarchy of Locations, for example:

    • Main Campus ("Building Group" location type)
      • West Campus (Building Group)
        • Building A ("Building" location type)
        • Building B (Building)
      • East Campus (Building Group)
        • Building C (Building)
        • Building D (Building)
      • South Campus (Building Group)
        • Western South Campus (Building Group)
          • Building G (Building)
    • Satellite Campus (Building Group)
      • Building Z (Building)

    In the above example, only two LocationTypes are defined ("Building Group" and "Building") but the "Building Group" type is flagged as nestable, so one Building Group may contain another Building Group.

    Required Relationships (#873)

    Relationships can be marked as being required. By default, relationships are not marked as being required.

    To mark a relationship as being required, select "Source objects MUST implement this relationship" or conversely " Destination objects MUST implement this relationship" from the "Required on" field when editing or creating a relationship:

    • If "Destination objects MUST implement this relationship" is selected, objects of the type selected in "Destination Type" will enforce this relationship when they are created or edited.
    • If "Source objects MUST implement this relationship" is selected, objects of the type selected in "Source Type" will enforce this relationship when they are created or edited.

    Changed

    Database Query Caching is now Disabled by Default (#1721)

    In prior versions of Nautobot, database query caching using the django-cacheops application (aka Cacheops) was enabled by default. This is determined by the default value of the CACHEOPS_ENABLED setting being set to True.

    Through much trial and error we ultimately decided that this feature is more trouble than it is worth and we have begun to put more emphasis on improving performance of complex database queries over continuing to rely upon the various benefits and pitfalls of utilizing Cacheops.

    As a result, the value of this setting now defaults to False, disabling database query caching entirely for new deployments. Cacheops will be removed entirely in a future release.

    Users with existing nautobot_config.py files generated from earlier versions of Nautobot will still have CACHEOPS_ENABLED = True unless they modify or regenerate their configuration. If users no longer desire caching, please be sure to explicitly toggle the value of this setting to False and restart your Nautobot services.

    Redesigned List Filtering UI (#1998)

    Added a dynamic filter form that allows users to filter object tables/lists by any field and lookup expression combination supported by the corresponding FilterSet and API.


    v1.5.0-beta.1

    Added

    • #270 - Added custom fields user guide to documentation.
    • #873 - Made it possible to require Relationships to be included when editing or creating the related models.
    • #899 - Added support for grouping of Custom Fields.
    • #1468 - Added relationship columns to ObjectListTableView and disabled sorting.
    • #1892 - Added DeviceRedundancyGroup model for representing a logical grouping of physical hardware for the purposes of high-availability.
    • #2063 - Added documentation and initial support for custom celery queues.
    • #2064 - Added task_queues job property to support custom celery queues.
    • #2227 - Added generating performance report options to 'invoke unittest'.
    • #2227 - Added invoke performance-test to tasks.py.
    • #2281 - Added test database fixtures for Tag and Status models.
    • #2282 - Added fixture factory for Region, Site, Location, LocationType.
    • #2283 - Added test fixture factories for Prefix and IPAddress models.
    • #2460 - Added search box filter form to generic list views.
    • #2479 - Added factory-boy as development dependency. Added factories for Tenant, TenantGroup, RIR, and Aggregate models. Updated test runner global setup to use these factories to pre-populate baseline data.
    • #2514 - Added test factories for RouteTarget, VRF, Role, VLANGroup, and VLAN models.
    • #2514 - Added OrganizationalModelFactory and PrimaryModelFactory base classes.
    • #2514 - Added TenancyFilterTestCaseMixin class.
    • #2518 - Added base_site and subtree filters to LocationFilterSet, allowing for filtering Locations by their root ancestor or its Site.
    • #2536 - Added nautobot-server generate_test_data command.
    • #2536 - Added TEST_USE_FACTORIES and TEST_FACTORY_SEED optional settings.
    • #2593 - Added StatusFactory and TagFactory classes.
    • #2594 - Added factories for DCIM DeviceRole, DeviceType, Manufacturer, and Platform.
    • #2608 - Added the option for certain LocationTypes to be nestable (similar to Regions).
    • #2617 - Added dynamic filter form support to specialized list views.
    • #2686 - Added test helper method to FilterTestCases to find values suitable for testing multiple choice filters.

    Changed

    • #1892 - Updated Device to have device_redundancy_group relationship, device_redundancy_group_priority numeric property.
    • #1892 - Updated ConfigContext to have ManyToManyField to dcim.DeviceRedundancyGroup for the purposes of applying a ConfigContext based upon a Devices DeviceRedundancyGroup membership.
    • #1983 - Updated django-taggit dependency to 3.0.0.
    • #1998 - Added DynamicFilterForm to list views.
    • #2064 - Changed default celery queue name from celery to default.
    • #2170 - Updated django-constance dependency to 2.9.1; updated Jinja2 dependency to 3.1.2; updated black development dependency to 22.8.0.
    • #2282 - Changed unittests to use Site, Region, Location, LocationType fixtures.
    • #2320 - Removed PKs from Tag test database fixture.
    • #2482 - Updated djangorestframework to ~3.14.0, drf-spectacular to 0.24.2.
    • #2483 - Updated mkdocs to 1.4.2 and mkdocs-material to 8.5.8.
    • #2484 - Updated django-debug-toolbar to ~3.7.0
    • #2551 - Updated development dependency on coverage to version 6.5.0.
    • #2562 - Updated django-mptt dependency to 0.14.0.
    • #2597 - Updated GitPython dependency from 3.1.27 to 3.1.29.
    • #2615 - Changed ConfigContextFilterForms schema filter form field to support added filter field on ConfigContextFilterSet.
    • #2615 - Changed BaseNetworkQuerySet and IPAddressQuerySet to search both IPv6 and IPv4 when given search string is ambiguous.
    • #2615 - Changed test_slug_not_modified to ensure no collision on new slug source value as well as changing lookup expression from __contains to __exact.
    • #2615 - Changed DeleteObjectViewTestCase.get_deletable_object to throw a helpful failure message when deletable object not found.
    • #2645 - Updated psycopg2-binary dependency from 2.9.3 to 2.9.5.
    • #2710 - Updated pyuwsgi minimum version from 2.0.20 to 2.0.21.
    • #2711 - Updated Pillow package dependency from 9.2.0 to 9.3.0.
    • #2746 - Changed LocationType test case to not attempt to re-parent a LocationType with descendant Locations.

    Fixed

    • #192 - Eliminated Unit Test noisy output.
    • #2266 - Fixed navbar floating over main viewport scrollbar.
    • #2388 - Return "—" instead of "None" when relationship column is empty.
    • #2536 - Made use of test factories optional when using Nautobot test runner.
    • #2555 - Fixed broken accordion for Job list view.
    • #2615 - Fixed ConfigContextFilterSet missing schema filter but existed on form.
    • #2615 - Fixed Device(Form)TestCase flaky test setup possibly not finding a DeviceType with a Manufacturer with associated Platforms that is full depth and 1U height.
    • #2615 - Fixed Location(View)TestCase, RouteTarget(View)TestCase flaky test setup possibly finding names for csv_data that might include commas but not escaped.
    • #2615 - Fixed PrefixFactory may randomly decide to create a child of 2.2.2.2/32.
    • #2615 - Fixed BaseNetworkQuerySet and IPAddressQuerySet only searching non-abbreviated first hextet IPv6 addresses.
    • #2615 - Fixed DynamicFilterLookupExpressionTest, VirtualChassis(Filter)TestCase, Cluster(Filter)TestCase, VirtualMachine(Filter)TestCase had too narrow of a region lookup for supported tests.
    • #2615 - Fixed RackGroup(Model)Test, Prefix(Model)Test, VLANGroup(Model)Test may randomly choose to update to the same site.
    • #2615 - Fixed Tenant(View)TestCase, RIR(View)TestCase may not find deletable objects.
    • #2615 - Fixed VLAN(View)TestCase may not find enough Sites with Locations.
    • #2691 - Fixed hard coded tests that were failing after factory fixtures were integrated.
    • #2746 - Fixed Site latitude, longitude clean method for when valid string value entered.

    Removed

    • #2593 - Removed static test fixtures since we're using factories now instead.

    Contributors

    • @glennmatthews
    • @HanlinMiao
    • @gsnider2195
    • @jathanism
    • @timizuoebideri1
    • @bryanculver
    • @briddo

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.10...v1.5.0-beta.1

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.5.0b1-py3-none-any.whl(47.49 MB)
    nautobot-1.5.0b1.tar.gz(46.79 MB)
  • v1.4.10(Nov 7, 2022)

  • v1.4.9(Nov 4, 2022)

    Added

    • #1720 - Added NullableDateField to enable Date Type CustomField to filter on null value.
    • #2685 - Added watchdog dev-dependency explicitly.
    • #2685 - Added watchmedo command to worker container to allow container to restart on file change and documented.

    Changed

    • #2658 - Updated plugin development documentation to introduce NautobotUIViewSet as the first approach for the Adding Web UI Views section.
    • #2669 - Blocked changing the parent of a LocationType when it already has Locations using it.
    • #2671 - Changed the published nautobot-dev images to use the same default nautobot_config.py as the published nautobot images, instead of using the Nautobot core development nautobot_config.py file.
    • #2671 - Renamed development/docker-compose.build.yml to development/docker-compose.final.yml to better reflect its meaning.
    • #2671 - Changed the image labels used in the docker-compose development workflow to reduce ambiguity.

    Fixed

    • #2406 - Fixed missing HTML element ID for hyperlinks.
    • #2419 - Fixed the null device interface status when a device is created with a device_role associated to an InterfaceTemplate.
    • #2552 - Updated CSS to better account for footer resizing.
    • #2601 - Fixed an issue where a Git repository could provide Jobs even if not marked as a provider of Jobs.
    • #2682 - Fixed test failing when version number contains alpha characters.
    • #2683 - Fixed so that unauthenticated users don't see the version number for Nautobot in the footer.
    • #2684 - Fixed "The results could not be loaded" when filtering ContentTypes in the UI.
    • #2688 - Fixed exception not raised when the interface contains a tagged vlan but mode is not set to tagged.
    • #2702 - Fixed NautobotUIViewSet BulkCreateViewMixin validation error handling and .csv file import issue.
    • #2706 - Fixed a ValidationError that could occur when specifying Site latitude/longitude as a float.
    • #2712 - Updated docs links to include the /projects/core in the url path to link correctly.
    • #2717 - Fixed backwards-compatibility with changes made to TreeNodeMultipleChoiceFilter.
    • #2733 - Fixed bug in run_job_for_testing when no request is provided.
    • #2736 - Fixed incorrect site_url setting for MkDocs.

    Contributors

    • @Jonher937
    • @david-kn
    • @gsnider2195
    • @itdependsnetworks
    • @timizuoebideri1
    • @glennmatthews
    • @jathanism
    • @HanlinMiao
    • @michizhou
    • @whitej6

    New Contributors

    • @Jonher937 made their first contribution in https://github.com/nautobot/nautobot/pull/2683
    • @david-kn made their first contribution in https://github.com/nautobot/nautobot/pull/2626
    • @michizhou made their first contribution in https://github.com/nautobot/nautobot/pull/2696

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.8...v1.4.9

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.9-py3-none-any.whl(47.17 MB)
    nautobot-1.4.9.tar.gz(46.48 MB)
  • v1.4.8(Nov 1, 2022)

    Added

    • #2086 - Added JobResult export feature.
    • #2578 - Added support for the documented environment variables in Nautobot's base settings.py, so that they will be recognized even when using a minimal nautobot_config.py or one that was not generated by nautobot-server init.
    • #2578 - Added documentation of more configuration options in the configuration that is generated by nautobot-server init.
    • #2578 - Added a warning in the documentation about django-cryptography and changing SECRET_KEY.
    • #2590 - Added unit tests for bulk-editing and bulk-deleting all instances of a model.
    • #2619 - Added notes about restarting the Nautobot server after creating relationships, custom fields, and computed fields to show them in GraphQL.
    • #2675 - Added the ability to configure Redis Unix socket connections.
    • #2681 - Added multiple assert failure messages to UpdateObjectViewTestCase.

    Changed

    • #2578 - Updated defaults in settings.py to more closely align to the documentation. If you're using a configuration file generated by nautobot-server init, these changes should have no impact, but if you have a manually crafted configuration file, please verify that the configuration of your system is still as expected after upgrading, with a particular focus on the database configuration, SECRET_KEY, and LOGGING.
    • #2578 - Changed the default LOGGING configuration for virtualenv installs to be the same as it is for Nautobot's published Docker images.
    • #2578 - Revised the template for new configurations generated by nautobot-server init to have less redundancy with Nautobot's built-in settings.py.
    • #2585 - Updated dependency django-health-check from 3.16.5 to 3.16.7.
    • #2585 - Updated dependency psycopg2-binary from 2.9.3 to 2.9.4.
    • #2585 - Updated development dependency coverage from 6.4.2 to 6.4.4.
    • #2585 - Updated development dependency invoke from 1.7.1 to 1.7.3.
    • #2585 - Updated development dependency mkdocs-material from 8.4.2 to 8.4.4.
    • #2591 - Updated README.md to include additional information about the Nautobot project.

    Fixed

    • #2099 - Fixed PowerFeed Utilization on Rack View not displaying correctly.
    • #2099 - Fixed Total Power Utilization on Rack View not taking into account direct-connected devices.
    • #2099 - Fixed created_updated template adding the end small tag twice.
    • #2146 - Added signals to log when a user logs in and logs out to fix a bug where SSO logins were not being logged.
    • #2426 - Fixed weekly scheduled job executing a day early.
    • #2489 - Fixed custom field regex validation always anchored to beginning of string.
    • #2494 - Fixed custom field regex validation not being enforced on URL custom fields.
    • #2513 - Fixed an issue with DynamicGroup not properly filtering by Region or Location.
    • #2578 - Fixed issue where the documented environment variables for various configuration settings would not be supported if using a minimal nautobot_config.py that was not generated from nautobot-server init.
    • #2632 - Fixed incorrect link from Circuit Type detail view to filtered Circuits table.
    • #2652 - Fixed the issue with Job ObjectChange and Notes not displaying the page header.
    • #2655 - Fixed error when selecting a "related path" from the Cable Trace view.
    • #2661 - Fixed default tagging of Docker images built with invoke buildx.
    • #2677 - Fixed a documentation error by adding an import statement to a code example in nautobot/docs/plugins/development.md.
    • #2690 - Fixed test settings to disable logging when running tests.
    • #2693 - Fixed filtering by tree node objects in nested Dynamic Groups.

    Security

    • #2651 - Updated Django minimum version to 3.2.16 due to CVE-2022-41323.

    Contributors

    • @glennmatthews
    • @HanlinMiao
    • @timizuoebideri1
    • @jathanism
    • @Dav-C
    • @gsnider2195
    • @jake2184
    • @Kircheneer
    • @smk4664
    • @itdependsnetworks
    • @qduk
    • @Santhusha-bit

    New Contributors

    • @Dav-C made their first contribution in https://github.com/nautobot/nautobot/pull/2678
    • @jake2184 made their first contribution in https://github.com/nautobot/nautobot/pull/2676
    • @qduk made their first contribution in https://github.com/nautobot/nautobot/pull/2643
    • @Santhusha-bit made their first contribution in https://github.com/nautobot/nautobot/pull/2599

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.7...v1.4.8

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.8-py3-none-any.whl(47.16 MB)
    nautobot-1.4.8.tar.gz(46.47 MB)
  • v1.4.7(Oct 18, 2022)

    ℹ️ NOTE: This release is functionally identical to v1.4.6, just fixing the advertised version.

    Fixed

    • #2636 - Fixed pyproject.toml to be a proper full release.

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.6...v1.4.7


    v1.4.6 Changelog for those that might have missed it.

    Added

    • #2437 - Added Nautobot-themed error page for handling 403 CSRF errors.
    • #2512 - Added link to nautobot-plugin-nornir in the Apps section of the documentation.
    • #2588 - Added a danger admonition to developer docs about never using pip to install Poetry into Nautobot dev environment.

    Changed

    • #2434 - Updated oauthlib to 3.2.1 for CVE-2022-36087. This is a dependency of social-auth-core so will not auto-update when upgrading. Please be sure to upgrade your local environment.
    • #2530 - Updated development documentation to include LTM, additional release schedule information.
    • #2565 - Updated version to 1.4.6-beta.1.
    • #2602 - Increased size of ObjectChange.change_context_detail field from 100 to 400 chars, and add truncation to it. Also adding truncation to ObjectChange.object_repr.

    Fixed

    • #2075 - Fixed white screen flash in dark mode.
    • #2546 - Applied a hotfix for multiple jobs executing from a single scheduled job.
    • #2560 - Fixed NautobotHTMLRenderer incorrectly overrides selected pk_list for bulk_destroy and bulk_update.
    • #2566 - Clarified documentation on superusers needing staff permission to access admin UI.
    • #2573 - Fixed link from VLAN group detail view to filtered VLAN list.
    • #2574 - Updated nautobot.core.settings to match expected behavior on NAPALM_USERNAME, NAPALM_PASSWORD, and NAPALM_TIMEOUT based on documentation.
    • #2595 - Fixed NautobotUIViewSet handling of unauthenticated users.
    • #2614 - Fixed CONTRIBUTING.md link to actual Nautobot documentation.

    Contributors

    • @HanlinMiao
    • @jathanism
    • @cmsirbu
    • @matt852
    • @whitej6
    • @johannwagner
    • @scetron
    • @chadell
    • @glennmatthews

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.5...v1.4.7

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.7-py3-none-any.whl(47.15 MB)
    nautobot-1.4.7.tar.gz(46.46 MB)
  • v1.4.6(Oct 17, 2022)

    Added

    • #2437 - Added Nautobot-themed error page for handling 403 CSRF errors.
    • #2512 - Added link to nautobot-plugin-nornir in the Apps section of the documentation.
    • #2588 - Added a danger admonition to developer docs about never using pip to install Poetry into Nautobot dev environment.

    Changed

    • #2434 - Updated oauthlib to 3.2.1 for CVE-2022-36087. This is a dependency of social-auth-core so will not auto-update when upgrading. Please be sure to upgrade your local environment.
    • #2530 - Updated development documentation to include LTM, additional release schedule information.
    • #2565 - Updated version to 1.4.6-beta.1.
    • #2602 - Increased size of ObjectChange.change_context_detail field from 100 to 400 chars, and add truncation to it. Also adding truncation to ObjectChange.object_repr.

    Fixed

    • #2075 - Fixed white screen flash in dark mode.
    • #2546 - Applied a hotfix for multiple jobs executing from a single scheduled job.
    • #2560 - Fixed NautobotHTMLRenderer incorrectly overrides selected pk_list for bulk_destroy and bulk_update.
    • #2566 - Clarified documentation on superusers needing staff permission to access admin UI.
    • #2573 - Fixed link from VLAN group detail view to filtered VLAN list.
    • #2574 - Updated nautobot.core.settings to match expected behavior on NAPALM_USERNAME, NAPALM_PASSWORD, and NAPALM_TIMEOUT based on documentation.
    • #2595 - Fixed NautobotUIViewSet handling of unauthenticated users.
    • #2614 - Fixed CONTRIBUTING.md link to actual Nautobot documentation.

    Contributors

    • @HanlinMiao
    • @jathanism
    • @cmsirbu
    • @matt852
    • @whitej6
    • @johannwagner
    • @scetron
    • @chadell
    • @glennmatthews

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.5...v1.4.6

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.6b1-py3-none-any.whl(47.15 MB)
    nautobot-1.4.6b1.tar.gz(46.46 MB)
  • v1.4.5(Oct 4, 2022)

    Added

    • #2330 - Added created and last_updated fields to Device Component and ComponentTemplate models.

    Changed

    • #2490 - Added change log fragment checkbox to Github pull request template.
    • #2508 - Updated dark mode theme to be less...dark.
    • #2537 - Updated django-extensions to 3.2.1, drf-spectacular to 0.24.2, drf-yasg to 1.21.4.
    • #2544 - Updated towncrier template to convert multi-line change fragments into multiple release notes entries.

    Fixed

    • #2326 - Fixed 500 error in Circuit Termination swap.
    • #2330 - Fixed missing Change Log tab on device component detail views.
    • #2445 - Fixed invalid Renovate config.
    • #2466 - Fixed Jobs misleading sensitive variables or requiring approval error message.
    • #2509 - Fixed template lookup logic in ObjectNotesView, ObjectDynamicGroupsView and ObjectChangeLogView.
    • #2526 - Fixed error in rendering the example plugin's AnotherExampleModel list view by adding a get_absolute_url() method to the AnotherExampleModel class and adding an AnotherExampleModel detail view template.
    • #2533 - Fixed test_list_objects_unknown_filter_no_strict_filtering failure if a filterset couldn't be found for a given model.
    • #2539 - Updated links from nautobot.readthedocs.io to docs.nautobot.com.

    Contributors

    • @jathanism
    • @HanlinMiao
    • @itdependsnetworks
    • @timizuoebideri1
    • @Kircheneer
    • @matt852
    • @gsnider2195

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.4...v1.4.5

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.5-py3-none-any.whl(46.69 MB)
    nautobot-1.4.5.tar.gz(46.01 MB)
  • v1.4.4(Sep 27, 2022)

    Added

    • #2023 - Added reusable GitHub Action workflow for use by plugins to test against next, develop routinely.

    Changed

    • #2153 - Updated optional settings documentation to provide clarity on Nautobot vs Django settings.
    • #2235 - Added ancestor information to Location and LocationType display names to provide additional context in the UI.
    • #2457 - Moved towncrier_template.j2 from root to develop directory.
    • #2468 - Upgraded CI gh-action-setup-poetry-environment action to v3

    Fixed

    • #2353 - Fixed MultiSelect CustomField being emptied unintentionally after bulk update.
    • #2375 - Fixed error in Cable list view filtering when color and type filters are not set.
    • #2461 - Fixed an exception during OpenAPI schema generation when certain Nautobot apps (including nautobot-firewall-models) were installed.
    • #2496 - Fixed failing CI due to #2468

    Contributors

    • @glennmatthews
    • @gsnider2195
    • @christhant
    • @HanlinMiao
    • @itdependsnetworks
    • @nniehoff
    • @bryanculver

    New Contributors

    • @christhant made their first contribution in https://github.com/nautobot/nautobot/pull/2359

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.3...v1.4.4

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.4-py3-none-any.whl(46.68 MB)
    nautobot-1.4.4.tar.gz(46.00 MB)
  • v1.4.3(Sep 20, 2022)

    Added

    • #2327 - Added help text to the Job scheduling datetime picker to indicate the applicable time zone.
    • #2362 - Added documentation and automation for Nautobot Github project to use towncrier for changelog fragments.
    • #2431 - Add section to the custom field documentation on ORM filtering.

    Changed

    • #1619 - Updated drf-spectacular dependency to version 0.24.
    • #2223 - Augment get_route_for_model() to support REST API routes.
    • #2340 - Improved rendering of badges, labels, buttons, and color selection menus in dark mode.
    • #2383 - Updated documentation link for Nautobot ChatOps plugin.
    • #2392 - Un-group Renovate next updates to address code changes per package.
    • #2400 - Improved formatting of version changes in the documentation.
    • #2417 - Reworked Docker builds in CI to publish an intermediate "dependencies-only" image to speed up rebuild times.
    • #2447 - Moved Dynamic Groups tab on object detail view to it's own view as a generic ObjectDynamicGroupsView.

    Fixed

    • #138 - Fixed lack of user-facing message when an exception occurs while discovering Jobs from a Git repository.
    • #950 - Fixed database concurrency issues with uWSGI pre-forking.
    • #1619 - Improved accuracy of OpenAPI schema for bulk REST API operations.
    • #2299 - Remove render_filter() method and filter field from table columns
    • #2309 - Fixed 404 on ScheduledJobView, job_class no longer found behavior.
    • #2324 - Fixed errors encountered when a job model is deleted while a job is running.
    • #2338 - Fixed whitespace issue with Text File secrets and they are now stripped of leading/trailing whitespace and newlines.
    • #2364 - Allow invoke tasks to be run even if rich is not installed.
    • #2378 - Fix Job Result redirection on submit.
    • #2382 - Removed extraneous cache and temporary files from the dev and final-dev Docker images to reduce image size.
    • #2389 - Removed extraneous inspect.getsource() call from Job class.
    • #2407 - Corrected SSO Backend reference for Azure AD Tenant.
    • #2449 - CI: Moved dependency build to be a job, not a step.

    Contributors

    • @HanlinMiao
    • @Kircheneer
    • @abates
    • @bryanculver
    • @glennmatthews
    • @gsnider2195
    • @jathanism
    • @smk4664
    • @timizuoebideri1
    • @whitej6

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.2...v1.4.3

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.3-py3-none-any.whl(46.68 MB)
    nautobot-1.4.3.tar.gz(45.99 MB)
  • v1.4.2(Sep 5, 2022)

    Added

    • #983 - Added functionalities to specify args and kwargs to NavMenuItem.
    • #2250 - Added "Stats" and "Rack Groups" to Location detail view, added "Locations" to Site detail view.
    • #2273 - Added custom markdownlint rule to check for invalid relative links in the documentation.
    • #2307 - Added dynamic_groups field in GraphQL on objects that can belong to dynamic groups.
    • #2314 - Added pylint to linting suite and CI.
    • #2339 - Enabled and addressed additional pylint checkers.
    • #2360 - Added Django natural key to extras.Tag.

    Changed

    • #2011 - replaced all .format() strings and C format strings with fstrings.
    • #2293 - Updated GitHub bug report template.
    • #2296 - Updated netutils dependency from 1.1.x to 1.2.x.
    • #2347 - Revamped documentation look and feel.
    • #2349 - Docker images are now built with Poetry 1.2.0.
    • #2360 - Django natural key for Status is now name rather than slug.
    • #2363 - Update app icons for consistency
    • #2365 - Update Network to Code branding name
    • #2367 - Remove coming soon from projects that exists

    Fixed

    • #449 - Improved error checking and reporting when syncing Git repositories.
    • #1227 - The NAUTOBOT_DOCKER_SKIP_INIT environment variable can now be set to "false" (case-insensitive),
    • #1807 - Fixed post_run method fails to add exceptions to job log.
    • #2085 - The log entries table on a job result page can now be filtered by log level or message and hitting the return key has no effect.
    • #2107 - Fixed a TypeError when a view defines action_buttons = None.
    • #2237 - Fixed several issues with permissions enforcement for Note creation and viewing.
    • #2268 - Fixed broken links in documentation.
    • #2269 - Fixed missing JS code causing rendering errors on GraphQL Query and Rack Reservation detail views.
    • #2278 - Fixed incorrect permissions check on "Installed Plugins" menu item.
    • #2290 - Fixed inheritance of ObjectListViewMixin for CircuitTypeUIViewSet.
    • #2311 - Fixed autopopulation of "Parent" selection when editing an existing Location.
    • #2341 - Fixed omission of docs from published Python packages.
    • #2342 - Reduced file size of nautobot-dev Docker images by clearing Poetry cache
    • #2350 - Fixed potential Redis deadlock if Nautobot server restarts at an unfortunate time.

    Contributors

    • @HanlinMiao
    • @gsnider2195
    • @glennmatthews
    • @whitej6
    • @jvanderaa
    • @smk4664
    • @briddo
    • @Kircheneer
    • @cmsirbu
    • @itdependsnetworks

    New Contributors

    • @cmsirbu made their first contribution in https://github.com/nautobot/nautobot/pull/2347

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.1...v1.4.2

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.2-py3-none-any.whl(46.66 MB)
    nautobot-1.4.2.tar.gz(45.98 MB)
  • v1.4.1(Aug 22, 2022)

    Added

    • #1809 - Added Django natural key to extras.Status to simplify exporting and importing of database dumps for Status objects.
    • #2202 - Added validate_models management command to validate each instance in the database.
    • #2213 - Added a new --pull parameter for invoke build to tell Docker to pull images when building containers.

    Changed

    • #2206 - Changed Run button on Job Result to always be displayed, "Re-Run" if available.
    • #2252 - Updated Poetry install command for Development Getting Started guide.

    Fixed

    • #2209 - Fixed lack of dark-mode support in GraphiQL page.
    • #2215 - Fixed error seen in migration from 1.3.x if certain default Statuses had been modified.
    • #2218 - Fixed typos/links in release notes and Dynamic Groups docs.
    • #2219 - Fixed broken pagination in Dynamic Group detail "Members" tab.
    • #2220 - Narrowed scope of auto-formatting in VSCode to only apply to Python files.
    • #2222 - Fixed missing app headings in Swagger UI.
    • #2229 - Fixed render_form.html include template to not render a duplicate object_note field.
    • #2232 - Fixed incorrect API URLs and incorrect inclusion of Circuits UI URLs in Swagger UI.
    • #2241 - Fixed DynamicGroup.objects.get_for_model() to support nested Dynamic Groups.
    • #2259 - Fixed footer not bound to bottom of Device View.

    Contributors

    • @jathanism
    • @glennmatthews
    • @HanlinMiao
    • @jifox
    • @nlgotz
    • @whitej6
    • @briddo
    • @itdependsnetworks

    New Contributors

    • @nlgotz made their first contribution in https://github.com/nautobot/nautobot/pull/2230

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.0...v1.4.1

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.1-py3-none-any.whl(24.12 MB)
    nautobot-1.4.1.tar.gz(23.63 MB)
  • v1.4.0(Aug 16, 2022)

    Release Overview

    Added

    Custom Field Extended Filtering (#1498)

    Objects with custom fields now support filter lookup expressions for filtering by custom field values, such as cf_date_field__gte=2022-08-11 to select objects whose date_field custom field has a date of 2022-08-11 or later.

    Custom Field Slugs (#1962)

    Custom fields now have a distinct slug field. The custom field name attribute should be considered deprecated, and will be removed in a future major release (see also #824.) Additionally, the label attribute, while currently optional in the database, will become mandatory in that same future release as a consequence. When migrating from an earlier Nautobot release to version 1.4 or later, the slug and label for all existing custom fields will be automatically populated if not previously defined.

    A new version of the /api/extras/custom-fields/ REST API endpoints has been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior (name required, slug and label optional; if unspecified, the slug and label will receive default values based on the provided name). A REST API client can request API version 1.4, in which case the updated API will require slug and label parameters in place of name.

    Additionally, REST API serialization of custom field data is itself now versioned. For all object endpoints that include custom field data under the custom_fields key, REST API versions 1.3 and earlier will continue the previous behavior of indexing the custom_fields dictionary by fields' name values, but when REST API version 1.4 or later is requested, the custom_fields data will be indexed by slug instead.

    For technical reasons of backwards-compatibility, the database (ORM) and GraphQL interfaces continue to access and store object custom field data exclusively under the name key; this will change to use the slug in a future major release. Again, watch #824 for plans in that regard.

    Custom Tabs in Object Detail Views (#1000)

    A plugin may now define extra tabs which will be appended to the object view's list of tabs.

    You can refer to the plugin development guide on how to add tabs to existing object detail views.

    Custom Template (CSS, HTML, JavaScript) on Job Forms (#1865)

    Jobs can now specify a template_name property and provide a custom template with additional JavaScript and CSS to help with user input on the Job submission form.

    You can refer to the Job class metadata attribute documentation on how to build and define this template.

    Dynamic Groups Support Additional Models (#2200)

    Cluster, IP Address, Prefix, and Rack models can now be filtered on in Dynamic Groups and can also support nested or groups of Dynamic Groups. Some fields have been excluded from filtering until a sensible widget can be provided.

    Dark Mode UI (#729)

    Nautobot's UI now supports dark mode, both explicitly and via browser preference selection.

    The "Theme" link in the footer provides a modal popup to select the preferred theme. This preference is saved per browser via localStorage.

    Improved Filter Coverage for DCIM and Virtualization Models

    The DCIM, Virtualization FilterSets have been updated with over 150 new filters, including hybrid filters that support filtering on both pk and slug (or pk and name where slug is not available). A new filter class NaturalKeyOrPKMultipleChoiceFilter was added to nautobot.utilities.filters to support filtering on multiple fields of a related object. See the Best Practices documentation for more information.

    Job Hooks (#1878)

    Jobs can now be configured to run automatically when a change event occurs on a Nautobot object. Job hooks associate jobs to content types and actions to run jobs when a create, update or delete action occurs on the selected content type. A new job base class JobHookReceiver was introduced that jobs must subclass to be associated with a job hook. See the Job Hooks documentation for more information.

    Job Re-Runs (#1875)

    JobResult records now save the arguments with which the Job was called, allowing for easy re-execution of the Job with the same arguments as before. A "re-run" button has been added to the JobResult list view and detail view.

    Location Data Model (#1052)

    To locate network information more precisely than a Site defines, you can now define a hierarchy of Location Types (for example, BuildingFloorRoom) and then create Locations corresponding to these types within each Site. Data objects such as devices, prefixes, VLAN groups, etc. can thus be mapped or assigned to Location representing a specific building, wing, floor, room, etc. as appropriate to your needs.

    Info: At present, Locations fill the conceptual space between the more abstract Region and Site models and the more concrete Rack Group model. In a future Nautobot release, some or all of these other models may be collapsed into Locations. That is to say, in the future you might not deal with Regions and Sites as distinct models, but instead your Location Type hierarchy might include these higher-level categories, becoming something like Country ← City ← Site ← Building ← Floor ← Room.

    Parent Interfaces and Bridge Interfaces (#1455)

    Interface and VMInterface models now have parent_interface and bridge keys. An interface of type Virtual can now associate to a parent physical interface on the same device, virtual chassis, or virtual machine, and an interface of any type can specify another interface as its associated bridge interface. (A new Bridge interface type has also been added, but the bridge interface property is not restricted to interfaces of this type.)

    Rackview UI - Add Option to Truncate Device Name (#1119)

    Users can now toggle device full name and truncated name in the rack elevation view. The truncating function is customizable in nautobot_config.py via defining UI_RACK_VIEW_TRUNCATE_FUNCTION. Default behavior is to split on . and return the first item in the list.

    "Save SVG" link presents the same view as what is currently displayed on screen

    Current preferred toggle state is preserved across tabs (requires refresh) and persists in-browser until local storage is cleared. This presents a consistent behavior when browsing between multiple racks.

    REST API Enhancements (#1463)

    • For all models that support Relationships, their corresponding list and detail REST API endpoints now include the option to include data on their associated Relationships and related objects by specifying include=relationships as a query parameter.
    • Relationship associations on a model can be edited by a PATCH to the appropriate nested value, such as "relationships" -> <relationship-slug> -> "source" or "relationships" -> <relationship-slug> -> "destination".
    • For implementers of REST API serializers (core and/or plugins), a new nautobot.extras.api.serializers.NautobotModelSerializer base class has been added. Using this class guarantees support for relationships, custom fields, and computed fields on the serializer, and provides for a streamlined developer experience.

    Status Field on Interface, VMInterface Models (#984)

    Interface and VMInterface models now support a status. Default statuses that are available to be set are: Active, Planned, Maintenance, Failed, and Decommissioned. During migration all existing interfaces will be set to the status of "Active".

    A new version of the /dcim/interfaces/* REST API endpoints have been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior unless the REST API client explicitly requests API version=1.4. If you continue to use the pre-1.4 API endpoints, status is defaulted to "Active".

    Visit the documentation on REST API versioning for more information on using the versioned APIs.

    NautobotUIViewSet (#1812)

    New in Nautobot 1.4 is the debut of NautobotUIViewSet: A powerful plugin development tool that can save plugin developer hundreds of lines of code compared to using legacy generic.views. Using it to gain access to default functionalities previous provided by generic.views such as create(), bulk_create(), update(), partial_update(), bulk_update(), destroy(), bulk_destroy(), retrieve() and list() actions.

    Note that this ViewSet is catered specifically to the UI, not the API.

    Concrete examples on how to use NautobotUIViewSet resides in nautobot.circuits.views.

    Visit the documentation on plugins/development.md for more information on how to use NautobotUIViewSet.

    Notes (#767)

    Primary and Organizational models now support notes. A notes tab has been added to the Object Detail view for all models that inherit the Primary or Organizational base abstract models.

    Warning: Any plugin that inherits from one of these two models and uses the ViewTestCases.PrimaryObjectViewTestCase or ViewTestCases.OrganizationalObjectViewTestCase for their test will need to add the NotesObjectView to the objects URLs. See Plugin Development for more details.

    Notes can also be used via the REST API at endpoint /api/extras/notes or per object at the object's /notes endpoint.

    Info: For implementers of REST API views (core and/or plugins), a new nautobot.extras.api.views.NautobotModelViewSet base class has been added. Use of this class ensures that all features from PrimaryModel or OrganizationalModel are accessible through the API. This includes custom fields and notes.

    Changed

    Dynamic Groups of Dynamic Groups (#1614)

    Dynamic Groups may now be nested in parent/child relationships. The Dynamic Group edit view now has a "Child Groups" tab that allows one to make other Dynamic Groups of the same content type children of the parent group. Any filters provided by the child groups are used to filter the members from the parent group using one of three operators: "Restrict (AND)", "Include (OR)", or "Exclude (NOT)". This allows for logical parenthetical grouping of nested groups by the operator you choose for that child group association to the parent.

    Warning: The default behavior of Dynamic Groups with an empty filter ({}) has been inverted to include all objects matching the content type by default instead of matching no objects. This was necessary to implement the progressive layering of child filters similarly to how we use filters to reduce desired objects from basic list view filters.

    Renamed Mixin Classes (#2135)

    A number of mixin classes have been renamed for improved self-consistency and clarity of usage. The former names of these mixins are still available for now as aliases, but inheriting from these mixins will raise a DeprecationWarning, and these aliases will be removed in a future major release.

    | Former Name | New Name | | --------------------------- | ----------------------------------- | | AddRemoveTagsForm | TagsBulkEditFormMixin | | CustomFieldBulkCreateForm | CustomFieldModelBulkEditFormMixin | | CustomFieldBulkEditForm | CustomFieldModelBulkEditFormMixin | | CustomFieldFilterForm | CustomFieldModelFilterFormMixin | | CustomFieldModelForm | CustomFieldModelFormMixin | | RelationshipModelForm | RelationshipModelFormMixin | | StatusBulkEditFormMixin | StatusModelBulkEditFormMixin | | StatusFilterFormMixin | StatusModelFilterFormMixin |

    Strict Filter Validation by Default (#1736)

    Filtering of object lists in the UI and in the REST API will now report an error if an unknown or unrecognized filter parameter is specified. This is a behavior change from previous Nautobot releases, in which unknown filter parameters would be silently discarded and ignored.

    A new configuration setting, STRICT_FILTERING has been added. It defaults to True, enabling strict validation of filter parameters, but can be set to False to disable this validation.

    Warning: Setting STRICT_FILTERING to False can result in unexpected filtering results in the case of user error, for example a request to /api/dcim/devices/?has_primry_ip=false (note the typo primry) will result in a list of all devices, rather than the intended list of only devices that lack a primary IP address. In the case of Jobs or external automation making use of such a filter, this could have wide-ranging consequences.

    Moved Registry Template Context (#1945)

    The settings_and_registry default context processor was changed to purely settings - the (large) Nautobot application registry dictionary is no longer provided as part of the render context for all templates by default. Added a new registry template tag that can be invoked by specific templates to provide this variable where needed.


    v1.4.0 (2022-08-15)

    Added

    • #1812 - Added NautobotViewSet and accompanying helper methods, documentation.
    • #2173 - Added flake8 linting and black formatting settings to vscode workspace settings.
    • #2105 - Added support for Notes in NautobotBulkEditForm and NautobotEditForm.
    • #2200 - Added Dynamic Groups support for Cluster, IP Address, Prefix, and Rack.

    Changed

    • #1812 - Changed Circuit app models to use NautobotViewSets.
    • #2029 - Updated optional settings docs to call out environment variable only settings.
    • #2176 - Update invoke task output to use rich formatting, print full Docker Compose commands.
    • #2183 - Update dependency django to ~3.2.15.
    • #2193 - Updated Postgres/MySQL dumpdata docs to exclude django_rq exports.
    • #2200 - Group of dynamic group membership links now link to the group's membership table view.

    Fixed

    • #1304 - Fixed incorrect display of connection counts on home page.
    • #1845 - Fixed not being able to schedule job with 'immediate' schedule via API.
    • #1996 - Fixed Menu Item link_text render on top of buttons.
    • #2178 - Fixed "invalid filter" error when filtering JobResults in the UI.
    • #2184 - Fixed job re-run not honoring has_sensitive_variables.
    • #2190 - Fixed tags missing from Location forms.
    • #2191 - Fix widget for boolean filters fields when generating filter form for a Dynamic Group
    • #2192 - Fixed job.request removed from job instance in v1.4.0b1.
    • #2197 - Fixed some display issues in the Dynamic Groups detail view.

    v1.4.0rc1 (2022-08-10)

    Added

    • #767 - Added notes field to Primary and Organizational models.
    • #1498 - Added extended lookup expression filters to custom fields.
    • #1962 - Added slug field to Custom Field model, added 1.4 REST API version of the api/extras/custom-fields/ endpoints.
    • #2106 - Added support for listing/creating Notes via REST API.

    Changed

    • #2156 - Update network automation apps listed on overview of docs.
    • #2168 - Added model toggle to skip adding missing Dynamic Group filter fields for use in easing integration of new models into Dynamic Groups.

    Fixed

    • #2090 - Fixed an issue where a REST API PATCH of a Tag could inadvertently reset its associated content-types.
    • #2150 - Fixed unit tests performance degradation.
    • #2132 - Updated job hooks to use slugs in urls instead of pk.
    • #2133 - Update documentation for job hooks, make it reachable from the Nautobot UI.
    • #2135 - Fixed ImportError on RelationshipModelForm, renamed other mixins and added aliases for backwards compatibility.
    • #2137 - Fixed incorrect parameter name in NaturalKeyOrPKMultipleChoiceFilter documentation.
    • #2142 - Fixed incorrect URL field in REST API nested relationship representation.
    • #2165 - Fix up relationship-association API test issue.

    v1.4.0b1 (2022-07-30)

    Added

    • #1463 - Added REST API support for opt-in relationships data on model endpoints; added NautobotModelSerializer base class.
    • #1614 - Added support for nesting of Dynamic Groups, allowing inclusion/exclusion rules of sub-group members.
    • #1735 - Added missing filters to model FilterSets for Virtualization models.
    • #1865 - Added support for a custom template on Job forms.
    • #1875 - Add ability to quickly re-submit a previously run Job with the same parameters.
    • #1877 - Add new job base class JobHookReceiver to support triggering job execution from change events.
    • #1878 - Add job hooks feature.
    • #1883 - Add ability to filter objects by their relationships into the existing FilterSet.
    • #1884 - Add ability to set the relationship filter via the filter form.
    • #2035 - Added change source context to object change context manager.
    • #2051 - Add changelog url for Relationships.
    • #2061 - Add draggable child groups to Dynamic Groups edit view in UI, recompute and hide weights.
    • #2072 - Expand on query_params for ObjectVar in Jobs documentation.

    Changed

    • #2049 - Moved get_changelog_url to a method on objects that support changelogs, updated template context.
    • #2116 - Updated package dependencies: Pillow ~9.1.1 -> ~9.2.0, black ~22.3.0 -> ~22.6.0, coverage 6.4.1 -> 6.4.2, django-cacheops 6.0 -> 6.1, django-cryptography 1.0 -> 1.1, django-debug-toolbar ~3.4.0 -> ~3.5.0, django-extensions ~3.1.5 -> ~3.2.0, drf-yasg ~1.20.0 -> ^1.20.0, importlib-metadata ~4.4 -> ^4.4.0, jsonschema ~4.4.0 -> ~4.8.0, mkdocs 1.3.0 -> 1.3.1, mkdocs ==1.3.0 -> ==1.3.1, mkdocs-include-markdown-plugin ~3.2.3 -> ~3.6.0, mkdocs-include-markdown-plugin ==3.2.3 -> ==3.6.1, social-auth-core ~4.2.0 -> ~4.3.0, svgwrite 1.4.2 -> 1.4.3

    Fixed

    • #1710 - Fixed invalid CSS when clicking "Add another" row buttons for formsets on Secrets Groups, Dynamic Groups edit view in the UI.
    • #2069 - Addressed numerous UX improvements for Dynamic Groups of Dynamic Groups feature to ease usability of this feature.
    • #2109 - Fixed Relationship Filters are not Applied with "And" Operator.
    • #2111 - Fixed Invalid filter error thrown for __source with message: "" is not a valid UUID.

    v1.4.0a2 (2022-07-11)

    !!! attention next and develop introduced conflicting migration numbers during the release cycle. This necessitates reordering the migration in next. If you installed v1.4.0a1, you will need to roll back a migration before upgrading/installing v1.4.0a2 and newer. If you have not installed v1.4.0a this will not be an issue.

    Before upgrading, run: `nautobot-server migrate extras 0033_add__optimized_indexing`. This will revert the reordered migration `0034_configcontextschema__remove_name_unique__create_constraint_unique_name_owner`, which is now number `0035`.
    
    Perform the Nautobot upgrade as usual and proceed with post-installation migration.
    
    No data loss is expected as the reordered migration only modified indexing on existing fields.
    

    Added

    • #1000 - Object detail views can now have extra UI tabs which are defined by a plugin.
    • #1052 - Initial prototype implementation of Location data model.
    • #1318 - Added nautobot.extras.forms.NautobotBulkEditForm base class. All bulk-edit forms for models that support both custom fields and relationships now inherit from this class.
    • #1466 - Plugins can now override views.
    • #1729 - Add new filter class NaturalKeyOrPKMultipleChoiceFilter to nautobot.utilities.filters.
    • #1729 - Add 137 new filters to nautobot.dcim.filters FilterSets.
    • #1729 - Add cable_terminations to the model_features registry.
    • #1893 - Added an object detail view for Relationships.
    • #1949 - Added TestCaseMixin for Helper Functions across all test case bases.

    Changed

    • #1908 - Update dependency Markdown to ~3.3.7
    • #1909 - Update dependency MarkupSafe to ~2.1.1
    • #1912 - Update dependency celery to ~5.2.7
    • #1913 - Update dependency django-jinja to ~2.10.2
    • #1915 - Update dependency invoke to ~1.7.1
    • #1917 - Update dependency svgwrite to ~1.4.2
    • #1919 - Update dependency Pillow to ~9.1.1
    • #1920 - Update dependency coverage to ~6.4.1
    • #1921 - Update dependency django-auth-ldap to ~4.1.0
    • #1924 - Update dependency django-cors-headers to ~3.13.0
    • #1925 - Update dependency django-debug-toolbar to ~3.4.0
    • #1928 - Update dependency napalm to ~3.4.1
    • #1929 - Update dependency selenium to ~4.2.0
    • #1945 - Change the settings_and_registry default context processor to purely settings, moving registry dictionary to be accessible via registry template tag.

    Fixed

    • #1898 - Browsable API is now properly styled as the rest of the app.

    Removed

    • #1462 - Removed job source tab from Job and Job Result view.
    • #2002 - Removed rqworker container from default Docker development environment.

    v1.4.0a1 (2022-06-13)

    Added

    • #729 - Added UI dark mode.
    • #984 - Added status field to Interface, VMInterface models.
    • #1119 - Added truncated device name functionality to Rackview UI.
    • #1455 - Added parent_interface and bridge fields to Interface and VMInterface models.
    • #1833 - Added hyperlinked_object template filter to consistently reference objects in templates.

    Changed

    • #1736 - STRICT_FILTERING setting is added and enabled by default.
    • #1793 - Added index notes to fields from analysis, relaxed ConfigContextSchema constraint (unique on name, owner_content_type, owner_object_id instead of just name).

    Fixed

    • #1815 - Fix theme link style in footer.
    • #1831 - Fixed missing parent_interface and bridge from 1.4 serializer of Interfaces.

    Contributors

    • @timizuoebideri1
    • @matt852
    • @glennmatthews
    • @bryanculver
    • @briddo
    • @HanlinMiao
    • @whitej6
    • @gsnider2195
    • @jathanism
    • @smk4664
    • @tbotnz
    • @itdependsnetworks
    • @sirtux
    • @mzbroch

    New Contributors

    • @tbotnz made their first contribution in https://github.com/nautobot/nautobot/pull/1866

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.10...v1.4.0

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.0-py3-none-any.whl(24.12 MB)
    nautobot-1.4.0.tar.gz(23.63 MB)
  • v1.4.0-rc.1(Aug 10, 2022)

    Release Overview

    Added

    Custom Field Slugs (#1962)

    Custom fields now have a distinct slug field. The custom field name attribute should be considered deprecated, and will be removed in a future major release (see also #824.) Additionally, the label attribute, while currently optional in the database, will become mandatory in that same future release as a consequence. When migrating from an earlier Nautobot release to version 1.4 or later, the slug and label for all existing custom fields will be automatically populated if not previously defined.

    A new version of the /api/extras/custom-fields/ REST API endpoints has been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior (name required, slug and label optional; if unspecified, the slug and label will receive default values based on the provided name). A REST API client can request API version 1.4, in which case the updated API will require slug and label parameters in place of name.

    Additionally, REST API serialization of custom field data is itself now versioned. For all object endpoints that include custom field data under the custom_fields key, REST API versions 1.3 and earlier will continue the previous behavior of indexing the custom_fields dictionary by fields' name values, but when REST API version 1.4 or later is requested, the custom_fields data will be indexed by slug instead.

    For technical reasons of backwards-compatibility, the database (ORM) and GraphQL interfaces continue to access and store object custom field data exclusively under the name key; this will change to use the slug in a future major release. Again, watch #824 for plans in that regard.

    Custom Template (CSS, HTML, JavaScript) on Job Forms (#1865)

    Jobs can now specify a template_name property and provide a custom template with additional JavaScript and CSS to help with user input on the Job submission form.

    You can refer to the Job class metadata attribute documentation on how to build and define this template.

    Dark Mode UI (#729)

    Nautobot's UI now supports dark mode, both explicitly and via browser preference selection.

    The "Theme" link in the footer provides a modal popup to select the preferred theme. This preference is saved per browser via localStorage.

    Improved Filter Coverage for DCIM, Virtualization Models

    The DCIM, Virtualization FilterSets have been updated with over 150 new filters, including hybrid filters that support filtering on both pk and slug (or pk and name where slug is not available). A new filter class NaturalKeyOrPKMultipleChoiceFilter was added to nautobot.utilities.filters to support filtering on multiple fields of a related object. See the Best Practices documentation for more information.

    Job Hooks (#2103)

    Jobs can now be configured to run automatically when a change event occurs on a Nautobot object. Job hooks associate jobs to content types and actions to run jobs when a create, update or delete action occurs on the selected content type. A new job base class JobHookReceiver was introduced that jobs must subclass to be associated with a job hook. See the Job Hooks documentation for more information.

    Job Re-Runs (#1875)

    JobResult records now save the arguments with which the Job was called, allowing for easy re-execution of the Job with the same arguments as before. A "re-run" button has been added to the JobResult list view and detail view.

    Location Data Model (#1052)

    To locate network information more precisely than a Site defines, you can now define a hierarchy of Location Types (for example, BuildingFloorRoom) and then create Locations corresponding to these types within each Site. Data objects such as devices, prefixes, VLAN groups, etc. can thus be mapped or assigned to Location representing a specific building, wing, floor, room, etc. as appropriate to your needs.

    Info: At present, Locations fill the conceptual space between the more abstract Region and Site models and the more concrete Rack Group model. In a future Nautobot release, some or all of these other models may be collapsed into Locations. That is to say, in the future you might not deal with Regions and Sites as distinct models, but instead your Location Type hierarchy might include these higher-level categories, becoming something like Country ← City ← Site ← Building ← Floor ← Room.

    Object Detail Tabs (#1000)

    A plugin may now define extra tabs which will be appended to the object view's list of tabs.

    You can refer to the plugin development guide on how to add tabs to existing object detail views.

    Parent Interfaces and Bridge Interfaces (#1455)

    Interface and VMInterface models now have parent_interface and bridge keys. An interface of type Virtual can now associate to a parent physical interface on the same device, virtual chassis, or virtual machine, and an interface of any type can specify another interface as its associated bridge interface. (A new Bridge interface type has also been added, but the bridge interface property is not restricted to interfaces of this type.)

    Rackview UI - Add Option to Truncate Device Name (#1119)

    Users can now toggle device full name and truncated name in the rack elevation view. The truncating function is customizable in nautobot_config.py via defining UI_RACK_VIEW_TRUNCATE_FUNCTION. Default behavior is to split on . and return the first item in the list.

    "Save SVG" link presents the same view as what is currently displayed on screen

    Current preferred toggle state is preserved across tabs (requires refresh) and persists in-browser until local storage is cleared. This presents a consistent behavior when browsing between multiple racks.

    REST API Enhancements (#1463)

    • For all models that support Relationships, their corresponding list and detail REST API endpoints now include the option to include data on their associated Relationships and related objects by specifying include=relationships as a query parameter.
    • Relationship associations on a model can be edited by a PATCH to the appropriate nested value, such as "relationships" -> <relationship-slug> -> "source" or "relationships" -> <relationship-slug> -> "destination".
    • For implementers of REST API serializers (core and/or plugins), a new nautobot.extras.api.serializers.NautobotModelSerializer base class has been added. Using this class guarantees support for relationships, custom fields, and computed fields on the serializer, and provides for a streamlined developer experience.

    Status Field on Interface, VMInterface Models (#984)

    Interface and VMInterface models now support a status. Default statuses that are available to be set are: Active, Planned, Maintenance, Failed, and Decommissioned. During migration all existing interfaces will be set to the status of "Active".

    A new version of the /dcim/interfaces/* REST API endpoints have been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior unless the REST API client explicitly requests API version=1.4. If you continue to use the pre-1.4 API endpoints, status is defaulted to "Active".

    Visit the documentation on REST API versioning for more information on using the versioned APIs.

    Notes (#767)

    Primary and Organizational models now support notes. A notes tab has been added to the Object Detail view for all models that inherit the Primary or Organizational base abstract models.

    Warning: Any plugin that inherits from one of these two models and uses the ViewTestCases.PrimaryObjectViewTestCase or ViewTestCases.OrganizationalObjectViewTestCase for their test will need to add the NotesObjectView to the objects URLs. See Plugin Development for more details.

    Notes can also be used via the REST API at endpoint /api/extras/notes or per object at the object's /notes endpoint.

    Info: For implementers of REST API views (core and/or plugins), a new nautobot.extras.api.views.NautobotModelViewSet base class has been added. Use of this class ensures that all features from PrimaryModel or OrganizationalModel are accessible through the API. This includes custom fields and notes.

    Changed

    Dynamic Groups of Dynamic Groups (#1614)

    Dynamic Groups may now be nested in parent/child relationships. The Dynamic Group edit view now has a "Child Groups" tab that allows one to make other Dynamic Groups of the same content type children of the parent group. Any filters provided by the child groups are used to filter the members from the parent group using one of three operators: "Restrict (AND)", "Include (OR)", or "Exclude (NOT)". This allows for logical parenthetical grouping of nested groups by the operator you choose for that child group association to the parent.

    Warning: The default behavior of Dynamic Groups with an empty filter ({}) has been inverted to include all objects matching the content type by default instead of matching no objects. This was necessary to implement the progressive layering of child filters similarly to how we use filters to reduce desired objects from basic list view filters.

    Renamed Mixin Classes (#2135)

    A number of mixin classes have been renamed for improved self-consistency and clarity of usage. The former names of these mixins are still available for now as aliases, but inheriting from these mixins will raise a DeprecationWarning, and these aliases will be removed in a future major release.

    | Former Name | New Name | | --------------------------- | ----------------------------------- | | AddRemoveTagsForm | TagsBulkEditFormMixin | | CustomFieldBulkCreateForm | CustomFieldModelBulkEditFormMixin | | CustomFieldBulkEditForm | CustomFieldModelBulkEditFormMixin | | CustomFieldFilterForm | CustomFieldModelFilterFormMixin | | CustomFieldModelForm | CustomFieldModelFormMixin | | RelationshipModelForm | RelationshipModelFormMixin | | StatusBulkEditFormMixin | StatusModelBulkEditFormMixin | | StatusFilterFormMixin | StatusModelFilterFormMixin |

    Strict Filter Validation by Default (#1736)

    Filtering of object lists in the UI and in the REST API will now report an error if an unknown or unrecognized filter parameter is specified. This is a behavior change from previous Nautobot releases, in which unknown filter parameters would be silently discarded and ignored.

    A new configuration setting, STRICT_FILTERING has been added. It defaults to True, enabling strict validation of filter parameters, but can be set to False to disable this validation.

    Warning: Setting STRICT_FILTERING to False can result in unexpected filtering results in the case of user error, for example a request to /api/dcim/devices/?has_primry_ip=false (note the typo primry) will result in a list of all devices, rather than the intended list of only devices that lack a primary IP address. In the case of Jobs or external automation making use of such a filter, this could have wide-ranging consequences.

    Moved Registry Template Context (#1945)

    The settings_and_registry default context processor was changed to purely settings - the (large) Nautobot application registry dictionary is no longer provided as part of the render context for all templates by default. Added a new registry template tag that can be invoked by specific templates to provide this variable where needed.


    v1.4.0rc1 (2022-08-10)

    Added

    • #1962 - Added slug field to Custom Field model, added 1.4 REST API version of the api/extras/custom-fields/ endpoints.
    • #2106 - Added support for listing/creating Notes via REST API.

    Changed

    • #2156 - Update network automation apps listed on overview of docs.
    • #2168 - Added model toggle to skip adding missing Dynamic Group filter fields for use in easing integration of new models into Dynamic Groups.

    Fixed

    • #2090 - Fixed an issue where a REST API PATCH of a Tag could inadvertently reset its associated content-types.
    • #2150 - Fixed unit tests performance degradation.
    • #2132 - Updated job hooks to use slugs in urls instead of pk.
    • #2133 - Update documentation for job hooks, make it reachable from the Nautobot UI.
    • #2135 - Fixed ImportError on RelationshipModelForm, renamed other mixins and added aliases for backwards compatibility.
    • #2137 - Fixed incorrect parameter name in NaturalKeyOrPKMultipleChoiceFilter documentation.
    • #2142 - Fixed incorrect URL field in REST API nested relationship representation.
    • #2165 - Fix up relationship-association API test issue.

    Contributors

    • @gsnider2195
    • @smk4664
    • @glennmatthews
    • @yoonthegoon
    • @itdependsnetworks
    • @jathanism
    • @briddo
    • @nniehoff
    • @timizuoebideri1

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.0-beta.1...v1.4.0-rc.1

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.0rc1-py3-none-any.whl(22.88 MB)
    nautobot-1.4.0rc1.tar.gz(22.40 MB)
  • v1.3.10(Aug 9, 2022)

    Added

    • #1226 - Added custom job intervals package management.
    • #2091 - Added remove_stale_scheduled_jobs management command which removes all stale scheduled jobs and also added has_sensitive_variables field to Job model which prevents the job's input parameters from being saved to the database.
    • #2073 - Added --local option to nautobot-server runjob command.
    • #2080 - Added --data parameter to nautobot-server runjob command.
    • #2143 - Scheduled Job detail view now includes details of any custom interval.

    Changed

    • #2025 - Tweak Renovate config for automated package management.
    • #2114 - Home page now redirects to the login page when HIDE_RESTRICTED_UI is enabled and user is not authenticated.
    • #2115 - Patch updates to mkdocs, svgwrite.

    Fixed

    • #1739 - Fixed paginator not enforcing max_page_size setting in web ui views.
    • #2060 - Fixed relationship peer_id filter non-existent error on relationship association page.
    • #2095 - Fixed health check failing with Redis Sentinel, TLS configuration.
    • #2119 - Fixed flaky integration test for cable connection UI.

    Security

    IMPORTANT With introducing the has_sensitive_variables flag on Job classes and model (see: #2091), jobs can be prevented from storing their inputs in the database. Due to the nature of queuing or scheduling jobs, the desired inputs must be stored for future use.

    New safe-default behavior will only permit jobs to be executed immediately, as has_sensitive_variables defaults to True. This value can be overridden by the Job class itself or the Job model edit page. Values entered for jobs executing immediately go straight to the Celery message bus and are cleaned up on completion of execution.

    Scheduling jobs or requiring approval necessitates those values to be stored in the database until they have been sent to the Celery message bus for execution.

    During installation of v1.3.10, a migration is applied to set the has_sensitive_variables value to True to all existing Jobs. However to maintain backwards-compatibility, past scheduled jobs are permitted to keep their schedule. New schedules cannot be made until an administrator has overridden the has_sensitive_variables for the desired Job.

    A new management command exists (remove_stale_scheduled_jobs) which will aid in cleaning up schedules to past jobs which may still have sensitive data stored in the database. This command is not exhaustive nor intended to clean up sensitive values stored in the database. You should review the extras_scheduledjob table for any further cleanup.

    Note: Leveraging the Secrets and Secret Groups features in Jobs does not need to be considered a sensitive variable. Secrets are retrieved by reference at run time, which means no secret value is stored directly in the database.

    Contributors

    • @HanlinMiao
    • @gsnider2195
    • @yoonthegoon
    • @itdependsnetworks
    • @nniehoff
    • @timizuoebideri1

    New Contributors

    • @yoonthegoon made their first contribution in https://github.com/nautobot/nautobot/pull/2084

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.9...v1.3.10

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.10-py3-none-any.whl(22.67 MB)
    nautobot-1.3.10.tar.gz(22.22 MB)
  • v1.4.0-beta.1(Jul 30, 2022)

    Release Overview

    Added

    Custom Template (CSS, HTML, JavaScript) on Job Forms (#1865)

    New in Beta 1

    Jobs can now specify a template_name property and provide a custom template with additional JavaScript and CSS to help with user input on the Job submission form.

    You can refer to the Job class metadata attribute documentation on how to build and define this template.

    Dark Mode UI (#729)

    Nautobot's UI now supports dark mode, both explicitly and via browser preference selection.

    The "Theme" link in the footer provides a modal popup to select the preferred theme. This preference is saved per browser via localStorage.

    Improved Filter Coverage for DCIM, Virtualization Models

    New in Beta 1

    The DCIM, Virtualization FilterSets have been updated with over 150 new filters, including hybrid filters that support filtering on both pk and slug (or pk and name where slug is not available). A new filter class NaturalKeyOrPKMultipleChoiceFilter was added to nautobot.utilities.filters to support filtering on multiple fields of a related object. See the Best Practices documentation for more information.

    Job Hooks (#2103)

    New in Beta 1

    Jobs can now be configured to run automatically when a change event occurs on a Nautobot object. Job hooks associate jobs to content types and actions to run jobs when a create, update or delete action occurs on the selected content type. A new job base class JobHookReceiver was introduced that jobs must subclass to be associated with a job hook. See the Job Hooks documentation for more information.

    Job Re-Runs (#1875)

    New in Beta 1

    JobResult records now save the arguments with which the Job was called, allowing for easy re-execution of the Job with the same arguments as before. A "re-run" button has been added to the JobResult list view and detail view.

    Location Data Model (#1052)

    To locate network information more precisely than a Site defines, you can now define a hierarchy of Location Types (for example, BuildingFloorRoom) and then create Locations corresponding to these types within each Site. Data objects such as devices, prefixes, VLAN groups, etc. can thus be mapped or assigned to Location representing a specific building, wing, floor, room, etc. as appropriate to your needs.

    ℹ️ At present, Locations fill the conceptual space between the more abstract Region and Site models and the more concrete Rack Group model. In a future Nautobot release, some or all of these other models may be collapsed into Locations. That is to say, in the future you might not deal with Regions and Sites as distinct models, but instead your Location Type hierarchy might include these higher-level categories, becoming something like Country ← City ← Site ← Building ← Floor ← Room.

    Object Detail Tabs (#1000)

    A plugin may now define extra tabs which will be appended to the object view's list of tabs.

    You can refer to the plugin development guide on how to add tabs to existing object detail views.

    Parent Interfaces and Bridge Interfaces (#1455)

    Interface and VMInterface models now have parent_interface and bridge keys. An interface of type Virtual can now associate to a parent physical interface on the same device, virtual chassis, or virtual machine, and an interface of any type can specify another interface as its associated bridge interface. (A new Bridge interface type has also been added, but the bridge interface property is not restricted to interfaces of this type.)

    Rackview UI - Add Option to Truncate Device Name (#1119)

    Users can now toggle device full name and truncated name in the rack elevation view. The truncating function is customizable in nautobot_config.py via defining UI_RACK_VIEW_TRUNCATE_FUNCTION. Default behavior is to split on . and return the first item in the list.

    "Save SVG" link presents the same view as what is currently displayed on screen

    Current preferred toggle state is preserved across tabs (requires refresh) and persists in-browser until local storage is cleared. This presents a consistent behavior when browsing between multiple racks.

    REST API Enhancements (#1463)

    New in Beta 1

    • For all models that support Relationships, their corresponding list and detail REST API endpoints now include the option to include data on their associated Relationships and related objects by specifying include=relationships as a query parameter.
    • Relationship associations on a model can be edited by a PATCH to the appropriate nested value, such as "relationships" -> <relationship-slug> -> "source" or "relationships" -> <relationship-slug> -> "destination".
    • For implementers of REST API serializers (core and/or plugins), a new nautobot.extras.api.serializers.NautobotModelSerializer base class has been added. Using this class guarantees support for relationships, custom fields, and computed fields on the serializer, and provides for a streamlined developer experience.

    Status Field on Interface, VMInterface Models (#984)

    Interface and VMInterface models now support a status. Default statuses that are available to be set are: Active, Planned, Maintenance, Failed, and Decommissioned. During migration all existing interfaces will be set to the status of "Active".

    A new version of the /dcim/interfaces/* REST API endpoints have been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior unless the REST API client explicitly requests API version=1.4. If you continue to use the pre-1.4 API endpoints, status is defaulted to "Active".

    Visit the documentation on REST API versioning for more information on using the versioned APIs.

    Notes (#767)

    New in Beta 1

    Primary and Organizational models now support notes. A notes tab has been added to the Object Detail view for all models that inherit the Primary or Organizational base abstract models.

    ⚠️ Any plugin that inherits from one of these two models and uses the ViewTestCases.PrimaryObjectViewTestCase or ViewTestCases.OrganizationalObjectViewTestCase for their test will need to add the NotesObjectView to the objects URLs. See Plugin Development for more details.

    Changed

    Dynamic Groups of Dynamic Groups (#1614)

    New in Beta 1

    Dynamic Groups may now be nested in parent/child relationships. The Dynamic Group edit view now has a "Child Groups" tab that allows one to make other Dynamic Groups of the same content type children of the parent group. Any filters provided by the child groups are used to filter the members from the parent group using one of three operators: "Restrict (AND)", "Include (OR)", or "Exclude (NOT)". This allows for logical parenthetical grouping of nested groups by the operator you choose for that child group association to the parent.

    ⚠️ The default behavior of Dynamic Groups with an empty filter ({}) has been inverted to include all objects matching the content type by default instead of matching no objects. This was necessary to implement the progressive layering of child filters similarly to how we use filters to reduce desired objects from basic list view filters.

    Strict Filter Validation by Default (#1736)

    Filtering of object lists in the UI and in the REST API will now report an error if an unknown or unrecognized filter parameter is specified. This is a behavior change from previous Nautobot releases, in which unknown filter parameters would be silently discarded and ignored.

    A new configuration setting, STRICT_FILTERING has been added. It defaults to True, enabling strict validation of filter parameters, but can be set to False to disable this validation.

    ⚠️ Setting STRICT_FILTERING to False can result in unexpected filtering results in the case of user error, for example a request to /api/dcim/devices/?has_primry_ip=false (note the typo primry) will result in a list of all devices, rather than the intended list of only devices that lack a primary IP address. In the case of Jobs or external automation making use of such a filter, this could have wide-ranging consequences.

    Moved Registry Template Context (#1945)

    The settings_and_registry default context processor was changed to purely settings - the (large) Nautobot application registry dictionary is no longer provided as part of the render context for all templates by default. Added a new registry template tag that can be invoked by specific templates to provide this variable where needed.

    v1.4.0b1 (2022-07-30)

    Attention:

    next and develop introduced conflicting migration numbers during the release cycle. This necessitates reordering the migration in next. If you installed v1.4.0a1 or v1.4.0a2, you will need to roll back a migration before upgrading/installing v1.4.0b1. If you have not installed either v1.4.0a1 or v1.4.0a2 this will not be an issue.

    Before upgrading, run: nautobot-server migrate extras 0033_add__optimized_indexing. This will revert to migrations prior to those introduced in 1.4.

    Perform the Nautobot upgrade as usual and proceed with post-installation migration.

    Data loss may occur from features in earlier alphas!

    Added

    • #1463 - Added REST API support for opt-in relationships data on model endpoints; added NautobotModelSerializer base class.
    • #1614 - Added support for nesting of Dynamic Groupsallowing inclusion/exclusion rules of sub-group members
    • #1735 - Added missing filters to model FilterSets for Virtualization models.
    • #1865 - Added support for a custom template on Job forms.
    • #1877 - Add new job base class JobHookReceiver to support triggering job execution from change events.
    • #1883 - Add ability to filter objects by their relationships into the existing FilterSet.
    • #1884 - Add ability to set the relationship filter via the filter form.
    • #2035 - Added change source context to object change context manager.
    • #2051 - Add changelog url for Relationships.
    • #2061 - Add draggable child groups to Dynamic Groups edit view in UI, recompute and hide weights.
    • #2103 - Add job hooks feature.

    Changed

    • #2049 - Moved get_changelog_url to a method on objects that support changelogs, updated template context.
    • #2116 - Updated package dependencies: Pillow ~9.1.1 -> ~9.2.0, black ~22.3.0 -> ~22.6.0, coverage 6.4.1 -> 6.4.2, django-cacheops 6.0 -> 6.1, django-cryptography 1.0 -> 1.1, django-debug-toolbar ~3.4.0 -> ~3.5.0, django-extensions ~3.1.5 -> ~3.2.0, drf-yasg ~1.20.0 -> ^1.20.0, importlib-metadata ~4.4 -> ^4.4.0, jsonschema ~4.4.0 -> ~4.8.0, mkdocs 1.3.0 -> 1.3.1, mkdocs ==1.3.0 -> ==1.3.1, mkdocs-include-markdown-plugin ~3.2.3 -> ~3.6.0, mkdocs-include-markdown-plugin ==3.2.3 -> ==3.6.1, social-auth-core ~4.2.0 -> ~4.3.0, svgwrite 1.4.2 -> 1.4.3

    Fixed

    • #1710 - Fixed invalid CSS when clicking "Add another" row buttons for formsets on Secrets Groups, Dynamic Groups edit view in the UI.
    • #2069 - Addressed numerous UX improvements for Dynamic Groups of Dynamic Groups feature to ease usability of this feature.
    • #2109 - Fixed Relationship Filters are not Applied with "And" Operator.
    • #2111 - Fixed Invalid filter error thrown for __source with message: “” is not a valid UUID.

    Contributors

    • @briddo
    • @HanlinMiao
    • @Kircheneer
    • @gsnider2195
    • @jathanism
    • @timizuoebideri1
    • @glennmatthews
    • @smk4664
    • @tbotnz
    • @yoonthegoon
    • @jeffkala
    • @itdependsnetworks
    • @bryanculver

    New Contributors

    • @tbotnz made their first contribution in https://github.com/nautobot/nautobot/pull/1866
    • @yoonthegoon made their first contribution in https://github.com/nautobot/nautobot/pull/2084

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.0-alpha.2...v1.4.0-beta.1

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.0b1-py3-none-any.whl(22.85 MB)
    nautobot-1.4.0b1.tar.gz(22.38 MB)
  • v1.3.9(Jul 25, 2022)

    Added

    • #860 - Added documentation that adding device component to device type does not modify existing device instances
    • #1595 - Add ability to specify uWSGI buffer size via environment variable.
    • #1757 - Added nullable face, position to Device bulk edit form to provided desired behavior to bulk assigning to a new rack.

    Changed

    • #386 - Clarified messaging in API for rack position occupied.
    • #1356 - Virtual chassis master device interface list is less confusing.
    • #2045 - Clarified Job authoring around proper class inheritance.

    Fixed

    • #1035 - Fix assertion raised if SLAAC Status is missing when creating IPAddress objects
    • #1694 - Fixed CablePath not found error when disconnects/delete action performed on a cable
    • #1795 - Corrected relationship source/destination filter help text from queryset Filter to filterset Filter and updated documentations.
    • #1839 - Fixed staff users with auth > group permissions unable to view groups in admin UI.
    • #1937 - Solved _custom_field_data do not fully delete when using CustomFieldBulkDeleteView.
    • #1947 - Fixed unbound local error by initializing template variable before conditional logic statements.
    • #2036 - Fixed outdated UI navigation references in documentation.
    • #2039 - Fixed IntegerVar with default set to 0 on Job evaluating to False.
    • #2057 - Fixed RIR changelog route being in VRF name prefix.
    • #2077 - Fixed an error when viewing object detail pages after uninstalling a plugin but still having RelationshipAssociations involving the plugin's models.
    • #2081 - Fixed error raised if status connected not found when creating a cable

    Contributors

    • @HanlinMiao
    • @timizuoebideri1
    • @itdependsnetworks
    • @bryanculver
    • @Kircheneer
    • @jeffkala
    • @smk4664
    • @briddo
    • @glennmatthews

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.8...v1.3.9

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.9-py3-none-any.whl(22.66 MB)
    nautobot-1.3.9.tar.gz(22.21 MB)
  • v1.4.0-alpha.2(Jul 12, 2022)

    Release Overview

    Added

    Dark Mode UI (#729)

    Nautobot's UI now supports dark mode, both explicitly and via browser preference selection.

    The "Theme" link in the footer provides a modal popup to select the preferred theme. This preference is saved per browser via localStorage.

    Location Data Model (#1052)

    New in Alpha 2

    To locate network information more precisely than a Site defines, you can now define a hierarchy of Location Types (for example, BuildingFloorRoom) and then create Locations corresponding to these types within each Site. Data objects such as devices, prefixes, VLAN groups, etc. can thus be mapped or assigned to Location representing a specific building, wing, floor, room, etc. as appropriate to your needs.

    At present, Locations fill the conceptual space between the more abstract Region and Site models and the more concrete Rack Group model. In a future Nautobot release, some or all of these other models may be collapsed into Locations. That is to say, in the future you might not deal with Regions and Sites as distinct models, but instead your Location Type hierarchy might include these higher-level categories, becoming something like Country ← City ← Site ← Building ← Floor ← Room.

    Parent Interfaces and Bridge Interfaces (#1455)

    Interface and VMInterface models now have parent_interface and bridge keys. An interface of type Virtual can now associate to a parent physical interface on the same device, virtual chassis, or virtual machine, and an interface of any type can specify another interface as its associated bridge interface. (A new Bridge interface type has also been added, but the bridge interface property is not restricted to interfaces of this type.)

    Rackview UI - Add Option to Truncate Device Name (#1119)

    Users can now toggle device full name and truncated name in the rack elevation view. The truncating function is customizable in nautobot_config.py via defining UI_RACK_VIEW_TRUNCATE_FUNCTION. Default behavior is to split on . and return the first item in the list.

    "Save SVG" link presents the same view as what is currently displayed on screen

    Current preferred toggle state is preserved across tabs (requires refresh) and persists in-browser until local storage is cleared. This presents a consistent behavior when browsing between multiple racks.

    Status Field on Interface, VMInterface Models (#984)

    Interface and VMInterface models now support a status. Default statuses that are available to be set are: Active, Planned, Maintenance, Failed, and Decommissioned. During migration all existing interfaces will be set to the status of "Active".

    A new version of the /dcim/interfaces/* REST API endpoints have been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior unless the REST API client explicitly requests API version=1.4. If you continue to use the pre-1.4 API endpoints, status is defaulted to "Active".

    Visit the documentation on REST API versioning for more information on using the versioned APIs.

    Object Detail Tabs (#1000)

    New in Alpha 2

    A plugin may now define extra tabs which will be appended to the object view's list of tabs.

    You can refer to the plugin development guide on how to add tabs to existing object detail views.

    Improved Filter Coverage for DCIM models (#1729)

    New in Alpha 2

    The DCIM FilterSets have been updated with 137 new filters, including hybrid filters that support filtering on both pk and slug (or pk and name where slug is not available). A new filter class NaturalKeyOrPKMultipleChoiceFilter was added to nautobot.utilities.filters to support filtering on multiple fields of a related object. See the Best Practices documentation for more information.

    Changed

    Strict Filter Validation by Default (#1736)

    Filtering of object lists in the UI and in the REST API will now report an error if an unknown or unrecognized filter parameter is specified. This is a behavior change from previous Nautobot releases, in which unknown filter parameters would be silently discarded and ignored.

    A new configuration setting, STRICT_FILTERING has been added. It defaults to True, enabling strict validation of filter parameters, but can be set to False to disable this validation.

    Setting STRICT_FILTERING to False can result in unexpected filtering results in the case of user error, for example a request to /api/dcim/devices/?has_primry_ip=false (note the typo primry) will result in a list of all devices, rather than the intended list of only devices that lack a primary IP address. In the case of Jobs or external automation making use of such a filter, this could have wide-ranging consequences.

    Moved Registry Template Context (#1945)

    New in Alpha 2

    The settings_and_registry default context processor was changed to purely settings - the (large) Nautobot application registry dictionary is no longer provided as part of the render context for all templates by default. Added a new registry template tag that can be invoked by specific templates to provide this variable where needed.

    v1.4.0a2 (2022-07-11)

    Attention:

    next and develop introduced conflicting migration numbers during the release cycle. This necessitates reordering the migration in next. If you installed v1.4.0a1, you will need to roll back a migration before upgrading/installing v1.4.0a2 and newer. If you have not installed v1.4.0a this will not be an issue.

    Before upgrading, run: nautobot-server migrate extras 0033_add__optimized_indexing. This will revert the reordered migration 0034_configcontextschema__remove_name_unique__create_constraint_unique_name_owner, which is now number 0035.

    Perform the Nautobot upgrade as usual and proceed with post-installation migration.

    No data loss is expected as the reordered migration only modified indexing on existing fields.

    Added

    • #1000 - Object detail views can now have extra UI tabs which are defined by a plugin.
    • #1052 - Initial prototype implementation of Location data model
    • #1318 - Added nautobot.extras.forms.NautobotBulkEditForm base class. All bulk-edit forms for models that support both custom fields and relationships now inherit from this class.
    • #1466 - Plugins can now override views.
    • #1729 - Add new filter class NaturalKeyOrPKMultipleChoiceFilter to nautobot.utilities.filters.
    • #1729 - Add 137 new filters to nautobot.dcim.filters FilterSets.
    • #1729 - Add cable_terminations to the model_features registry.
    • #1893 - Added an object detail view for Relationships.
    • #1949 - Added TestCaseMixin for Helper Functions across all test case bases.

    Changed

    • #1908 - Update dependency Markdown to ~3.3.7
    • #1909 - Update dependency MarkupSafe to ~2.1.1
    • #1912 - Update dependency celery to ~5.2.7
    • #1913 - Update dependency django-jinja to ~2.10.2
    • #1915 - Update dependency invoke to ~1.7.1
    • #1917 - Update dependency svgwrite to ~1.4.2
    • #1919 - Update dependency Pillow to ~9.1.1
    • #1920 - Update dependency coverage to ~6.4.1
    • #1921 - Update dependency django-auth-ldap to ~4.1.0
    • #1924 - Update dependency django-cors-headers to ~3.13.0
    • #1925 - Update dependency django-debug-toolbar to ~3.4.0
    • #1928 - Update dependency napalm to ~3.4.1
    • #1929 - Update dependency selenium to ~4.2.0
    • #1945 - Change the settings_and_registry default context processor to purely settings, moving registry dictionary to be accessible via registry template tag.

    Fixed

    • #1898 - Browsable API is now properly styled as the rest of the app.

    Removed

    • #1462 - Removed job source tab from Job and Job Result view.
    • #2002 - Removed rqworker container from default Docker development environment.

    Contributors

    • @briddo
    • @HanlinMiao
    • @whitej6
    • @gsnider2195
    • @jathanism
    • @glennmatthews
    • @smk4664

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.0-alpha.1...v1.4.0-alpha.2

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.0a2-py3-none-any.whl(22.80 MB)
    nautobot-1.4.0a2.tar.gz(22.33 MB)
  • v1.3.8(Jul 11, 2022)

    Added

    • #1464 - Added "Continue with SSO" link on login page.

    Changed

    • #1407 - Changed custom field export column headings to prefix with cf_.
    • #1603 - Changed GraphQL schema generation to call time for GraphQL API.
    • #1977 - Updated Renovate config to batch updates (additional PRs included to further refine config).
    • #2020 - Updated celery >= 5.2.7, django-jinja >= 2.10.2, and mysqlclient >= 2.1.1 versions in lock file (patch updates).

    Fixed

    • #1838 - Fixed job result to show latest not oldest.
    • #1874 - Fixed Git repo sync issue with Sentinel with deprecated rq_count check.

    Security

    CVE in Django versions >= 3.2, < 3.2.14. This update upgrades Django to 3.2.14.

    Contributors

    • @HanlinMiao
    • @timizuoebideri1

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.7...v1.3.8

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.8-py3-none-any.whl(22.65 MB)
    nautobot-1.3.8.tar.gz(22.20 MB)
  • v1.3.7(Jun 27, 2022)

    Added

    • #1896 - Added Renovate Bot configuration, targeting next.
    • #1900 - Added ability to filter Git repository table based on provided contents.

    Changed

    • #1645 - Hide search bar for unauthenticated users if HIDE_RESTRICTED_UI is True
    • #1946 - Increase character limit on FileAttachment.mimetype to 255 to allow for all mime types to be used.
    • #1948 - Switched Renovate Bot configuration to bump lock-file only on patch releases instead of bumping in pyproject.toml.

    Fixed

    • #1677 - Fixed default values of custom fields on device components (such as Interface) not being applied upon Device creation.
    • #1769 - Resolve missing menu 'General / Installed Plugins' in navbar if HIDE_RESTRICTED_UI is activated
    • #1836 - Fixed incorrect pre-population of custom field filters in table views.
    • #1870 - Fixed cable _abs_length validation error.
    • #1941 - Fixes uWSGI config example, development environment links in Docker section of docs.

    Contributors

    • @HanlinMiao
    • @timizuoebideri1
    • @whitej6
    • @joewesch
    • @Kircheneer

    New Contributors

    • @joewesch made their first contribution in https://github.com/nautobot/nautobot/pull/1941

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.6...v1.3.7

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.7-py3-none-any.whl(22.65 MB)
    nautobot-1.3.7.tar.gz(22.20 MB)
  • v1.4.0-alpha.1(Jun 13, 2022)

    Release Overview

    Added

    Dark Mode UI (#729)

    Nautobot's UI now supports dark mode, both explicitly and via browser preference selection.

    The "Theme" link in the footer provides a modal popup to select the preferred theme. This preference is saved per browser via localStorage.

    Parent Interfaces and Bridge Interfaces (#1455)

    Interface and VMInterface models now have parent_interface and bridge keys. An interface of type Virtual can now associate to a parent physical interface on the same device, virtual chassis, or virtual machine, and an interface of any type can specify another interface as its associated bridge interface. (A new Bridge interface type has also been added, but the bridge interface property is not restricted to interfaces of this type.)

    Rackview UI - Add Option to Truncate Device Name (#1119)

    Users can now toggle device full name and truncated name in the rack elevation view. The truncating function is customizable in nautobot_config.py via defining UI_RACK_VIEW_TRUNCATE_FUNCTION. Default behavior is to split on . and return the first item in the list.

    "Save SVG" link presents the same view as what is currently displayed on screen

    Current preferred toggle state is preserved across tabs (requires refresh) and persists in-browser until local storage is cleared. This presents a consistent behavior when browsing between multiple racks.

    **Currently missing in changelog in release v1.4.0-alpha.1.

    Status Field on Interface, VMInterface Models (#984)

    Interface and VMInterface models now support a status. Default statuses that are available to be set are: Active, Planned, Maintenance, Failed, and Decommissioned. During migration all existing interfaces will be set to the status of "Active".

    A new version of the /dcim/interfaces/* REST API endpoints have been implemented. By default this endpoint continues to demonstrate the pre-1.4 behavior unless the REST API client explicitly requests API version=1.4. If you continue to use the pre-1.4 API endpoints, status is defaulted to "Active".

    Visit the documentation on REST API versioning for more information on using the versioned APIs.

    Changed

    Strict Filter Validation by Default (#1736)

    Filtering of object lists in the UI and in the REST API will now report an error if an unknown or unrecognized filter parameter is specified. This is a behavior change from previous Nautobot releases, in which unknown filter parameters would be silently discarded and ignored.

    A new configuration setting, STRICT_FILTERING has been added. It defaults to True, enabling strict validation of filter parameters, but can be set to False to disable this validation.

    Warning:

    Setting STRICT_FILTERING to False can result in unexpected filtering results in the case of user error, for example a request to /api/dcim/devices/?has_primry_ip=false (note the typo primry) will result in a list of all devices, rather than the intended list of only devices that lack a primary IP address. In the case of Jobs or external automation making use of such a filter, this could have wide-ranging consequences.

    v1.4.0a1 (2022-06-13)

    Added

    • #729 - Added UI dark mode.
    • #984 - Added status field to Interface, VMInterface models.
    • #1119 - Added truncated device name functionality to Rackview UI. **Missing in changelog for this release.
    • #1455 - Added parent_interface and bridge fields to Interface and VMInterface models.

    Changed

    • #1736 - STRICT_FILTERING setting is added and enabled by default.
    • #1793 - Added index notes to fields from analysis, relaxed ConfigContextSchema constraint (unique on name, owner_content_type, owner_object_id instead of just name).

    Fixed

    • #1815 - Fix theme link style in footer.
    • #1831 - Fixed missing parent_interface and bridge from 1.4 serializer of Interfaces.

    Contributors

    • @timizuoebideri1
    • @matt852
    • @glennmatthews
    • @briddo

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.6...v1.4.0-alpha.1

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.4.0a1-py3-none-any.whl(22.75 MB)
    nautobot-1.4.0a1.tar.gz(22.29 MB)
  • v1.3.6(Jun 13, 2022)

    Changed

    • #207 - Update permissions documentation to add assigning permissions section.
    • #1763 - Job testing documentation updated to include details around enabling jobs. Job logs database added to TransactionTestCase.
    • #1829 - Change Docker build GitHub Action to cache with matrix awareness.
    • #1856 - Updated links to Slack community.

    Fixed

    • #1409 - Fixed page title on device status (NAPALM) page template.
    • #1524 - Fixed valid "None" option removed from search field upon display.
    • #1649 - Changed the incorrect view permission (circuits.view_vrf to ipam.view_vrf)
    • #1750 - Fixed incorrect display of boolean value in Virtual Chassis display.
    • #1759 - Fixed TypeError on webhook REST API PATCH.
    • #1787 - Fix scheduled jobs failing when scheduled from REST API.
    • #1841 - Fixed incorrect display of boolean values in Git Repository view.
    • #1848 - Fix Poetry cache issue in CI causing version tests to fail in next.
    • #1850 - Added {{block.super}} to negate the override from the js block in rack.html. This change fixed the issue of unable to navigate away from rack changelog tab.
    • #1868 - Updated link to advanced Docker compose use in getting started guide.

    Contributors

    • @u1735067
    • @timizuoebideri1
    • @Kircheneer
    • @gsnider2195
    • @itdependsnetworks

    New Contributors

    • @HanlinMiao made their first contribution in https://github.com/nautobot/nautobot/pull/1864

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.5...v1.3.6

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.6-py3-none-any.whl(22.65 MB)
    nautobot-1.3.6.tar.gz(22.20 MB)
  • v1.3.5(May 30, 2022)

    Added

    • #1606 - Added best practices for working with FilterSet classes to developer documentation.
    • #1796 - Added documentation for using Git Repositories behind/via proxies.
    • #1811 - Added developer Docker container for running mkdocs instead of locally.

    Changed

    • #1818 - Changed README.md to link to correct build status workflows.

    Fixed

    • #895 - Fixed validation when creating Interface and VMInterface objects via the REST API while specifying untagged_vlan without mode also set in the payload. A 400 error will now be raised as expected.
    • #1289 - Fixed issue where job result live pagination would reset to page 1 on refresh. The currently selected page will now persist until the job run completes.
    • #1290 - Fix NAPALM enable password argument for devices using the eos NAPALM driver.
    • #1427 - Fix NoReverseMatch exception when related views for action_buttons don't exist.
    • #1428 - Fix IPAM prefix utilization sometimes showing greater than 100 percent for IPv4 prefixes.
    • #1604 - Fix missing filter restriction enforcement on relationship association.
    • #1771 - Fix exception raised for RelationshipAssociation when updating source.
    • #1772 - Fix RelationshipAssociationSerializer not triggering model clean method.
    • #1784 - Fix nautobot-server dumpdata not working due to django_rq update. Updated documentation.
    • #1805 - Fix git pre-commit hook incompatibility with dash shell and add warning on skipped tests.

    Security

    image
    • #1808 - Bump PyJWT from 2.3.0 to 2.4.0

    Contributors

    • @briddo
    • @jathanism
    • @timizuoebideri1
    • @gsnider2195
    • @TheRealBecks
    • @glennmatthews

    New Contributors

    • @gsnider2195 made their first contribution in https://github.com/nautobot/nautobot/pull/1802
    • @TheRealBecks made their first contribution in https://github.com/nautobot/nautobot/pull/1801

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.4...v1.3.5

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.5-py3-none-any.whl(22.65 MB)
    nautobot-1.3.5.tar.gz(22.20 MB)
  • v1.3.4(May 16, 2022)

    Added

    • #923 - Added ability to search by UUID (via #1752, #1765)
    • #1766 - Added configuration for downloaded filename branding.
    • #1752 - Added a new SearchFilter that is now used on all core filtersets to provide the q= search parameter for basic searching in list view of objects.

    Changed

    • #1744 - Updated REST API token provisioning docs to include added in version.
    • #1751 - Updated secrets documentation advisory notes.

    Fixed

    • #1263 - Rack device image toggle added back to detail UI.
    • #1449 - Fixed a performance bug in /api/dcim/devices/ and /api/virtualization/virtual-machines/ relating to configuration contexts.
    • #1652 - Unicode now renders correctly on uses of json.dumps and yaml.dump throughout the code base.
    • #1712 - Fixed circuit termination detail view getting 500 response when it's a provider network.
    • #1755 - Fixed "Select All" helper widget from taking full UI height.
    • #1761 - Fixed typo in upgrading documentation.

    Security

    Contributors

    • @briddo
    • @timizuoebideri1
    • @whitej6
    • @Kircheneer
    • @matt852
    • @abates
    • @glennmatthews
    • @jathanism
    • @zackt25

    New Contributors

    • @abates made their first contribution in https://github.com/nautobot/nautobot/pull/1760

    Full Changelog: https://github.com/nautobot/nautobot/compare/v1.3.3...v1.3.4

    Source code(tar.gz)
    Source code(zip)
    nautobot-1.3.4-py3-none-any.whl(22.64 MB)
    nautobot-1.3.4.tar.gz(22.19 MB)
Owner
Nautobot
Network Source of Truth and Network Automation Platform
Nautobot
🎥 PYnema is a simple UDP server written in python, allows you to watch downloaded videos.

🎥 PYnema is a simple UDP server written in python, allows you to watch downloaded videos.

Jan Kupczyk 1 Jan 16, 2022
Securely and anonymously share files, host websites, and chat with friends using the Tor network

OnionShare OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor ne

OnionShare 5.4k Jan 01, 2023
Usbkill - an anti-forensic kill-switch that waits for a change on your USB ports and then immediately shuts down your computer.

Usbkill - an anti-forensic kill-switch that waits for a change on your USB ports and then immediately shuts down your computer.

Hephaestos 4.1k Dec 30, 2022
Repo used to maintain all notes and scripts developed during my DevNet Expert studies

DevNet Expert Studies Exam Date: TBD (Waiting for registration to open) This repository will be used to track my progress and maintain all notes/scrip

Dan 32 Dec 11, 2022
Learn how modern web applications and microservice architecture work as you complete a creative assignment

Micro-service Создание микросервиса Цель работы Познакомиться с механизмом работы современных веб-приложений и микросервисной архитектуры в процессе в

Григорий Верховский 1 Dec 19, 2021
The Delegate Network: An Interactive Voice Response Delegative Democracy Implementation of Liquid Democracy

The Delegate Network Overview The delegate network is a completely transparent, easy-to-use and understand version of what is sometimes called liquid

James Bowery 2 Feb 25, 2022
Program can control your server via discord bot

GTPS Controller Program can control your server via discord bot Require Python How To Use Download This Source Extract The Zip File Paste gtps.py to y

Lamp 2 Mar 15, 2022
NetMiaou is an crossplatform hacking tool that can do reverse shells, send files, create an http server or send and receive tcp packet

NetMiaou is an crossplatform hacking tool that can do reverse shells, send files, create an http server or send and receive tcp packet

TRIKKSS 5 Oct 05, 2022
CloudProxy is to hide your scrapers IP behind the cloud

Hide your scrapers IP behind the cloud. Provision proxy servers across different cloud providers to improve your scraping success.

Christian Laffin 1.1k Jan 02, 2023
Decentra Network is an open source blockchain that combines speed, security and decentralization.

Decentra Network is an open source blockchain that combines speed, security and decentralization. Decentra Network has very high speeds, scalability, asymptotic security and complete decentralization

Decentra Network 74 Nov 22, 2022
Port Traffic/Bandwidth Monitor Script

python-switch-port-traffic-alarm Port Traffic/Bandwidth Monitor Script That's an Switch Port Traffic monitor program is checking the switch uplink por

goksinenki 4 Sep 02, 2021
Bark Toolkit is a toolkit wich provides Denial-of-service attacks, SMS attacks and more.

Bark Toolkit About Bark Toolkit Bark Toolkit is a set of tools that provides denial of service attacks. Bark Toolkit includes SMS attack tool, HTTP

13 Jan 04, 2023
Start a simple TCP Listener on a specified IP Address and Port Number and receive incoming connections.

About Start a simple TCP Listener on a specified IP Address and Port Number and receive incoming connections. Download Clone using git in terminal(git

AgentGeneric 5 Feb 24, 2022
Very simple FTP client, sync folder to FTP server, use python, opensource

ftp-sync-python Opensource, A way to safe your data, avoid lost data by Virus, Randsomware Some functions: Upload a folder automatically to FTP server

4 Sep 13, 2022
A simple tcpdump sidecar injector to demonstrate Kubernetes's Mutating Webhook

k8s-tcpdump-webhook A simple tcpdump sidecar injector to demonstrate Kubernetes's Mutating Webhook Build and Deploy Build docker image; docker build -

Bilal Ünal 2 Sep 01, 2022
Use Fast Redirect to easily redirect your domains.

Fast Redirect Use Fast Redirect to easily redirect your domains. Fast Redirects expects a JSON 'database'. This JSON 'database' contains the domains t

Cyberfusion 1 Dec 20, 2021
Tool that creates a complete copy of your server

Discord-Server-Cloner Tool that creates a complete copy of your server Setup: Open run.bat If the file closes, open cmd And write: pip install -r requ

DEEM 3 Dec 13, 2021
Multiple-requests-poster - A tool to send multiple requests to a particular website written in Python

Multiple-requests-poster - A tool to send multiple requests to a particular website written in Python

RLX 2 Feb 14, 2022
Simple P2P application for sending files over open and forwarded network ports.

FileShareV2 A major overhaul to the V1 (now deprecated) FileShare application. V2 brings major improvements in both UI and performance. V2 is now base

Michael Wang 1 Nov 23, 2021
Build surface water network for MODFLOW's SFR Package

Surface water network Creates surface water network, which can be used to create MODFLOW's SFR. Python packages Python 3.6+ is required. Required geop

Mike Taves 20 Nov 22, 2022