diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 1c330e8a8..ad72e0735 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.1.7 + placeholder: v3.1.8 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index eea258c09..68256471c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.1.7 + placeholder: v3.1.8 validations: required: true - type: dropdown diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c8e3f47ab..9ba75118b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,19 @@ jobs: uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} + + - name: Install Yarn Package Manager + run: npm install -g yarn + + - name: Setup Node.js with Yarn Caching + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: yarn + cache-dependency-path: netbox/project-static/yarn.lock + + - name: Install Frontend Dependencies + run: yarn --cwd netbox/project-static - name: Install dependencies & set up configuration run: | @@ -45,7 +58,6 @@ jobs: pip install -r requirements.txt pip install pycodestyle coverage ln -s configuration.testing.py netbox/netbox/configuration.py - yarn --cwd netbox/project-static - name: Build documentation run: mkdocs build @@ -63,7 +75,7 @@ jobs: run: scripts/verify-bundles.sh - name: Run tests - run: coverage run --source="netbox/" netbox/manage.py test netbox/ + run: coverage run --source="netbox/" netbox/manage.py test netbox/ --parallel - name: Show coverage report run: coverage report --skip-covered --omit *migrations* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a3627a2b1..ee69605c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,13 +16,6 @@ categories for discussions: feature request * **Q&A** - Request help with installing or using NetBox -### Mailing List - -We also have a Google Groups [mailing list](https://groups.google.com/g/netbox-discuss) -for general discussion, however we're encouraging people to use GitHub -discussions where possible, as it's much easier for newcomers to review past -discussions. - ### Slack For real-time chat, you can join the **#netbox** Slack channel on [NetDev Community](https://netdev.chat/). diff --git a/README.md b/README.md index 888b881ab..8429cd4b3 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,6 @@ The complete documentation for NetBox can be found at [Read the Docs](https://ne * [GitHub Discussions](https://github.com/netbox-community/netbox/discussions) - Discussion forum hosted by GitHub; ideal for Q&A and other structured discussions * [Slack](https://netdev.chat/) - Real-time chat hosted by the NetDev Community; best for unstructured discussion or just hanging out -* [Google Group](https://groups.google.com/g/netbox-discuss) - Legacy mailing list; slowly being replaced by GitHub discussions ### Installation diff --git a/docs/configuration/remote-authentication.md b/docs/configuration/remote-authentication.md index c00da8b67..73d29415b 100644 --- a/docs/configuration/remote-authentication.md +++ b/docs/configuration/remote-authentication.md @@ -35,7 +35,7 @@ The list of groups to assign a new user account when created using remote authen Default: `{}` (Empty dictionary) -A mapping of permissions to assign a new user account when created using remote authentication. Each key in the dictionary should be set to a dictionary of the attributes to be applied to the permission, or `None` to allow all objects. (Requires `REMOTE_AUTH_ENABLED`.) +A mapping of permissions to assign a new user account when created using remote authentication. Each key in the dictionary should be set to a dictionary of the attributes to be applied to the permission, or `None` to allow all objects. (Requires `REMOTE_AUTH_ENABLED` as True and `REMOTE_AUTH_GROUP_SYNC_ENABLED` as False.) --- @@ -43,7 +43,7 @@ A mapping of permissions to assign a new user account when created using remote Default: `False` -NetBox can be configured to support remote user authentication by inferring user authentication from an HTTP header set by the HTTP reverse proxy (e.g. nginx or Apache). Set this to `True` to enable this functionality. (Local authentication will still take effect as a fallback.) +NetBox can be configured to support remote user authentication by inferring user authentication from an HTTP header set by the HTTP reverse proxy (e.g. nginx or Apache). Set this to `True` to enable this functionality. (Local authentication will still take effect as a fallback.) (`REMOTE_AUTH_DEFAULT_GROUPS` will not function if `REMOTE_AUTH_ENABLED` is enabled) --- diff --git a/docs/development/index.md b/docs/development/index.md index 03e2cc0c3..85762d0fe 100644 --- a/docs/development/index.md +++ b/docs/development/index.md @@ -7,9 +7,8 @@ NetBox is maintained as a [GitHub project](https://github.com/netbox-community/n There are several official forums for communication among the developers and community members: * [GitHub issues](https://github.com/netbox-community/netbox/issues) - All feature requests, bug reports, and other substantial changes to the code base **must** be documented in a GitHub issue. -* [GitHub Discussions](https://github.com/netbox-community/netbox/discussions) - The preferred forum for general discussion and support issues. Ideal for shaping a feature request prior to submitting an issue. +* [GitHub discussions](https://github.com/netbox-community/netbox/discussions) - The preferred forum for general discussion and support issues. Ideal for shaping a feature request prior to submitting an issue. * [#netbox on NetDev Community Slack](https://netdev.chat/) - Good for quick chats. Avoid any discussion that might need to be referenced later on, as the chat history is not retained long. -* [Google Group](https://groups.google.com/g/netbox-discuss) - Legacy mailing list; slowly being phased out in favor of GitHub discussions. ## Governance diff --git a/docs/installation/index.md b/docs/installation/index.md index 74b51da7f..a06a60bf6 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -11,10 +11,6 @@ The following sections detail how to set up a new instance of NetBox: 5. [HTTP server](5-http-server.md) 6. [LDAP authentication](6-ldap.md) (optional) -The video below demonstrates the installation of NetBox v3.0 on Ubuntu 20.04 for your reference. - - - ## Requirements | Dependency | Minimum Version | diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 27aaa4b4c..1e7e5ac2f 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -1,5 +1,29 @@ # NetBox v3.1 +## v3.1.8 (2022-02-15) + +### Enhancements + +* [#7150](https://github.com/netbox-community/netbox/issues/7150) - Linkify devices on the far side of a rack elevation +* [#8398](https://github.com/netbox-community/netbox/issues/8398) - Embiggen configuration form fields for banner message content +* [#8556](https://github.com/netbox-community/netbox/issues/8556) - Add full username column to changelog table +* [#8620](https://github.com/netbox-community/netbox/issues/8620) - Enable tab completion for `nbshell` + +### Bug Fixes + +* [#8331](https://github.com/netbox-community/netbox/issues/8331) - Implement `replaceAll` string utility function to improve browser compatibility +* [#8391](https://github.com/netbox-community/netbox/issues/8391) - Null date columns should return empty strings during CSV export +* [#8548](https://github.com/netbox-community/netbox/issues/8548) - Fix display of VC members when position is zero +* [#8561](https://github.com/netbox-community/netbox/issues/8561) - Include option to connect a rear port to a console port +* [#8564](https://github.com/netbox-community/netbox/issues/8564) - Fix errant table configuration key `available_columns` +* [#8577](https://github.com/netbox-community/netbox/issues/8577) - Show contact assignment counts in global search results +* [#8578](https://github.com/netbox-community/netbox/issues/8578) - Object change log tables should honor user's configured preferences +* [#8604](https://github.com/netbox-community/netbox/issues/8604) - Fix tag filter on config context list filter form +* [#8609](https://github.com/netbox-community/netbox/issues/8609) - Display validation error when attempting to assign VLANs to interface with no mode during bulk edit +* [#8611](https://github.com/netbox-community/netbox/issues/8611) - Fix bulk editing for certain custom link, webhook, and journal entry fields + +--- + ## v3.1.7 (2022-02-03) ### Enhancements diff --git a/netbox/dcim/forms/bulk_edit.py b/netbox/dcim/forms/bulk_edit.py index 9127b072f..3b604d79d 100644 --- a/netbox/dcim/forms/bulk_edit.py +++ b/netbox/dcim/forms/bulk_edit.py @@ -1043,8 +1043,14 @@ class InterfaceBulkEditForm( def clean(self): super().clean() + if not self.cleaned_data['mode']: + if self.cleaned_data['untagged_vlan']: + raise forms.ValidationError({'untagged_vlan': "Interface mode must be specified to assign VLANs"}) + elif self.cleaned_data['tagged_vlans']: + raise forms.ValidationError({'tagged_vlans': "Interface mode must be specified to assign VLANs"}) + # Untagged interfaces cannot be assigned tagged VLANs - if self.cleaned_data['mode'] == InterfaceModeChoices.MODE_ACCESS and self.cleaned_data['tagged_vlans']: + elif self.cleaned_data['mode'] == InterfaceModeChoices.MODE_ACCESS and self.cleaned_data['tagged_vlans']: raise forms.ValidationError({ 'mode': "An access interface cannot have tagged VLANs assigned." }) diff --git a/netbox/dcim/svg.py b/netbox/dcim/svg.py index 1058d8385..e333320b6 100644 --- a/netbox/dcim/svg.py +++ b/netbox/dcim/svg.py @@ -126,10 +126,16 @@ class RackElevationSVG: link.add(drawing.text(str(name), insert=text, fill='white', class_='device-image-label')) def _draw_device_rear(self, drawing, device, start, end, text): - rect = drawing.rect(start, end, class_="slot blocked") - rect.set_desc(self._get_device_description(device)) - drawing.add(rect) - drawing.add(drawing.text(get_device_name(device), insert=text)) + link = drawing.add( + drawing.a( + href='{}{}'.format(self.base_url, reverse('dcim:device', kwargs={'pk': device.pk})), + target='_top', + fill='black' + ) + ) + link.set_desc(self._get_device_description(device)) + link.add(drawing.rect(start, end, class_="slot blocked")) + link.add(drawing.text(get_device_name(device), insert=text)) # Embed rear device type image if one exists if self.include_images and device.device_type.rear_image: diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 233694a7a..1d68c466a 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -298,6 +298,8 @@ REARPORT_BUTTONS = """