Skip to content

Commit 952be24

Browse files
Merge pull request #13838 from netbox-community/develop
Release v3.6.2
2 parents 99ab054 + b57a474 commit 952be24

File tree

91 files changed

+706
-336
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+706
-336
lines changed

.github/ISSUE_TEMPLATE/bug_report.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ body:
1414
attributes:
1515
label: NetBox version
1616
description: What version of NetBox are you currently running?
17-
placeholder: v3.6.1
17+
placeholder: v3.6.2
1818
validations:
1919
required: true
2020
- type: dropdown

.github/ISSUE_TEMPLATE/feature_request.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ body:
1414
attributes:
1515
label: NetBox version
1616
description: What version of NetBox are you currently running?
17-
placeholder: v3.6.1
17+
placeholder: v3.6.2
1818
validations:
1919
required: true
2020
- type: dropdown

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div align="center">
22
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
3-
<p>The premiere source of truth powering network automation</p>
3+
<p>The premier source of truth powering network automation</p>
44
<img src="https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master" alt="CI status" />
55
<p></p>
66
</div>

contrib/generated_schema.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,10 @@
342342
"100gbase-x-qsfpdd",
343343
"200gbase-x-qsfp56",
344344
"200gbase-x-qsfpdd",
345+
"400gbase-x-qsfp112",
345346
"400gbase-x-qsfpdd",
346347
"400gbase-x-osfp",
348+
"400gbase-x-osfp-rhs",
347349
"400gbase-x-cdfp",
348350
"400gbase-x-cfp8",
349351
"800gbase-x-qsfpdd",

docs/configuration/default-values.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ DEFAULT_DASHBOARD = [
2020
{
2121
'widget': 'extras.ObjectCountsWidget',
2222
'width': 4,
23-
'height': 2,
23+
'height': 3,
2424
'title': 'Organization',
2525
'config': {
2626
'models': [
@@ -32,6 +32,8 @@ DEFAULT_DASHBOARD = [
3232
},
3333
{
3434
'widget': 'extras.ObjectCountsWidget',
35+
'width': 4,
36+
'height': 3,
3537
'title': 'IPAM',
3638
'color': 'blue',
3739
'config': {

docs/development/internationalization.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
9797

9898
1. Ensure translation support is enabled by including `{% load i18n %}` at the top of the template.
9999
2. Use the [`{% trans %}`](https://docs.djangoproject.com/en/stable/topics/i18n/translation/#translate-template-tag) tag (short for "translate") to wrap short strings.
100-
3. Longer strings may be enclosed between [`{% blocktrans %}`](https://docs.djangoproject.com/en/stable/topics/i18n/translation/#blocktranslate-template-tag) and `{% endblocktrans %}` tags to improve readability and to enable variable replacement.
100+
3. Longer strings may be enclosed between [`{% blocktrans %}`](https://docs.djangoproject.com/en/stable/topics/i18n/translation/#blocktranslate-template-tag) and `{% endblocktrans %}` tags to improve readability and to enable variable replacement. (Remember to include the `trimmed` argument to trim whitespace between the tags.)
101101
4. Avoid passing HTML within translated strings where possible, as this can complicate the work needed of human translators to develop message maps.
102102

103103
```
@@ -107,7 +107,7 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
107107
<h5 class="card-header">{% trans "Circuit List" %}</h5>
108108

109109
{# A longer string with a context variable #}
110-
{% blocktrans with count=object.circuits.count %}
110+
{% blocktrans trimmed with count=object.circuits.count %}
111111
There are {count} circuits. Would you like to continue?
112112
{% endblocktrans %}
113113
```

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
![NetBox](netbox_logo.svg "NetBox logo"){style="height: 100px; margin-bottom: 3em"}
22

3-
# The Premiere Network Source of Truth
3+
# The Premier Network Source of Truth
44

55
NetBox is the leading solution for modeling and documenting modern networks. By combining the traditional disciplines of IP address management (IPAM) and datacenter infrastructure management (DCIM) with powerful APIs and extensions, NetBox provides the ideal "source of truth" to power network automation. Read on to discover why thousands of organizations worldwide put NetBox at the heart of their infrastructure.
66

docs/installation/6-ldap.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,126 @@ AUTH_LDAP_CACHE_TIMEOUT = 3600
148148
!!! warning
149149
Authentication will fail if the groups (the distinguished names) do not exist in the LDAP directory.
150150

151+
## Authenticating with Active Directory
152+
153+
Integrating Active Directory for authentication can be a bit challenging as it may require handling different login formats. This solution will allow users to log in either using their full User Principal Name (UPN) or their username alone, by filtering the DN according to either the `sAMAccountName` or the `userPrincipalName`. The following configuration options will allow your users to enter their usernames in the format `username` or `[email protected]`.
154+
155+
Just as before, the configuration options are defined in the file ldap_config.py. First, modify the `AUTH_LDAP_USER_SEARCH` option to match the following:
156+
157+
```python
158+
AUTH_LDAP_USER_SEARCH = LDAPSearch(
159+
"ou=Users,dc=example,dc=com",
160+
ldap.SCOPE_SUBTREE,
161+
"(|(userPrincipalName=%(user)s)(sAMAccountName=%(user)s))"
162+
)
163+
```
164+
165+
In addition, `AUTH_LDAP_USER_DN_TEMPLATE` should be set to `None` as described in the previous sections. Next, modify `AUTH_LDAP_USER_ATTR_MAP` to match the following:
166+
167+
```python
168+
AUTH_LDAP_USER_ATTR_MAP = {
169+
"username": "sAMAccountName",
170+
"email": "mail",
171+
"first_name": "givenName",
172+
"last_name": "sn",
173+
}
174+
```
175+
176+
Finally, we need to add one more configuration option, `AUTH_LDAP_USER_QUERY_FIELD`. The following should be added to your LDAP configuration file:
177+
178+
```python
179+
AUTH_LDAP_USER_QUERY_FIELD = "username"
180+
```
181+
182+
With these configuration options, your users will be able to log in either with or without the UPN suffix.
183+
184+
### Example Configuration
185+
186+
!!! info
187+
This configuration is intended to serve as a template, but may need to be modified in accordance with your environment.
188+
189+
```python
190+
import ldap
191+
from django_auth_ldap.config import LDAPSearch, NestedGroupOfNamesType
192+
193+
# Server URI
194+
AUTH_LDAP_SERVER_URI = "ldaps://ad.example.com:3269"
195+
196+
# The following may be needed if you are binding to Active Directory.
197+
AUTH_LDAP_CONNECTION_OPTIONS = {
198+
ldap.OPT_REFERRALS: 0
199+
}
200+
201+
# Set the DN and password for the NetBox service account.
202+
AUTH_LDAP_BIND_DN = "CN=NETBOXSA,OU=Service Accounts,DC=example,DC=com"
203+
AUTH_LDAP_BIND_PASSWORD = "demo"
204+
205+
# Include this setting if you want to ignore certificate errors. This might be needed to accept a self-signed cert.
206+
# Note that this is a NetBox-specific setting which sets:
207+
# ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
208+
LDAP_IGNORE_CERT_ERRORS = False
209+
210+
# Include this setting if you want to validate the LDAP server certificates against a CA certificate directory on your server
211+
# Note that this is a NetBox-specific setting which sets:
212+
# ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, LDAP_CA_CERT_DIR)
213+
LDAP_CA_CERT_DIR = '/etc/ssl/certs'
214+
215+
# Include this setting if you want to validate the LDAP server certificates against your own CA.
216+
# Note that this is a NetBox-specific setting which sets:
217+
# ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, LDAP_CA_CERT_FILE)
218+
LDAP_CA_CERT_FILE = '/path/to/example-CA.crt'
219+
220+
# This search matches users with the sAMAccountName equal to the provided username. This is required if the user's
221+
# username is not in their DN (Active Directory).
222+
AUTH_LDAP_USER_SEARCH = LDAPSearch(
223+
"ou=Users,dc=example,dc=com",
224+
ldap.SCOPE_SUBTREE,
225+
"(|(userPrincipalName=%(user)s)(sAMAccountName=%(user)s))"
226+
)
227+
228+
# If a user's DN is producible from their username, we don't need to search.
229+
AUTH_LDAP_USER_DN_TEMPLATE = None
230+
231+
# You can map user attributes to Django attributes as so.
232+
AUTH_LDAP_USER_ATTR_MAP = {
233+
"username": "sAMAccountName",
234+
"email": "mail",
235+
"first_name": "givenName",
236+
"last_name": "sn",
237+
}
238+
239+
AUTH_LDAP_USER_QUERY_FIELD = "username"
240+
241+
# This search ought to return all groups to which the user belongs. django_auth_ldap uses this to determine group
242+
# hierarchy.
243+
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
244+
"dc=example,dc=com",
245+
ldap.SCOPE_SUBTREE,
246+
"(objectClass=group)"
247+
)
248+
AUTH_LDAP_GROUP_TYPE = NestedGroupOfNamesType()
249+
250+
# Define a group required to login.
251+
AUTH_LDAP_REQUIRE_GROUP = "CN=NETBOX_USERS,DC=example,DC=com"
252+
253+
# Mirror LDAP group assignments.
254+
AUTH_LDAP_MIRROR_GROUPS = True
255+
256+
# Define special user types using groups. Exercise great caution when assigning superuser status.
257+
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
258+
"is_active": "cn=active,ou=groups,dc=example,dc=com",
259+
"is_staff": "cn=staff,ou=groups,dc=example,dc=com",
260+
"is_superuser": "cn=superuser,ou=groups,dc=example,dc=com"
261+
}
262+
263+
# For more granular permissions, we can map LDAP groups to Django groups.
264+
AUTH_LDAP_FIND_GROUP_PERMS = True
265+
266+
# Cache groups for one hour to reduce LDAP traffic
267+
AUTH_LDAP_CACHE_TIMEOUT = 3600
268+
AUTH_LDAP_ALWAYS_UPDATE_USER = True
269+
```
270+
151271
## Troubleshooting LDAP
152272

153273
`systemctl restart netbox` restarts the NetBox service, and initiates any changes made to `ldap_config.py`. If there are syntax errors present, the NetBox process will not spawn an instance, and errors should be logged to `/var/log/messages`.

docs/installation/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Installation
22

3+
!!! info "NetBox Cloud"
4+
The instructions below are for installing NetBox as a standalone, self-hosted application. For a Cloud-delivered solution, check out [NetBox Cloud](https://netboxlabs.com/netbox-cloud/) by NetBox Labs.
5+
36
The installation instructions provided here have been tested to work on Ubuntu 22.04 and CentOS 8.3. The particular commands needed to install dependencies on other distributions may vary significantly. Unfortunately, this is outside the control of the NetBox maintainers. Please consult your distribution's documentation for assistance with any errors.
47

58
<iframe width="560" height="315" src="https://www.youtube.com/embed/_y5JRiW_PLM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

docs/release-notes/version-3.6.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
11
# NetBox v3.6
22

3+
## v3.6.2 (2023-09-20)
4+
5+
### Enhancements
6+
7+
* [#13245](https://github.com/netbox-community/netbox/issues/13245) - Add interface types for QSFP112 and OSFP-RHS
8+
* [#13563](https://github.com/netbox-community/netbox/issues/13563) - Add support for other delimiting characters when using CSV import
9+
10+
### Bug Fixes
11+
12+
* [#11209](https://github.com/netbox-community/netbox/issues/11209) - Hide available IP/VLAN listing when sorting under a parent prefix or VLAN range
13+
* [#11617](https://github.com/netbox-community/netbox/issues/11617) - Raise validation error on the presence of an unknown CSV header during bulk import
14+
* [#12219](https://github.com/netbox-community/netbox/issues/12219) - Fix dashboard widget heading contrast under dark mode
15+
* [#12685](https://github.com/netbox-community/netbox/issues/12685) - Render Markdown in custom field help text on object edit forms
16+
* [#13653](https://github.com/netbox-community/netbox/issues/13653) - Tweak color of error text to improve legibility
17+
* [#13701](https://github.com/netbox-community/netbox/issues/13701) - Correct display of power feed legs under device view
18+
* [#13706](https://github.com/netbox-community/netbox/issues/13706) - Restore extra filters dropdown on device interfaces list
19+
* [#13721](https://github.com/netbox-community/netbox/issues/13721) - Filter VLAN choices by selected site (if any) when creating a prefix
20+
* [#13727](https://github.com/netbox-community/netbox/issues/13727) - Fix exception when viewing rendered config for VM without a role assigned
21+
* [#13745](https://github.com/netbox-community/netbox/issues/13745) - Optimize counter field migrations for large databases
22+
* [#13756](https://github.com/netbox-community/netbox/issues/13756) - Fix exception when sorting module bay list by installed module status
23+
* [#13757](https://github.com/netbox-community/netbox/issues/13757) - Fix RecursionError exception when assigning config context to a device type
24+
* [#13767](https://github.com/netbox-community/netbox/issues/13767) - Fix support for comments when creating a new service via web UI
25+
* [#13782](https://github.com/netbox-community/netbox/issues/13782) - Fix tag exclusion support for contact assignments
26+
* [#13791](https://github.com/netbox-community/netbox/issues/13791) - Preserve whitespace in values when performing bulk rename of objects via web UI
27+
* [#13809](https://github.com/netbox-community/netbox/issues/13809) - Avoid TypeError exception when editing active configuration with statically defined `CUSTOM_VALIDATORS`
28+
* [#13813](https://github.com/netbox-community/netbox/issues/13813) - Fix member count for newly created virtual chassis
29+
* [#13818](https://github.com/netbox-community/netbox/issues/13818) - Restore missing tags field on L2VPN termination edit form
30+
31+
---
32+
333
## v3.6.1 (2023-09-06)
434

535
### Enhancements
@@ -23,7 +53,7 @@
2353
* [#13657](https://github.com/netbox-community/netbox/issues/13657) - Fix decoding of data file content
2454
* [#13674](https://github.com/netbox-community/netbox/issues/13674) - Fix retrieving individual report via REST API
2555
* [#13682](https://github.com/netbox-community/netbox/issues/13682) - Fix error message returned when validation of custom field default value fails
26-
* [#13684](https://github.com/netbox-community/netbox/issues/13684) - Enable modying the configuration when maintenance mode is enabled
56+
* [#13684](https://github.com/netbox-community/netbox/issues/13684) - Enable modifying the configuration when maintenance mode is enabled
2757

2858
---
2959

0 commit comments

Comments
 (0)