Compare commits

...

1172 Commits

Author SHA1 Message Date
Jeremy Stretch
742804ecb8 Merge pull request #6616 from netbox-community/develop
Release v2.11.7
2021-06-16 16:18:52 -04:00
jeremystretch
2bf20fa501 Release NetBox v2.11.7 2021-06-16 15:59:46 -04:00
jeremystretch
685e0ce00d Closes #6588: Add support for webp files as front/rear device type images 2021-06-16 14:01:30 -04:00
jeremystretch
6a6b0236a9 Closes #6589: Standardize breadcrumb navigation for power panels and feeds 2021-06-16 13:50:35 -04:00
jeremystretch
857c70ece9 Closes #6564: Add N connector type for pass-through ports 2021-06-16 13:43:38 -04:00
jeremystretch
e68be6f041 Add Equinix Metal as a sponsor 2021-06-15 15:22:20 -04:00
Jeremy Stretch
52edeb42b5 Merge pull request #6604 from bluikko/patch-2
custom fields documentation missing word "more"
2021-06-15 10:57:58 -04:00
bluikko
c8a8bfd84d custom fields documentation missing word "more"
The "one or object types" looks like it is missing the word "more".
2021-06-15 15:05:37 +07:00
jeremystretch
9f2c4919eb Update NetDev Slack links 2021-06-14 16:41:10 -04:00
jeremystretch
f56a470cc7 Fixes #6602: Fix deletion of devices with cables attached 2021-06-14 16:38:19 -04:00
jeremystretch
54ccc705d0 Adopt IRM terminology 2021-06-14 14:08:55 -04:00
jeremystretch
7e481960f9 Optimize MPTTColumn rendering 2021-06-14 09:19:05 -04:00
jeremystretch
809d9e4697 Fixes #6584: Fix ordering of nested inventory items 2021-06-10 14:27:42 -04:00
jeremystretch
79c06442db Changelog for #6455, 6493 2021-06-08 15:39:39 -04:00
Jeremy Stretch
6195fc0d11 Merge pull request #6552 from drmsoffall/6493-diff-legacy-changes
Show change log diff for non-atomic changes
2021-06-08 15:24:22 -04:00
Jeremy Stretch
6523334a48 Merge pull request #6545 from crafty-ua/Add_ipv4_32_and_ipv6_128_prefix_support_#6455
Add ipv4 /32 and ipv6 /128 prefix support #6455
2021-06-08 15:12:25 -04:00
jeremystretch
b3cde51590 Fixes #6562: Disable ordering of secrets by assigned object 2021-06-08 14:18:24 -04:00
jeremystretch
6ec296f2a7 Fixes #6563: Fix filtering by location for cable connection forms 2021-06-08 14:15:06 -04:00
jeremystretch
cb4392628f Fixes #6553: ProviderNetwork search should match on name 2021-06-08 14:06:17 -04:00
drmsoffall
a224e5d470 Closes #6493: show ObjectChange diff for non-atomic changes 2021-06-05 19:15:25 +00:00
jeremystretch
7444110c79 PRVB 2021-06-04 11:15:12 -04:00
Jeremy Stretch
fc0c8a160b Merge pull request #6548 from netbox-community/develop
Release v2.11.6
2021-06-04 11:13:26 -04:00
Jeremy Stretch
481cc52686 Merge branch 'master' into develop 2021-06-04 11:01:33 -04:00
jeremystretch
4273b6e4fb Release v2.11.6 2021-06-04 10:59:36 -04:00
jeremystretch
5e08b2be37 Fixes #6544: Fix migration error when upgrading with VRF(s) defined 2021-06-04 10:53:13 -04:00
Your Name
a665b79f85 #6455 - initial 2021-06-04 16:46:02 +02:00
Jeremy Stretch
fe4de7f929 Merge pull request #6542 from netbox-community/develop
Release v2.11.5
2021-06-04 09:29:32 -04:00
jeremystretch
0783d57459 Release v2.11.5 2021-06-04 09:09:56 -04:00
jeremystretch
4e1e5bd8c4 Fix "select all" box (again) 2021-06-04 09:01:58 -04:00
jeremystretch
b3a14e9a7b Improve performance when fetching objects for bulk edit 2021-06-03 21:11:45 -04:00
jeremystretch
b725a9bcea Closes #6495: Replace 'help' link in footer with 'community' 2021-06-03 20:35:53 -04:00
jeremystretch
5c263fac8d Closes #6540: Add a 'flat' column to the prefix table 2021-06-03 20:31:09 -04:00
jeremystretch
04c1619eb4 Remove unused function 2021-06-03 20:27:24 -04:00
jeremystretch
d74dbb722a Changelog for #6527 2021-06-03 17:20:24 -04:00
Jeremy Stretch
95969c4979 Merge pull request #6537 from maximumG/6527-report-description-makdown
feat: markdown support in report's description
2021-06-03 17:18:22 -04:00
maximumG
10c9954ebc fix: remove call-outs regarding markdown support 2021-06-03 20:36:52 +02:00
maxime-gerges-external
e61b2b1fc5 feat: markdown support in report's description
* markdown support in report list and report result pages
* Add notes in the documentation regarding markdown
2021-06-03 14:48:18 +02:00
Daniel Sheppard
46ecb0ac03 Fixes: #6432 - Properly mark nat_outside as read-only and not-required. 2021-06-02 22:45:17 -05:00
jeremystretch
0a0b852f2c Fixes #6492: Correct tag population in post-change data resulting from REST API changes 2021-06-02 17:02:44 -04:00
jeremystretch
1658d7ae86 Fixes #6217: Disallow passing of string values for integer custom fields 2021-06-02 16:12:11 -04:00
jeremystretch
ca44cda112 Suppress migration output during testing 2021-06-02 16:02:38 -04:00
jeremystretch
1935f8b27f Fixes #6517: Fix assignment of user when creating rack reservations via REST API 2021-06-02 16:02:22 -04:00
jeremystretch
d32dba43b4 Fixes #6525: Paginate related IPs table under IP address view 2021-06-02 15:48:15 -04:00
jeremystretch
8d0a3c8e69 Closes #6519: Avoid querying applicable webhooks for every object 2021-06-01 13:55:17 -04:00
Jeremy Stretch
f561b2d955 Merge pull request #6516 from netbox-community/6284-m2m-webhooks
Closes #6284: Fix redundant webhooks
2021-06-01 13:09:21 -04:00
jeremystretch
8afb7d654d Changelog for #6284 2021-06-01 12:57:31 -04:00
jeremystretch
32cbc20108 Restore webhooks worker test 2021-06-01 12:52:25 -04:00
jeremystretch
be3cd2a434 Add bulk operation tests for webhooks 2021-06-01 09:50:38 -04:00
jeremystretch
ba3ca6b00d Update post-change snapshot for M2M changes 2021-06-01 09:30:54 -04:00
jeremystretch
c88dcef900 Extend webhook create/update/delete tests 2021-06-01 09:04:01 -04:00
jeremystretch
3d1e4fde81 Initial work on #6284 2021-05-28 16:07:27 -04:00
jeremystretch
1e02bb5999 Fixes #6064: Fix object permission assignments for user and group models 2021-05-28 13:27:05 -04:00
jeremystretch
bd7bcf8a0b Fixes #6496: Fix upgrade script when Python installed in nonstandard path 2021-05-28 13:18:50 -04:00
jeremystretch
1c0f3e1b81 Fixes #6502: Correct permissions evaluation for running a report via the REST API 2021-05-28 13:16:25 -04:00
jeremystretch
b2b3f388b1 Correct Prefix REST API test case 2021-05-28 11:15:45 -04:00
jeremystretch
110a6d11a5 Closes #6487: Add location filter to cable connection form 2021-05-28 09:09:59 -04:00
jeremystretch
75faf7d30e Closes #6501: Expose prefix depth and children on REST API serializer 2021-05-28 08:56:55 -04:00
Jeremy Stretch
e95a9731be Merge pull request #6488 from netbox-community/6087-prefix-depth-children
Closes #6087: Cache prefix depth & children count
2021-05-28 08:37:45 -04:00
jeremystretch
5cb5f9a963 Linkify prefix children count 2021-05-27 15:40:55 -04:00
jeremystretch
88aa3a4e19 Specify batch size for bulk_update() 2021-05-27 15:25:40 -04:00
jeremystretch
d34b9ee00e Add max depth selector 2021-05-27 13:24:31 -04:00
jeremystretch
103730a642 Extend depth & children filters 2021-05-27 12:54:41 -04:00
jeremystretch
84017776ec Fix handling of duplicate prefixes 2021-05-27 10:03:00 -04:00
jeremystretch
34e673f7d6 Introduce rebuild_prefixes management command 2021-05-27 09:24:29 -04:00
jeremystretch
5ac6a307bf Rearrange contact links 2021-05-26 21:45:18 -04:00
jeremystretch
8c1b681391 Add GitHub discussions link; replace Google Group with netdev.chat 2021-05-26 21:43:32 -04:00
jeremystretch
da558de769 Initial work on #6087 2021-05-26 16:06:03 -04:00
jeremystretch
da1fb4f969 Replace references to v2.12 with v3.0 2021-05-25 15:05:02 -04:00
jeremystretch
9046f59b9f PRVB 2021-05-25 12:12:08 -04:00
Jeremy Stretch
6c1f9dba52 Merge pull request #6480 from netbox-community/develop
Release v2.11.4
2021-05-25 12:08:16 -04:00
jeremystretch
ea1df2b5c3 Merge branch 'master' into develop 2021-05-25 11:49:03 -04:00
jeremystretch
b3423e1722 Release v2.11.4 2021-05-25 11:38:43 -04:00
jeremystretch
bfb91fcf10 Closes #6422: Enable filtering users by group under admin UI 2021-05-25 11:26:18 -04:00
jeremystretch
44c62f8f44 Release notes for #6358 2021-05-25 11:16:06 -04:00
Jeremy Stretch
c8c47961db Merge pull request #6473 from rodvand/develop
Closes #6358: Add search to VLAN group overview.
2021-05-25 10:33:37 -04:00
Martin Rødvand
78b0e50742 Closes #6358: Add search to VLAN group overview. 2021-05-22 14:27:18 +02:00
jeremystretch
a7371c048b Changelog for #5121 2021-05-21 17:25:37 -04:00
Jeremy Stretch
f3dfa81811 Merge pull request #6470 from netbox-community/5121-filter-tags-content-type
Closes #5121: Add object type filters for Tags
2021-05-21 17:22:30 -04:00
jeremystretch
5b4793a2d5 Closes #5121: Add content_type filters for tags 2021-05-21 17:05:32 -04:00
jeremystretch
b6660c72e1 Add tags as a feature query 2021-05-21 16:54:33 -04:00
jeremystretch
a6eeed4061 Fixes #6467: Fix access to metrics on custom BASE_PATH when login is required 2021-05-21 15:56:22 -04:00
jeremystretch
239fddcac2 Fixes #6468: Disable ordering VLAN groups list by scope object 2021-05-21 15:43:18 -04:00
jeremystretch
b27f9bf74c Changelog for #6465 2021-05-21 11:17:58 -04:00
Jeremy Stretch
09b856bf0b Merge pull request #6449 from 991jo/device_type_import_fix
Fixed #6438 Device Type Import does not import/export description/label fields for many components
2021-05-21 11:16:32 -04:00
Jeremy Stretch
9954c6a571 Merge pull request #6419 from tehtbl-oss/develop
Update netbox/extras/plugins/views.py#L45 by fixing a typo in method _get_plugin_data
2021-05-21 11:08:11 -04:00
jeremystretch
44b24de5d0 Add DigitalOcean as sponsor 2021-05-20 12:41:23 -04:00
jeremystretch
22927bfc76 Closes #6441: Improve UI paginator to optimize page object count 2021-05-20 12:00:31 -04:00
jeremystretch
a39522a25e Closes #6434: Add deprecation warning for stock secrets functionality 2021-05-20 10:51:41 -04:00
Johannes Erwerle
ea6c8a1a65 Fixed #6438 Device Type Import does not import/export description/label fields for many components 2021-05-20 06:30:44 +00:00
jeremystretch
546bbe5418 Fixes #6426: Allow assigning virtual chassis member interfaces to LAG on VC master 2021-05-18 16:42:21 -04:00
jeremystretch
5ca7f375d3 Clean up stray quote 2021-05-17 13:18:02 -04:00
jeremystretch
568148a349 Warn against relying on demo instance for bug reports 2021-05-17 13:10:49 -04:00
Jeremy Stretch
fedf745d25 Merge pull request #6428 from shinsterneck/patch-1
Typo fix in Documentation section "Invalidating Cached Data"
2021-05-17 08:41:16 -04:00
Shin Sterneck
8823aeb9d7 Typo fix
Fix a small typo
2021-05-17 09:27:44 +02:00
Thomas
dc57332988 Update views.py
Fixing typo in 'version'
2021-05-14 18:22:01 +02:00
jeremystretch
138231059b Closes #6400: Add cyan color choice for plugin buttons 2021-05-14 09:13:36 -04:00
jeremystretch
834b233c30 Fixes #6398: Avoid exception when deleting device connected to self via circuit 2021-05-14 09:06:00 -04:00
jeremystretch
72d41eac85 Fixes #6376: Fix assignment of VLAN groups to clusters, cluster groups via REST API 2021-05-12 13:47:42 -04:00
jeremystretch
0fec03ad3f Closes #6393: Add description filter for IP addresses 2021-05-12 13:38:52 -04:00
Jeremy Stretch
7dc71f92d0 Merge pull request #6378 from bluikko/patch-1
Typo in powerfeed.md
2021-05-10 09:16:46 -04:00
bluikko
f74b47ca16 Typo in powerfeed.md
pot -> port
2021-05-09 12:33:09 +07:00
jeremystretch
4dff20cc8c PRVB 2021-05-07 10:22:30 -04:00
Jeremy Stretch
c855570b55 Merge pull request #6371 from netbox-community/develop
Release v2.11.3
2021-05-07 10:19:48 -04:00
jeremystretch
395add8114 Merge branch 'master' of https://github.com/netbox-community/netbox into develop 2021-05-07 10:06:37 -04:00
jeremystretch
019a5563c4 Release v2.11.3 2021-05-07 10:01:17 -04:00
jeremystretch
e9b21aaf86 Fixes #6312: Interface device filter should return all virtual chassis interfaces only if device is master 2021-05-07 09:47:32 -04:00
jeremystretch
d6a0cbb1a0 Add sponsors 2021-05-06 16:37:47 -04:00
jeremystretch
3900b97136 Extend release checklist to include bumping version in GitHub issue templates 2021-05-06 14:41:16 -04:00
jeremystretch
2d4ae38a09 Fixes #6369: Fix interface assignment for VLANs in non-scoped groups 2021-05-06 14:36:23 -04:00
jeremystretch
7f2f98885b Fixes #6350: Include first & last IP addresses when allocating available IPv6 addresses via the REST API 2021-05-06 13:59:10 -04:00
jeremystretch
a4955b420a Fixes #6355: Fix caching error when swapping A/Z circuit terminations 2021-05-06 13:29:52 -04:00
jeremystretch
fe78f60b1f Fixes #6357: Fix ProviderNetwork nested API serializer 2021-05-06 13:06:10 -04:00
jeremystretch
21d14a782e Closes #6359: Enable custom links for organizational and nested group models 2021-05-06 13:01:20 -04:00
jeremystretch
c0f1243879 Fixes #6363: Correct pre-population of cluster group when creating a cluster 2021-05-06 12:47:58 -04:00
jeremystretch
67945f2f33 Closes #6351: Add aggregates count to tenant view 2021-05-05 09:53:06 -04:00
jeremystretch
30ffa4c3f2 Relax stale issue timers to 60/30 days 2021-05-05 09:46:54 -04:00
jeremystretch
97d5873e3d Fixes #6240: Fix display of available VLAN ranges under VLAN group view 2021-05-04 09:36:01 -04:00
jeremystretch
fb1173bc30 Fixes #6339: Improve ordering of interfaces when viewing virtual chassis master 2021-05-04 09:12:26 -04:00
Jeremy Stretch
f0acaa16c4 Merge pull request #6334 from netbox-community/6320-filterset-testing
Closes #6320: Add tests for created & last_updated fields
2021-05-03 15:45:02 -04:00
jeremystretch
3bd99e1910 Closes #6320: Introduce ChangeLoggedFilterSetTests 2021-05-03 15:25:16 -04:00
jeremystretch
ad19b09ae3 Fixes #6333: Fix filtering of circuit terminations by primary key 2021-05-03 14:38:26 -04:00
jeremystretch
ffa4cd134b Introduce BaseFilterSetTests to standardize testing of PK filters 2021-05-03 14:36:44 -04:00
jeremystretch
fbffef1cc4 Rename FilterSet test modules 2021-05-03 13:07:19 -04:00
jeremystretch
2a402b632d Raise operations limit for stalebot 2021-05-03 11:18:04 -04:00
jeremystretch
3bba1089ed Clean up YAML string formatting 2021-04-30 16:08:50 -04:00
jeremystretch
c9c8108a53 Reference demo instance for testing bug reports 2021-04-30 15:54:43 -04:00
jeremystretch
067fdaeb8f Changelog for #6321 2021-04-30 15:47:06 -04:00
Jeremy Stretch
b6e862bd10 Merge pull request #6322 from checktheroads/develop-6321
Closes #6321: Re-add missing 'Add an IP Address' button in prefix view
2021-04-30 15:36:22 -04:00
checktheroads
f1cdd72575 move 'Add an IP Address' button to ip_addresses template 2021-04-30 12:07:56 -07:00
checktheroads
c59c4290f9 Closes #6321: Re-add missing 'Add an IP Address' button in prefix view 2021-04-30 09:50:14 -07:00
jeremystretch
fd9d9d9d35 Closes #6318: Add OM5 MMF cable type 2021-04-30 10:10:03 -04:00
jeremystretch
2a5b497d8a Fixes #6313: Fix device type instance count under manufacturer view 2021-04-30 10:08:15 -04:00
Jeremy Stretch
b93570eeb0 Merge pull request #6315 from netbox-community/6314-filterset-cleanup
Closes #6314: FilterSet cleanup
2021-04-29 19:42:52 -04:00
jeremystretch
3ef6284a0d Move base FilterSet classes under netbox core 2021-04-29 16:53:48 -04:00
jeremystretch
1024782b9e Rename FilterSet modules 2021-04-29 16:48:24 -04:00
jeremystretch
d35ac1347c Move TagFilter to extras 2021-04-29 16:23:55 -04:00
jeremystretch
c4e88fd11a Consolidate FilterSet classes 2021-04-29 15:59:11 -04:00
jeremystretch
0de50e0afe Split Filter and FilterSet classes 2021-04-29 15:13:44 -04:00
jeremystretch
763b02975c Reference the demo instance in the README 2021-04-29 13:45:44 -04:00
jeremystretch
cc57d1edf7 Fixes #6309: Restrict parent VM interface assignment to the parent VM 2021-04-29 08:50:19 -04:00
jeremystretch
bb988701fe Fixes #6308: Fix linking of available VLANs in VLAN group view 2021-04-29 08:43:46 -04:00
jeremystretch
75fdff4d41 Changelog & docs for #6197 2021-04-29 08:10:11 -04:00
Jeremy Stretch
8fc49f37a7 Merge pull request #6307 from mpalmer/patch-1
Expose Django SESSION_COOKIE_NAME setting
2021-04-29 08:04:59 -04:00
jeremystretch
51f6d2f45e PRVB 2021-04-27 10:47:48 -04:00
Jeremy Stretch
1abaa5e60c Merge pull request #6292 from netbox-community/develop
Release v2.11.2
2021-04-27 10:45:12 -04:00
Jeremy Stretch
f4792eea04 Merge branch 'master' into develop 2021-04-27 10:24:13 -04:00
jeremystretch
1fe1e1ce7e Release v2.11.2 2021-04-27 10:20:36 -04:00
jeremystretch
58659cf3b6 Fixes #6262: Support filtering by created/updated time for all relevant objects 2021-04-27 10:04:28 -04:00
jeremystretch
9a588231c5 Fixes #6289: Fix assignment of VC member interfaces to LAG interfaces 2021-04-27 09:36:48 -04:00
jeremystretch
f408ad16e4 Closes #6287: Add option to clear assigned max length filter on prefixes list 2021-04-27 08:34:21 -04:00
jeremystretch
fecca5ad83 Fixes #6267: Fix cable tracing API endpoint for circuit terminations 2021-04-26 16:49:52 -04:00
jeremystretch
9e5d41c48a Remove myself from funding 2021-04-26 15:55:53 -04:00
jeremystretch
87b4cfff1a Closes #6278: Note device locations on cable traces 2021-04-26 15:31:53 -04:00
jeremystretch
19a2b9042f Closes #6275: Linkify rack, device counts on locations list 2021-04-26 15:28:35 -04:00
jeremystretch
2618dde1e2 Fixes #6236: Journal entry title should account for configured timezone 2021-04-23 15:27:58 -04:00
jeremystretch
1dd9f8c1d4 Fixes #6248: Fix table column reconfiguration under Chrome 2021-04-23 10:27:58 -04:00
jeremystretch
4939b6b641 Fixes #6252: Fix assignment of console port speed values above 19.2kbps 2021-04-23 10:07:11 -04:00
jeremystretch
52747e364a Fixes #6254: Disable ordering of space column in racks table 2021-04-23 09:44:29 -04:00
jeremystretch
1901e93b1e Fixes #6258: Fix parent assignment for SiteGroup API serializer 2021-04-23 09:37:22 -04:00
jeremystretch
648b9dd7d8 Closes #6239: Fix sudo invokations of echo 2021-04-22 14:11:58 -04:00
jeremystretch
396c91f8f7 Fixes #6246: Permit full-length descriptions when creating device components and VM interfaces 2021-04-22 14:05:07 -04:00
jeremystretch
83f520f7a8 PRVB 2021-04-21 10:37:51 -04:00
Jeremy Stretch
d8ae65a762 Merge pull request #6230 from netbox-community/develop
Release v2.11.1
2021-04-21 10:05:35 -04:00
Jeremy Stretch
efea511211 Merge branch 'master' into develop 2021-04-21 09:53:23 -04:00
jeremystretch
2564818c3e Release v2.11.1 2021-04-21 09:47:30 -04:00
jeremystretch
e6930d9601 Closes #6161: Enable ordering of device component tables 2021-04-20 20:21:52 -04:00
jeremystretch
4e405ce530 Closes #6210: Include child locations on location view 2021-04-20 14:15:12 -04:00
jeremystretch
88ffc9b145 Update GitHub issue templates 2021-04-20 11:37:03 -04:00
jeremystretch
9ed76400de Closes #6179: Enable natural ordering for virtual machines 2021-04-20 09:37:43 -04:00
jeremystretch
497e50c559 Closes #6190: Allow filtering devices with no location assigned 2021-04-19 16:55:57 -04:00
jeremystretch
7cf9e202a3 Fixes #6215: Restore tenancy section in virtual machine form 2021-04-19 16:50:56 -04:00
jeremystretch
620d222f98 Closes #6189: Add ability to search for locations by name or description 2021-04-19 15:56:39 -04:00
jeremystretch
a2d16143e3 Fixes #6188: Support custom field filtering for regions, site groups, and locations 2021-04-19 11:05:40 -04:00
jeremystretch
97c087ef5f Fixes #6196: Fix object list display for users with read-only permissions 2021-04-19 10:46:23 -04:00
Matt Palmer
07f39b31da Expose Django SESSION_COOKIE_NAME setting
There are situations in which it is convenient to be able to modify the name of the cookie that the application uses for storing the session token (conflicts with other cookies on the same domain, for example).
2021-04-19 12:00:27 +10:00
jeremystretch
6bd4b3c167 Fixes #6184: Fix parent object table column in prefix IP addresses list 2021-04-16 13:07:41 -04:00
jeremystretch
89350a80ad PRVB 2021-04-16 10:32:21 -04:00
Jeremy Stretch
f26227ecec Merge pull request #6180 from netbox-community/develop
Release v2.11.0
2021-04-16 09:52:45 -04:00
Jeremy Stretch
c002501c2e Merge branch 'master' into develop 2021-04-16 09:40:29 -04:00
jeremystretch
8af78c6d84 Release v2.11.0 2021-04-16 09:36:05 -04:00
jeremystretch
7e8ffd8390 Fix markdown list indentation 2021-04-16 09:32:37 -04:00
jeremystretch
5bd30060e7 Fixes #6177: Prevent VM interface from being assigned as its own parent 2021-04-16 09:18:58 -04:00
jeremystretch
c24cac9a44 Fixes #6176: Correct position of MAC address field when creating VM interfaces 2021-04-16 09:16:43 -04:00
jeremystretch
2bc9730b1d Merge release notes from v2.11-beta1 2021-04-16 09:16:01 -04:00
Jeremy Stretch
428858dc75 Merge pull request #6175 from netbox-community/feature
Prep for v2.11 release
2021-04-16 08:45:23 -04:00
jeremystretch
8a425a93ae Fixes #6173: Fix assigned device/VM count when bulk editing/deleting device roles 2021-04-15 19:53:46 -04:00
jeremystretch
0bb2a051b6 Fixes #6171: Fix display of horizontally-scrolling object lists 2021-04-15 15:52:11 -04:00
jeremystretch
ef78a7d41b Merge branch 'develop' into feature 2021-04-15 15:46:48 -04:00
Jeremy Stretch
6c1c695616 Merge pull request #6172 from netbox-community/develop
Release v2.10.10
2021-04-15 15:34:24 -04:00
Jeremy Stretch
8bdab347b6 Merge branch 'master' into develop 2021-04-15 15:24:36 -04:00
jeremystretch
ae349d4424 Release v2.10.10 2021-04-15 15:20:30 -04:00
jeremystretch
3e49745257 Changelog for #6168 2021-04-15 13:30:42 -04:00
Jeremy Stretch
c2b7226205 Merge pull request #6169 from promasu/develop
Fixes #6168: Add SFP56 interface type
2021-04-15 13:29:44 -04:00
jeremystretch
f67369a9a9 Fixes #5643: Fix VLAN assignment when editing VM interfaces in bulk 2021-04-15 13:26:19 -04:00
Adrian Nöthlich
14d2a49942 Fixes #6168: Add SFP56 interface type
Signed-off-by: Adrian Nöthlich <git@promasu.tech>
2021-04-15 18:37:45 +02:00
jeremystretch
92df40a6a0 Fixes #5652: Update object data when renaming a custom field 2021-04-15 12:04:34 -04:00
jeremystretch
a2203da1c6 Fixes #6162: Fix choice field filters (multiple models) 2021-04-14 16:17:19 -04:00
jeremystretch
0fb8291b8b Documentation cleanup 2021-04-14 15:21:30 -04:00
jeremystretch
b393ec2856 Enable webhooks for JournalEntry 2021-04-14 14:55:01 -04:00
jeremystretch
664ba55460 Reorganize base TestCase classes 2021-04-14 14:22:58 -04:00
jeremystretch
3d0882856f Closes #5796: Add DC terminal power port, outlet types 2021-04-14 10:44:15 -04:00
jeremystretch
e849d28276 Closes #5980: Add Saf-D-Grid power port, outlet types 2021-04-14 10:40:31 -04:00
jeremystretch
18a691482d Closes #6160: Add F connector port type 2021-04-14 10:38:54 -04:00
jeremystretch
7c48e3632d Closes #6157: Support Markdown rendering for report logs 2021-04-14 10:21:07 -04:00
jeremystretch
8701b20899 Fixes #6155: Fix admin links for plugins, background tasks 2021-04-14 09:46:05 -04:00
jeremystretch
e3f5062583 Merge branch 'develop' into feature 2021-04-13 16:41:46 -04:00
jeremystretch
d427e0522e Closes #5757: Add unique identifier to every object view 2021-04-13 16:14:12 -04:00
jeremystretch
46e144f647 Clean up object header 2021-04-13 16:03:07 -04:00
jeremystretch
6ad20c53d9 Delete unused template 2021-04-13 15:58:21 -04:00
jeremystretch
cc433388f5 Fixes #6056: Optimize change log cleanup 2021-04-13 13:48:22 -04:00
jeremystretch
1fba4b7e32 Fixes #5419: Update parent device/VM when deleting a primary IP 2021-04-13 13:23:25 -04:00
jeremystretch
c249cd4ffd Fixes #6152: Fix custom field filtering for cables, virtual chassis 2021-04-13 12:05:44 -04:00
jeremystretch
d54bf5f75e Fixes #6144: Fix MAC address field display in VM interfaces search form 2021-04-13 11:52:32 -04:00
jeremystretch
9cbe3ff551 Enable close-stale-issue action 2021-04-13 11:46:14 -04:00
jeremystretch
b1d20d3228 Closes #6149: Support image attachments for locations 2021-04-13 11:39:04 -04:00
jeremystretch
e5602abee0 Closes #5848: Filter custom fields by content type in format <app_label>.<model> 2021-04-13 11:30:45 -04:00
jeremystretch
a296a9e109 Closes #6150: Enable change logging for journal entries 2021-04-13 10:53:55 -04:00
jeremystretch
e5bbf47ab9 Fixes #5583: Eliminate redundant change records when adding/removing tags 2021-04-13 10:14:25 -04:00
jeremystretch
9bda2a44ae Fix permissions for cable trace view tests 2021-04-12 16:25:52 -04:00
jeremystretch
a1d32c3a21 Add view tests for CircuitTermination 2021-04-12 16:07:52 -04:00
jeremystretch
b4b68c0b00 Move create_test_device() to testing utils 2021-04-12 16:07:03 -04:00
jeremystretch
608bf30bda Add cable trace view tests 2021-04-12 15:52:24 -04:00
jeremystretch
d0be5f09a5 Merge branch 'develop' into feature 2021-04-12 15:35:12 -04:00
jeremystretch
3d8a3a2204 Fix link 2021-04-12 15:17:50 -04:00
jeremystretch
b19734004a Removed the "Additional information" blocks from issue templates (no longer needed) 2021-04-12 15:06:40 -04:00
jeremystretch
f503c72782 Closes #6146: Add bulk disconnect support for power feeds 2021-04-12 15:02:29 -04:00
jeremystretch
f8903a8183 Merge branch 'develop' into feature 2021-04-12 14:19:30 -04:00
jeremystretch
d43d5a6cb6 Change stale issues management to GitHub Actions 2021-04-12 13:53:38 -04:00
jeremystretch
99f4b2cf95 PRVB 2021-04-12 13:29:37 -04:00
Jeremy Stretch
b493d739bd Merge pull request #6143 from netbox-community/develop
Release v2.10.9
2021-04-12 13:28:28 -04:00
jeremystretch
92fb43a455 Merge branch 'master' into develop 2021-04-12 13:18:24 -04:00
jeremystretch
7c29fb449e Release v2.10.9 2021-04-12 13:10:33 -04:00
jeremystretch
7ddcec3a0d Fixes #6082: Support colons in webhook header values 2021-04-12 12:09:37 -04:00
jeremystretch
18f206747c Closes #6088: Improved table configuration form 2021-04-12 10:46:32 -04:00
jeremystretch
0bce1da4e3 Clean up stray references to old RackGroup model 2021-04-11 13:43:06 -04:00
jeremystretch
65ed047084 Fixes #6124: Location parent filter should return all child locations (not just those directly assigned) 2021-04-11 13:42:24 -04:00
jeremystretch
b0573f88e6 Merge branch 'develop' into feature 2021-04-11 13:16:00 -04:00
jeremystretch
348fca7e28 Fixes #6117: Handle exception when attempting to assign an MPTT-enabled model as its own parent 2021-04-11 12:57:53 -04:00
jeremystretch
cc9b750eff Changelog & docs for #6083 2021-04-09 14:58:40 -04:00
Marcus Weiner
701ad8a4a9 Allow skipping TLS cert verification on Redis connection (#6084)
* Allow skipping redis tls cert verification

* Add config example
2021-04-09 14:51:58 -04:00
jeremystretch
2cc088c633 Fixes #6131: Correct handling of boolean fields when cloning objects 2021-04-09 14:42:07 -04:00
tcaiazza
4dfba3a2ad Update export-templates.md (#6091)
* Update export-templates.md

* Update export-templates.md

Co-authored-by: Jeremy Stretch <jeremy@netverity.dev>
2021-04-09 14:14:08 -04:00
jeremystretch
a3721a94ce Closes #6121: Extend parent interface assignment to VM interfaces 2021-04-09 10:53:05 -04:00
jeremystretch
7439faad34 Fixes #6123: Prevent device from being assigned to mismatched site and location 2021-04-09 09:56:36 -04:00
jeremystretch
6efe54aa88 Closes #6125: Add locations count to home page 2021-04-09 09:47:34 -04:00
jeremystretch
9e62d1ad8f Fixes #6130: Improve display of assigned models in custom fields list 2021-04-09 09:43:35 -04:00
jeremystretch
e69251b21a Fixes #6070: Add missing 'count_ipaddresses' attribute to VMInterface serializer 2021-04-08 14:22:45 -04:00
jeremystretch
f096c4a5d0 #6081: Tweak queryset filtering 2021-04-08 14:18:07 -04:00
jeremystretch
03b3f5937f Fixes #6108: Do not infer tenant assignment from parent objects for prefixes, IP addresses 2021-04-08 13:50:06 -04:00
jeremystretch
696b5c80a7 Closes #6097: Redirect old slug-based object views 2021-04-08 13:25:29 -04:00
jeremystretch
d6fcd22752 Fixes #6110: Fix handling of TemplateColumn values for table export 2021-04-08 10:30:13 -04:00
jeremystretch
54d9ca8ed8 Add racks count to location view 2021-04-08 10:10:46 -04:00
jeremystretch
05d8a06cd5 Closes #6109: Add device counts to locations table 2021-04-08 10:08:50 -04:00
jeremystretch
4f7626828a Fixes #6107: Fix rack selection field on device form 2021-04-07 16:58:40 -04:00
jeremystretch
81193eb550 Fixes #6106: Allow assigning a virtual interface as the parent of an existing interface 2021-04-07 16:36:09 -04:00
jeremystretch
38b09dc610 Fixes #6105: Hide checkboxes for VMs under cluster VMs view 2021-04-07 16:26:16 -04:00
jeremystretch
ae3527df16 Fixes #6081: Fix interface connections REST API endpoint 2021-04-07 16:04:32 -04:00
jeremystretch
85d0270af0 Fixes #6099: Correct example permission description 2021-04-07 15:50:24 -04:00
jeremystretch
59e185b781 Fixes #6104: Fix location column on racks table 2021-04-07 15:40:03 -04:00
jeremystretch
b5ad29e3f2 Fixes #6100: Fix VM interfaces table "add interfaces" link 2021-04-07 15:17:02 -04:00
jeremystretch
f1e2b99456 Release v2.11-beta1 2021-04-06 11:45:32 -04:00
jeremystretch
0635e7ae1e Update dependencies for v2.11-beta1 2021-04-06 11:36:30 -04:00
jeremystretch
8f674aede9 Bump Django to 3.2 2021-04-06 09:45:59 -04:00
jeremystretch
838200219f Include child regions, site groups 2021-04-06 09:42:36 -04:00
jeremystretch
e543b305c3 Docs cleanup 2021-04-05 21:46:48 -04:00
jeremystretch
d42b0691b2 Fix 'select all' widget 2021-04-05 17:13:32 -04:00
jeremystretch
71022d58d3 Site is required when creating devices 2021-04-05 16:35:01 -04:00
jeremystretch
a313b675a6 Simplify CircuitTermination display in circuits table 2021-04-05 15:24:57 -04:00
jeremystretch
ae18693715 Add 'add export template' link to dropdown 2021-04-05 15:13:35 -04:00
jeremystretch
3ad7622bf0 Catch AttributeError when generating ContentType labels 2021-04-05 15:11:29 -04:00
jeremystretch
19cb575b90 Permit the assignment of virtual interfaces as parents 2021-04-05 14:48:11 -04:00
jeremystretch
3cfab25f8a Tweak JournalEntry form layout 2021-04-05 14:35:09 -04:00
jeremystretch
85359bb10f Fix ContentType assignment 2021-04-05 14:05:28 -04:00
jeremystretch
aa2beb1d78 Add tagged items count to tag view 2021-04-05 13:53:25 -04:00
jeremystretch
2e07ac5a47 Rearrange provider, provider network templates 2021-04-05 13:18:19 -04:00
jeremystretch
d844ee2c79 Empty time_zone should be null 2021-04-05 13:05:07 -04:00
jeremystretch
266482649f Update VLAN documentation 2021-04-05 12:55:57 -04:00
jeremystretch
83496c66d1 Move breadcrumb generation to template 2021-04-05 12:06:59 -04:00
jeremystretch
374cb74978 Filter parent location by ID 2021-04-05 11:53:40 -04:00
jeremystretch
f0018dcba9 LinkedCountColumn should always invoke filter by ID 2021-04-05 11:47:25 -04:00
jeremystretch
7949a5e1fd Migrate VLANGroup site assignments 2021-04-05 11:40:46 -04:00
jeremystretch
0a1531ce8a TenantColumn should export null if no tenant is assigned 2021-04-05 11:18:30 -04:00
jeremystretch
7b8bd2d4ce Location model cleanup 2021-04-05 11:09:33 -04:00
jeremystretch
4883bc3dd4 Empty MAC address should be null 2021-04-02 17:53:00 -04:00
jeremystretch
72a115b434 Add child interfaces table to interface view 2021-04-02 17:33:34 -04:00
jeremystretch
f28edd0864 Use CommentField for JournalEntry comments 2021-04-02 17:14:15 -04:00
jeremystretch
d69ec7f8e4 Add manufacturer column to DeviceTable 2021-04-02 17:02:12 -04:00
jeremystretch
779837389b Convert all LinkColumns to Column(linkify=True) 2021-04-02 16:59:53 -04:00
jeremystretch
ea9e9d7273 Add the models index 2021-04-02 16:29:01 -04:00
jeremystretch
237dfce8a0 Fix tab headers 2021-04-02 15:44:15 -04:00
jeremystretch
2b0ccf3acd Provide absolute URL for object search form 2021-04-02 15:27:00 -04:00
jeremystretch
e4f3b3447e Remove redundant prechange_data assignments 2021-04-02 15:21:11 -04:00
Jeremy Stretch
eb8e4f64fc Restore 'brief' parameter (regression from a292ff5cc0) 2021-04-02 11:37:09 -04:00
Jeremy Stretch
6287f75e67 Toggle VLANGroup scope selector fields 2021-04-02 11:31:46 -04:00
Jeremy Stretch
d82f2e289a Use ContentTypeChoiceField for all ContentType fields 2021-04-02 10:55:16 -04:00
Jeremy Stretch
73e9842877 Introduce ContentTypeChoiceField 2021-04-02 10:54:13 -04:00
Jeremy Stretch
a86178f19b Simplify VLANGroup scope assignment (WIP) 2021-04-02 09:36:14 -04:00
Jeremy Stretch
b77c228853 Rebuild CablePaths when a CircuitTermination is modified 2021-04-02 09:17:11 -04:00
Jeremy Stretch
5e4432b9ad Show the last node in a CablePath with no destination 2021-04-01 21:29:46 -04:00
Jeremy Stretch
e7f10fdaea Include termination side in CircuitTermination string repr 2021-04-01 21:03:00 -04:00
Jeremy Stretch
8713ed5d73 Add test for trace through multiple circuits 2021-04-01 20:38:36 -04:00
Jeremy Stretch
cd64fcac8d Linkify connected object 2021-04-01 17:21:04 -04:00
Jeremy Stretch
96759af86f Closes #6071: Cable traces now traverse circuits 2021-04-01 14:31:10 -04:00
Jeremy Stretch
d57222328b Rename Cloud to ProviderNetwork 2021-04-01 10:21:41 -04:00
Jeremy Stretch
83c4577f6d Merge branch 'develop' into feature 2021-03-31 17:11:54 -04:00
Jeremy Stretch
7bd853e87b Fixes #5805: Fix missing custom field filters for cables, rack reservations 2021-03-31 17:02:21 -04:00
Jeremy Stretch
861a52d27c Closes #5965: Mention cf property on CustomFieldModel in docs 2021-03-31 16:35:28 -04:00
Jeremy Stretch
9df2130e11 Closes #5840: Add column to cable termination objects to display cable color 2021-03-31 15:49:29 -04:00
Jeremy Stretch
6242e195be Closes #5756: Omit child devices from non-racked devices list under rack view 2021-03-31 15:33:06 -04:00
Jeremy Stretch
f2f0ea8d04 Closes #5526: Add MAC address search field to VM interfaces list 2021-03-31 15:27:38 -04:00
Jeremy Stretch
b7309d5c69 Closes #6054: Display NAPALM-enabled device tabs only when relevant 2021-03-31 15:21:07 -04:00
Jeremy Stretch
613e0d10b3 Add link to v2.11 release notes 2021-03-31 14:24:43 -04:00
Jeremy Stretch
04fc3a5a9e Closes #6001: Paginate component tables under device views 2021-03-31 14:24:05 -04:00
Jeremy Stretch
6ec8ac7597 Fixes #6073: Permit users to manage their own REST API tokens without needing explicit permission 2021-03-31 13:25:06 -04:00
Jeremy Stretch
9a5f54bdaf Add tests for filtering VLANs by device/VM 2021-03-31 10:59:15 -04:00
Jeremy Stretch
ad5e167ad7 Remove obsolete grouping logic 2021-03-31 10:04:44 -04:00
Jeremy Stretch
d33d9522cc Fix VM VLAN filtering 2021-03-30 21:46:56 -04:00
Jeremy Stretch
a292ff5cc0 Remove brief_mode parameter from DynamicModelChoiceMixin 2021-03-30 21:34:50 -04:00
Jeremy Stretch
b91e5763e2 Add 'available_on' VLAN filters for devices & VMs 2021-03-30 21:32:48 -04:00
Jeremy Stretch
e1e840eb69 Fix VLANGroup 'add VLAN' button 2021-03-30 21:23:57 -04:00
Jeremy Stretch
0eb9f41470 Changelog & docs for #5380 2021-03-30 18:59:47 -04:00
Jeremy Stretch
34457ea1b4 Merge pull request #6072 from rodvand/origin/feature
#5830: Expand ExportTemplate model with attachment choice
2021-03-30 18:53:38 -04:00
Martin Rødvand
878154c305 Closes #5830: Add as_attachment field to API serializers and admin view. 2021-03-30 23:26:55 +02:00
Martin Rødvand
9ede726eea Add boolean as_attachment to Export template 2021-03-30 22:27:26 +02:00
Jeremy Stretch
bfa95c16e3 Add missing tests for SiteGroup 2021-03-30 11:06:59 -04:00
Jeremy Stretch
7885ec5511 Clean up custom field column implementation 2021-03-29 17:51:45 -04:00
Tom Grozev
be3d33eebd Add support for custom fields in tables (#5460)
* Add support for custom fields in tables

* Fix empty list displays as none

Co-authored-by: TomGrozev <TomGrozev@users.noreply.github.com>
Co-authored-by: Jeremy Stretch <jeremy@netverity.dev>
2021-03-29 17:15:21 -04:00
Jeremy Stretch
c7040fd418 Closes #6038: Include tagged objects list on tag view 2021-03-29 16:53:41 -04:00
Jeremy Stretch
eac53a779b Migrate prefix, VLAN templates to new structure 2021-03-29 16:43:29 -04:00
Jeremy Stretch
0986fd1081 Rearrange locations link in navigation menu 2021-03-29 16:27:37 -04:00
Jeremy Stretch
1e3c7e1a87 Fix form errors 2021-03-29 16:23:26 -04:00
Jeremy Stretch
3869028d53 Clean up organizational object URLs 2021-03-29 16:17:25 -04:00
Jeremy Stretch
12945704e9 Fix ConfigContext application for SiteGroups 2021-03-29 15:57:44 -04:00
Jeremy Stretch
cd629fc737 Closes #4833: Allow assigning config contexts by device type 2021-03-29 15:40:09 -04:00
Jeremy Stretch
b070be1c41 Closes #5425: Create separate tabs for VMs and devices under the cluster view 2021-03-29 14:55:17 -04:00
Jeremy Stretch
8fa37d3ec8 Device component lists should link to component-specific device view 2021-03-29 14:49:22 -04:00
Jeremy Stretch
3135dc42c3 Update changelog 2021-03-29 11:56:07 -04:00
Jeremy Stretch
08ef5c9a02 Update docs to indicate location assignment ability 2021-03-29 11:55:34 -04:00
Jeremy Stretch
b1935ddcab Fix initial tab display 2021-03-29 11:41:30 -04:00
Jeremy Stretch
93353e94a2 Note that 'table' is a reserved name for ExportTemplates 2021-03-29 11:25:57 -04:00
Jeremy Stretch
30e4504ee5 Enable bulk editing of device location assignment 2021-03-29 11:01:17 -04:00
Jeremy Stretch
a9716af0fa Tweak table display for components marked as connected 2021-03-29 10:53:02 -04:00
Jeremy Stretch
042f3590c8 Update interfaces documentation 2021-03-29 10:35:07 -04:00
Jeremy Stretch
2c9b791b85 Improve Interface validation 2021-03-29 10:34:31 -04:00
Jeremy Stretch
7396975500 Update documentation for journal entries 2021-03-29 09:59:44 -04:00
Jeremy Stretch
fe4bf62793 Truncate comments in JournalEntryTable 2021-03-29 09:54:06 -04:00
Jeremy Stretch
8a8342b106 Strip microseconds from JournalEntry creation time 2021-03-29 09:48:45 -04:00
Jeremy Stretch
e52702f6c2 Fix journal entry table ordering 2021-03-29 09:44:04 -04:00
Jeremy Stretch
0fae7504b3 Add Markdown support for JournalEntry comments 2021-03-29 09:43:21 -04:00
Jeremy Stretch
ab612c1ca6 Update changelog 2021-03-26 20:25:55 -04:00
Jeremy Stretch
0364d8cd43 Closes #6014: Move virtual machine interfaces list to a separate view 2021-03-26 20:19:19 -04:00
Jeremy Stretch
1544823d73 Closes #5926: Strip leading/trailing whitespace from TemplateColumns rendered for export 2021-03-26 16:20:01 -04:00
Jeremy Stretch
b793ee3aff Merge pull request #6062 from netbox-community/5971-org-object-views
Closes #5971: Dedicated views for organizational models
2021-03-26 16:06:45 -04:00
Jeremy Stretch
36c903da04 Add dedicated view for tags 2021-03-26 15:25:18 -04:00
Jeremy Stretch
981e7017bb Enable get view tests for organizational objects 2021-03-26 15:15:59 -04:00
Jeremy Stretch
2820d26a0f Add dedicated views for nested group models 2021-03-26 15:07:29 -04:00
Jeremy Stretch
b7e44a744d Add dedicated views for organizational models 2021-03-26 14:44:43 -04:00
Jeremy Stretch
bb00f2ff46 Introduce paginate_table() utility to simplify table pagination 2021-03-26 13:02:55 -04:00
Jeremy Stretch
65d90aa8a3 Merge branch 'develop' into feature 2021-03-26 10:53:21 -04:00
Jeremy Stretch
3d286fbdc3 Merge pull request #6061 from netbox-community/develop
Release v2.10.8
2021-03-26 10:22:42 -04:00
Jeremy Stretch
c8eae3a5c3 PRVB 2021-03-26 10:11:57 -04:00
Jeremy Stretch
afc58e6bff Merge branch 'master' into develop 2021-03-26 10:11:04 -04:00
Jeremy Stretch
f59b5119e5 Release v2.10.8 2021-03-26 10:04:00 -04:00
Jeremy Stretch
8eca7377a5 Fixes #6060: Fix exception on cable trace in UI 2021-03-26 09:40:51 -04:00
Jeremy Stretch
c828806b67 Merge branch 'develop' into feature 2021-03-25 16:09:28 -04:00
Jeremy Stretch
e639de9861 PRVB 2021-03-25 15:36:32 -04:00
Jeremy Stretch
9a4d885a9c Merge pull request #6055 from netbox-community/develop
Release v2.10.7
2021-03-25 15:34:45 -04:00
Jeremy Stretch
d28cc4fdb5 Merge branch 'master' into develop 2021-03-25 15:23:43 -04:00
Jeremy Stretch
54a979c936 Release v2.10.7 2021-03-25 15:15:36 -04:00
Jeremy Stretch
d18652f726 Fixes #6012: Pre-populate attributes when creating an available child prefix via the UI 2021-03-25 15:04:56 -04:00
Jeremy Stretch
ac1083f65d Replace checkboxes in documentation issue template with dropdown 2021-03-25 12:03:00 -04:00
Jeremy Stretch
bcfc2e5f74 Changelog & tweaks for #5650 2021-03-25 11:51:02 -04:00
Jeremy Stretch
a135396d7b Merge pull request #5672 from cpmills1975/5650-render-incomplete-lengths
Indicate when cable length is not definitive
2021-03-25 11:44:00 -04:00
Jeremy Stretch
ef987bd008 Closes #5723: Allow customization of the geographic mapping service via MAPS_URL config parameter 2021-03-25 11:34:24 -04:00
Jeremy Stretch
a2fef1df83 Closes #5748: Extend example pg_dump commands 2021-03-25 11:23:55 -04:00
Jeremy Stretch
016c7d4e6f Changelog for #5736 2021-03-25 11:11:11 -04:00
Jeremy Stretch
0a60bcdb8d Merge pull request #6028 from rodvand/develop
Closes #5736: Add Site as editable field in bulk editing of Device
2021-03-25 11:08:00 -04:00
Jeremy Stretch
5374e6c881 Closes #6040: Add UI search fields for asset tag for devices and racks 2021-03-24 15:05:19 -04:00
Jeremy Stretch
ab65ab860f Closes #5641: Allow filtering device components by label 2021-03-24 14:48:38 -04:00
Jeremy Stretch
ad2742dbb2 Fixes #6023: Fix display of bottom banner with uBlock Origin enabled 2021-03-24 14:25:09 -04:00
Jeremy Stretch
997077fc5d Merge pull request #6029 from maximumG/origin/6010-vc-duplicated
Closes #6010: Avoid duplicate entries when searching for VC
2021-03-24 14:16:23 -04:00
maxime-gerges-external
c8042ad511 Closes #6010: Avoid duplicate entries when searching for VC 2021-03-22 11:15:58 +01:00
Martin Rødvand
b51d66ea72 Closes #5736: Add Site as editable field in bulk editing of Device 2021-03-22 11:15:17 +01:00
Jeremy Stretch
0321ae0a7f Merge pull request #6005 from Daimler/use-relative-links
Closes #5523: Use relative links that work locally and in production
2021-03-19 10:38:23 -04:00
Jeremy Stretch
e4ecd2dae9 Fixes #6006: Fix VLAN group/site association for bulk prefix import 2021-03-19 10:22:30 -04:00
Jeremy Stretch
b9176adca4 Merge pull request #6011 from netbox-community/5986-cloud-model
Closes #5896: Introduce the cloud model
2021-03-18 15:22:48 -04:00
Jeremy Stretch
b6f6293b76 Prevent the attachment of a Cable to a CircuitTermination on a Cloud 2021-03-18 15:07:22 -04:00
Jeremy Stretch
d45edcd216 Linkify circuit terminations in table 2021-03-18 14:49:06 -04:00
Jeremy Stretch
89c487de65 Documentation and changelog for #5986 2021-03-18 14:43:07 -04:00
Jeremy Stretch
d45a17247d Add circuit cloud filters & tests 2021-03-18 14:32:28 -04:00
Jeremy Stretch
2e97bf48c5 Include circuits list on cloud view 2021-03-18 14:05:32 -04:00
Jeremy Stretch
872e936924 Add termination FKs on Circuit model 2021-03-18 13:54:05 -04:00
Jeremy Stretch
574a43fff7 Enable attaching circuit terminations to clouds 2021-03-18 13:53:48 -04:00
Jeremy Stretch
6ff8a267e9 Introduce the Cloud model 2021-03-18 11:20:09 -04:00
Marcus Crane
335cfcde57 Use relative links that work locally and in production
At present, a mix of link types are used in the Netbox
documentation from markdown file links to relative and
absolute anchor links.

Of the three types, linking to markdown files is the
most ideal because it allows navigation locally on disk,
as well as being translated into working links at render
time.

While not obvious, mkdocs handles converting markdown
links to valid URLs.

Signed-Off-by: Marcus Crane <marcu.crane@daimler.com>
2021-03-18 19:39:03 +13:00
Jeremy Stretch
433c48a1a3 Fix IP address interface validation 2021-03-17 16:44:34 -04:00
Jeremy Stretch
889316085c Closes #5998: Introduce ContentTypeColumn 2021-03-17 16:29:43 -04:00
Jeremy Stretch
91fe80f73c Changelog for #5977 2021-03-17 15:41:27 -04:00
Jeremy Stretch
7e437455c1 Merge pull request #5978 from jathanism/jathanism-fix-invalid-release_check_url
Fix use of `URLValidator` to correctly validate `RELEASE_CHECK_URL`
2021-03-17 15:29:50 -04:00
Jeremy Stretch
9a68a61ad3 Merge pull request #5999 from netbox-community/151-journaling
Closes #151: Add object journaling
2021-03-17 13:14:50 -04:00
Jeremy Stretch
7e65a3d3b4 Add JournalEntry filter for kind 2021-03-17 13:02:40 -04:00
Jeremy Stretch
82fbd975f1 Add kind field to JournalEntry 2021-03-17 12:51:39 -04:00
Jeremy Stretch
bd95d2b852 Changelog and documentation for #151 2021-03-17 10:58:40 -04:00
Jeremy Stretch
956e2728c2 Add bulk edit, delete views for journal entries 2021-03-17 10:41:06 -04:00
Jeremy Stretch
7f1d9aeaf8 Skip secondary check if get_absolute_url() not defined for model 2021-03-16 16:48:08 -04:00
Jeremy Stretch
f2c079de87 Add JournalEntry tests 2021-03-16 16:47:35 -04:00
Jeremy Stretch
8be4fbbce3 Add JournalEntry list view w/filtering 2021-03-16 15:57:23 -04:00
Jeremy Stretch
64d11d32c8 Fix conditional display journal & change log tabs 2021-03-16 15:33:41 -04:00
Jeremy Stretch
1f1a62da67 Initial work on #151: Object journaling 2021-03-16 15:00:08 -04:00
Jeremy Stretch
e97adcb614 Move ConfigContext classes out of models.py 2021-03-16 13:08:07 -04:00
Jeremy Stretch
2bb4a81e23 Closes #5975: Allow partial vCPU allocations for virtual machines 2021-03-16 11:52:59 -04:00
Jeremy Stretch
46a024441c Closes #5995: Dropped backward compatibility for queryset parameter on ObjectVar and MultiObjectVar 2021-03-16 11:28:50 -04:00
Jeremy Stretch
a694dbb020 Closes #5990: Deprecated display_field parameter for custom script ObjectVar and MultiObjectVar fields 2021-03-16 11:08:34 -04:00
Jeremy Stretch
f74c88027e Merge pull request #5992 from netbox-community/5891-api-serializer-display
Closes #5981: Add display field to all REST API serializers
2021-03-16 10:53:59 -04:00
Jeremy Stretch
c64f96d65b Drop usage of display_field on DynamicModelChoiceFields 2021-03-16 10:29:15 -04:00
Jeremy Stretch
fb48c1f6dd Add 'display' field to all REST API serializers 2021-03-16 10:06:25 -04:00
Jeremy Stretch
ee7f7c877a Merge pull request #5985 from netbox-community/5284-vlangroup-scope
Closes #5284: Allow VLANGroup assignment beyond sites
2021-03-15 21:11:49 -04:00
Jeremy Stretch
f64f205e81 Omit prefetch_related() for VLANGroup 2021-03-15 20:58:23 -04:00
Jeremy Stretch
10778f8479 Merge branch 'feature' into 5284-vlangroup-scope 2021-03-15 20:48:55 -04:00
Jeremy Stretch
bb6360cad4 Fix up VLANGroup tests 2021-03-15 20:35:18 -04:00
Jeremy Stretch
c0c4eed3a8 Extend VLANGroup to support cluster/cluster group assignment 2021-03-15 16:32:07 -04:00
Jeremy Stretch
f9f1a4439f Update Slack links 2021-03-15 14:45:53 -04:00
jathanism
68082a88a7 Fix use of URLValidator to correctly validate RELEASE_CHECK_URL 2021-03-13 11:39:21 -08:00
Jeremy Stretch
1aa22d1ba8 Add missing SiteGroup filter test case 2021-03-12 16:15:19 -05:00
Jeremy Stretch
61d23df83a Closes #5972: Bulk edit support for organizational models (#5974)
* Enable bulk editing of organizational models

* Enable bulk editing of nested group models

* Changelog for #5972
2021-03-12 16:14:42 -05:00
Jeremy Stretch
fca5accba8 Clean up base serializers 2021-03-12 13:31:28 -05:00
Jeremy Stretch
947da63d56 Move Location from racks.py to sites.py 2021-03-12 11:20:16 -05:00
Jeremy Stretch
a94e5c7403 Changelog for #5953 and #5966 2021-03-12 10:59:23 -05:00
Jeremy Stretch
c061f7021e Merge pull request #5964 from rodvand/develop
Closes #5953: Adds Markdown rendering of Custom Scripts' descriptions
2021-03-12 10:56:33 -05:00
Jeremy Stretch
ad43373f5b Merge pull request #5967 from abrahamvegh/tabindex
Skip the cheatsheet link when tabbing
2021-03-12 10:54:03 -05:00
Abraham Vegh
720b88048d Skip the cheatsheet link when tabbing 2021-03-11 22:40:03 -05:00
Martin Rødvand
d58291d119 Closes #5953: Adds Markdown rendering of Custom Scripts' descriptions 2021-03-11 22:27:43 +01:00
Jeremy Stretch
132b1ff479 Fixes #5962: Ensure consistent display of change log action labels 2021-03-11 13:42:26 -05:00
Jeremy Stretch
0115a61ab7 Add changelog for #5284 2021-03-11 11:13:41 -05:00
Jeremy Stretch
fadf15dbc0 Fix VLAN group assignment for VLANs 2021-03-11 11:07:27 -05:00
Jeremy Stretch
cb9478e0ea Closes #5950: Use TimeZoneSerializerField from django-timezone-field 2021-03-10 17:08:11 -05:00
Jeremy Stretch
04964cc52b Fixes #5595: Restore ability to delete an uploaded device type image 2021-03-10 17:00:35 -05:00
Jeremy Stretch
6ab1c06036 Extend VLAN group assignment form 2021-03-10 16:50:04 -05:00
Jeremy Stretch
d3fee54644 Fix VLAN.clean() 2021-03-10 16:26:27 -05:00
Jeremy Stretch
f4e49495e2 Merge branch 'feature' into 5284-vlangroup-scope 2021-03-10 14:51:11 -05:00
Jeremy Stretch
c072ba088f Add webhook support for additional models 2021-03-10 14:49:02 -05:00
Jeremy Stretch
4397d3da02 Remove redundant TreeManager from TenantGroup 2021-03-10 14:35:44 -05:00
Jeremy Stretch
fc5bb966f0 Declare TaggableManager on PrimaryModel base class 2021-03-10 14:32:50 -05:00
Jeremy Stretch
20f60cd99d Fix feature assignments for device component templates 2021-03-10 14:03:50 -05:00
Jeremy Stretch
ac0c54cce4 #5401: Add custom field support for VMInterface 2021-03-10 13:49:10 -05:00
Jeremy Stretch
19b78e63ce Introduce ChangeLoggedModel as a standard model 2021-03-10 13:37:13 -05:00
Jeremy Stretch
653af17755 Merge branch 'feature' into 5284-vlangroup-scope 2021-03-09 20:17:47 -05:00
Jeremy Stretch
bac2387f50 Merge branch 'develop' into feature 2021-03-09 20:04:20 -05:00
Jeremy Stretch
9990fd25d4 PRVB 2021-03-09 17:16:22 -05:00
Jeremy Stretch
e9930854c4 Merge pull request #5949 from netbox-community/develop
Release v2.10.6
2021-03-09 17:13:23 -05:00
Jeremy Stretch
11ac4cd2c2 Merge branch 'master' into develop 2021-03-09 17:03:54 -05:00
Jeremy Stretch
5b07c77708 Release v2.10.6 2021-03-09 16:57:03 -05:00
Jeremy Stretch
c3ad2d0a80 Fixes #5948: Invalidate cached queries when running renaturalize 2021-03-09 16:39:55 -05:00
Jeremy Stretch
4dae781be0 Change VLANGroup site to scope (GFK) 2021-03-09 16:18:59 -05:00
Jeremy Stretch
1cc82f2ab7 Create FUNDING.yml 2021-03-09 15:20:06 -05:00
Jeremy Stretch
c6641ec1de Closes #3451: Add pre-/post-change snapshots to webhooks 2021-03-09 13:03:44 -05:00
Jeremy Stretch
c083b862a7 Improve JSON output formatting of webhook receiver 2021-03-09 12:03:56 -05:00
Jeremy Stretch
6ffadb501b Closes #5610: Add REST API endpoint for webhooks 2021-03-09 09:22:58 -05:00
Jeremy Stretch
38ded66c4e Closes #5608: Add REST API endpoint for custom links 2021-03-08 20:57:44 -05:00
Jeremy Stretch
358d7ac562 Closes #5942: Add button to add a new IP address on interface view 2021-03-08 17:16:07 -05:00
Jeremy Stretch
cae784ff52 Merge pull request #5928 from wobcom/feature/ip-actions-in-interface-view
Add IP action buttons to interface view
2021-03-08 16:58:53 -05:00
Jeremy Stretch
835e11d10f Fixes #5920: Revert #5760 (do not force database encoding) 2021-03-08 16:54:28 -05:00
Jeremy Stretch
e7157973e7 Fixes #5922: Fix options for filtering object permissions in admin UI 2021-03-08 16:51:11 -05:00
Jeremy Stretch
5b5110acbf Closes #5923: Include depdency upgrades as part of standard release process 2021-03-08 16:46:11 -05:00
Jeremy Stretch
61e5eff666 Fixes #5935: Fix filtering prefixes list by multiple prefix values 2021-03-08 16:27:12 -05:00
Jeremy Stretch
16a3d1339a Closes #5592: Add IP addresses count to VRF view 2021-03-08 15:57:17 -05:00
Jeremy Stretch
759190d8ba Retain issue body to allow file attachments 2021-03-08 15:16:56 -05:00
Jeremy Stretch
f8e2cb06d1 Retain issue body to allow file attachments 2021-03-08 15:15:37 -05:00
Jeremy Stretch
37aa10c5a5 Fix indentations 2021-03-08 14:59:21 -05:00
Jeremy Stretch
ad9ed13b9a Convert housekeeping and documentation templates to forms 2021-03-08 14:57:42 -05:00
Jeremy Stretch
d9f8d809c8 Add introductory text for FRs and bug reports 2021-03-08 14:49:26 -05:00
Jeremy Stretch
03054b88aa Fix 'steps to reproduce' placeholder and required fields 2021-03-08 14:40:09 -05:00
Jeremy Stretch
a72911b527 Fix indentations 2021-03-08 14:37:11 -05:00
Jeremy Stretch
8e4da3faf4 Convert bug report template to issue form 2021-03-08 14:35:37 -05:00
Jeremy Stretch
46945aa98d Fix FR form 2021-03-08 14:25:20 -05:00
Jeremy Stretch
939224d0af Convert feature request template to issue form 2021-03-08 14:22:04 -05:00
Jeremy Stretch
14bc3a3cf8 Closes #5938: Deprecate support for Python 3.6 2021-03-08 13:36:56 -05:00
Jeremy Stretch
79b19821f6 Closes #5892: Introduce SiteGroup model (#5937)
* Initial work on #5892

* Add site group selection to object edit forms

* Add documentation for site groups

* Changelog for #5892

* Finish application of site groups to config context
2021-03-08 13:28:53 -05:00
Jeremy Stretch
8d15f79f1e Merge pull request #5931 from candlerb/candlerb/doc-django-rq
Doc fix: navigation to "Django RQ"
2021-03-08 09:21:50 -05:00
Brian Candler
b079cc12f4 Doc: give correct navigation to the "Django RQ" section 2021-03-07 17:25:49 +00:00
Jeremy Stretch
1c66733b8a Merge pull request #5930 from netbox-community/1519-interface-parent
Closes #1519: Enable parent assignment for interfaces
2021-03-05 16:51:39 -05:00
Jeremy Stretch
2ef85ea195 Changelog for #1519 2021-03-05 16:25:39 -05:00
Jeremy Stretch
69a3d14b53 Add filter tests for interface parent and LAG 2021-03-05 16:20:46 -05:00
Jeremy Stretch
d74c07e1a2 Clean up parent/LAG interface form validation 2021-03-05 14:13:03 -05:00
Jeremy Stretch
e1a86139dc Add parent field to Interface 2021-03-05 13:49:41 -05:00
Jeremy Stretch
8e1fe6339e Rename parent attribute on CableTerminations to parent_object 2021-03-05 13:06:21 -05:00
Jeremy Stretch
7a5cf80412 Clean up extraneous imports 2021-03-05 12:48:53 -05:00
Jeremy Stretch
5406e8e2e7 Optimize background site/location updates 2021-03-05 09:56:47 -05:00
Jeremy Stretch
d3974c9f44 Merge pull request #5929 from netbox-community/4999-table-export
Closes #4999: Support for dynamic table-based exports
2021-03-05 09:30:06 -05:00
Jeremy Stretch
0015c8dfa2 Changelog for #4999 2021-03-05 09:15:27 -05:00
Julian Jacobi
ad1da22257 Add IP action buttons to interface view 2021-03-05 10:45:58 +01:00
Jeremy Stretch
e703d9ff78 Introduce UtilizationColumn to render utilization graphs consistently 2021-03-04 20:58:43 -05:00
Jeremy Stretch
32501c96e5 Introduce MPTTColumn to represent MPTT models 2021-03-04 20:47:24 -05:00
Jeremy Stretch
6149ba6e36 Export only visible columns 2021-03-04 17:31:37 -05:00
Jeremy Stretch
0d44a320a0 Add tablib as a required package 2021-03-04 17:15:07 -05:00
Jeremy Stretch
a8a272b068 Enable table-based export 2021-03-04 16:58:56 -05:00
Jeremy Stretch
20a85c1ef2 Introduce TenantColumn to simplify representation 2021-03-04 16:07:55 -05:00
Jeremy Stretch
23b58ccbe8 Override value() on custom table columns 2021-03-04 15:56:12 -05:00
Jeremy Stretch
9c967ee3ea Fixes #5913: Improve change logging (#5924)
* Initial work on #5913
* Provide per-line diff highlighting
* BulkDeteView should delete objects individually to secure a pre-change snapshot
* Add changelog tests for bulk operations
2021-03-04 13:06:04 -05:00
Jeremy Stretch
f495addb1e Update documentation 2021-03-03 14:50:05 -05:00
Jeremy Stretch
d750b690e7 Closes #4971: Allow assigning devices to locations without a rack 2021-03-03 14:28:07 -05:00
Jeremy Stretch
fdb3e3f9a4 Closes #5895: Rename RackGroup to Location 2021-03-03 13:30:33 -05:00
Jeremy Stretch
a17018a875 #3648: Add missing mark_connected form fields 2021-03-03 10:20:35 -05:00
Jeremy Stretch
8de20fcd1f Closes #5375: Add 'speed' attribute to console port models 2021-03-03 10:20:08 -05:00
Jeremy Stretch
51120ccf31 Introduce generic object template 2021-03-02 15:58:33 -05:00
Jeremy Stretch
8dd7123923 Closes #3648: Mark cable termination models as connected without attaching a cable 2021-03-01 21:34:42 -05:00
Jeremy Stretch
6ed2e7b636 Closes #5894: Use primary keys when filtering object lists by related objects in the UI 2021-03-01 17:24:30 -05:00
Jeremy Stretch
fa8e70fe26 Update changelog 2021-03-01 16:07:44 -05:00
Jeremy Stretch
a87f34ebb3 Merge pull request #5820 from stuntguy3000/develop
Fix Primary IP Sorting Issues for Devices and VMs
2021-03-01 16:04:43 -05:00
Jeremy Stretch
75d875615b Merge pull request #5897 from wobcom/feature/device_components_custom_links
Activate custom links on device components
2021-03-01 16:01:35 -05:00
Jeremy Stretch
07e6abdac4 Closes #5901: Add 'created' and 'last_updated' fields to device component models 2021-03-01 15:42:39 -05:00
Jeremy Stretch
1ddc1a6781 Closes #5451: Add support for multiple-selection custom fields 2021-03-01 14:52:57 -05:00
Jeremy Stretch
3f216fa4a3 Remove unused CustomFieldModel class 2021-03-01 14:33:52 -05:00
Jeremy Stretch
4fb79e6e2a Changelog for #5401 2021-03-01 14:17:25 -05:00
Jeremy Stretch
fdda30704b Add custom fields section to interface edit template 2021-03-01 14:12:09 -05:00
Jeremy Stretch
5418520252 Add custom field support to component bulk edit forms 2021-03-01 13:57:57 -05:00
Jeremy Stretch
9d526b0907 Add custom field support to component creation forms 2021-03-01 13:42:31 -05:00
Jeremy Stretch
9db492eb07 Add custom field support to ComponentCreateForm 2021-03-01 13:37:53 -05:00
Jeremy Stretch
d6ee4d58ba Add custom field support for device component models 2021-03-01 13:07:25 -05:00
Daniel Sheppard
f63cf6a7a4 Update changelog 2021-03-01 09:21:57 -06:00
niels
18ab1144bb Fixes: #5703 - Populate VRF and Tenant fields when adding IP address 2021-03-01 09:19:50 -06:00
Jeremy Stretch
a9b216d212 Update Slack links; start phasing out mailing list 2021-03-01 09:54:30 -05:00
Daniel Sheppard
6b19a1ece9 Update changelog 2021-03-01 08:52:13 -06:00
Last Wednesday
0dd6d552a8 Fixes: #5630 - Add QSFP+ (64GFC) FibreChannel Interface option
* Added option for 64GFC QSFP+ Interface for FibreChannel in netbox/dcim/choices.py
2021-03-01 08:48:40 -06:00
Julian Jacobi
cfddf570b9 add custom links to device components 2021-03-01 09:30:43 +01:00
Jeremy Stretch
6a9b50f95d Closes #5873: Use numeric IDs in all object URLs 2021-02-26 17:23:23 -05:00
Jeremy Stretch
1dcd857ca6 Closes #5370: Extend custom field support to organizational models 2021-02-26 16:25:37 -05:00
Jeremy Stretch
7e6cb9d186 Closes #1638: Migrate all primary keys to 64-bit integers 2021-02-26 16:12:52 -05:00
Jeremy Stretch
cf78307577 Update organizational models to use custom field forms 2021-02-26 11:25:23 -05:00
Jeremy Stretch
12fbd34962 Introduce NestedGroupModelSerializer 2021-02-25 17:15:42 -05:00
Jeremy Stretch
ed059d80d6 Introduce OrganizationalModelSerializer 2021-02-25 16:44:16 -05:00
Jeremy Stretch
664a39911c Add custom field support for organizational models to API serializers 2021-02-25 15:58:13 -05:00
Jeremy Stretch
d6cf385a3c Update CircuitTermination fields to use SelectSpeedWidget 2021-02-25 14:12:34 -05:00
Jeremy Stretch
cef8204f40 Merge tags fields with primary object fields in form display 2021-02-25 14:03:14 -05:00
Jeremy Stretch
42e82f0ead Update object edit template to use fieldsets where possible 2021-02-25 13:51:48 -05:00
Jeremy Stretch
2a517cde9f Add support for form fieldsets 2021-02-25 13:08:02 -05:00
Jeremy Stretch
992657cbe0 Introduce SelectSpeedWidget 2021-02-25 11:47:26 -05:00
Luke Anderson
d2c8aae59c Fix #5819 and #5872 - Fix Primary IP Sorting Issues for Devices and VMs 2021-02-25 22:32:51 +10:30
Jeremy Stretch
3208c8317d Switch docs to mkdocs-material 2021-02-24 21:21:17 -05:00
Jeremy Stretch
bec7ea7072 Standardize model types based on function 2021-02-24 21:01:16 -05:00
Jeremy Stretch
0a6ebdee48 Upgrade Django to 3.2b1 2021-02-24 19:00:14 -05:00
Jeremy Stretch
b1cd634ab4 PRVB 2021-02-24 15:38:36 -05:00
Jeremy Stretch
47abd62c55 Merge pull request #5865 from netbox-community/develop
Release v2.10.5
2021-02-24 15:36:29 -05:00
Jeremy Stretch
db781437fc Release v2.10.5 2021-02-24 15:15:33 -05:00
Jeremy Stretch
a40f52ee62 Changelog for #5753 2021-02-24 15:02:13 -05:00
Jeremy Stretch
89e6fd68e5 Merge pull request #5753 from nerzhul/patch-1
fix: add missing password when using redis in sentinel mode
2021-02-24 15:01:03 -05:00
Jeremy Stretch
ecf0f15c17 Merge pull request #5763 from candlerb/candlerb/5760
Update docs to to create database explicitly with UTF8 encoding.
2021-02-24 14:57:50 -05:00
Jeremy Stretch
04a6e2de9d Changelog and test for #5786 2021-02-24 14:39:09 -05:00
Jeremy Stretch
0cd29daea2 Merge pull request #5787 from pgnuta/patch-1
Update /netbox/tenancy/api/serializers.py to allow nullable group
2021-02-24 14:29:11 -05:00
Jeremy Stretch
b392502b9b Fixes #5841: Disallow the creation of available prefixes/IP addresses in violation of assigned permission constraints 2021-02-24 14:21:42 -05:00
Jeremy Stretch
a301c974e4 Merge pull request #5851 from cpmills1975/5847-pagination-font-error
Fixes: #5847 - Provide custom CSS for pagination chevrons
2021-02-23 11:37:35 -05:00
Chris Mills
4c7c2edf9a Fixes: #5847 - Provide custom CSS for pagination chevrons 2021-02-22 23:28:30 +00:00
Daniel Sheppard
3d3748d6f5 Fixes: #5315 - Make "null_option" on DynamicModelChoiceField also null the value on the model. (#5704)
Fixes: #5315 - Fix site unassignment from VLAN when using "None" option
2021-02-12 10:53:40 -06:00
pgnuta
fa3199d41c Update serializers.py
Group should be nullable via API to match frontend functionality and Swagger documentation.
2021-02-11 11:49:57 +13:00
Jeremy Stretch
efbda6d5af Apply stale rules to PRs 2021-02-09 15:15:49 -05:00
Jeremy Stretch
8640f500d1 Closes #5776: Upgrade pip when running upgrade.sh 2021-02-09 13:32:29 -05:00
Jeremy Stretch
3d90e3aee9 Fixes #5626: Fix REST API representation for circuit terminations connected to non-interface endpoints 2021-02-08 16:44:04 -05:00
Jeremy Stretch
6c676d21c3 Changelog for #5735 2021-02-08 15:09:20 -05:00
Jeremy Stretch
7e6af88966 Merge pull request #5761 from candlerb/candlerb/5735
Fixes #5735: enforcement of duplicate IP address detection with roles
2021-02-08 15:07:53 -05:00
Brian Candler
3b53cf5e84 Update docs to to create database explicitly with UTF8 encoding.
Fixes #5760
2021-02-07 19:46:30 +00:00
root
713f02ca3f Fixes #5735: enforcement of duplicate IP address detection with roles 2021-02-07 10:31:56 +00:00
Jeremy Stretch
19844e81d1 Merge pull request #5754 from ypid/fix/branding
NetBox should always be referred to as NetBox
2021-02-04 16:01:58 -05:00
Robin Schneider
5fbe766a0a NetBox should always be referred to as NetBox
Fix all instances of "Netbox" except the one that is used as an example
how not to write it.

Ref: docs/development/style-guide.md
2021-02-04 21:39:55 +01:00
Jeremy Stretch
1430c0a6e6 Fixes #5738: Fix redirect to device components view after disconnecting a cable 2021-02-04 13:19:42 -05:00
Jeremy Stretch
e3e928f1c4 Fixes #5718: Fix bulk editing of services when no port(s) are defined 2021-02-04 13:01:55 -05:00
Jeremy Stretch
e155acbbd4 Merge pull request #5732 from candlerb/candlerb/sample-report-connection-status
Fix sample report in documentation
2021-02-04 11:47:18 -05:00
Loïc Blot
be1b6b6aa3 fix: add missing password when using redis in sentinel mode 2021-02-04 16:50:07 +01:00
Jeremy Stretch
b4ba5cbb7a Fixes #5716: Fix filtering rack reservations by custom field 2021-02-02 11:49:38 -05:00
Brian Candler
f28474d86e Fix sample report in documentation
Raised in #5729
2021-02-02 08:16:35 +00:00
Jeremy Stretch
1964073072 PRVB 2021-01-26 16:02:14 -05:00
Jeremy Stretch
856d2e3176 Merge pull request #5694 from netbox-community/develop
Release v2.10.4
2021-01-26 16:01:00 -05:00
Daniel Sheppard
3409a1bfba Merge remote-tracking branch 'origin/develop' into develop 2021-01-26 14:04:22 -06:00
Daniel Sheppard
fc8f02c180 Corrects error with ListSerializer as request_body 2021-01-26 14:03:46 -06:00
Jeremy Stretch
03e48161a1 Release v2.10.4 2021-01-26 13:06:29 -05:00
Jeremy Stretch
def63329f0 Merge pull request #5693 from aaroneg/patch-1
update python package name
2021-01-26 13:03:11 -05:00
Aaron
0680b01a96 update python package name
At least on ubuntu 20.04, the python3 package is now 3.8, but the package 'python3' points to the current best version of python available without needing to specialize a minor version and should require fewer changes to the document.
2021-01-26 11:47:33 -06:00
Daniel Sheppard
592e788a7d Merge branch 'develop' of https://github.com/netbox-community/netbox into develop 2021-01-26 10:42:45 -06:00
Daniel Sheppard
aabc1a8265 Fixes: #5232 - Corrects swagger definition 2021-01-26 10:42:01 -06:00
Daniel Sheppard
a23ff4e519 Fixes: #5232 - Corrects swagger definition 2021-01-26 10:34:07 -06:00
Jeremy Stretch
edc015d9bf Emphasize use of GitHub discussions in README 2021-01-26 11:20:06 -05:00
Jeremy Stretch
d5a0e12283 Certain component types are optional 2021-01-26 10:35:03 -05:00
Jeremy Stretch
90e8f26cd4 Closes #5678: Show available type choices for all device component import forms 2021-01-26 10:17:58 -05:00
Jeremy Stretch
d4e83ca1c0 Fixes #5683: Correct rack elevation displayed when viewing a reservation 2021-01-26 09:57:33 -05:00
Jeremy Stretch
137aa9da2c Fixes #5648: Include VC member interfaces on interfaces tab count when viewing VC master 2021-01-25 14:29:03 -05:00
Jeremy Stretch
87c600aa7c Fixes #5665: Validate rack group is assigned to same site when creating a rack 2021-01-25 14:19:32 -05:00
Jeremy Stretch
08dfe64301 Merge pull request #5677 from Alef-Burzmali/develop
Fix how SECRET_KEY is generated
2021-01-25 13:55:45 -05:00
Jeremy Stretch
0e48ee5f9e Merge pull request #5675 from rileyL6122428/patch-1
Fixes small typos in Configuration > Required Settings and Configuration > Optional Settings
2021-01-24 18:07:41 -05:00
Thomas Fargeix
b6e532f01d Fix how SECRET_KEY is generated
Use secrets.choice instead of random.sample to generate the secret key.
2021-01-24 21:20:55 +01:00
Riley Littlefield
60baa5e59e Fixes small typo in optional settings 2021-01-23 14:06:48 -05:00
Riley Littlefield
9eb64dc6a4 Fixes another typo 2021-01-23 13:54:44 -05:00
Riley Littlefield
3de04094fb Fixes typo 2021-01-23 13:41:48 -05:00
Chris Mills
02e8979178 Changes to template, view and CablePath class to
indicate to users whether the cable length is
accurate or not.
2021-01-22 16:45:08 +00:00
Jeremy Stretch
5e962719ca Closes #5542: Show cable trace lengths in both meters and feet 2021-01-20 21:29:23 -05:00
Jeremy Stretch
fefc623343 Changelog for #5603 2021-01-20 20:48:24 -05:00
Jeremy Stretch
5c40081d84 Merge pull request #5662 from cpmills1975/5603-white-cable-fix
Fix white cables
2021-01-20 20:47:28 -05:00
Chris Mills
e739d6aa05 Fix white cables 2021-01-20 23:52:54 +00:00
Jeremy Stretch
0994719b91 Add NetBox installation video to docs 2021-01-20 15:36:04 -05:00
Jeremy Stretch
f469920759 Fixes #5640: Fix permissions assessment when adding VM interfaces in bulk 2021-01-20 15:18:13 -05:00
Jeremy Stretch
3c9be8cd08 Fixes #5639: Fix filtering connection lists by device name 2021-01-19 11:24:34 -05:00
Jeremy Stretch
a0e82e1817 Fixes #5574: Restrict the creation of device bay templates on non-parent device types 2021-01-19 10:49:56 -05:00
Jeremy Stretch
69bf451b20 Changelog for #5586 and #5612 2021-01-19 09:41:49 -05:00
Jeremy Stretch
58699a220b Merge pull request #5596 from FragmentedPacket/5586-vc-filtering
Closes 5586: Adds name, master, and master_id filtering
2021-01-19 09:31:24 -05:00
Jeremy Stretch
3f70f685bb Merge pull request #5634 from phoerious/5612-gg45-tera-connector
Add choices for GG45 and TERA connectors and Cat7a/Cat8 cables
2021-01-19 09:28:33 -05:00
Janek Bevendorff
d838a76461 Add choices for GG45 and TERA connectors and Cat7a/Cat8 cables
Fixes #5612
2021-01-18 14:13:07 +01:00
Jeremy Stretch
e13d96a6f2 Don't pin Ubuntu installations to Python 3.6 2021-01-17 14:08:59 -05:00
Jeremy Stretch
1e1e2d5f54 Fixes #5597: Fix ordering devices by primary IP address 2021-01-11 11:28:03 -05:00
Mikhail Yohman
c51d2a56ac Closes 5586: Adds name, master, and master_id filtering 2021-01-08 20:18:48 -07:00
Jeremy Stretch
e9d888bf63 Closes #5570: Add "management only" filter widget for interfaces list 2021-01-07 11:29:59 -05:00
Jeremy Stretch
47b7ec8d00 Fixes #5584: Restore power utilization panel under device view 2021-01-07 11:19:11 -05:00
Jeremy Stretch
c8f09f28b1 PRVB 2021-01-05 21:10:58 -05:00
Jeremy Stretch
5a32b9599a Merge pull request #5581 from netbox-community/develop
Release v2.10.3
2021-01-05 21:09:50 -05:00
Jeremy Stretch
a6cb7965dc Merge branch 'master' into develop 2021-01-05 20:36:14 -05:00
Jeremy Stretch
601cbd2306 Release v2.10.3 2021-01-05 20:33:46 -05:00
Jeremy Stretch
a77658a6bf Merge pull request #5580 from nemith/apidocfix
Fixes #5579: mark `ie` and `nie` filter exprs as insensitive
2021-01-05 20:31:49 -05:00
Brandon Bennett
4a2d2882c6 Fixes #5579: mark ie and nie filter exprs as insensitive
In the documentation the `ie` and `nie` filter expressions are
incorrectly marked as senstive matches when they are in fact
insensitive.
2021-01-05 15:51:03 -07:00
Jeremy Stretch
0accaedad0 Fixes #5569: Ensure consistent labeling of interface mgmt_only field 2021-01-05 15:15:36 -05:00
Jeremy Stretch
aa10430c7b Changelog for #5573 2021-01-05 15:06:15 -05:00
Jeremy Stretch
98983e7e1a Merge pull request #5578 from candlerb/candlerb-5573
Report inconsistent values when migrating custom field data
2021-01-05 15:00:20 -05:00
Daniel Sheppard
3441216aca Fixes: #5564 - Raise validation error if a PowerPortTemplate's draw exceeds maximum 2021-01-05 09:52:11 -06:00
Daniel Sheppard
d16a7e108c Fixes: #5563 - Fix power feed cable trace 2021-01-05 09:22:10 -06:00
Brian Candler
359ae5d116 Raise exceptions for other inconsistencies when migrating custom field data
Fixes #5573
2021-01-05 15:05:17 +00:00
Daniel Sheppard
a9a2509d39 Fixes: #5049 - Account for chassis neighbors in lldp_neighbors template 2021-01-05 08:48:55 -06:00
Jeremy Stretch
e73c225965 Fixes #5551: Restore missing import button on services list 2020-12-31 10:38:47 -05:00
Jeremy Stretch
39e6872288 Fixes #5557: Fix VRF route target assignment via REST API 2020-12-31 10:32:40 -05:00
Jeremy Stretch
af3c4905ea Fixes #5558: Fix regex validation support for custom URL fields 2020-12-31 10:21:01 -05:00
Jeremy Stretch
7873952e7a Avoid wrapping text in hierarchical table columns 2020-12-30 15:30:31 -05:00
Jeremy Stretch
d989ce2b70 Fixes #5547: Add custom field bulk import support for cables, power panels, rack reservations, and virtual chassis 2020-12-29 12:43:52 -05:00
Jeremy Stretch
249948e174 Fixes #5546: Add custom field bulk edit support for cables, power panels, rack reservations, and virtual chassis 2020-12-29 11:55:31 -05:00
Jeremy Stretch
8ae3331d04 Closes #5549: Eliminate extraneous database queries when using brief API calls 2020-12-29 11:41:44 -05:00
Jeremy Stretch
b2e05aafc1 Closes #5531: Ensure consistent calls to parent clean() methods for models, forms 2020-12-28 12:54:42 -05:00
Jeremy Stretch
cc1a43e5d9 Fixes #5533: Fix bulk editing of objects with required custom fields 2020-12-28 11:10:27 -05:00
Jeremy Stretch
6f39e6599d Fixes #5540: Fix exception when viewing a provider with one or more tags assigned 2020-12-28 10:48:50 -05:00
Jeremy Stretch
1fe5857411 Fixes #5543: Fix rendering of config contexts with cluster assignment for devices 2020-12-28 10:45:23 -05:00
Jeremy Stretch
fce61295c9 Fixes #5301: Fix misleading error when racking a device with invalid parameters 2020-12-23 16:21:26 -05:00
Jeremy Stretch
396b0dace8 Changelog for #5311 2020-12-23 14:26:43 -05:00
Jeremy Stretch
fe2e33a9e1 Merge pull request #5522 from netbox-community/5311-site-rack-validation
Employ signals to update child objects when RackGroup/Rack site assignment changes
2020-12-23 14:24:56 -05:00
Jeremy Stretch
8d9d4cec05 Extend handle_rackgroup_site_change() receiver to update power panels 2020-12-23 14:02:05 -05:00
Jeremy Stretch
ddd10ba8af Clean up hierarchical table columns 2020-12-22 16:14:16 -05:00
Jeremy Stretch
e4f22bc494 Employ signals to update child objects when RackGroup/Rack site assignment changes 2020-12-22 15:22:53 -05:00
Jeremy Stretch
09633ee11b Move rack group field directly beneath site 2020-12-22 13:51:58 -05:00
Jeremy Stretch
dc6dbdf3c4 Update documentation to reference the feature branch 2020-12-22 13:12:38 -05:00
Jeremy Stretch
8f4197c020 Fixes #5518: Fix persistent vertical scrollbar 2020-12-22 10:28:09 -05:00
Jeremy Stretch
5fe5fd71b5 PRVB 2020-12-21 16:19:40 -05:00
Jeremy Stretch
77e2b0e4ba Merge pull request #5512 from netbox-community/develop
Release v2.10.2
2020-12-21 16:17:49 -05:00
Jeremy Stretch
e196d82e76 Release v2.10.2 2020-12-21 16:03:43 -05:00
Jeremy Stretch
23f334e5df Fixes #5488: Fix caching error when viewing cable trace after toggling cable status 2020-12-21 15:30:34 -05:00
Robin Schneider
c5a265e828 Use HTTPS URL schema everywhere (#5505)
* Use HTTPS everywhere (mechanical edit using util from https-everywhere)

```Shell
node ~/src/EFForg/https-everywhere/utils/rewriter/rewriter.js .
git checkout netbox/project-static/
```

A few additional changes where reset manually before the commit.

* Use HTTPS everywhere (mechanical edit using util from opening_hours.js)

```Shell
make -f ~/src/opening-hours/opening_hours.js/Makefile qa-https-everywhere
git checkout netbox/project-static/
git checkout netbox/*/tests
```
2020-12-21 12:02:30 -05:00
Jeremy Stretch
278c881059 as_range: Catch TypeErrors 2020-12-21 11:54:35 -05:00
Jeremy Stretch
b09112941a Fixes #5510: Fix filtering by boolean custom fields 2020-12-21 11:47:11 -05:00
Jeremy Stretch
158ed5765b Fixes #5507: Fix custom field data assignment via UI for IP addresses, secrets 2020-12-21 09:43:15 -05:00
Jeremy Stretch
1e5778e6db Clean up prefix hierarchy annotation 2020-12-18 15:43:15 -05:00
Jeremy Stretch
442dee72b5 Fixes #5499: Fix filtering of displayed device/VM interfaces by regex 2020-12-18 15:02:52 -05:00
Daniel Sheppard
f2d028ba29 Update version-2.10.md 2020-12-18 11:33:28 -06:00
Jeremy Stretch
b1402f3bae Fixes #5498: Fix filtering rack reservations by username 2020-12-18 12:18:59 -05:00
Jeremy Stretch
6ca9e2a777 Closes #5496: Add form field to filter rack reservation by user 2020-12-18 12:09:41 -05:00
Daniel Sheppard
dac93b9840 Fixes #5254 - Require plugin authors to set zip_safe=False 2020-12-17 16:18:10 -06:00
Jeremy Stretch
34a0e2e72d Closes #5489: Add filters for type and width to racks list 2020-12-17 15:55:22 -05:00
Jeremy Stretch
af2777c580 Fixes #5487: Support filtering rack type/width with multiple values 2020-12-17 15:50:47 -05:00
Jeremy Stretch
4a066a1913 Rename get_subquery() to count_related() 2020-12-17 14:47:49 -05:00
Jeremy Stretch
91083fd6c5 Call Coalesce() inside get_queryset() 2020-12-17 14:45:50 -05:00
Jeremy Stretch
202e7d0ebf Fixes #5486: Optimize retrieval of config context data for device/VM REST API views 2020-12-17 14:03:10 -05:00
Jeremy Stretch
7449f36f22 Merge pull request #5485 from glennmatthews/gfm-doc-fix
Docs fix: Django templating language is no longer supported for export templates
2020-12-17 10:06:03 -05:00
Glenn Matthews
dc6e7cd56c Django templating language is no longer supported for export templates 2020-12-17 09:48:22 -05:00
Jeremy Stretch
26426c1431 Fixes #5484: Fix "tagged" indication in VLAN members list 2020-12-17 09:46:50 -05:00
Jeremy Stretch
2fba20acda Merge pull request #5481 from cloos/5123-cf-select-changelog
Fixes #5123: Add tests for custom field select changelog
2020-12-16 14:29:27 -05:00
Jeremy Stretch
3c887b0dd9 Fixes #5468: Fix unlocking secrets from device/VM view 2020-12-16 13:48:44 -05:00
Jeremy Stretch
52c9e3ecef Run CI for pull requests 2020-12-16 13:23:45 -05:00
Christian Loos
2ffdc46f81 Fixes #5123: Add tests for custom field select changelog 2020-12-16 18:50:55 +01:00
Jeremy Stretch
577c86fb80 Fixes #5478: Fix display of route target description 2020-12-16 10:38:09 -05:00
Jeremy Stretch
4ce7dfa55e Fixes #5473: Fix alignment of rack names in elevations list 2020-12-16 09:26:22 -05:00
Jeremy Stretch
bd144c996a PRVB 2020-12-15 22:16:26 -05:00
Jeremy Stretch
2c1a60b965 Merge pull request #5472 from netbox-community/develop
Release v2.10.1
2020-12-15 22:14:19 -05:00
Jeremy Stretch
2dad44c93f Release v2.10.1 2020-12-15 22:03:54 -05:00
Jeremy Stretch
c835ec5102 Fixes #5470: Fix exception when making OPTIONS request for a REST API list endpoint 2020-12-15 21:04:47 -05:00
Jeremy Stretch
e2d17b1999 #5444: Also fix the enabled field' 2020-12-15 16:52:58 -05:00
Jeremy Stretch
3c2ddf1f69 Fixes #5444: Don't force overwriting of mgmt_only when bulk editing interfaces 2020-12-15 16:17:52 -05:00
Jeremy Stretch
d64fc261e2 Tweak validation for custom date fields 2020-12-15 16:00:18 -05:00
Jeremy Stretch
34643f536e Fixes #5466: Fix validation for required custom fields 2020-12-15 15:56:42 -05:00
Jeremy Stretch
6a3dab0142 Fixes #5465: Correct return URL when disconnecting a cable from a device 2020-12-15 13:52:35 -05:00
Daniel Sheppard
3c2b2f26b9 Fixes: #5450 - Added Coalesce to viewsets for the _count functions 2020-12-15 12:50:28 -06:00
Jeremy Stretch
67f9e16905 Fixes #5453: Correct change log representation when creating a cable 2020-12-15 13:37:02 -05:00
Daniel Sheppard
14a46f82ee Fixes: #5463 - Add check for ip_addresses attribute on circuittermination connected_endpoint 2020-12-15 12:30:42 -06:00
Jeremy Stretch
974500c281 Add test for #5461 2020-12-15 12:01:53 -05:00
Daniel Sheppard
1f4954bf0e Fixes: #5461 - Assign object=rack in netbox/templates/dcim/rack_elevation_list.html 2020-12-15 08:39:27 -06:00
Daniel Sheppard
9615dc0638 Fixes: #5458 - Fix devicetype_component_table.html 2020-12-14 16:30:10 -06:00
Jeremy Stretch
c1e56a3717 Post-release version bump 2020-12-14 14:41:01 -05:00
Jeremy Stretch
91ea12344c Merge pull request #5455 from netbox-community/develop
Release v2.10.0
2020-12-14 14:38:23 -05:00
Jeremy Stretch
f572f66426 Release v2.10.0 2020-12-14 14:27:14 -05:00
Jeremy Stretch
872ba89cad Merge pull request #5454 from netbox-community/develop-2.10
Stage v2.10 release
2020-12-14 14:19:14 -05:00
Jeremy Stretch
1f2daaad59 Merge branch 'develop' into develop-2.10 2020-12-14 14:08:21 -05:00
esljaz
230b503b7a Clarify REMOTE_AUTH_HEADER documentation (#5430) 2020-12-14 14:03:13 -05:00
Jeremy Stretch
a371c08c86 Merge branch 'develop' into develop-2.10 2020-12-11 16:57:04 -05:00
Jeremy Stretch
55e8d37fb0 Post-release version bump 2020-12-11 16:49:13 -05:00
Jeremy Stretch
3f5a2b9c7a Merge pull request #5448 from netbox-community/develop
Release v2.9.11
2020-12-11 16:47:30 -05:00
Jeremy Stretch
a589022fcc Merge branch 'master' into develop 2020-12-11 16:46:41 -05:00
Jeremy Stretch
31fc8076e3 Release v2.9.11 2020-12-11 16:33:08 -05:00
John Anderson
53f330dbe8 fixes #5387 - Fix error when rendering config contexts when objects have multiple tags assigned (#5447) 2020-12-11 16:20:46 -05:00
Jeremy Stretch
13a13f3943 Fixes #5446: Fix validation for plugin version and required settings 2020-12-11 16:05:50 -05:00
Jeremy Stretch
00ca227292 Fixes #5433: Exclude SVG files from front/rear image upload for device types (currently unsupported) 2020-12-11 09:27:00 -05:00
Jeremy Stretch
5c8ed73608 Closes #5439: Add CS and SN fiber port types 2020-12-11 08:56:02 -05:00
Jeremy Stretch
5df01ed3e6 Encourage people to use GitHub discussions in place of the mailing list 2020-12-10 15:59:42 -05:00
Jeremy Stretch
43d7d5570e Merge branch 'develop' into develop-2.10 2020-12-10 10:26:15 -05:00
Jeremy Stretch
e062cbb79f Fixes #5436: Show assigned IP addresses in interfaces list 2020-12-10 08:52:55 -05:00
Jeremy Stretch
27e27788cd Closes #5424: Allow passing Python code to nbshell using --command 2020-12-08 16:14:52 -05:00
Jeremy Stretch
cc5c000a6d Move CI to GitHub Actions (#5431)
Replaces Travis CI with GitHub Actions
2020-12-08 14:55:06 -05:00
Jeremy Stretch
2c7fc5df75 Closes #5411: Include cable tags in trace view 2020-12-04 15:56:33 -05:00
Jeremy Stretch
f7e61cc153 Fixes #5417: Fix exception when viewing a device installed within a device bay 2020-12-04 15:21:33 -05:00
Jeremy Stretch
e7f64334c0 Fixes #5410: Restore tags field on cable connection forms 2020-12-04 08:57:19 -05:00
Jeremy Stretch
584b8109a0 Fixes #5408: Fix updating secrets without setting new plaintext 2020-12-03 15:23:39 -05:00
Jeremy Stretch
d75696b30a Fixes #5407: Add direct link to secret on secrets list 2020-12-03 14:15:48 -05:00
Jeremy Stretch
22bb700f94 Fixes #5396: Fix uniqueness constraint for virtual machine names 2020-12-03 13:40:42 -05:00
Jeremy Stretch
a4b2e1f2e2 Fix typo (from PR #5393) 2020-12-03 12:13:08 -05:00
Jeremy Stretch
6ee161bdc6 Add references to GitHub discussions 2020-12-03 12:11:44 -05:00
Hans Erasmus
13349dab6d Fixed small typo (#5393)
Very small typo fixed
2020-12-03 11:48:34 -05:00
Jeremy Stretch
1159976d99 Release v2.10-beta2 2020-12-03 09:02:44 -05:00
Jeremy Stretch
407b16c98c Fix device component template 2020-12-02 16:39:26 -05:00
Jeremy Stretch
96ce9122f4 Clean up breadcrumbs for device component views 2020-12-02 16:25:38 -05:00
Jeremy Stretch
a80f13243e Clean up tagged VLANs table column 2020-12-02 15:57:55 -05:00
Jeremy Stretch
c166852054 Remove warning message re: DEFAULT_TIMEOUT 2020-12-02 15:40:31 -05:00
Jeremy Stretch
ba00d57d37 Closes #4711: Rename Webhook.obj_type to content_types 2020-12-02 14:49:07 -05:00
Jeremy Stretch
f5133c6737 Include nested representation of nodes within each CablePath 2020-12-02 14:30:05 -05:00
Jeremy Stretch
5a4234fcb9 Standardize validation of interface VLAN assignments 2020-12-02 14:19:02 -05:00
Jeremy Stretch
3cbe8ddf02 Consolidate CableCSVForm validation logic 2020-12-02 13:17:30 -05:00
Jeremy Stretch
8461832a7b Fixes #5395: Fix cable tracing for rear ports with no corresponding front port 2020-12-02 12:03:25 -05:00
Jeremy Stretch
f504d1aa99 #5306: Standardize device/VM assignment for IP addresses & secrets 2020-12-02 10:53:40 -05:00
Jeremy Stretch
2b0ddd2a98 Closes #5399: Show options for cable endpoint types during bulk import 2020-12-02 10:08:41 -05:00
Jeremy Stretch
cc271aefe1 Closes #5400: Store custom field defaults as JSON values 2020-12-01 16:05:23 -05:00
Jeremy Stretch
0b57389af6 Add a better progress indicator for trace_paths 2020-12-01 13:30:59 -05:00
Jeremy Stretch
ef77961cf4 Fix tests 2020-12-01 12:01:10 -05:00
Jeremy Stretch
915cf3e715 Merge branch 'develop' into develop-2.10 2020-12-01 11:42:55 -05:00
Jeremy Stretch
cadba74b1f #5306: Introduce CSVContentTypeField for cable termination types 2020-12-01 11:03:05 -05:00
Jeremy Stretch
23b305847e Add changelog for #2755 2020-11-30 13:06:01 -05:00
Jeremy Stretch
f55e966c8f Closes #4865: Replace all Count() annotations with subqueries (#5385)
* Convert circuits to use subqueries

* Convert dcim to use subqueries

* Convert extras to use subqueries

* Convert ipam to use subqueries

* Convert secrets to use subqueries

* Convert virtualization to use subqueries

* Update global search view to use subqueries where appropriate

* Remove extraneous order_by() calls
2020-11-25 15:49:18 -05:00
Jeremy Stretch
77bbe5730b Fixes #5383: Fix setting user password via REST API 2020-11-25 11:47:53 -05:00
Jeremy Stretch
f8b523b97b Extend assertInstanceEqual to accept a list of data fields to exclude from comparison with the instance 2020-11-25 11:44:44 -05:00
Jeremy Stretch
d9c503a9ec Fixes #5176: Enforce content type restrictions when creating objects via the REST API 2020-11-25 10:24:41 -05:00
Jeremy Stretch
52aa123a9f Fix view tests 2020-11-25 09:22:24 -05:00
Jeremy Stretch
4e25c70f96 Merge branch 'develop' into develop-2.10 2020-11-24 16:50:21 -05:00
Jeremy Stretch
d250fd91a9 Post-release version bump 2020-11-24 16:48:55 -05:00
Jeremy Stretch
6a90295505 Merge pull request #5377 from netbox-community/develop
Release v2.9.10
2020-11-24 16:47:21 -05:00
Jeremy Stretch
b4c7727a82 Release v2.9.10 2020-11-24 16:36:46 -05:00
Jeremy Stretch
9ac64d57d0 Changelog for #5319 2020-11-24 16:29:09 -05:00
Jeremy Stretch
6f68be5aa7 Merge pull request #5362 from ndom91/5319-usb-power-outlet
Add: USB power outlet/ports
2020-11-24 16:26:26 -05:00
Jeremy Stretch
b68c79be6b Fixes #5376: Correct invalid custom field filter logic values 2020-11-24 10:28:34 -05:00
Jeremy Stretch
b3d674e170 Remove extraneous imports 2020-11-24 10:13:03 -05:00
ndom91
bff9bd5dbd chore: fix pep8 formatting fail 2020-11-24 16:07:22 +01:00
ndom91
e7e63796ac fix: typo 2020-11-24 15:50:10 +01:00
Jeremy Stretch
e1911a624b Merge branch 'develop-2.10' of https://github.com/netbox-community/netbox into develop-2.10 2020-11-24 09:44:54 -05:00
ndom91
825cc9a86f update: ordering / completeness of usb connectors 2020-11-24 15:44:51 +01:00
Jeremy Stretch
869c87e396 Add tests for per-device component views 2020-11-24 09:44:03 -05:00
Daniel Sheppard
e9fb91b197 Fixes: #5374 - Fix exception thrown when tracing mid-point 2020-11-24 08:41:48 -06:00
Jeremy Stretch
a081d0d93a Use smaller navigation tabs 2020-11-24 09:24:28 -05:00
Jeremy Stretch
54af29eb40 Move changelog for #5274 2020-11-24 09:14:45 -05:00
Jeremy Stretch
6cae4d7ee4 Fix CustomFieldSerializer content_types queryset 2020-11-23 18:55:17 -05:00
Jeremy Stretch
65d2994823 Changelog for #5274 2020-11-23 16:27:14 -05:00
Jeremy Stretch
8e0a6479ca Merge pull request #5372 from netbox-community/5274-custom-fields-api
Closes #5274: Enable REST API support for custom fields
2020-11-23 16:23:19 -05:00
Jeremy Stretch
98f2d2501b Add REST API test for custom fields 2020-11-23 16:01:51 -05:00
Jeremy Stretch
a05fe69043 Add REST API endpoint for custom fields 2020-11-23 15:54:42 -05:00
Jeremy Stretch
6fb080ff4c Rename CustomFieldFilterSet 2020-11-23 14:47:54 -05:00
Jeremy Stretch
9923548628 Note that maintenance mode disables last_active updates during login 2020-11-23 11:22:46 -05:00
Jeremy Stretch
181f5c991b Fixes #5309: Avoid extraneous database queries when manipulating objects 2020-11-20 15:40:09 -05:00
Jeremy Stretch
3dd2e4c84c Fixes #5360: Clear VLAN assignments when setting interface mode to none 2020-11-20 14:40:21 -05:00
ndom91
83f7f9f0e5 add: USB power outlet/ports 2020-11-19 23:59:51 +01:00
Jeremy Stretch
507fb5387b Merge pull request #5361 from netbox-community/5305-standardize-object-views
#5305: Optimize ObjectView to minimize view boilerplate
2020-11-19 16:47:23 -05:00
Jeremy Stretch
1d7bee5eee Move device template 2020-11-19 16:19:08 -05:00
Jeremy Stretch
1d922ee813 Migrate all ObjectView subclasses to use get_extra_context() 2020-11-19 15:59:11 -05:00
Jeremy Stretch
d237b97776 Update custom_fields_panel.html 2020-11-19 13:53:37 -05:00
Jeremy Stretch
790e1ee2e4 Update created_updated.html 2020-11-19 13:44:34 -05:00
Jeremy Stretch
e5caea04c1 Update UserKey views to use "object" context var 2020-11-19 13:43:17 -05:00
Jeremy Stretch
2f1ca902f7 Fall back to base template if object template doesn't exist 2020-11-19 13:31:59 -05:00
Jeremy Stretch
d5d87e0fdd Update templates to use "object" context var 2020-11-19 13:22:33 -05:00
Jeremy Stretch
3e7cf416f1 Update ObjectChangeLogView to use "object" context var 2020-11-19 11:49:37 -05:00
Jeremy Stretch
e2d2ff8586 Standardize on "object" for ObjectView template context 2020-11-19 11:29:18 -05:00
Jeremy Stretch
11fa348575 Fixes #5358: Fix user table configuration for VM interfaces 2020-11-19 09:45:01 -05:00
Jeremy Stretch
58668a6807 Add a "getting started" page for developers 2020-11-18 11:25:31 -05:00
Jeremy Stretch
6d379ad029 Refresh development documentation 2020-11-18 10:07:39 -05:00
Jeremy Stretch
a05fc091c8 Fixes #5356: Populate manufacturer field when adding a device component template 2020-11-17 16:30:58 -05:00
Jeremy Stretch
f2bc6f0f96 Fixes #5355: Limit rack groups by selected site when editing a rack 2020-11-17 16:25:20 -05:00
Jeremy Stretch
16a95beb22 Release v2.10-beta1 2020-11-17 15:53:31 -05:00
Jeremy Stretch
ef426deb53 Tweak help modal icon 2020-11-17 15:07:05 -05:00
Jeremy Stretch
6773709c34 Merge branch 'develop' into develop-2.10 2020-11-17 14:35:06 -05:00
Jeremy Stretch
e72db65be2 Clean up v2.10 release notes 2020-11-17 14:11:47 -05:00
Jeremy Stretch
5b9e1b04dc Fix badge icon CSS 2020-11-17 13:38:19 -05:00
Jeremy Stretch
c1c4f28f29 Update installation docs to use CentOS 8 2020-11-17 13:23:07 -05:00
Jeremy Stretch
59df724844 Updated installation docs 2020-11-17 12:01:10 -05:00
Jeremy Stretch
fc126d79cd Bump Django to 3.1.3 2020-11-17 10:32:06 -05:00
Jeremy Stretch
bb15f78ca5 Fix Cable model validation tests 2020-11-17 10:26:03 -05:00
Jeremy Stretch
83daadd575 Highlight the current termination 2020-11-16 16:07:29 -05:00
Jeremy Stretch
c559775135 Add support for tracing split paths 2020-11-16 15:49:07 -05:00
Jeremy Stretch
ba2ff0acb8 Fix icon class 2020-11-16 13:17:43 -05:00
Jeremy Stretch
5106e879c6 Fix CSS for dropdown menu icons 2020-11-16 12:15:27 -05:00
Jeremy Stretch
8c4d4532a4 Fixes #5235: Fix exception when editing IP address with a NAT IP assigned to a non-racked device 2020-11-16 10:59:41 -05:00
Jeremy Stretch
9a736170fe Fixes #5350: Filter available racks by selected group when creating a rack reservation 2020-11-16 10:38:57 -05:00
Jeremy Stretch
9f8f9e8b97 Fixes #5345: Fix non-deterministic ordering of prefixes and IP addresses 2020-11-16 10:17:05 -05:00
Jeremy Stretch
0ee4bc22e5 Add note about changelog 2020-11-16 09:40:50 -05:00
Jeremy Stretch
b9da0129ff Changelog for #5337 2020-11-16 09:38:00 -05:00
Jeremy Stretch
42c29d0f45 Merge pull request #5342 from JonathonReinhart/5337-add-splice-rearport-type
Closes #5337: Add "splice" port type
2020-11-16 09:34:12 -05:00
Jeremy Stretch
d0e6e9c837 Correct return URLs for device component actions 2020-11-13 15:37:34 -05:00
Jeremy Stretch
5f8b0cc40a Ensure consistent display of device component buttons 2020-11-13 15:29:37 -05:00
Jeremy Stretch
9736d6ba48 Separate device component lists into discrete views 2020-11-13 15:00:12 -05:00
Jeremy Stretch
052346364a Don't wrap component names 2020-11-13 13:14:10 -05:00
Jeremy Stretch
424d72a7b3 Fix up related paths list 2020-11-13 12:12:25 -05:00
Jeremy Stretch
eb5f6167a5 Add segment_count property to CablePath 2020-11-13 12:11:53 -05:00
Jeremy Stretch
e84a6b99a8 Improved cable trace UI 2020-11-12 16:55:02 -05:00
Jeremy Stretch
f3f3993963 Enforce custom field validation on the model 2020-11-12 14:23:08 -05:00
Jeremy Stretch
4a8a1ce45c Check for extraneous custom field data on clean() 2020-11-12 12:18:31 -05:00
Jonathon Reinhart
7aa9ecd17a Closes #5337: Add "splice" port type 2020-11-12 10:41:29 -05:00
Jeremy Stretch
aed25fea3a #259: Add present_in_vrf filters for IPAddress 2020-11-12 10:27:44 -05:00
Jeremy Stretch
cbea309786 Call out removal of DTL (#4360) at top of release notes 2020-11-12 10:17:19 -05:00
Jeremy Stretch
a3675854be Clean up generic view templates 2020-11-11 16:58:29 -05:00
Jeremy Stretch
b3c770216e Relocate and group generic views 2020-11-11 16:07:38 -05:00
Jeremy Stretch
8714c33e8a Move constants out of views.py 2020-11-11 15:36:57 -05:00
Jeremy Stretch
a0772fd7ba Move context processors under NetBox core 2020-11-11 15:28:07 -05:00
Jeremy Stretch
3d6baeaab0 Move selection field validation from admin form to model 2020-11-11 15:24:39 -05:00
Jeremy Stretch
d17bf67131 Rewrote documentation for custom fields 2020-11-11 15:23:35 -05:00
Jeremy Stretch
64d1f57276 Add custom get_operation_id() method to avoid monkey-patching coreapi 2020-11-11 14:25:43 -05:00
Jeremy Stretch
963df7e398 Correct FrontPortTemplate update data 2020-11-11 13:02:58 -05:00
Jeremy Stretch
5ed5ffea0e Bulk update should return complete object representation 2020-11-11 13:02:28 -05:00
Jeremy Stretch
d560e2da93 Fix tracing from front/rear ports 2020-11-11 11:48:55 -05:00
Jeremy Stretch
2b359ce1c7 Move rest_api_server_error() to utilities.api 2020-11-10 17:19:14 -05:00
Jeremy Stretch
4971469590 Move APIRootView to netbox.api.views 2020-11-10 17:13:22 -05:00
Jeremy Stretch
db0c61dea4 Consolidate middleware under NetBox core 2020-11-10 16:59:37 -05:00
Jeremy Stretch
c496b05630 Update Python dependencies 2020-11-10 16:44:19 -05:00
Jeremy Stretch
8348c5a674 Fix side panel width 2020-11-10 16:00:21 -05:00
Jeremy Stretch
d03c14d49c Closes #5154: Utilize all horizontal space for web UI 2020-11-10 13:55:53 -05:00
Jeremy Stretch
7a61354d8c Fix rack elevation image toggles 2020-11-10 13:42:48 -05:00
Jeremy Stretch
b9af6ef841 Tweak icons 2020-11-10 13:36:40 -05:00
Jeremy Stretch
de0e69840e Fix RegionTestCase 2020-11-10 13:13:01 -05:00
Jeremy Stretch
52312195b6 Ensure consistent inclusion of custom fields for newly-supporting models 2020-11-10 12:33:20 -05:00
Jeremy Stretch
fbe1ec3e6d Extend some CSV import tests to check ChoiceField slugs 2020-11-10 12:14:54 -05:00
Jeremy Stretch
46b48ee55d Add missing tenant attribute 2020-11-10 11:58:59 -05:00
Jeremy Stretch
f631f8c45b Correct label for RIR 2020-11-10 11:58:34 -05:00
Jeremy Stretch
1552681e6b Don't use responsive tables for device components 2020-11-10 11:53:40 -05:00
Jeremy Stretch
2377e04911 Fix up device component tab navigation & return URLs 2020-11-10 11:46:04 -05:00
Jeremy Stretch
aac930237a Fix permissions for REST API status view 2020-11-10 11:16:35 -05:00
Jeremy Stretch
97c588a8ba Clean up service form 2020-11-10 11:05:29 -05:00
Jeremy Stretch
3d6bf1e0f8 Clean up CustomField regex validation 2020-11-10 10:21:18 -05:00
Jeremy Stretch
b8a7870750 Fix bulk editing of device components 2020-11-10 09:22:50 -05:00
Jeremy Stretch
cb79a5a56d Remove old tables.py 2020-11-10 09:05:42 -05:00
Jeremy Stretch
0567f0d190 Merge branch 'develop' into develop-2.10 2020-11-09 20:58:59 -05:00
Jeremy Stretch
340e665817 Post release version bump 2020-11-09 20:57:35 -05:00
Jeremy Stretch
8ba50d0cf2 Merge pull request #5332 from netbox-community/develop
Release v2.9.9
2020-11-09 20:55:28 -05:00
Jeremy Stretch
a6f0154803 Release v2.9.9 2020-11-09 20:51:35 -05:00
Jeremy Stretch
652e128cfd Merge pull request #5317 from netbox-community/2755-material-design-icons
Closes #2755: Switch to Material Design icons
2020-11-09 20:46:23 -05:00
Jeremy Stretch
9b2dc89c6c Closes #5327: Be more strict when capturing anticipated ImportError exceptions 2020-11-09 16:49:05 -05:00
Jeremy Stretch
dc7da4f0f6 Fixes #5316: Dry running scripts should not trigger webhooks 2020-11-09 16:22:45 -05:00
Jeremy Stretch
ab33b3aa84 Fixes #5328: Fix CreatedUpdatedFilterTest when running in non-UTC timezone 2020-11-09 16:04:09 -05:00
Jeremy Stretch
bf836d4d46 Fixes #5331: Fix filtering of sites by null region 2020-11-09 15:58:59 -05:00
Jeremy Stretch
c3f2cc7648 Correct buttons() method in dummy plugin template content 2020-11-09 14:31:53 -05:00
Jeremy Stretch
d2c4c7fb10 Closes #5324: Add missing template extension tags for plugins for VM interface view 2020-11-09 14:19:22 -05:00
Jeremy Stretch
39f4dea051 Merge pull request #5326 from 991jo/patch-1
Fixed a UI Bug where there is no whitespace after grouped custom links.
2020-11-09 12:54:08 -05:00
991jo
7cf4095983 Fixed a UI Bug where there is no whitespace after grouped custom links.
See #5325 for details
2020-11-09 07:56:26 +01:00
John Anderson
0d27abc6fc fixes #5314 - Fix config context rendering when multiple tags are assgined to an object 2020-11-06 16:47:07 -05:00
Jeremy Stretch
62b0a68bef Don't use chevron-right icon for hierarchy 2020-11-06 16:26:16 -05:00
Jeremy Stretch
5db14f9410 Tweak CSS 2020-11-06 16:09:55 -05:00
Jeremy Stretch
6542a326c1 Clean up stray Font Awesome icons 2020-11-06 15:06:45 -05:00
Jeremy Stretch
72dace29b7 Replace Glyphicons with Material Design 2020-11-06 14:49:14 -05:00
Jeremy Stretch
867f308027 Replace Font Awesome icons with Material Design 2020-11-06 14:33:20 -05:00
Jeremy Stretch
d388472773 Add Material Design icons 2020-11-06 12:13:00 -05:00
Jeremy Stretch
39b322ae6b Closes #5313: Denote official support for Python 3.8 2020-11-05 16:08:33 -05:00
Jeremy Stretch
23cce55246 Merge branch 'develop' into develop-2.10 2020-11-05 15:33:07 -05:00
Jeremy Stretch
b39019cec9 Clarify cache invalidation instructions 2020-11-05 14:41:06 -05:00
Jeremy Stretch
f2cba78549 Closes #5310: Link to rack groups within rack list table 2020-11-05 14:24:22 -05:00
Jeremy Stretch
f845eeb117 Closes #5304: Return server error messages as JSON when handling REST API requests 2020-11-04 17:11:57 -05:00
Jeremy Stretch
c53990c739 Closes #5307: Add a region selector for every site form field 2020-11-04 15:27:41 -05:00
Jeremy Stretch
7d52b4d9a5 Changelog for #5271 2020-11-04 13:23:56 -05:00
Jeremy Stretch
a69d61c124 Merge pull request #5308 from netbox-community/5271-DynamicModelChoiceMixin-initial
Fixes #5271: Extend DynamicModelChoiceMixin to accept initial field values implied by child fields
2020-11-04 13:20:30 -05:00
Jeremy Stretch
798220cf9a Fix filter reference 2020-11-04 13:05:24 -05:00
Jeremy Stretch
7598b891c1 Add initial_params to all forms 2020-11-04 11:09:13 -05:00
Jeremy Stretch
1f0b1dd10e Add initial_params to DynamicModelChoiceMixin 2020-11-04 10:15:15 -05:00
Jeremy Stretch
f0bac741cc Move to lock-threads app 2020-11-04 08:58:20 -05:00
Jeremy Stretch
bd62611117 Skip signal processing when loading cables from fixtures 2020-11-03 13:32:05 -05:00
Jeremy Stretch
2bb79a2773 Add missing bulk update test data 2020-11-02 16:56:04 -05:00
Jeremy Stretch
9fae11a42f Add present_in_vrf filters 2020-11-02 15:39:46 -05:00
Jeremy Stretch
700aa1ad5c Add import/export RTs to VRFTable 2020-11-02 14:55:05 -05:00
Jeremy Stretch
9a9babfc35 Remove extraneous prefetch_related() calls from object list views 2020-10-30 16:54:41 -04:00
Jeremy Stretch
97c8306eeb Drop add_prefetch from BaseTable; improve dynamic prefetching for table querysets 2020-10-30 16:15:16 -04:00
Jeremy Stretch
8d02303515 Optimize cable termination tables 2020-10-30 13:57:17 -04:00
Jeremy Stretch
70e966923a Add CablePath.get_path() to prefetch path nodes 2020-10-30 13:32:10 -04:00
Jeremy Stretch
f82e2a8d20 Fixed up device & device type tab navigation 2020-10-30 11:41:51 -04:00
Jeremy Stretch
2424f684b9 Post-release version bump 2020-10-30 10:41:05 -04:00
Jeremy Stretch
6dcb2de28f Merge pull request #5293 from netbox-community/develop
Release v2.9.8
2020-10-30 10:38:17 -04:00
Jeremy Stretch
fcb5e6ae1c Merge branch 'develop' into develop-2.10 2020-10-30 10:38:05 -04:00
Jeremy Stretch
cbd155406b Release v2.9.8 2020-10-30 10:11:13 -04:00
Jeremy Stretch
70cc368225 Changelog for #4559, #5282, #5285 2020-10-30 09:14:52 -04:00
Jeremy Stretch
6d28eae5dc Merge pull request #5290 from nniehoff/5282-ldap-logging
Fixing #5282 - moving logging configuration from to configuration.py
2020-10-30 09:11:12 -04:00
Jeremy Stretch
ca932ecadc Merge pull request #5286 from netbox-community/5285-plugins-api-app_name
Fixes #5285: Include plugin API endpoints in root view without needing app_name set
2020-10-30 09:10:12 -04:00
Jeremy Stretch
04d763d814 Merge pull request #5266 from netbox-community/4559-config-context-rendering
4559 config context rendering
2020-10-30 09:09:40 -04:00
Nick Niehoff
97ea15e978 Removing logfile variable 2020-10-30 06:32:12 -06:00
John Anderson
28c17f33ab move get_queryset() to common mixin 2020-10-30 02:56:43 -04:00
John Anderson
db87a69488 convert region fields to f-string 2020-10-30 02:56:26 -04:00
Nick Niehoff
2b154dcfdf Fixing #5282 - moving logging configuration from authentication.py to configuration.py 2020-10-29 15:14:52 -06:00
Jeremy Stretch
1000039c74 Merge pull request #5277 from systeembeheerder/develop
Update upgrading.md
2020-10-29 17:11:04 -04:00
Jeremy Stretch
2ccc543542 Document the available template blocks within base.html 2020-10-29 17:10:19 -04:00
systeembeheerder
8ac2ee7b49 Update upgrading.md
make destination path for cp media absolute
2020-10-29 22:05:19 +01:00
Jeremy Stretch
db3fd27da2 Merge pull request #5283 from markkuleinio/develop
Fix #5265: Change systemctl status outputs to venv era
2020-10-29 16:49:34 -04:00
Jeremy Stretch
6edd65c4ed Merge pull request #5288 from netbox-community/5252-table-config
Closes #5252: Introduce an API endpoint for writing user preferences
2020-10-29 16:26:45 -04:00
Jeremy Stretch
aad32c4866 Add tests for UserConfig API endpoint 2020-10-29 16:05:59 -04:00
Jeremy Stretch
00e102fb0c Fix resetting column preferences 2020-10-29 14:42:40 -04:00
Jeremy Stretch
a43361170c Fix overwriting of existing preferences 2020-10-29 14:15:38 -04:00
Jeremy Stretch
acd4054e79 Customize device component tables for user 2020-10-29 14:07:36 -04:00
Jeremy Stretch
ffdb727e1c Update BaseTable to accept user instance directly 2020-10-29 14:03:08 -04:00
Jeremy Stretch
cf328ca51e Fix interfaces table header 2020-10-29 13:38:07 -04:00
Jeremy Stretch
b871d2a8c4 Fixes #5285: Include plugin API endpoints in root view without needing app_name set 2020-10-29 12:30:10 -04:00
Markku Leinio
02f348b15f Fix typo in weekday 2020-10-28 21:06:20 +02:00
Markku Leinio
4672f16fda Fix #5265: Change systemctl status outputs to venv era 2020-10-28 21:03:35 +02:00
systeembeheerder
6404657f99 Update upgrading.md
confirm 5275; use absolute paths
2020-10-27 16:07:38 +01:00
Jeremy Stretch
2f3557c18f Fixes #5273: Fix exception when validating a new permission with no models selected 2020-10-27 10:01:49 -04:00
John Anderson
047f03a58c clean up imports 2020-10-25 19:00:56 -04:00
John Anderson
606b015314 Merge branch 'develop' into 4559-config-context-rendering 2020-10-25 18:47:40 -04:00
John Anderson
478d82196a rebase develop 2020-10-25 18:20:21 -04:00
John Anderson
034ff2fb3f #3672 changelog 2020-10-25 18:19:20 -04:00
John Anderson
9bfb89fffd fixes #3672 - update django-cacheops to 5.1.0 2020-10-25 18:19:20 -04:00
John Anderson
26ff33c41a pep8 2020-10-25 17:56:42 -04:00
John Anderson
9e84e3b83b added tests 2020-10-25 16:49:18 -04:00
Jeremy Stretch
ce2210b7bc Introduce table_config_form template tag to simplify form generation 2020-10-23 16:47:53 -04:00
John Anderson
82f5d0070e account for null value annotations 2020-10-23 10:56:02 -04:00
John Anderson
22d2289ed2 add support for regions and vms 2020-10-23 01:18:04 -04:00
Jeremy Stretch
ff3d0b72b9 Tweak the table config form for generic use 2020-10-21 16:06:37 -04:00
Jeremy Stretch
4de7fcd758 Convert table config updates to use REST API 2020-10-21 14:52:50 -04:00
Jeremy Stretch
2845dd488e Add a REST API endpoint for updating user preferences 2020-10-21 09:05:33 -04:00
Jeremy Stretch
2e558ba031 Closes #5139: Omit utilization statistics from RIR list 2020-10-20 13:16:35 -04:00
John Anderson
3ba18633de initial work on config context performance improvements 2020-10-20 01:07:22 -04:00
Jeremy Stretch
9cbfc0ce9a Merge pull request #5251 from netbox-community/4786-device-component-tables
#4786: Convert device component templates to tables
2020-10-19 15:01:40 -04:00
Jeremy Stretch
55a2e0299c Standardize device component table columns 2020-10-19 13:55:02 -04:00
Jeremy Stretch
e304f105c9 Cleanup stray output 2020-10-16 17:03:14 -04:00
Jeremy Stretch
502b66367c Convert VM interfaces list to table 2020-10-16 17:01:55 -04:00
Jeremy Stretch
00caa368c5 Remove interface IPs toggle 2020-10-16 16:40:21 -04:00
Jeremy Stretch
a969b81e63 Change color for edit button 2020-10-16 16:36:12 -04:00
Jeremy Stretch
0a67926012 Fix up missing table columns 2020-10-16 16:33:08 -04:00
Jeremy Stretch
51821818e0 Add cable trace buttons 2020-10-16 16:14:05 -04:00
Jeremy Stretch
82c6fb6e19 Convert device inventory items list to table 2020-10-16 16:00:25 -04:00
Jeremy Stretch
7c1316619b Convert device device bays list to table 2020-10-16 15:51:46 -04:00
Jeremy Stretch
2146c38748 Convert device interfaces list to table 2020-10-16 15:42:48 -04:00
Jeremy Stretch
e3f98a011c Convert device rear ports list to table 2020-10-16 15:33:39 -04:00
Jeremy Stretch
68060cf9e9 Convert device front ports list to table 2020-10-16 15:28:28 -04:00
Jeremy Stretch
eed2e4a15b Convert device power outlets list to table 2020-10-16 15:16:36 -04:00
Jeremy Stretch
3a47e0e2ed Convert device power ports list to table 2020-10-16 15:09:23 -04:00
Jeremy Stretch
60c30b92ba Convert device console server ports list to table 2020-10-16 15:01:16 -04:00
Jeremy Stretch
99352a5d30 Convert device console ports list to table 2020-10-16 14:39:15 -04:00
Jeremy Stretch
35273c7bfe Add connection column for path endpoints 2020-10-16 11:41:24 -04:00
Jeremy Stretch
769b240164 Extend device component tables to include cable peer 2020-10-16 11:11:41 -04:00
Jeremy Stretch
823aa6b712 Add compatible types for PowerFeed 2020-10-16 11:05:42 -04:00
Jeremy Stretch
73bf3b9498 Reorganize DCIM tables 2020-10-16 10:39:13 -04:00
Jeremy Stretch
23d56a5758 Note REST API change for #4967 2020-10-16 10:04:33 -04:00
Daniel Sheppard
086b1d85c7 Update Change Notes 2020-10-15 21:23:32 -05:00
Daniel Sheppard
32274dec86 Closes: #4967 - Adds Tenancy to Aggregate model 2020-10-15 20:40:19 -05:00
Jeremy Stretch
dde52309d2 Fixes #5243: Redirect user to appropriate tab after modifying device components 2020-10-15 16:55:20 -04:00
Jeremy Stretch
c9c8d337a0 Closes #5011: Standardized name field lengths across all models 2020-10-15 15:37:34 -04:00
Jeremy Stretch
8781cf1c57 Closes #609: Add min/max value and regex validation for custom fields 2020-10-15 15:06:01 -04:00
John Anderson
87c13a876b fixes #5113 - incorrect caching of permission object assignments to user groups in the admin panel 2020-10-14 20:10:21 -04:00
Jeremy Stretch
e7d26ca5dc Move Cable and CablePath to cables.py 2020-10-14 16:54:30 -04:00
Jeremy Stretch
143f3cc27c #4711: Rename CustomField.obj_type to content_types 2020-10-14 15:26:46 -04:00
Jeremy Stretch
0d01a3fce8 Add schema migrations to plugins installation doc 2020-10-14 10:42:31 -04:00
Jeremy Stretch
defade84e4 Fix plugin name resolution 2020-10-13 17:18:13 -04:00
Jeremy Stretch
80c142ab7c Closes #4918: Add a REST API endpoint which returns NetBox's current operational status 2020-10-13 16:57:45 -04:00
Jeremy Stretch
c0c5f52ed9 Reorganize REST API components under netbox app 2020-10-13 15:57:21 -04:00
Jeremy Stretch
97ac6851d0 Merge branch 'develop' into develop-2.10 2020-10-12 09:51:54 -04:00
Jeremy Stretch
d4b96a5a27 Post-release version bump 2020-10-12 09:51:11 -04:00
Jeremy Stretch
1bbfc6da25 Merge pull request #5236 from netbox-community/develop
Release v2.9.7
2020-10-12 09:49:51 -04:00
Jeremy Stretch
1aabb2ed5d Release v2.9.7 2020-10-12 09:39:39 -04:00
Jeremy Stretch
f53810ebb2 Fixes #5231: Fix KeyError exception when viewing object with custom link and debugging is disabled 2020-10-09 15:53:45 -04:00
Jeremy Stretch
d61d62088f Ditch hard-coded filtering of ContentTypes API endpoint 2020-10-09 15:11:56 -04:00
Jeremy Stretch
3df3706f27 Closes #5190: Add a REST API endpoint for content types 2020-10-09 15:08:29 -04:00
Jeremy Stretch
66c4597525 Add RouteTarget to __all__ 2020-10-09 14:38:21 -04:00
Jeremy Stretch
30778a9c40 Closes #5225: CircuitTermination port_speed is now optional 2020-10-09 14:06:24 -04:00
Jeremy Stretch
96650b0216 Merge branch 'develop' into develop-2.10 2020-10-09 13:52:16 -04:00
Jeremy Stretch
7545599493 Post-release version bump 2020-10-09 13:31:28 -04:00
Jeremy Stretch
eecd51e08b Merge pull request #5230 from netbox-community/develop
Release v2.9.6
2020-10-09 13:27:42 -04:00
Jeremy Stretch
3047208e6a Release v2.9.6 2020-10-09 13:17:16 -04:00
Jeremy Stretch
a796e29c98 Fixes #5229: Fix AttributeError exception when LDAP authentication is enabled 2020-10-09 13:16:07 -04:00
Jeremy Stretch
26abd1f4e2 Merge pull request #5228 from netbox-community/develop
Release v2.9.5
2020-10-09 13:01:24 -04:00
Jeremy Stretch
5f0e04aebe Post-release version bump 2020-10-09 13:01:01 -04:00
Jeremy Stretch
918ca4fdcb Release v2.9.5 2020-10-09 12:57:14 -04:00
Jeremy Stretch
24e5dd0c78 Add scope warning to plugins development doc 2020-10-09 12:56:32 -04:00
Jeremy Stretch
f35715683e Closes #5202: Extend the available context data when rendering custom links 2020-10-09 12:36:09 -04:00
Jeremy Stretch
b5a65bc66c Fixes #5211: Add missing has_primary_ip filter for virtual machines 2020-10-09 11:46:16 -04:00
Jeremy Stretch
3a21f7ab26 Fixes #5226: Custom choice fields should be blank initially if no default choice has been designated 2020-10-09 11:34:50 -04:00
Jeremy Stretch
a2c012d2c4 Fixes #5224: Don't allow a rear port to have fewer positions than the number of mapped front ports 2020-10-08 16:24:08 -04:00
Jeremy Stretch
752b099d22 Exempt InventoryItem from queryset caching (MPTT) 2020-10-08 15:30:59 -04:00
Jeremy Stretch
6470613221 Merge pull request #5212 from netbox-community/4900-cable-paths
#4900: New model for cable paths
2020-10-08 15:15:40 -04:00
Jeremy Stretch
44caa402d0 Delete obsolete LoopDetected exception 2020-10-08 15:01:55 -04:00
Jeremy Stretch
a716ca705c Rewrite cablepath tests to create components within each test 2020-10-08 14:55:13 -04:00
Jeremy Stretch
75ddc63466 Handle split paths 2020-10-08 14:01:47 -04:00
Jeremy Stretch
0e41bc48b7 Add /trace API endpoints for CircuitTermination and PowerFeed 2020-10-08 13:55:29 -04:00
Daniel Sheppard
4896059162 Fixes: #5220 - Fix API patch request against IP-Address endpoint with null assigned_object_type 2020-10-08 12:50:29 -05:00
Jeremy Stretch
0c5efa243d Handle traces which split at a RearPort 2020-10-08 13:45:47 -04:00
Daniel Sheppard
eadecf3eda Fixes: #5221 - Fix bulk component creation over multiple VMs 2020-10-08 12:39:20 -05:00
Jeremy Stretch
29eebf9fbe Update REST API changes 2020-10-08 11:26:02 -04:00
Jeremy Stretch
ae1ceb26b9 Standardize cable/connection field ordering 2020-10-08 11:23:24 -04:00
Jeremy Stretch
55268c90c8 Replace connection_status with connected_endpoint_reachable on InterfaceConnectionSerializer 2020-10-08 11:15:09 -04:00
Jeremy Stretch
aa0ee2720b Add cable paths API detail view for pass-through ports 2020-10-08 10:32:17 -04:00
Jeremy Stretch
35759fdb70 Redo the cable trace UI (WIP) 2020-10-07 16:39:15 -04:00
Jeremy Stretch
39e4ab164e Fixes #5218: Raise validation error if a power port's allocated_draw exceeds its maximum_draw 2020-10-07 13:23:19 -04:00
Jeremy Stretch
5089df3ffd Fix error in OBJECTCHANGE_OBJECT table column template 2020-10-07 13:13:03 -04:00
Jeremy Stretch
9738257aa2 Fixes #5217: Prevent erroneous removal of prefetched GenericForeignKey data from tables 2020-10-07 13:09:08 -04:00
Jeremy Stretch
85439fd952 Fix PowerFeed display in cable traces 2020-10-07 11:33:47 -04:00
Jeremy Stretch
eaf8d95ce5 Clean up power utilization logic 2020-10-07 11:14:16 -04:00
Jeremy Stretch
f560693748 Rewrite trace_paths management command and call in upgrade.sh 2020-10-07 10:30:11 -04:00
Jeremy Stretch
6db3c65bcc Swap order of cabling migrations 2020-10-07 09:50:12 -04:00
Jeremy Stretch
693b32077a Update the netbox-discuss mailing list URL 2020-10-07 08:53:04 -04:00
Jeremy Stretch
c7c66626b6 Standardize 'cabled' and 'connected' filters; complete tests 2020-10-06 17:28:25 -04:00
Jeremy Stretch
44b842592a Restore total length count on trace view 2020-10-06 16:58:11 -04:00
Jeremy Stretch
2c9ae60dec Optimize path node representations 2020-10-06 16:34:03 -04:00
Jeremy Stretch
a072d40594 Update v2.10 changelog 2020-10-06 16:16:08 -04:00
Jeremy Stretch
a6e0ef8cd8 Clean up console/power/interface connections views 2020-10-06 16:15:18 -04:00
Jeremy Stretch
6b3a1998c8 Add test_is_connected to CircuitTerminationTestCase 2020-10-06 15:59:21 -04:00
Jeremy Stretch
534364a30f Improve model docstrings 2020-10-06 15:48:52 -04:00
Jeremy Stretch
52ec35b94f Correct serializer field lists 2020-10-06 15:27:40 -04:00
Jeremy Stretch
3870f5d246 Remove unused CablePathManager 2020-10-06 15:26:59 -04:00
Jeremy Stretch
23cde6d1b8 Include cable_peer on CableTermination serializers 2020-10-06 14:30:46 -04:00
Jeremy Stretch
c813ae4f04 Clean up power connection tables 2020-10-06 13:30:28 -04:00
Jeremy Stretch
d984dbd83b Extend device view to show local cable termination for all components 2020-10-06 13:08:41 -04:00
Jeremy Stretch
d59f0891e4 Cache peer termination on CableTerminations 2020-10-06 12:10:12 -04:00
Jeremy Stretch
6275c8c67d Prefetch path & destination for API views 2020-10-06 10:41:52 -04:00
Jeremy Stretch
ffdf5514ae Tweak component templates 2020-10-06 10:37:59 -04:00
Jeremy Stretch
56ee425227 Introduce PathContains lookup to allow filtering against objects in path directly 2020-10-06 09:41:45 -04:00
Jeremy Stretch
19430ddeb5 Extend cable trace view to show related paths 2020-10-05 16:03:30 -04:00
Jeremy Stretch
d5d6b0e856 Optimize path prefetching 2020-10-05 14:47:21 -04:00
Jeremy Stretch
32b8148da1 Standardize path endpoint templates 2020-10-05 13:23:55 -04:00
Jeremy Stretch
50aecd02f4 Fix up connection lists (pending additional work) 2020-10-05 12:05:29 -04:00
Jeremy Stretch
b2066bc4b7 Merge schema migrations 2020-10-05 11:47:24 -04:00
Jeremy Stretch
32aa2daea6 PowerFeedSerializer should subclass ConnectedEndpointSerializer 2020-10-05 11:39:17 -04:00
Jeremy Stretch
b846f631a4 Rename connection_status to connected_endpoint_reachable 2020-10-05 11:32:39 -04:00
Jeremy Stretch
3d34f1cdcb Rename CablePath.is_connected to is_active 2020-10-05 11:13:33 -04:00
Jeremy Stretch
13db22d392 Initial changelog notes for #4900 2020-10-05 11:07:03 -04:00
Jeremy Stretch
df73737128 Remove legacy connection_status fields 2020-10-05 10:47:41 -04:00
Jeremy Stretch
079c42291c Remove legacy connected endpoint fields 2020-10-05 09:56:46 -04:00
Jeremy Stretch
f8800b8303 Optimize console/power/interface connection lists 2020-10-02 21:44:16 -04:00
Jeremy Stretch
5737f6fca0 Cache each CablePath on its originating endpoint 2020-10-02 17:16:43 -04:00
Jeremy Stretch
8cb636bed2 Update console/power/interface connection tables 2020-10-02 15:10:49 -04:00
Jeremy Stretch
7ff247c57f Add trace view for PowerFeed 2020-10-02 14:57:50 -04:00
Jeremy Stretch
e9da84f91a Replace legacy trace() method 2020-10-02 14:54:16 -04:00
Jeremy Stretch
47ea75348c Changelog for #5197 2020-10-02 14:17:55 -04:00
Jeremy Stretch
cd9c425d9a Merge pull request #5208 from glennmatthews/gfm-issue-5197
5197: Limit main IPAddress view to a max of 10 duplicate addresses; add new duplicates view
2020-10-02 14:16:32 -04:00
Glenn Matthews
6612e0107e Limit main IPAddress view to a max of 10 duplicate addresses. Fixes #5197 2020-10-02 14:01:51 -04:00
Jeremy Stretch
ae0a481c64 Fixes #5206: Apply user pagination preferences to all paginated object lists 2020-10-02 13:54:57 -04:00
Jeremy Stretch
aa0d4c4145 Replace connection_status filter with is_connected 2020-10-02 12:25:31 -04:00
Jeremy Stretch
66355da04c CablePath.origin should be unique 2020-10-02 11:51:23 -04:00
Jeremy Stretch
e0abd7ef3e Remove dcim.tests.test_api.ConnectionTest 2020-10-02 11:45:42 -04:00
Jeremy Stretch
4fd1219814 Add tests for all PathEndpoint classes 2020-10-02 11:35:17 -04:00
Daniel Sheppard
1a43ef82d9 Fixes: #5201 - Fix bulk "all" operations on VLAN Groups 2020-10-02 09:59:16 -05:00
Jeremy Stretch
9f242216e6 Rename test elements to be more readable 2020-10-02 10:14:52 -04:00
Jeremy Stretch
9d10c57dc9 Remove legacy CablePathTestCase 2020-10-02 09:55:28 -04:00
Jeremy Stretch
d50a0d94be Add tests for multiple pass-through breakouts 2020-10-02 09:54:12 -04:00
Jeremy Stretch
3b0a75edf8 Add test for updated paths on cable status change 2020-10-01 17:25:44 -04:00
Jeremy Stretch
0d07b0346b Add test for connecting cables out of order 2020-10-01 16:53:13 -04:00
Jeremy Stretch
c974c5687c Capture path end-to-end status in CablePath 2020-10-01 16:42:57 -04:00
Jeremy Stretch
610420c020 Drop support for split paths 2020-10-01 14:24:34 -04:00
Jeremy Stretch
cd398b15d8 retrace_paths should ignore case in model names 2020-10-01 13:10:08 -04:00
Jeremy Stretch
8abc05544c CircuitTermination and PowerFeed are path endpoints 2020-10-01 13:05:00 -04:00
Jeremy Stretch
105c0fd3d2 Introduce retrace_paths management command 2020-10-01 12:18:42 -04:00
Jeremy Stretch
19a3a4d4ef Add GenericRelation to originating cable paths on PathEndpoint 2020-10-01 11:30:03 -04:00
Daniel Sheppard
f2bc824a8e Fixes: #5199 - Change default logging for LDAP to INFO 2020-10-01 09:27:17 -05:00
Daniel Sheppard
23a9cb2fad Fixes: #5199 - Change default logging for LDAP to INFO 2020-10-01 09:25:56 -05:00
Jeremy Stretch
46df5a97b2 Remove extraneous test objects 2020-09-30 17:12:38 -04:00
Jeremy Stretch
e53ae1d584 Extend cable path tests 2020-09-30 17:10:22 -04:00
Jeremy Stretch
cd71799373 Ignore the position stack when traversing single-position rear ports 2020-09-30 17:09:39 -04:00
Jeremy Stretch
319329e2b2 Extend cable path tests 2020-09-30 16:17:22 -04:00
Jeremy Stretch
985197788b Add initial tests 2020-09-30 15:15:27 -04:00
Jeremy Stretch
587e6fcf72 Initial work on cable paths (WIP) 2020-09-30 15:13:06 -04:00
Daniel Sheppard
22a80c5558 Update pre-commit script to support virtual environment within IDE 2020-09-30 08:28:48 -05:00
Daniel Sheppard
14ef7fa869 Update version-2.9.md 2020-09-29 19:55:59 -05:00
Daniel Sheppard
068803dc86 Update 2.9 Release notes with 4523 2020-09-29 19:55:40 -05:00
Daniel Sheppard
ee7f43abe1 Fixes #4523 - Add site vlan to certain scenarios where sites are the same 2020-09-29 14:45:02 -05:00
Jeremy Stretch
015e25c618 Merge pull request #5185 from kobayashi/5184-power-util
Fixes #5184: Fix missing Power Utilization
2020-09-28 09:17:49 -04:00
kobayashi
5c8694ad65 Fixes #5184: Fix missing Power Utilization 2020-09-27 16:33:47 -04:00
Jeremy Stretch
12e2537222 General cleanup of tables 2020-09-25 14:18:29 -04:00
Jeremy Stretch
28f0da0bc1 Introduce LinkedCountColumn to standardize approach to counting related items in tables 2020-09-25 12:42:17 -04:00
Jeremy Stretch
18a8a91d57 Introduce ChoiceFieldColumn to replace template columns 2020-09-25 10:52:14 -04:00
Jeremy Stretch
1b55285167 Relocate CSS classes for ChoiceFields from model to ChoiceSet 2020-09-24 16:35:53 -04:00
Jeremy Stretch
bddd010310 Annotate REST API changes fro #259 2020-09-24 14:45:14 -04:00
Jeremy Stretch
ee63cbe7e9 Merge pull request #5178 from netbox-community/259-route-targets
#259: Route target support
2020-09-24 14:36:26 -04:00
Jeremy Stretch
cca2173886 Documentation for #259 2020-09-24 14:18:08 -04:00
Jeremy Stretch
47fd9cab1c Add tests for route targets; extend VRF tests 2020-09-24 13:51:17 -04:00
Jeremy Stretch
f684d07c61 Model import/export route targets on VRFs 2020-09-24 12:09:28 -04:00
Jeremy Stretch
dfb5a06d9d Introduce the RouteTarget model 2020-09-24 11:25:52 -04:00
Jeremy Stretch
ff42c89cc4 Closes #5177: Note permissions required for running reports and custom scripts 2020-09-24 10:32:15 -04:00
Jeremy Stretch
856500b014 Fixes #5174: Ensure consistent alignment of rack elevations 2020-09-24 10:11:34 -04:00
Jeremy Stretch
380f59ac0b Fixes #5175: Fix toggling of rack elevation order 2020-09-24 10:01:02 -04:00
Jeremy Stretch
9b16d6df2e Merge v2.9.4 release 2020-09-23 16:11:00 -04:00
Jeremy Stretch
d30874e0de Post-release version bump 2020-09-23 15:39:36 -04:00
Jeremy Stretch
28925c12eb Merge pull request #5172 from netbox-community/develop
Release v2.9.4
2020-09-23 15:38:09 -04:00
Jeremy Stretch
31fcad4dbb Release v2.9.4 2020-09-23 15:24:59 -04:00
Jeremy Stretch
e2a840ff0b Closes #5053: Mention local_requirements.txt when an ImportError occurs 2020-09-23 15:19:42 -04:00
Jeremy Stretch
0a40418614 Fixes #5066: Update view_reportresult to view_report permission 2020-09-23 13:40:15 -04:00
Jeremy Stretch
90dbe9bf60 Closes #5171: Introduce the RQ_DEFAULT_TIMEOUT configuration parameter 2020-09-23 13:28:05 -04:00
Jeremy Stretch
09dc271eec Fix reference to update_data 2020-09-23 12:20:45 -04:00
Jeremy Stretch
1f0a4cc548 Closes #5075: Include a VLAN membership view for VM interfaces 2020-09-23 11:48:32 -04:00
Jeremy Stretch
c0b94e4e8e Fixes #5137: Correct permission for viewing report results is extras.view_reportresult 2020-09-23 10:16:22 -04:00
Jeremy Stretch
e404f4efd2 Closes #5164: Show total rack count per rack group under site view 2020-09-23 09:46:52 -04:00
Jeremy Stretch
116b20cb9f Fix ImageAttachmentTestCase 2020-09-22 16:26:08 -04:00
Jeremy Stretch
afa1449f89 Fixes #5167: Support filtering ObjectChanges by multiple users 2020-09-22 16:17:39 -04:00
Jeremy Stretch
0c3fafdfef Closes #4897: Allow filtering by content type identified as <app>.<model> string 2020-09-22 16:06:38 -04:00
Jeremy Stretch
5ba4252388 Changelog for #4882 2020-09-22 14:49:49 -04:00
Jeremy Stretch
6195a34db5 Merge pull request #5166 from netbox-community/4882-api-bulk-update
#4882: Support bulk updates via REST API
2020-09-22 14:13:05 -04:00
Jeremy Stretch
c3eb2eb601 Add documentation for API bulk updates 2020-09-22 14:02:31 -04:00
Jeremy Stretch
38ed612cb9 Add test for API bulk updates 2020-09-22 13:50:55 -04:00
Jeremy Stretch
5677fab2f9 Support bulk operations for both PUT and PATCH 2020-09-22 11:55:46 -04:00
Jeremy Stretch
a998c826a8 Introduce BulkUpdateModelMixin; rename BulkDeleteSerializer 2020-09-22 11:50:43 -04:00
Jeremy Stretch
935d239eab Changelog for #3436 2020-09-22 10:36:16 -04:00
Jeremy Stretch
961a491ea4 Merge pull request #5163 from netbox-community/3436-api-bulk-delete
#3436: Support for bulk deletion via REST API
2020-09-22 10:29:41 -04:00
Jeremy Stretch
54a4f84708 Add REST API documentation for bulk object deletion 2020-09-22 10:18:15 -04:00
Jeremy Stretch
c1b57af771 Monkey-patch DRF to treat bulk_destroy as a built-in operation 2020-09-22 10:06:13 -04:00
Jeremy Stretch
2b689239ae Merge pull request #5151 from netbox-community/1503-secret-assignment
#1503: Extend secrets assignment to virtual machines
2020-09-22 09:26:57 -04:00
Jeremy Stretch
d44c2ba8fe Merge branch 'develop-2.10' into 1503-secret-assignment 2020-09-22 09:24:03 -04:00
Jeremy Stretch
d540728f50 Closes #5149: Add rack group field to device edit form 2020-09-21 15:26:32 -04:00
Jeremy Stretch
12402f4c30 Fixes #5156: Add missing "add" button to rack reservations list 2020-09-21 15:14:44 -04:00
Jeremy Stretch
3e1961b435 Changelog for #2179 2020-09-21 14:49:39 -04:00
Jeremy Stretch
4c23b59090 Merge pull request #5161 from netbox-community/2179-service-port-arrays
#2179: Support multiple port numbers for services
2020-09-21 14:47:36 -04:00
Jeremy Stretch
3a90366538 Fix filtering services by port number 2020-09-21 14:36:58 -04:00
Jeremy Stretch
b85990daa6 Fix return URL when editing a service 2020-09-21 13:34:39 -04:00
Jeremy Stretch
e77f1bdd85 Introduce array_to_string() utility function; add port_list property to Service 2020-09-21 13:31:38 -04:00
Jeremy Stretch
f97d8963f2 Initial work on #2179: Allow a service to have multiple ports 2020-09-21 13:21:41 -04:00
Jeremy Stretch
975e7e60ff Changelog for #1503 2020-09-21 11:12:17 -04:00
Jeremy Stretch
c986321402 Fix "add secret" link for VMs 2020-09-21 10:54:04 -04:00
Jeremy Stretch
0b33c53f47 Update secrets API, views 2020-09-18 16:58:51 -04:00
Jeremy Stretch
b2a14d4654 Extend secret filters 2020-09-18 16:35:36 -04:00
Jeremy Stretch
64adbf8769 Fix migrations to ensure secret assigned_object is required 2020-09-18 16:00:21 -04:00
Jeremy Stretch
43f3e682c5 Support assignment of secrets to virtual machines 2020-09-18 15:39:41 -04:00
Jeremy Stretch
ec095e58b7 #1503: Initial work on generic secret assignments (WIP) 2020-09-18 14:51:09 -04:00
Jeremy Stretch
0cc2a6b2cf Closes #5003: CSV import now accepts slug values for choice fields 2020-09-18 13:03:38 -04:00
Jeremy Stretch
70ec5b9f37 Annotate REST API changes in release notes 2020-09-18 11:51:38 -04:00
Jeremy Stretch
584b076886 Closes #4956: Include inventory items on primary device view 2020-09-18 11:35:15 -04:00
Jeremy Stretch
52dc80209c Closes #1692: Allow assigment of inventory items to parent items in web UI 2020-09-18 11:05:31 -04:00
Jeremy Stretch
230e7bbe34 Closes #1846: Enable MPTT for InventoryItem hierarchy 2020-09-18 10:18:03 -04:00
Jeremy Stretch
0030fe1779 Fixes #5146: Add custom fields support for cables, power panels, rack reservations, and virtual chassis 2020-09-17 14:22:14 -04:00
Jeremy Stretch
91eca8cac9 Changelog for #4878 2020-09-17 13:25:18 -04:00
Jeremy Stretch
dbfb9b2cee Merge pull request #5145 from netbox-community/4878-custom-fields
4878 custom fields
2020-09-17 13:19:05 -04:00
Jeremy Stretch
61cf903028 Clean up CustomField admin form 2020-09-17 12:43:08 -04:00
Jeremy Stretch
3d2f6c0703 Simplify form field for boolean CustomFields 2020-09-17 12:26:02 -04:00
Jeremy Stretch
4ecd3d23f7 Disable bulk deletion of CustomFields in admin UI 2020-09-17 12:14:02 -04:00
Jeremy Stretch
2d56a658b3 Clean up stale data when a custom field is changed/deleted 2020-09-16 17:03:31 -04:00
Jeremy Stretch
2bc524a2ee Standardize usage of BooleanColumn 2020-09-16 14:25:07 -04:00
Jeremy Stretch
43f1fbf5b3 Fixes #5136: Fix exception when bulk editing interface 802.1Q mode 2020-09-16 13:07:55 -04:00
Jeremy Stretch
e983f44fd3 Closes #5128: Increase maximum rear port positions from 64 to 1024 2020-09-16 12:53:11 -04:00
Jeremy Stretch
4d9da4a1f8 Closes #5134: Display full hierarchy in breadcrumbs for sites/racks 2020-09-16 12:44:49 -04:00
Jeremy Stretch
9d30712fb2 Changelog for #5133 (fixed in #5105) 2020-09-16 11:20:00 -04:00
Jeremy Stretch
03b207d154 Fixes #5105: Validation should fail when reassigning a primary IP from device to VM 2020-09-16 11:10:30 -04:00
Jeremy Stretch
a743102567 Fix serialization of custom_fields for change logging 2020-09-15 15:53:59 -04:00
Jeremy Stretch
eba2ea06ff Add test for bulk API deletions 2020-09-15 14:36:38 -04:00
Jeremy Stretch
6694ec78bc Implement support for bulk deletion of objects via a single REST API request 2020-09-15 13:36:36 -04:00
Jeremy Stretch
df6ad680ce Closes #1755: Toggle order in which rack elevations are displayed 2020-09-14 14:22:21 -04:00
Jeremy Stretch
b1b63513e7 Changelog for #5108 2020-09-14 10:41:04 -04:00
Jeremy Stretch
22e30b93d5 Merge pull request #5126 from netbox-community/5108-report-management-command-fix
fixes #5108 - correct the runreport management command to work with JobResult model
2020-09-14 10:39:33 -04:00
John Anderson
c5e82a3895 fixes #5108 - correct the runreport management command to work with JobResults model 2020-09-10 17:43:41 -04:00
Jeremy Stretch
4466458076 Fixes #5118: Specifying an empty list of tags should clear assigned tags (REST API) 2020-09-09 13:43:10 -04:00
Jeremy Stretch
47a6fc19ca Fixes #5109: Fix representation of custom choice field values for webhook data 2020-09-09 11:47:21 -04:00
Jeremy Stretch
c891f43b14 Fixes #5050: Fix potential failure on 0016_replicate_interfaces schema migration from old release 2020-09-09 10:29:17 -04:00
Jeremy Stretch
1509650462 Closes #5107: Add note about dropping backward compatibility for old REDIS configuration format 2020-09-09 10:00:50 -04:00
Jeremy Stretch
695e9ec5d7 Fixes #5111: Allow use of tuples when specifying ObjectVar query_params 2020-09-09 09:52:57 -04:00
Jeremy Stretch
c5ab89d71e Merge branch 'develop-2.10' into 4878-custom-fields 2020-09-04 16:14:06 -04:00
Jeremy Stretch
08c492f1f4 Merge develop into develop-2.10 2020-09-04 16:09:05 -04:00
Jeremy Stretch
0c8d45f679 Post-release version bump 2020-09-04 15:57:28 -04:00
Jeremy Stretch
53e09a924c Restore and rename CustomChoiceFieldInspector 2020-08-26 15:04:22 -04:00
Jeremy Stretch
bde25e69f8 Add CustomFieldsDataFieldInspector for OpenAPI spec 2020-08-26 14:36:45 -04:00
Jeremy Stretch
d2b7eb161c Cache CustomField assignments for API queries 2020-08-25 16:44:59 -04:00
Jeremy Stretch
378c0ac259 Fix filtering by custom field value 2020-08-25 16:21:54 -04:00
Jeremy Stretch
a9086b0679 Fix import test 2020-08-25 15:31:01 -04:00
Jeremy Stretch
d0f1c733e7 Replace CustomFieldsSerializer with CustomFieldsDataField 2020-08-25 15:22:32 -04:00
Jeremy Stretch
0b7d019c02 Remove unused CustomChoiceFieldInspector 2020-08-25 15:16:20 -04:00
Jeremy Stretch
5b3de8defe Use DjangoJSONEncoder for encoding custom field data 2020-08-25 13:57:18 -04:00
Jeremy Stretch
fb8904af54 Remove unused attributes, methods 2020-08-25 13:49:23 -04:00
Jeremy Stretch
f7b8d6ede5 Add choices ArrayField to CustomField; drop CustomFieldChoice 2020-08-25 13:24:46 -04:00
Jeremy Stretch
d9e5adc032 Update serializer to access custom_field_data directly 2020-08-25 10:43:04 -04:00
Jeremy Stretch
c85a45e520 Further work on custom fields 2020-08-24 14:11:13 -04:00
Jeremy Stretch
2276603ac3 Drop CustomFieldValue 2020-08-21 16:21:11 -04:00
Jeremy Stretch
879166d939 Initial work on reimplementing custom fields 2020-08-21 15:16:33 -04:00
Jeremy Stretch
ec66e1a5c0 Closes #4349: Drop support for embedded graphs 2020-08-21 11:57:46 -04:00
Jeremy Stretch
ee34e28986 Drop backward compatibility for REMOTE_AUTH_DEFAULT_PERMISSIONS defined as a list 2020-08-21 11:18:57 -04:00
Jeremy Stretch
d1071b79e3 Closes #4360: Drop support for the Django template language in export templates 2020-08-21 11:16:30 -04:00
Jeremy Stretch
2339fe22ae Closes #4941: commit argument is now required argument in a custom script's run() method 2020-08-21 11:06:36 -04:00
676 changed files with 65149 additions and 29703 deletions

View File

@@ -1,42 +0,0 @@
---
name: 🐛 Bug Report
about: Report a reproducible bug in the current release of NetBox
---
<!--
NOTE: IF YOUR ISSUE DOES NOT FOLLOW THIS TEMPLATE, IT WILL BE CLOSED.
This form is only for reproducible bugs. If you need assistance with
NetBox installation, or if you have a general question, DO NOT open an
issue. Instead, post to our mailing list:
https://groups.google.com/forum/#!forum/netbox-discuss
Please describe the environment in which you are running NetBox. Be sure
that you are running an unmodified instance of the latest stable release
before submitting a bug report, and that any plugins have been disabled.
-->
### Environment
* Python version:
* NetBox version:
<!--
Describe in detail the exact steps that someone else can take to reproduce
this bug using the current stable release of NetBox. Begin with the
creation of any necessary database objects and call out every operation
being performed explicitly. If reporting a bug in the REST API, be sure to
reconstruct the raw HTTP request(s) being made: Don't rely on a client
library such as pynetbox.
-->
### Steps to Reproduce
1.
2.
3.
<!-- What did you expect to happen? -->
### Expected Behavior
<!-- What happened instead? -->
### Observed Behavior

64
.github/ISSUE_TEMPLATE/bug_report.yaml vendored Normal file
View File

@@ -0,0 +1,64 @@
---
name: 🐛 Bug Report
description: Report a reproducible bug in the current release of NetBox
labels: ["type: bug"]
body:
- type: markdown
attributes:
value: >
**NOTE:** This form is only for reporting _reproducible bugs_ in a current NetBox
installation. If you're having trouble with installation or just looking for
assistance with using NetBox, please visit our
[discussion forum](https://github.com/netbox-community/netbox/discussions) instead.
- type: input
attributes:
label: NetBox version
description: >
What version of NetBox are you currently running? (If you don't have access to the most
recent NetBox release, consider testing on our [demo instance](https://demo.netbox.dev/)
before opening a bug report to see if your issue has already been addressed.)
placeholder: v2.11.7
validations:
required: true
- type: dropdown
attributes:
label: Python version
description: What version of Python are you currently running?
options:
- 3.6
- 3.7
- 3.8
- 3.9
validations:
required: true
- type: textarea
attributes:
label: Steps to Reproduce
description: >
Describe in detail the exact steps that someone else can take to
reproduce this bug using the current stable release of NetBox. Begin with the
creation of any necessary database objects and call out every operation being
performed explicitly. If reporting a bug in the REST API, be sure to reconstruct
the raw HTTP request(s) being made: Don't rely on a client library such as
pynetbox. Additionally, **do not rely on the demo instance** for reproducing
suspected bugs, as its data is prone to modification or deletion at any time.
placeholder: |
1. Click on "create widget"
2. Set foo to 12 and bar to G
3. Click the "create" button
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: What did you expect to happen?
placeholder: A new widget should have been created with the specified attributes
validations:
required: true
- type: textarea
attributes:
label: Observed Behavior
description: What happened instead?
placeholder: A TypeError exception was raised
validations:
required: true

View File

@@ -3,7 +3,10 @@ blank_issues_enabled: false
contact_links:
- name: 📖 Contributing Policy
url: https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md
about: Please read through our contributing policy before opening an issue or pull request
- name: 💬 Discussion Group
url: https://groups.google.com/forum/#!forum/netbox-discuss
about: Join our discussion group for assistance with installation issues and other problems
about: "Please read through our contributing policy before opening an issue or pull request"
- name: Discussion
url: https://github.com/netbox-community/netbox/discussions
about: "If you're just looking for help, try starting a discussion instead"
- name: 💬 Community Slack
url: https://netdev.chat/
about: "Join #netbox on the NetDev Community Slack for assistance with installation issues and other problems"

View File

@@ -1,28 +0,0 @@
---
name: 📖 Documentation Change
about: Suggest an addition or modification to the NetBox documentation
---
<!--
NOTE: IF YOUR ISSUE DOES NOT FOLLOW THIS TEMPLATE, IT WILL BE CLOSED.
Please indicate the nature of the change by placing an X in one of the
boxes below.
-->
### Change Type
[ ] Addition
[ ] Correction
[ ] Deprecation
[ ] Cleanup (formatting, typos, etc.)
### Area
[ ] Installation instructions
[ ] Configuration parameters
[ ] Functionality/features
[ ] REST API
[ ] Administration/development
[ ] Other
<!-- Describe the proposed change(s). -->
### Proposed Changes

View File

@@ -0,0 +1,35 @@
---
name: 📖 Documentation Change
description: Suggest an addition or modification to the NetBox documentation
labels: ["type: documentation"]
body:
- type: dropdown
attributes:
label: Change Type
description: What type of change are you proposing?
options:
- Addition
- Correction
- Removal
- Cleanup (formatting, typos, etc.)
validations:
required: true
- type: dropdown
attributes:
label: Area
description: To what section of the documentation does this change primarily pertain?
options:
- Installation instructions
- Configuration parameters
- Functionality/features
- REST API
- Administration/development
- Other
validations:
required: true
- type: textarea
attributes:
label: Proposed Changes
description: Describe the proposed changes and why they are necessary.
validations:
required: true

View File

@@ -1,56 +0,0 @@
---
name: ✨ Feature Request
about: Propose a new NetBox feature or enhancement
---
<!--
NOTE: IF YOUR ISSUE DOES NOT FOLLOW THIS TEMPLATE, IT WILL BE CLOSED.
This form is only for proposing specific new features or enhancements.
If you have a general idea or question, please post to our mailing list
instead of opening an issue:
https://groups.google.com/forum/#!forum/netbox-discuss
NOTE: Due to an excessive backlog of feature requests, we are not currently
accepting any proposals which significantly extend NetBox's feature scope.
Please describe the environment in which you are running NetBox. Be sure
that you are running an unmodified instance of the latest stable release
before submitting a bug report.
-->
### Environment
* Python version: <!-- Example: 3.6.9 -->
* NetBox version: <!-- Example: 2.7.3 -->
<!--
Describe in detail the new functionality you are proposing. Include any
specific changes to work flows, data models, or the user interface.
-->
### Proposed Functionality
<!--
Convey an example use case for your proposed feature. Write from the
perspective of a NetBox user who would benefit from the proposed
functionality and describe how.
--->
### Use Case
<!--
Note any changes to the database schema necessary to support the new
feature. For example, does the proposal require adding a new model or
field? (Not all new features require database changes.)
--->
### Database Changes
<!--
List any new dependencies on external libraries or services that this new
feature would introduce. For example, does the proposal require the
installation of a new Python package? (Not all new features introduce new
dependencies.)
-->
### External Dependencies

View File

@@ -0,0 +1,57 @@
---
name: ✨ Feature Request
description: Propose a new NetBox feature or enhancement
labels: ["type: feature"]
body:
- type: markdown
attributes:
value: >
**NOTE:** This form is only for submitting well-formed proposals to extend or modify
NetBox in some way. If you're trying to solve a problem but can't figure out how, or if
you still need time to work on the details of a proposed new feature, please start a
[discussion](https://github.com/netbox-community/netbox/discussions) instead.
- type: input
attributes:
label: NetBox version
description: What version of NetBox are you currently running?
placeholder: v2.11.7
validations:
required: true
- type: dropdown
attributes:
label: Feature type
options:
- Data model extension
- New functionality
- Change to existing functionality
validations:
required: true
- type: textarea
attributes:
label: Proposed functionality
description: >
Describe in detail the new feature or behavior you'd like to propose. Include any specific
changes to work flows, data models, or the user interface.
validations:
required: true
- type: textarea
attributes:
label: Use case
description: >
Explain how adding this functionality would benefit NetBox users. What need does it address?
validations:
required: true
- type: textarea
attributes:
label: Database changes
description: >
Note any changes to the database schema necessary to support the new feature. For example,
does the proposal require adding a new model or field? (Not all new features require database
changes.)
- type: textarea
attributes:
label: External dependencies
description: >
List any new dependencies on external libraries or services that this new feature would
introduce. For example, does the proposal require the installation of a new Python package?
(Not all new features introduce new dependencies.)

View File

@@ -1,16 +0,0 @@
---
name: 🏡 Housekeeping
about: A change pertaining to the codebase itself (developers only)
---
<!--
NOTE: This template is for use by maintainers only. Please do not submit
an issue using this template unless you have been specifically asked to
do so.
-->
### Proposed Changes
<!-- Provide justification for the proposed change(s). -->
### Justification

View File

@@ -0,0 +1,24 @@
---
name: 🏡 Housekeeping
description: A change pertaining to the codebase itself (developers only)
labels: ["type: housekeeping"]
body:
- type: markdown
attributes:
value: >
**NOTE:** This template is for use by maintainers only. Please do not submit
an issue using this template unless you have been specifically asked to do so.
- type: textarea
attributes:
label: Proposed Changes
description: >
Describe in detail the new feature or behavior you'd like to propose.
Include any specific changes to work flows, data models, or the user interface.
validations:
required: true
- type: textarea
attributes:
label: Justification
description: Please provide justification for the proposed change(s).
validations:
required: true

23
.github/lock.yml vendored
View File

@@ -1,23 +0,0 @@
# Configuration for Lock (https://github.com/apps/lock)
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 90
# Skip issues and pull requests created before a given timestamp. Timestamp must
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
skipCreatedBefore: false
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false
# Comment to post before locking. Set to `false` to disable
lockComment: false
# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: true
# Limit to only `issues` or `pulls`
# only: issues

33
.github/stale.yml vendored
View File

@@ -1,33 +0,0 @@
# Configuration for Stale (https://github.com/apps/stale)
# Pull requests are exempt from being marked as stale
only: issues
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 45
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 15
# Issues with these labels will never be considered stale
exemptLabels:
- "status: accepted"
- "status: blocked"
- "status: needs milestone"
# Label to use when marking an issue as stale
staleLabel: "pending closure"
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. NetBox
is governed by a small group of core maintainers which means not all opened
issues may receive direct feedback. Please see our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
This issue has been automatically closed due to lack of activity. In an
effort to reduce noise, please do not comment any further. Note that the
core maintainers may elect to reopen this issue at a later date if deemed
necessary.

50
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
services:
redis:
image: redis
ports:
- 6379:6379
postgres:
image: postgres
env:
POSTGRES_USER: netbox
POSTGRES_PASSWORD: netbox
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Check out repo
uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies & set up configuration
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pycodestyle coverage
ln -s configuration.testing.py netbox/netbox/configuration.py
- name: Check PEP8 compliance
run: pycodestyle --ignore=W504,E501 netbox/
- name: Run tests
run: coverage run --source="netbox/" netbox/manage.py test netbox/
- name: Show coverage report
run: coverage report --skip-covered --omit *migrations*

21
.github/workflows/lock.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
# lock-threads (https://github.com/marketplace/actions/lock-threads)
name: 'Lock threads'
on:
schedule:
- cron: '0 3 * * *'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2
with:
github-token: ${{ github.token }}
issue-lock-inactive-days: '90'
issue-exclude-created-before: ''
issue-exclude-labels: ''
issue-lock-labels: ''
issue-lock-comment: ''
issue-lock-reason: 'resolved'
process-only: 'issues'

35
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
# close-stale-issues (https://github.com/marketplace/actions/close-stale-issues)
name: 'Close stale issues/PRs'
on:
schedule:
- cron: '0 4 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
close-issue-message: >
This issue has been automatically closed due to lack of activity. In an
effort to reduce noise, please do not comment any further. Note that the
core maintainers may elect to reopen this issue at a later date if deemed
necessary.
close-pr-message: >
This PR has been automatically closed due to lack of activity.
days-before-stale: 60
days-before-close: 30
exempt-issue-labels: 'status: accepted,status: blocked,status: needs milestone'
operations-per-run: 100
remove-stale-when-updated: false
stale-issue-label: 'pending closure'
stale-issue-message: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. NetBox
is governed by a small group of core maintainers which means not all opened
issues may receive direct feedback. Please see our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
stale-pr-label: 'pending closure'
stale-pr-message: >
This PR has been automatically marked as stale because it has not had
recent activity. It will be closed automatically if no further action is
taken.

View File

@@ -1,19 +0,0 @@
sudo: required
services:
- postgresql
- redis-server
addons:
postgresql: "9.6"
language: python
python:
- "3.6"
- "3.7"
install:
- pip install -r requirements.txt
- pip install pycodestyle
- pip install coverage
before_script:
- psql --version
- psql -U postgres -c 'SELECT version();'
script:
- ./scripts/cibuild.sh

View File

@@ -4,15 +4,31 @@ If you encounter any issues installing or using NetBox, try one of the
following resources to get assistance. Please **do not** open a GitHub issue
except to report bugs or request features.
### GitHub Discussions
GitHub's discussions are the best place to get help or propose rough ideas for
new functionality. Their integration with GitHub allows for easily cross-
referencing and converting posts to issues as needed. There are several
categories for discussions:
* **General** - General community discussion
* **Ideas** - Ideas for new functionality that isn't yet ready for a formal
feature request
* **Q&A** - Request help with installing or using NetBox
### Mailing List
We have established a Google Groups Mailing List for issues and general
discussion. This is the best forum for obtaining assistance with NetBox
installation. You can find us [here](https://groups.google.com/forum/#!forum/netbox-discuss).
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 discussion, you can join the #netbox Slack channel on [NetworkToCode](https://slack.networktocode.com/).
For real-time chat, you can join the **#netbox** Slack channel on [NetDev Community](https://netdev.chat/).
Unfortunately, the Slack channel does not provide long-term retention of chat
history, so try to avoid it for any discussions would benefit from being
preserved for future reference.
## Reporting Bugs
@@ -93,6 +109,10 @@ appropriate labels will be applied for categorization.
## Submitting Pull Requests
* If you're interested in contributing to NetBox, be sure to check out our
[getting started](https://netbox.readthedocs.io/en/stable/development/getting-started/)
documentation for tips on setting up your development environment.
* Be sure to open an issue **before** starting work on a pull request, and
discuss your idea with the NetBox maintainers before beginning work. This will
help prevent wasting time on something that might we might not be able to
@@ -103,14 +123,18 @@ any work that's already in progress.
be assigned to you so that others are aware it's being worked on. A maintainer
will then mark the issue as "accepted."
* Any pull request which does _not_ relate to an accepted issue will be closed.
* Any pull request which does _not_ relate to an **accepted** issue will be closed.
* All major new functionality must include relevant tests where applicable.
* All new functionality must include relevant tests where applicable.
* When submitting a pull request, please be sure to work off of the `develop`
branch, rather than `master`. The `develop` branch is used for ongoing
development, while `master` is used for tagging stable releases.
* In most cases, it is not necessary to add a changelog entry: A maintainer will
take care of this when the PR is merged. (This helps avoid merge conflicts
resulting from multiple PRs being submitted simultaneously.)
* All code submissions should meet the following criteria (CI will enforce
these checks):
@@ -161,11 +185,5 @@ overlooked.
sync to review agenda items. This meeting provides opportunity to present and
discuss pressing topics. Meetings are held as virtual audio/video conferences.
* Official channels for communication include:
* GitHub issues/pull requests
* The [netbox-discuss](https://groups.google.com/forum/#!forum/netbox-discuss) mailing list
* The **#netbox** channel on [NetworkToCode Slack](https://networktocode.slack.com/)
* Maintainers with no substantial recorded activity in a 60-day period will be
removed from the project.

View File

@@ -1,54 +1,66 @@
![NetBox](docs/netbox_logo.svg "NetBox logo")
<div align="center">
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
</div>
NetBox is an IP address management (IPAM) and data center infrastructure
management (DCIM) tool. Initially conceived by the network engineering team at
![Master branch build status](https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master)
NetBox is an infrastructure resource modeling (IRM) tool designed to empower
network automation. Initially conceived by the network engineering team at
[DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically
to address the needs of network and infrastructure engineers. It is intended to
function as a domain-specific source of truth for network operations.
NetBox runs as a web application atop the [Django](https://www.djangoproject.com/)
Python framework with a [PostgreSQL](http://www.postgresql.org/) database. For a
Python framework with a [PostgreSQL](https://www.postgresql.org/) database. For a
complete list of requirements, see `requirements.txt`. The code is available [on GitHub](https://github.com/netbox-community/netbox).
The complete documentation for NetBox can be found at [Read the Docs](http://netbox.readthedocs.io/en/stable/).
The complete documentation for NetBox can be found at [Read the Docs](https://netbox.readthedocs.io/en/stable/). A public demo instance is available at https://demo.netbox.dev.
Questions? Comments? Please subscribe to [the netbox-discuss mailing list](https://groups.google.com/forum/#!forum/netbox-discuss),
or join us in the #netbox Slack channel on [NetworkToCode](https://networktocode.slack.com/)!
<div align="center">
<h4>Thank you to our sponsors!</h4>
### Build Status
[![DigitalOcean](https://raw.githubusercontent.com/wiki/netbox-community/netbox/images/sponsors/digitalocean.png)](https://try.digitalocean.com/developer-cloud)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[![Equinix Metal](https://raw.githubusercontent.com/wiki/netbox-community/netbox/images/sponsors/equinix.png)](https://metal.equinix.com/)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[![NS1](https://raw.githubusercontent.com/wiki/netbox-community/netbox/images/sponsors/ns1.png)](https://ns1.com/)
<br />
[![Stellar Technologies](https://raw.githubusercontent.com/wiki/netbox-community/netbox/images/sponsors/stellar.png)](https://stellar.tech/)
| | status |
|-------------|------------|
| **master** | [![Build Status](https://travis-ci.org/netbox-community/netbox.svg?branch=master)](https://travis-ci.com/netbox-community/netbox/) |
| **develop** | [![Build Status](https://travis-ci.org/netbox-community/netbox.svg?branch=develop)](https://travis-ci.com/netbox-community/netbox/) |
</div>
### Discussion
* [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
Please see [the documentation](https://netbox.readthedocs.io/en/stable/) for
instructions on installing NetBox. To upgrade NetBox, please download the
[latest release](https://github.com/netbox-community/netbox/releases) and
run `upgrade.sh`.
### Providing Feedback
The best platform for general feedback, assistance, and other discussion is our
[GitHub discussions](https://github.com/netbox-community/netbox/discussions).
To report a bug or request a specific feature, please open a GitHub issue using
the [appropriate template](https://github.com/netbox-community/netbox/issues/new/choose).
If you are interested in contributing to the development of NetBox, please read
our [contributing guide](CONTRIBUTING.md) prior to beginning any work.
### Screenshots
![Screenshot of main page](docs/media/screenshot1.png "Main page")
---
![Screenshot of rack elevation](docs/media/screenshot2.png "Rack elevation")
---
![Screenshot of prefix hierarchy](docs/media/screenshot3.png "Prefix hierarchy")
## Installation
### Related projects
Please see [the documentation](http://netbox.readthedocs.io/en/stable/) for
instructions on installing NetBox. To upgrade NetBox, please download the [latest release](https://github.com/netbox-community/netbox/releases)
and run `upgrade.sh`.
## Providing Feedback
Feature requests and bug reports must be submitted as GiHub issues. (Please be
sure to use the [appropriate template](https://github.com/netbox-community/netbox/issues/new/choose).)
For general discussion, please consider joining our [mailing list](https://groups.google.com/forum/#!forum/netbox-discuss).
If you are interested in contributing to the development of NetBox, please read
our [contributing guide](CONTRIBUTING.md) prior to beginning any work.
## Related projects
Please see [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for a list of relevant community projects.
Please see [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions)
for a list of relevant community projects.

View File

@@ -93,3 +93,7 @@ redis
# SVG image rendering (used for rack elevations)
# https://github.com/mozman/svgwrite
svgwrite
# Tabular dataset library (for table-based exports)
# https://github.com/jazzband/tablib
tablib

View File

@@ -1,12 +1,12 @@
# Caching
NetBox supports database query caching using [django-cacheops](https://github.com/Suor/django-cacheops) and Redis. When a query is made, the results are cached in Redis for a short period of time, as defined by the [CACHE_TIMEOUT](../../configuration/optional-settings/#cache_timeout) parameter (15 minutes by default). Within that time, all recurrences of that specific query will return the pre-fetched results from the cache.
NetBox supports database query caching using [django-cacheops](https://github.com/Suor/django-cacheops) and Redis. When a query is made, the results are cached in Redis for a short period of time, as defined by the [CACHE_TIMEOUT](../configuration/optional-settings.md#cache_timeout) parameter (15 minutes by default). Within that time, all recurrences of that specific query will return the pre-fetched results from the cache.
If a change is made to any of the objects returned by the query within that time, or if the timeout expires, the results are automatically invalidated and the next request for those results will be sent to the database.
## Invalidating Cached Data
Although caching is performed automatically and rarely requires administrative intervention, NetBox provides the `invalidate` management command to force invalidation of cached results. This command can reference a specific object my its type and numeric ID:
Although caching is performed automatically and rarely requires administrative intervention, NetBox provides the `invalidate` management command to force invalidation of cached results. This command can reference a specific object by its type and numeric ID:
```no-highlight
$ python netbox/manage.py invalidate dcim.Device.34

View File

@@ -1,6 +1,6 @@
# Change Logging
Every time an object in NetBox is created, updated, or deleted, a serialized copy of that object is saved to the database, along with meta data including the current time and the user associated with the change. These records form a persistent record of changes both for each individual object as well as NetBox as a whole. The global change log can be viewed by navigating to Other > Change Log.
Every time an object in NetBox is created, updated, or deleted, a serialized copy of that object taken both before and after the change is saved to the database, along with meta data including the current time and the user associated with the change. These records form a persistent record of changes both for each individual object as well as NetBox as a whole. The global change log can be viewed by navigating to Other > Change Log.
A serialized representation of the instance being modified is included in JSON format. This is similar to how objects are conveyed within the REST API, but does not include any nested representations. For instance, the `tenant` field of a site will record only the tenant's ID, not a representation of the tenant.

View File

@@ -1,26 +1,76 @@
# Custom Fields
Each object in NetBox is represented in the database as a discrete table, and each attribute of an object exists as a column within its table. For example, sites are stored in the `dcim_site` table, which has columns named `name`, `facility`, `physical_address`, and so on. As new attributes are added to objects throughout the development of NetBox, tables are expanded to include new rows.
Each model in NetBox is represented in the database as a discrete table, and each attribute of a model exists as a column within its table. For example, sites are stored in the `dcim_site` table, which has columns named `name`, `facility`, `physical_address`, and so on. As new attributes are added to objects throughout the development of NetBox, tables are expanded to include new rows.
However, some users might want to associate with objects attributes that are somewhat esoteric in nature, and that would not make sense to include in the core NetBox database schema. For instance, suppose your organization needs to associate each device with a ticket number pointing to the support ticket that was opened to have it installed. This is certainly a legitimate use for NetBox, but it's perhaps not a common enough need to warrant expanding the internal data schema. Instead, you can create a custom field to hold this data.
However, some users might want to store additional object attributes that are somewhat esoteric in nature, and that would not make sense to include in the core NetBox database schema. For instance, suppose your organization needs to associate each device with a ticket number correlating it with an internal support system record. This is certainly a legitimate use for NetBox, but it's not a common enough need to warrant including a field for _every_ NetBox installation. Instead, you can create a custom field to hold this data.
Custom fields must be created through the admin UI under Extras > Custom Fields. To create a new custom field, select the object(s) to which you want it to apply, and the type of field it will be. NetBox supports six field types:
Within the database, custom fields are stored as JSON data directly alongside each object. This alleviates the need for complex queries when retrieving objects.
* Free-form text (up to 255 characters)
* Integer
* Boolean (true/false)
* Date
* URL
* Selection
## Creating Custom Fields
Assign the field a name. This should be a simple database-friendly string, e.g. `tps_report`. You may optionally assign the field a human-friendly label (e.g. "TPS report") as well; the label will be displayed on forms. If a description is provided, it will appear beneath the field in a form.
Custom fields must be created through the admin UI under Extras > Custom Fields. NetBox supports six types of custom field:
Marking the field as required will require the user to provide a value for the field when creating a new object or when saving an existing object. A default value for the field may also be provided. Use "true" or "false" for boolean fields. (The default value has no effect for selection fields.)
* Text: Free-form text (up to 255 characters)
* Integer: A whole number (positive or negative)
* Boolean: True or false
* Date: A date in ISO 8601 format (YYYY-MM-DD)
* URL: This will be presented as a link in the web UI
* Selection: A selection of one of several pre-defined custom choices
* Multiple selection: A selection field which supports the assignment of multiple values
When creating a selection field, you should create at least two choices. These choices will be arranged first by weight, with lower weights appearing higher in the list, and then alphabetically.
Each custom field must have a name; this should be a simple database-friendly string, e.g. `tps_report`. You may also assign a corresponding human-friendly label (e.g. "TPS report"); the label will be displayed on web forms. A weight is also required: Higher-weight fields will be ordered lower within a form. (The default weight is 100.) If a description is provided, it will appear beneath the field in a form.
## Using Custom Fields
Marking a field as required will force the user to provide a value for the field when creating a new object or when saving an existing object. A default value for the field may also be provided. Use "true" or "false" for boolean fields, or the exact value of a choice for selection fields.
When a single object is edited, the form will include any custom fields which have been defined for the object type. These fields are included in the "Custom Fields" panel. On the backend, each custom field value is saved separately from the core object as an independent database call, so it's best to avoid adding too many custom fields per object.
The filter logic controls how values are matched when filtering objects by the custom field. Loose filtering (the default) matches on a partial value, whereas exact matching requires a complete match of the given string to a field's value. For example, exact filtering with the string "red" will only match the exact value "red", whereas loose filtering will match on the values "red", "red-orange", or "bored". Setting the filter logic to "disabled" disables filtering by the field entirely.
When editing multiple objects, custom field values are saved in bulk. There is no significant difference in overhead when saving a custom field value for 100 objects versus one object. However, the bulk operation must be performed separately for each custom field.
A custom field must be assigned to one or more object types, or models, in NetBox. Once created, custom fields will automatically appear as part of these models in the web UI and REST API. Note that not all models support custom fields.
### Custom Field Validation
NetBox supports limited custom validation for custom field values. Following are the types of validation enforced for each field type:
* Text: Regular expression (optional)
* Integer: Minimum and/or maximum value (optional)
* Selection: Must exactly match one of the prescribed choices
### Custom Selection Fields
Each custom selection field must have at least two choices. These are specified as a comma-separated list. Choices appear in forms in the order they are listed. Note that choice values are saved exactly as they appear, so it's best to avoid superfluous punctuation or symbols where possible.
If a default value is specified for a selection field, it must exactly match one of the provided choices. The value of a multiple selection field will always return a list, even if only one value is selected.
## Custom Fields in Templates
Several features within NetBox, such as export templates and webhooks, utilize Jinja2 templating. For convenience, objects which support custom field assignment expose custom field data through the `cf` property. This is a bit cleaner than accessing custom field data through the actual field (`custom_field_data`).
For example, a custom field named `foo123` on the Site model is accessible on an instance as `{{ site.cf.foo123 }}`.
## Custom Fields and the REST API
When retrieving an object via the REST API, all of its custom data will be included within the `custom_fields` attribute. For example, below is the partial output of a site with two custom fields defined:
```json
{
"id": 123,
"url": "http://localhost:8000/api/dcim/sites/123/",
"name": "Raleigh 42",
...
"custom_fields": {
"deployed": "2018-06-19",
"site_code": "US-NC-RAL42"
},
...
```
To set or change these values, simply include nested JSON data. For example:
```json
{
"name": "New Site",
"slug": "new-site",
"custom_fields": {
"deployed": "2019-03-24"
}
}
```

View File

@@ -17,6 +17,18 @@ When viewing a device named Router4, this link would render as:
Custom links appear as buttons at the top right corner of the page. Numeric weighting can be used to influence the ordering of links.
## Context Data
The following context data is available within the template when rendering a custom link's text or URL.
| Variable | Description |
|----------|-------------|
| `obj` | The NetBox object being displayed |
| `debug` | A boolean indicating whether debugging is enabled |
| `request` | The current WSGI request |
| `user` | The current user (if authenticated) |
| `perms` | The [permissions](https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions) assigned to the user |
## Conditional Rendering
Only links which render with non-empty text are included on the page. You can employ conditional Jinja2 logic to control the conditions under which a link gets rendered.

View File

@@ -170,18 +170,13 @@ Similar to `ChoiceVar`, but allows for the selection of multiple choices.
A particular object within NetBox. Each ObjectVar must specify a particular model, and allows the user to select one of the available instances. ObjectVar accepts several arguments, listed below.
* `model` - The model class
* `display_field` - The name of the REST API object field to display in the selection list (default: `'name'`)
* `display_field` - The name of the REST API object field to display in the selection list (default: `'display'`)
* `query_params` - A dictionary of query parameters to use when retrieving available options (optional)
* `null_option` - A label representing a "null" or empty choice (optional)
The `display_field` argument is useful when referencing a model which does not have a `name` field. For example, when displaying a list of device types, you would likely use the `model` field:
```python
device_type = ObjectVar(
model=DeviceType,
display_field='model'
)
```
!!! warning
The `display_field` parameter is now deprecated, and will be removed in NetBox v3.0. All ObjectVar instances will
instead use the new standard `display` field for all serializers (introduced in NetBox v2.11).
To limit the selections available within the list, additional query parameters can be passed as the `query_params` dictionary. For example, to show only devices with an "active" status:
@@ -231,6 +226,30 @@ An IPv4 or IPv6 network with a mask. Returns a `netaddr.IPNetwork` object. Two a
* `min_prefix_length` - Minimum length of the mask
* `max_prefix_length` - Maximum length of the mask
## Running Custom Scripts
!!! note
To run a custom script, a user must be assigned the `extras.run_script` permission. This is achieved by assigning the user (or group) a permission on the Script object and specifying the `run` action in the admin UI as shown below.
![Adding the run action to a permission](../../media/admin_ui_run_permission.png)
### Via the Web UI
Custom scripts can be run via the web UI by navigating to the script, completing any required form data, and clicking the "run script" button.
### Via the API
To run a script via the REST API, issue a POST request to the script's endpoint specifying the form data and commitment. For example, to run a script named `example.MyReport`, we would make a request such as the following:
```no-highlight
curl -X POST \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json; indent=4" \
http://netbox/api/extras/scripts/example.MyReport/ \
--data '{"data": {"foo": "somevalue", "bar": 123}, "commit": true}'
```
## Example
Below is an example script that creates new objects for a planned site. The user is prompted for three variables:

View File

@@ -2,12 +2,12 @@
NetBox allows users to define custom templates that can be used when exporting objects. To create an export template, navigate to Extras > Export Templates under the admin interface.
Each export template is associated with a certain type of object. For instance, if you create an export template for VLANs, your custom template will appear under the "Export" button on the VLANs list.
Each export template is associated with a certain type of object. For instance, if you create an export template for VLANs, your custom template will appear under the "Export" button on the VLANs list. Each export template must have a name, and may optionally designate a specific export [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) and/or file extension.
Export templates may be written in Jinja2 or [Django's template language](https://docs.djangoproject.com/en/stable/ref/templates/language/), which is very similar to Jinja2.
!!! note
The name `table` is reserved for internal use.
!!! warning
Support for Django's native templating logic will be removed in NetBox v2.10.
Export templates must be written in [Jinja2](https://jinja.palletsprojects.com/).
The list of objects returned from the database when rendering an export template is stored in the `queryset` variable, which you'll typically want to iterate through using a `for` loop. Object properties can be access by name. For example:
@@ -21,6 +21,16 @@ Height: {{ rack.u_height }}U
To access custom fields of an object within a template, use the `cf` attribute. For example, `{{ obj.cf.color }}` will return the value (if any) for a custom field named `color` on `obj`.
If you need to use the config context data in an export template, you'll should use the function `get_config_context` to get all the config context data. For example:
```
{% for server in queryset %}
{% set data = server.get_config_context() %}
{{ data.syslog }}
{% endfor %}
```
The `as_attachment` attribute of an export template controls its behavior when rendered. If true, the rendered content will be returned to the user as a downloadable file. If false, it will be displayed within the browser. (This may be handy e.g. for generating HTML content.)
A MIME type and file extension can optionally be defined for each export template. The default MIME type is `text/plain`.
## Example

View File

@@ -1,30 +0,0 @@
# Graphs
!!! warning
Native support for embedded graphs is due to be removed in NetBox v2.10. It will likely be superseded by a plugin providing similar functionality.
NetBox does not have the ability to generate graphs natively, but this feature allows you to embed contextual graphs from an external resources (such as a monitoring system) inside the site, provider, and interface views. Each embedded graph must be defined with the following parameters:
* **Type:** Site, device, provider, or interface. This determines in which view the graph will be displayed.
* **Weight:** Determines the order in which graphs are displayed (lower weights are displayed first). Graphs with equal weights will be ordered alphabetically by name.
* **Name:** The title to display above the graph.
* **Source URL:** The source of the image to be embedded. The associated object will be available as a template variable named `obj`.
* **Link URL (optional):** A URL to which the graph will be linked. The associated object will be available as a template variable named `obj`.
Graph names and links can be rendered using Jinja2 or [Django's template language](https://docs.djangoproject.com/en/stable/ref/templates/language/).
## Examples
You only need to define one graph object for each graph you want to include when viewing an object. For example, if you want to include a graph of traffic through an interface over the past five minutes, your graph source might looks like this:
```
https://my.nms.local/graphs/?node={{ obj.device.name }}&interface={{ obj.name }}&duration=5m
```
You can define several graphs to provide multiple contexts when viewing an object. For example:
```
https://my.nms.local/graphs/?type=throughput&node={{ obj.device.name }}&interface={{ obj.name }}&duration=60m
https://my.nms.local/graphs/?type=throughput&node={{ obj.device.name }}&interface={{ obj.name }}&duration=24h
https://my.nms.local/graphs/?type=errors&node={{ obj.device.name }}&interface={{ obj.name }}&duration=60m
```

View File

@@ -0,0 +1,5 @@
# Journaling
All primary objects in NetBox support journaling. A journal is a collection of human-generated notes and comments about an object maintained for historical context. It supplements NetBox's change log to provide additional information about why changes have been made or to convey events which occur outside NetBox. Unlike the change log, in which records typically expire after a configurable period of time, journal entries persist for the life of their associated object.
Each journal entry has a selectable kind (info, success, warning, or danger) and a user-populated `comments` field. Each entry automatically records the date, time, and associated user upon being created.

View File

@@ -2,6 +2,13 @@
NetBox supports integration with the [NAPALM automation](https://napalm-automation.net/) library. NAPALM allows NetBox to serve a proxy for operational data, fetching live data from network devices and returning it to a requester via its REST API. Note that NetBox does not store any NAPALM data locally.
The NetBox UI will display tabs for status, LLDP neighbors, and configuration under the device view if the following conditions are met:
* Device status is "Active"
* A primary IP has been assigned to the device
* A platform with a NAPALM driver has been assigned
* The authenticated user has the `dcim.napalm_read_device` permission
!!! note
To enable this integration, the NAPALM library must be installed. See [installation steps](../../installation/3-netbox/#napalm) for more information.
@@ -22,7 +29,7 @@ GET /api/dcim/devices/1/napalm/?method=get_environment
## Authentication
By default, the [`NAPALM_USERNAME`](../../configuration/optional-settings/#napalm_username) and [`NAPALM_PASSWORD`](../../configuration/optional-settings/#napalm_password) configuration parameters are used for NAPALM authentication. They can be overridden for an individual API call by specifying the `X-NAPALM-Username` and `X-NAPALM-Password` headers.
By default, the [`NAPALM_USERNAME`](../configuration/optional-settings.md#napalm_username) and [`NAPALM_PASSWORD`](../configuration/optional-settings.md#napalm_password) configuration parameters are used for NAPALM authentication. They can be overridden for an individual API call by specifying the `X-NAPALM-Username` and `X-NAPALM-Password` headers.
```
$ curl "http://localhost/api/dcim/devices/1/napalm/?method=get_environment" \

View File

@@ -26,4 +26,4 @@ For the exhaustive list of exposed metrics, visit the `/metrics` endpoint on you
When deploying NetBox in a multiprocess manner (e.g. running multiple Gunicorn workers) the Prometheus client library requires the use of a shared directory to collect metrics from all worker processes. To configure this, first create or designate a local directory to which the worker processes have read and write access, and then configure your WSGI service (e.g. Gunicorn) to define this path as the `prometheus_multiproc_dir` environment variable.
!!! warning
If having accurate long-term metrics in a multiprocess environment is crucial to your deployment, it's recommended you use the `uwsgi` library instead of `gunicorn`. The issue lies in the way `gunicorn` tracks worker processes (vs `uwsgi`) which helps manage the metrics files created by the above configurations. If you're using Netbox with gunicorn in a containerized enviroment following the one-process-per-container methodology, then you will likely not need to change to `uwsgi`. More details can be found in [issue #3779](https://github.com/netbox-community/netbox/issues/3779#issuecomment-590547562).
If having accurate long-term metrics in a multiprocess environment is crucial to your deployment, it's recommended you use the `uwsgi` library instead of `gunicorn`. The issue lies in the way `gunicorn` tracks worker processes (vs `uwsgi`) which helps manage the metrics files created by the above configurations. If you're using NetBox with gunicorn in a containerized enviroment following the one-process-per-container methodology, then you will likely not need to change to `uwsgi`. More details can be found in [issue #3779](https://github.com/netbox-community/netbox/issues/3779#issuecomment-590547562).

View File

@@ -12,7 +12,7 @@ A NetBox report is a mechanism for validating the integrity of data within NetBo
## Writing Reports
Reports must be saved as files in the [`REPORTS_ROOT`](../../configuration/optional-settings/#reports_root) path (which defaults to `netbox/reports/`). Each file created within this path is considered a separate module. Each module holds one or more reports (Python classes), each of which performs a certain function. The logic of each report is broken into discrete test methods, each of which applies a small portion of the logic comprising the overall test.
Reports must be saved as files in the [`REPORTS_ROOT`](../configuration/optional-settings.md#reports_root) path (which defaults to `netbox/reports/`). Each file created within this path is considered a separate module. Each module holds one or more reports (Python classes), each of which performs a certain function. The logic of each report is broken into discrete test methods, each of which applies a small portion of the logic comprising the overall test.
!!! warning
The reports path includes a file named `__init__.py`, which registers the path as a Python module. Do not delete this file.
@@ -66,7 +66,7 @@ class DeviceConnectionsReport(Report):
for power_port in PowerPort.objects.filter(device=device):
if power_port.connected_endpoint is not None:
connected_ports += 1
if not power_port.connection_status:
if not power_port.path.is_active:
self.log_warning(
device,
"Power connection for {} marked as planned".format(power_port.name)
@@ -80,7 +80,7 @@ class DeviceConnectionsReport(Report):
self.log_success(device)
```
As you can see, reports are completely customizable. Validation logic can be as simple or as complex as needed.
As you can see, reports are completely customizable. Validation logic can be as simple or as complex as needed. Also note that the `description` attribute support markdown syntax. It will be rendered in the report list page.
!!! warning
Reports should never alter data: If you find yourself using the `create()`, `save()`, `update()`, or `delete()` methods on objects within reports, stop and re-evaluate what you're trying to accomplish. Note that there are no safeguards against the accidental alteration or destruction of data.
@@ -93,7 +93,7 @@ The following methods are available to log results within a report:
* log_warning(object, message)
* log_failure(object, message)
The recording of one or more failure messages will automatically flag a report as failed. It is advised to log a success for each object that is evaluated so that the results will reflect how many objects are being reported on. (The inclusion of a log message is optional for successes.) Messages recorded with `log()` will appear in a report's results but are not associated with a particular object or status.
The recording of one or more failure messages will automatically flag a report as failed. It is advised to log a success for each object that is evaluated so that the results will reflect how many objects are being reported on. (The inclusion of a log message is optional for successes.) Messages recorded with `log()` will appear in a report's results but are not associated with a particular object or status. Log messages also support using markdown syntax and will be rendered on the report result page.
To perform additional tasks, such as sending an email or calling a webhook, after a report has been run, extend the `post_run()` method. The status of the report is available as `self.failed` and the results object is `self.result`.
@@ -101,11 +101,14 @@ Once you have created a report, it will appear in the reports list. Initially, r
## Running Reports
!!! note
To run a report, a user must be assigned the `extras.run_report` permission. This is achieved by assigning the user (or group) a permission on the Report object and specifying the `run` action in the admin UI as shown below.
![Adding the run action to a permission](../../media/admin_ui_run_permission.png)
### Via the Web UI
Reports can be run via the web UI by navigating to the report and clicking the "run report" button at top right. Note that a user must have permission to create ReportResults in order to run reports. (Permissions can be assigned through the admin UI.)
Once a report has been run, its associated results will be included in the report view.
Reports can be run via the web UI by navigating to the report and clicking the "run report" button at top right. Once a report has been run, its associated results will be included in the report view.
### Via the API

View File

@@ -38,7 +38,8 @@ The following data is available as context for Jinja2 templates:
* `timestamp` - The time at which the event occurred (in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format).
* `username` - The name of the user account associated with the change.
* `request_id` - The unique request ID. This may be used to correlate multiple changes associated with a single request.
* `data` - A serialized representation of the object _after_ the change was made. This is typically equivalent to the model's representation in NetBox's REST API.
* `data` - A detailed representation of the object in its current state. This is typically equivalent to the model's representation in NetBox's REST API.
* `snapshots` - Minimal "snapshots" of the object state both before and after the change was made; provided ass a dictionary with keys named `prechange` and `postchange`. These are not as extensive as the fully serialized representation, but contain enough information to convey what has changed.
### Default Request Body
@@ -47,7 +48,7 @@ If no body template is specified, the request body will be populated with a JSON
```no-highlight
{
"event": "created",
"timestamp": "2020-02-25 15:10:26.010582+00:00",
"timestamp": "2021-03-09 17:55:33.968016+00:00",
"model": "site",
"username": "jstretch",
"request_id": "fdbca812-3142-4783-b364-2e2bd5c16c6a",
@@ -62,13 +63,24 @@ If no body template is specified, the request body will be populated with a JSON
},
"region": null,
...
},
"snapshots": {
"prechange": null,
"postchange": {
"created": "2021-03-09",
"last_updated": "2021-03-09T17:55:33.851Z",
"name": "Site 1",
"slug": "site-1",
"status": "active",
...
}
}
}
```
## Webhook Processing
When a change is detected, any resulting webhooks are placed into a Redis queue for processing. This allows the user's request to complete without needing to wait for the outgoing webhook(s) to be processed. The webhooks are then extracted from the queue by the `rqworker` process and HTTP requests are sent to their respective destinations. The current webhook queue and any failed webhooks can be inspected in the admin UI under Django RQ > Queues.
When a change is detected, any resulting webhooks are placed into a Redis queue for processing. This allows the user's request to complete without needing to wait for the outgoing webhook(s) to be processed. The webhooks are then extracted from the queue by the `rqworker` process and HTTP requests are sent to their respective destinations. The current webhook queue and any failed webhooks can be inspected in the admin UI under System > Background Tasks.
A request is considered successful if the response has a 2XX status code; otherwise, the request is marked as having failed. Failed requests may be retried manually via the admin UI.

View File

@@ -185,7 +185,7 @@ To delete an object, simply call `delete()` on its instance. This will return a
>>> vlan
<VLAN: 123 (BetterName)>
>>> vlan.delete()
(1, {'extras.CustomFieldValue': 0, 'ipam.VLAN': 1})
(1, {'ipam.VLAN': 1})
```
To delete multiple objects at once, call `delete()` on a filtered queryset. It's a good idea to always sanity-check the count of selected objects _before_ deleting them.
@@ -194,9 +194,9 @@ To delete multiple objects at once, call `delete()` on a filtered queryset. It's
>>> Device.objects.filter(name__icontains='test').count()
27
>>> Device.objects.filter(name__icontains='test').delete()
(35, {'extras.CustomFieldValue': 0, 'dcim.DeviceBay': 0, 'secrets.Secret': 0,
'dcim.InterfaceConnection': 4, 'extras.ImageAttachment': 0, 'dcim.Device': 27,
'dcim.Interface': 4, 'dcim.ConsolePort': 0, 'dcim.PowerPort': 0})
(35, {'dcim.DeviceBay': 0, 'secrets.Secret': 0, 'dcim.InterfaceConnection': 4,
'extras.ImageAttachment': 0, 'dcim.Device': 27, 'dcim.Interface': 4,
'dcim.ConsolePort': 0, 'dcim.PowerPort': 0})
```
!!! warning

View File

@@ -10,7 +10,7 @@ NetBox v2.9 introduced a new object-based permissions framework, which replace's
| ----------- | ----------- |
| `{"status": "active"}` | Status is active |
| `{"status__in": ["planned", "reserved"]}` | Status is active **OR** reserved |
| `{"status": "active", "role": "testing"}` | Status is active **OR** role is testing |
| `{"status": "active", "role": "testing"}` | Status is active **AND** role is testing |
| `{"name__startswith": "Foo"}` | Name starts with "Foo" (case-sensitive) |
| `{"name__iendswith": "bar"}` | Name ends with "bar" (case-insensitive) |
| `{"vid__gte": 100, "vid__lt": 200}` | VLAN ID is greater than or equal to 100 **AND** less than 200 |

View File

@@ -12,13 +12,16 @@ NetBox employs a [PostgreSQL](https://www.postgresql.org/) database, so general
Use the `pg_dump` utility to export the entire database to a file:
```no-highlight
pg_dump netbox > netbox.sql
pg_dump --username netbox --password --host localhost netbox > netbox.sql
```
!!! note
You may need to change the username, host, and/or database in the command above to match your installation.
When replicating a production database for development purposes, you may find it convenient to exclude changelog data, which can easily account for the bulk of a database's size. To do this, exclude the `extras_objectchange` table data from the export. The table will still be included in the output file, but will not be populated with any data.
```no-highlight
pg_dump --exclude-table-data=extras_objectchange netbox > netbox.sql
pg_dump ... --exclude-table-data=extras_objectchange netbox > netbox.sql
```
### Load an Exported Database
@@ -41,7 +44,7 @@ Keep in mind that PostgreSQL user accounts and permissions are not included with
If you want to export only the database schema, and not the data itself (e.g. for development reference), do the following:
```no-highlight
pg_dump -s netbox > netbox_schema.sql
pg_dump --username netbox --password --host localhost -s netbox > netbox_schema.sql
```
---
@@ -73,8 +76,9 @@ tar -xf netbox_media.tar.gz
## Cache Invalidation
If you are migrating your instance of NetBox to a different machine, be sure to first invalidate the cache by performing this command:
If you are migrating your instance of NetBox to a different machine, be sure to first invalidate the cache on the original instance by issuing the `invalidate all` management command (within the Python virtual environment):
```no-highlight
python3 manage.py invalidate all
# source /opt/netbox/venv/bin/activate
(venv) # python3 manage.py invalidate all
```

View File

@@ -44,7 +44,7 @@ This defines custom content to be displayed on the login page above the login fo
Default: None
The base URL path to use when accessing NetBox. Do not include the scheme or domain name. For example, if installed at http://example.com/netbox/, set:
The base URL path to use when accessing NetBox. Do not include the scheme or domain name. For example, if installed at https://example.com/netbox/, set:
```python
BASE_PATH = 'netbox/'
@@ -56,7 +56,7 @@ BASE_PATH = 'netbox/'
Default: 900
The number of seconds to cache entries will be retained before expiring.
The number of seconds that cache entries will be retained before expiring.
---
@@ -277,7 +277,15 @@ The lifetime (in seconds) of the authentication cookie issued to a NetBox user u
Default: False
Setting this to True will display a "maintenance mode" banner at the top of every page.
Setting this to True will display a "maintenance mode" banner at the top of every page. Additionally, NetBox will no longer update a user's "last active" time upon login. This is to allow new logins when the database is in a read-only state. Recording of login times will resume when maintenance mode is disabled.
---
## MAPS_URL
Default: `https://maps.google.com/?q=` (Google Maps)
This specifies the URL to use when presenting a map of a physical location by street address or GPS coordinates. The URL must accept either a free-form street address or a comma-separated pair of numeric coordinates appended to it.
---
@@ -301,7 +309,7 @@ The file path to the location where media files (such as image attachments) are
Default: False
Toggle the availability Prometheus-compatible metrics at `/metrics`. See the [Prometheus Metrics](../../additional-features/prometheus-metrics/) documentation for more details.
Toggle the availability Prometheus-compatible metrics at `/metrics`. See the [Prometheus Metrics](../additional-features/prometheus-metrics.md) documentation for more details.
---
@@ -318,7 +326,7 @@ NetBox will use these credentials when authenticating to remote devices via the
## NAPALM_ARGS
A dictionary of optional arguments to pass to NAPALM when instantiating a network driver. See the NAPALM documentation for a [complete list of optional arguments](http://napalm.readthedocs.io/en/latest/support/#optional-arguments). An example:
A dictionary of optional arguments to pass to NAPALM when instantiating a network driver. See the NAPALM documentation for a [complete list of optional arguments](https://napalm.readthedocs.io/en/latest/support/#optional-arguments). An example:
```python
NAPALM_ARGS = {
@@ -460,7 +468,7 @@ NetBox can be configured to support remote user authentication by inferring user
Default: `'HTTP_REMOTE_USER'`
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the currently authenticated user. (Requires `REMOTE_AUTH_ENABLED`.)
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the currently authenticated user. For example, to use the request header `X-Remote-User` it needs to be set to `HTTP_X_REMOTE_USER`. (Requires `REMOTE_AUTH_ENABLED`.)
---
@@ -491,6 +499,14 @@ The file path to the location where custom reports will be kept. By default, thi
---
## RQ_DEFAULT_TIMEOUT
Default: `300`
The maximum execution time of a background task (such as running a custom script), in seconds.
---
## SCRIPTS_ROOT
Default: `$INSTALL_ROOT/netbox/scripts/`
@@ -499,6 +515,14 @@ The file path to the location where custom scripts will be kept. By default, thi
---
## SESSION_COOKIE_NAME
Default: `sessionid`
The name used for the session cookie. See the [Django documentation](https://docs.djangoproject.com/en/stable/ref/settings/#session-cookie-name) for more detail.
---
## SESSION_FILE_PATH
Default: None

View File

@@ -5,7 +5,7 @@
This is a list of valid fully-qualified domain names (FQDNs) and/or IP addresses that can be used to reach the NetBox service. Usually this is the same as the hostname for the NetBox server, but can also be different; for example, when using a reverse proxy serving the NetBox website under a different FQDN than the hostname of the NetBox server. To help guard against [HTTP Host header attackes](https://docs.djangoproject.com/en/3.0/topics/security/#host-headers-virtual-hosting), NetBox will not permit access to the server via any other hostnames (or IPs).
!!! note
This parameter must always be defined as a list or tuple, even if only value is provided.
This parameter must always be defined as a list or tuple, even if only a single value is provided.
The value of this option is also used to set `CSRF_TRUSTED_ORIGINS`, which restricts POST requests to the same set of hosts (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-CSRF_TRUSTED_ORIGINS)). Keep in mind that NetBox, by default, sets `USE_X_FORWARDED_HOST` to true, which means that if you're using a reverse proxy, it's the FQDN used to reach that reverse proxy which needs to be in this list (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#allowed-hosts)).
@@ -65,8 +65,8 @@ Redis is configured using a configuration setting similar to `DATABASE` and thes
* `PORT` - TCP port of the Redis service; leave blank for default port (6379)
* `PASSWORD` - Redis password (if set)
* `DATABASE` - Numeric database ID
* `DEFAULT_TIMEOUT` - Connection timeout in seconds
* `SSL` - Use SSL connection to Redis
* `INSECURE_SKIP_TLS_VERIFY` - Set to `True` to **disable** TLS certificate verification (not recommended)
An example configuration is provided below:
@@ -77,7 +77,6 @@ REDIS = {
'PORT': 1234,
'PASSWORD': 'foobar',
'DATABASE': 0,
'DEFAULT_TIMEOUT': 300,
'SSL': False,
},
'caching': {
@@ -85,7 +84,6 @@ REDIS = {
'PORT': 6379,
'PASSWORD': '',
'DATABASE': 1,
'DEFAULT_TIMEOUT': 300,
'SSL': False,
}
}
@@ -104,11 +102,12 @@ REDIS = {
If you are using [Redis Sentinel](https://redis.io/topics/sentinel) for high-availability purposes, there is minimal
configuration necessary to convert NetBox to recognize it. It requires the removal of the `HOST` and `PORT` keys from
above and the addition of two new keys.
above and the addition of three new keys.
* `SENTINELS`: List of tuples or tuple of tuples with each inner tuple containing the name or IP address
of the Redis server and port for each sentinel instance to connect to
* `SENTINEL_SERVICE`: Name of the master / service to connect to
* `SENTINEL_TIMEOUT`: Connection timeout, in seconds
Example:
@@ -117,9 +116,9 @@ REDIS = {
'tasks': {
'SENTINELS': [('mysentinel.redis.example.com', 6379)],
'SENTINEL_SERVICE': 'netbox',
'SENTINEL_TIMEOUT': 10,
'PASSWORD': '',
'DATABASE': 0,
'DEFAULT_TIMEOUT': 300,
'SSL': False,
},
'caching': {
@@ -130,7 +129,6 @@ REDIS = {
'SENTINEL_SERVICE': 'netbox',
'PASSWORD': '',
'DATABASE': 1,
'DEFAULT_TIMEOUT': 300,
'SSL': False,
}
}

View File

@@ -1,6 +1,7 @@
# Circuits
{!docs/models/circuits/provider.md!}
{!docs/models/circuits/providernetwork.md!}
---

View File

@@ -8,6 +8,8 @@
## Device Components
Device components represent discrete objects within a device which are used to terminate cables, house child devices, or track resources.
{!docs/models/dcim/consoleport.md!}
{!docs/models/dcim/consoleserverport.md!}
{!docs/models/dcim/powerport.md!}

View File

@@ -15,3 +15,4 @@
---
{!docs/models/ipam/vrf.md!}
{!docs/models/ipam/routetarget.md!}

View File

@@ -1,11 +1,12 @@
# Sites and Racks
{!docs/models/dcim/site.md!}
{!docs/models/dcim/region.md!}
{!docs/models/dcim/sitegroup.md!}
{!docs/models/dcim/site.md!}
{!docs/models/dcim/location.md!}
---
{!docs/models/dcim/rack.md!}
{!docs/models/dcim/rackgroup.md!}
{!docs/models/dcim/rackrole.md!}
{!docs/models/dcim/rackreservation.md!}

View File

@@ -1,8 +1,10 @@
# Application Registry
The registry is an in-memory data structure which houses various miscellaneous application-wide parameters, such as installed plugins. It is not exposed to the user and is not intended to be modified by any code outside of NetBox core.
The registry is an in-memory data structure which houses various application-wide parameters, such as the list of enabled plugins. It is not exposed to the user and is not intended to be modified by any code outside of NetBox core.
The registry behaves essentially like a Python dictionary, with the notable exception that once a store (key) has been declared, it cannot be deleted or overwritten. The value of a store can, however, me modified; e.g. by appending a value to a list. Store values generally do not change once the application has been initialized.
The registry behaves essentially like a Python dictionary, with the notable exception that once a store (key) has been declared, it cannot be deleted or overwritten. The value of a store can, however, be modified; e.g. by appending a value to a list. Store values generally do not change once the application has been initialized.
The registry can be inspected by importing `registry` from `extras.registry`.
## Stores

View File

@@ -1,8 +1,8 @@
# Extending Models
Below is a list of items to consider when adding a new field to a model:
Below is a list of tasks to consider when adding a new field to a core model.
## 1. Generate and run database migration
## 1. Generate and run database migrations
Django migrations are used to express changes to the database schema. In most cases, Django can generate these automatically, however very complex changes may require manual intervention. Always remember to specify a short but descriptive name when generating a new migration.
@@ -14,18 +14,18 @@ Django migrations are used to express changes to the database schema. In most ca
Where possible, try to merge related changes into a single migration. For example, if three new fields are being added to different models within an app, these can be expressed in the same migration. You can merge a new migration with an existing one by combining their `operations` lists.
!!! note
Migrations can only be merged within a release. Once a new release has been published, its migrations cannot be altered.
Migrations can only be merged within a release. Once a new release has been published, its migrations cannot be altered (other than for the purpose of correcting a bug).
## 2. Add validation logic to `clean()`
If the new field introduces additional validation requirements (beyond what's included with the field itself), implement them in the model's `clean()` method. Remember to call the model's original method using `super()` before or agter your custom validation as appropriate:
If the new field introduces additional validation requirements (beyond what's included with the field itself), implement them in the model's `clean()` method. Remember to call the model's original method using `super()` before or after your custom validation as appropriate:
```
class Foo(models.Model):
def clean(self):
super(DeviceCSVForm, self).clean()
super().clean()
# Custom validation goes here
if self.bar is None:
@@ -38,7 +38,7 @@ Add the name of the new field to `csv_headers` and included a CSV-friendly repre
## 4. Update relevant querysets
If you're adding a relational field (e.g. `ForeignKey`) and intend to include the data when retreiving a list of objects, be sure to include the field using `prefetch_related()` as appropriate. This will optimize the view and avoid excessive database lookups.
If you're adding a relational field (e.g. `ForeignKey`) and intend to include the data when retreiving a list of objects, be sure to include the field using `prefetch_related()` as appropriate. This will optimize the view and avoid extraneous database queries.
## 5. Update API serializer
@@ -49,7 +49,7 @@ Extend the model's API serializer in `<app>.api.serializers` to include the new
Extend any forms to include the new field as appropriate. Common forms include:
* **Credit/edit** - Manipulating a single object
* **Bulk edit** - Performing a change on mnay objects at once
* **Bulk edit** - Performing a change on many objects at once
* **CSV import** - The form used when bulk importing objects in CSV format
* **Filter** - Displays the options available for filtering a list of objects (both UI and API)
@@ -59,7 +59,7 @@ If the new field should be filterable, add it to the `FilterSet` for the model.
## 8. Add column to object table
If the new field will be included in the object list view, add a column to the model's table. For simple fields, adding the field name to `Meta.fields` will be sufficient. More complex fields may require explicitly declaring a new column.
If the new field will be included in the object list view, add a column to the model's table. For simple fields, adding the field name to `Meta.fields` will be sufficient. More complex fields may require declaring a custom column.
## 9. Update the UI templates
@@ -76,3 +76,7 @@ Create or extend the relevant test cases to verify that the new field and any ac
* View tests
Be diligent to ensure all of the relevant test suites are adapted or extended as necessary to test any new functionality.
## 11. Update the model's documentation
Each model has a dedicated page in the documentation, at `models/<app>/<model>.md`. Update this file to include any relevant information about the new field.

View File

@@ -0,0 +1,140 @@
# Getting Started
## Setting up a Development Environment
Getting started with NetBox development is pretty straightforward, and should feel very familiar to anyone with Django development experience. There are a few things you'll need:
* A Linux system or environment
* A PostgreSQL server, which can be installed locally [per the documentation](../installation/1-postgresql.md)
* A Redis server, which can also be [installed locally](../installation/2-redis.md)
* A supported version of Python
### Fork the Repo
Assuming you'll be working on your own fork, your first step will be to fork the [official git repository](https://github.com/netbox-community/netbox). (If you're a maintainer who's going to be working directly with the official repo, skip this step.) You can then clone your GitHub fork locally for development:
```no-highlight
$ git clone https://github.com/youruseraccount/netbox.git
Cloning into 'netbox'...
remote: Enumerating objects: 231, done.
remote: Counting objects: 100% (231/231), done.
remote: Compressing objects: 100% (147/147), done.
remote: Total 56705 (delta 134), reused 145 (delta 84), pack-reused 56474
Receiving objects: 100% (56705/56705), 27.96 MiB | 34.92 MiB/s, done.
Resolving deltas: 100% (44177/44177), done.
$ ls netbox/
base_requirements.txt contrib docs mkdocs.yml NOTICE requirements.txt upgrade.sh
CHANGELOG.md CONTRIBUTING.md LICENSE.txt netbox README.md scripts
```
The NetBox project utilizes three persistent git branches to track work:
* `master` - Serves as a snapshot of the current stable release
* `develop` - All development on the upcoming stable release occurs here
* `feature` - Tracks work on an upcoming major release
Typically, you'll base pull requests off of the `develop` branch, or off of `feature` if you're working on a new major release. **Never** merge pull requests into the `master` branch, which receives merged only from the `develop` branch.
### Enable Pre-Commit Hooks
NetBox ships with a [git pre-commit hook](https://githooks.com/) script that automatically checks for style compliance and missing database migrations prior to committing changes. This helps avoid erroneous commits that result in CI test failures. You are encouraged to enable it by creating a link to `scripts/git-hooks/pre-commit`:
```no-highlight
$ cd .git/hooks/
$ ln -s ../../scripts/git-hooks/pre-commit
```
### Create a Python Virtual Environment
A [virtual environment](https://docs.python.org/3/tutorial/venv.html) is like a container for a set of Python packages. They allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, NetBox uses a virtual environment in production.
Create a virtual environment using the `venv` Python module:
```no-highlight
$ mkdir ~/.venv
$ python3 -m venv ~/.venv/netbox
```
This will create a directory named `.venv/netbox/` in your home directory, which houses a virtual copy of the Python executable and its related libraries and tooling. When running NetBox for development, it will be run using the Python binary at `~/.venv/netbox/bin/python`.
!!! info
Keeping virtual environments in `~/.venv/` is a common convention but entirely optional: Virtual environments can be created wherever you please.
Once created, activate the virtual environment:
```no-highlight
$ source ~/.venv/netbox/bin/activate
(netbox) $
```
Notice that the console prompt changes to indicate the active environment. This updates the necessary system environment variables to ensure that any Python scripts are run within the virtual environment.
### Install Dependencies
With the virtual environment activated, install the project's required Python packages using the `pip` module:
```no-highlight
(netbox) $ python -m pip install -r requirements.txt
Collecting Django==3.1 (from -r requirements.txt (line 1))
Cache entry deserialization failed, entry ignored
Using cached https://files.pythonhosted.org/packages/2b/5a/4bd5624546912082a1bd2709d0edc0685f5c7827a278d806a20cf6adea28/Django-3.1-py3-none-any.whl
...
```
### Configure NetBox
Within the `netbox/netbox/` directory, copy `configuration.example.py` to `configuration.py` and update the following parameters:
* `ALLOWED_HOSTS`: This can be set to `['*']` for development purposes
* `DATABASE`: PostgreSQL database connection parameters
* `REDIS`: Redis configuration, if different from the defaults
* `SECRET_KEY`: Set to a random string (use `generate_secret_key.py` in the parent directory to generate a suitable key)
* `DEBUG`: Set to `True`
* `DEVELOPER`: Set to `True` (this enables the creation of new database migrations)
### Start the Development Server
Django provides a lightweight, auto-updating HTTP/WSGI server for development use. NetBox extends this slightly to automatically import models and other utilities. Run the NetBox development server with the `nbshell` management command:
```no-highlight
$ python netbox/manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
November 18, 2020 - 15:52:31
Django version 3.1, using settings 'netbox.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
```
This ensures that your development environment is now complete and operational. Any changes you make to the code base will be automatically adapted by the development server.
## Running Tests
Throughout the course of development, it's a good idea to occasionally run NetBox's test suite to catch any potential errors. Tests are run using the `test` management command:
```no-highlight
$ python netbox/manage.py test
```
In cases where you haven't made any changes to the database (which is most of the time), you can append the `--keepdb` argument to this command to reuse the test database between runs. This cuts down on the time it takes to run the test suite since the database doesn't have to be rebuilt each time. (Note that this argument will cause errors if you've modified any model fields since the previous test run.)
```no-highlight
$ python netbox/manage.py test --keepdb
```
## Submitting Pull Requests
Once you're happy with your work and have verified that all tests pass, commit your changes and push it upstream to your fork. Always provide descriptive (but not excessively verbose) commit messages. When working on a specific issue, be sure to reference it.
```no-highlight
$ git commit -m "Closes #1234: Add IPv5 support"
$ git push origin
```
Once your fork has the new commit, submit a [pull request](https://github.com/netbox-community/netbox/compare) to the NetBox repo to propose the changes. Be sure to provide a detailed accounting of the changes being made and the reasons for doing so.
Once submitted, a maintainer will review your pull request and either merge it or request changes. If changes are needed, you can make them via new commits to your fork: The pull request will update automatically.
!!! note
Remember, pull requests are entertained only for **accepted** issues. If an issue you want to work on hasn't been approved by a maintainer yet, it's best to avoid risking your time and effort on a change that might not be accepted.

View File

@@ -4,11 +4,12 @@ NetBox is maintained as a [GitHub project](https://github.com/netbox-community/n
## Communication
Communication among developers should always occur via public channels:
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 an issue.
* [The mailing list](https://groups.google.com/forum/#!forum/netbox-discuss) - The preferred forum for general discussion and support issues. Ideal for shaping a feature request prior to submitting an issue.
* [#netbox on NetworkToCode](http://slack.networktocode.com/) - Good for quick chats. Avoid any discussion that might need to be referenced later on, as the chat history is not retained long.
* [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
@@ -18,7 +19,7 @@ NetBox follows the [benevolent dictator](http://oss-watch.ac.uk/resources/benevo
All development of the current NetBox release occurs in the `develop` branch; releases are packaged from the `master` branch. The `master` branch should _always_ represent the current stable release in its entirety, such that installing NetBox by either downloading a packaged release or cloning the `master` branch provides the same code base.
NetBox components are arranged into functional subsections called _apps_ (a carryover from Django verancular). Each app holds the models, views, and templates relevant to a particular function:
NetBox components are arranged into functional subsections called _apps_ (a carryover from Django vernacular). Each app holds the models, views, and templates relevant to a particular function:
* `circuits`: Communications circuits and providers (not to be confused with power circuits)
* `dcim`: Datacenter infrastructure management (sites, racks, and devices)
@@ -26,5 +27,6 @@ NetBox components are arranged into functional subsections called _apps_ (a carr
* `ipam`: IP address management (VRFs, prefixes, IP addresses, and VLANs)
* `secrets`: Encrypted storage of sensitive data (e.g. login credentials)
* `tenancy`: Tenants (such as customers) to which NetBox objects may be assigned
* `users`: Authentication and user preferences
* `utilities`: Resources which are not user-facing (extendable classes, etc.)
* `virtualization`: Virtual machines and clusters

View File

@@ -0,0 +1,98 @@
# NetBox Models
## Model Types
A NetBox model represents a discrete object type such as a device or IP address. Each model is defined as a Python class and has its own SQL table. All NetBox data models can be categorized by type.
The Django [content types](https://docs.djangoproject.com/en/stable/ref/contrib/contenttypes/) framework can be used to reference models within the database. A ContentType instance references a model by its `app_label` and `name`: For example, the Site model is referred to as `dcim.site`. The content type combined with an object's primary key form a globally unique identifier for the object (e.g. `dcim.site:123`).
### Features Matrix
* [Change logging](../additional-features/change-logging.md) - Changes to these objects are automatically recorded in the change log
* [Webhooks](../additional-features/webhooks.md) - NetBox is capable of generating outgoing webhooks for these objects
* [Custom fields](../additional-features/custom-fields.md) - These models support the addition of user-defined fields
* [Export templates](../additional-features/export-templates.md) - Users can create custom export templates for these models
* [Tagging](../models/extras/tag.md) - The models can be tagged with user-defined tags
* [Journaling](../additional-features/journaling.md) - These models support persistent historical commentary
* Nesting - These models can be nested recursively to create a hierarchy
| Type | Change Logging | Webhooks | Custom Fields | Export Templates | Tags | Journaling | Nesting |
| ------------------ | ---------------- | ---------------- | ---------------- | ---------------- | ---------------- | ---------------- | ---------------- |
| Primary | :material-check: | :material-check: | :material-check: | :material-check: | :material-check: | :material-check: | |
| Organizational | :material-check: | :material-check: | :material-check: | :material-check: | | | |
| Nested Group | :material-check: | :material-check: | :material-check: | :material-check: | | | :material-check: |
| Component | :material-check: | :material-check: | :material-check: | :material-check: | :material-check: | | |
| Component Template | :material-check: | :material-check: | :material-check: | | | | |
## Models Index
### Primary Models
* [circuits.Circuit](../models/circuits/circuit.md)
* [circuits.Provider](../models/circuits/provider.md)
* [circuits.ProviderNetwork](../models/circuits/providernetwork.md)
* [dcim.Cable](../models/dcim/cable.md)
* [dcim.Device](../models/dcim/device.md)
* [dcim.DeviceType](../models/dcim/devicetype.md)
* [dcim.PowerFeed](../models/dcim/powerfeed.md)
* [dcim.PowerPanel](../models/dcim/powerpanel.md)
* [dcim.Rack](../models/dcim/rack.md)
* [dcim.RackReservation](../models/dcim/rackreservation.md)
* [dcim.Site](../models/dcim/site.md)
* [dcim.VirtualChassis](../models/dcim/virtualchassis.md)
* [ipam.Aggregate](../models/ipam/aggregate.md)
* [ipam.IPAddress](../models/ipam/ipaddress.md)
* [ipam.Prefix](../models/ipam/prefix.md)
* [ipam.RouteTarget](../models/ipam/routetarget.md)
* [ipam.Service](../models/ipam/service.md)
* [ipam.VLAN](../models/ipam/vlan.md)
* [ipam.VRF](../models/ipam/vrf.md)
* [secrets.Secret](../models/secrets/secret.md)
* [tenancy.Tenant](../models/tenancy/tenant.md)
* [virtualization.Cluster](../models/virtualization/cluster.md)
* [virtualization.VirtualMachine](../models/virtualization/virtualmachine.md)
### Organizational Models
* [circuits.CircuitType](../models/circuits/circuittype.md)
* [dcim.DeviceRole](../models/dcim/devicerole.md)
* [dcim.Manufacturer](../models/dcim/manufacturer.md)
* [dcim.Platform](../models/dcim/platform.md)
* [dcim.RackRole](../models/dcim/rackrole.md)
* [ipam.RIR](../models/ipam/rir.md)
* [ipam.Role](../models/ipam/role.md)
* [ipam.VLANGroup](../models/ipam/vlangroup.md)
* [secrets.SecretRole](../models/secrets/secretrole.md)
* [virtualization.ClusterGroup](../models/virtualization/clustergroup.md)
* [virtualization.ClusterType](../models/virtualization/clustertype.md)
### Nested Group Models
* [dcim.Location](../models/dcim/location.md) (formerly RackGroup)
* [dcim.Region](../models/dcim/region.md)
* [dcim.SiteGroup](../models/dcim/sitegroup.md)
* [tenancy.TenantGroup](../models/tenancy/tenantgroup.md)
### Component Models
* [dcim.ConsolePort](../models/dcim/consoleport.md)
* [dcim.ConsoleServerPort](../models/dcim/consoleserverport.md)
* [dcim.DeviceBay](../models/dcim/devicebay.md)
* [dcim.FrontPort](../models/dcim/frontport.md)
* [dcim.Interface](../models/dcim/interface.md)
* [dcim.InventoryItem](../models/dcim/inventoryitem.md)
* [dcim.PowerOutlet](../models/dcim/poweroutlet.md)
* [dcim.PowerPort](../models/dcim/powerport.md)
* [dcim.RearPort](../models/dcim/rearport.md)
* [virtualization.VMInterface](../models/virtualization/vminterface.md)
### Component Template Models
* [dcim.ConsolePortTemplate](../models/dcim/consoleporttemplate.md)
* [dcim.ConsoleServerPortTemplate](../models/dcim/consoleserverporttemplate.md)
* [dcim.DeviceBayTemplate](../models/dcim/devicebaytemplate.md)
* [dcim.FrontPortTemplate](../models/dcim/frontporttemplate.md)
* [dcim.InterfaceTemplate](../models/dcim/interfacetemplate.md)
* [dcim.PowerOutletTemplate](../models/dcim/poweroutlettemplate.md)
* [dcim.PowerPortTemplate](../models/dcim/powerporttemplate.md)
* [dcim.RearPortTemplate](../models/dcim/rearporttemplate.md)

View File

@@ -2,42 +2,23 @@
## Minor Version Bumps
### Update Requirements
### Address Pinned Dependencies
Required Python packages are maintained in two files. `base_requirements.txt` contains a list of all the packages required by NetBox. Some of them may be pinned to a specific version of the package due to a known issue. For example:
```
# https://github.com/encode/django-rest-framework/issues/6053
djangorestframework==3.8.1
```
The other file is `requirements.txt`, which lists each of the required packages pinned to its current stable version. When NetBox is installed, the Python environment is configured to match this file. This helps ensure that a new release of a dependency doesn't break NetBox.
Every minor version release should refresh `requirements.txt` so that it lists the most recent stable release of each package. To do this:
1. Create a new virtual environment.
2. Install the latest version of all required packages via pip:
```
pip install -U -r base_requirements.txt
```
3. Run all tests and check that the UI and API function as expected.
4. Update the package versions in `requirements.txt` as appropriate.
Check `base_requirements.txt` for any dependencies pinned to a specific version, and upgrade them to their most stable release (where possible).
### Update Static Libraries
Update the following static libraries to their most recent stable release:
* Bootstrap 3
* Font Awesome 4
* Material Design Icons
* Select2
* jQuery
* jQuery UI
### Create a new Release Notes Page
### Link to the Release Notes Page
Create a file at `/docs/release-notes/X.Y.md` to establish the release notes for the new release. Add the file to the table of contents within `mkdocs.yml`, and point `index.md` to the new file.
Add the release notes (`/docs/release-notes/X.Y.md`) to the table of contents within `mkdocs.yml`, and point `index.md` to the new file.
### Manually Perform a New Install
@@ -52,23 +33,52 @@ Follow these instructions to perform a new installation of NetBox. This process
### Close the Release Milestone
Close the release milestone on GitHub. Ensure that there are no remaining open issues associated with it.
Close the release milestone on GitHub after ensuring there are no remaining open issues associated with it.
### Merge the Release Branch
Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release.
---
## All Releases
### Update Requirements
Required Python packages are maintained in two files. `base_requirements.txt` contains a list of all the packages required by NetBox. Some of them may be pinned to a specific version of the package due to a known issue. For example:
```
# https://github.com/encode/django-rest-framework/issues/6053
djangorestframework==3.8.1
```
The other file is `requirements.txt`, which lists each of the required packages pinned to its current stable version. When NetBox is installed, the Python environment is configured to match this file. This helps ensure that a new release of a dependency doesn't break NetBox.
Every release should refresh `requirements.txt` so that it lists the most recent stable release of each package. To do this:
1. Create a new virtual environment.
2. Install the latest version of all required packages `pip install -U -r base_requirements.txt`).
3. Run all tests and check that the UI and API function as expected.
4. Review each requirement's release notes for any breaking or otherwise noteworthy changes.
5. Update the package versions in `requirements.txt` as appropriate.
In cases where upgrading a dependency to its most recent release is breaking, it should be pinned to its current minor version in `base_requirements.txt` (with an explanatory comment) and revisited for the next major NetBox release.
### Verify CI Build Status
Ensure that continuous integration testing on the `develop` branch is completing successfully.
### Update Version and Changelog
Update the `VERSION` constant in `settings.py` to the new release version and annotate the current data in the release notes for the new version.
* Update the `VERSION` constant in `settings.py` to the new release version.
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
* Replace the "FUTURE" placeholder in the release notes with the current date.
Commit these changes to the `develop` branch.
### Submit a Pull Request
Submit a pull request title **"Release vX.Y.Z"** to merge the `develop` branch into `master`. Include a brief change log listing the features, improvements, and/or bugs addressed in the release.
Submit a pull request title **"Release vX.Y.Z"** to merge the `develop` branch into `master`. Copy the documented release notes into the pull request's body.
Once CI has completed on the PR, merge it.
@@ -76,20 +86,16 @@ Once CI has completed on the PR, merge it.
Draft a [new release](https://github.com/netbox-community/netbox/releases/new) with the following parameters.
* **Tag:** Current version (e.g. `v2.3.4`)
* **Tag:** Current version (e.g. `v2.9.9`)
* **Target:** `master`
* **Title:** Version and date (e.g. `v2.3.4 - 2018-08-02`)
* **Title:** Version and date (e.g. `v2.9.9 - 2020-11-09`)
Copy the description from the pull request into the release notes.
Copy the description from the pull request to the release.
### Update the Development Version
On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v2.3.4, set:
On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v2.9.9, set:
```
VERSION = 'v2.3.5-dev'
VERSION = 'v2.9.10-dev'
```
### Announce the Release
Announce the release on the [mailing list](https://groups.google.com/forum/#!forum/netbox-discuss). Include a link to the release and the (HTML-formatted) release notes.

View File

@@ -5,8 +5,8 @@ NetBox generally follows the [Django style guide](https://docs.djangoproject.com
## PEP 8 Exceptions
* Wildcard imports (for example, `from .constants import *`) are acceptable under any of the following conditions:
* The library being import contains only constant declarations (`constants.py`)
* The library being imported explicitly defines `__all__` (e.g. `<app>.api.nested_serializers`)
* The library being import contains only constant declarations (e.g. `constants.py`)
* The library being imported explicitly defines `__all__`
* Maximum line length is 120 characters (E501)
* This does not apply to HTML templates or to automatically generated code (e.g. database migrations).
@@ -45,7 +45,7 @@ When adding a new dependency, a short description of the package and the URL of
* When in doubt, remain consistent: It is better to be consistently incorrect than inconsistently correct. If you notice in the course of unrelated work a pattern that should be corrected, continue to follow the pattern for now and open a bug so that the entire code base can be evaluated at a later point.
* Prioritize readability over concision. Python is a very flexible language that typically gives us several options for expressing a given piece of logic, but some may be more friendly to the reader than others. (List comprehensions are particularly vulnerable to over-optimization.) Always remain considerate of the future reader who may need to interpret your code without the benefit of the context within which you are writing it.
* Prioritize readability over concision. Python is a very flexible language that typically offers several options for expressing a given piece of logic, but some may be more friendly to the reader than others. (List comprehensions are particularly vulnerable to over-optimization.) Always remain considerate of the future reader who may need to interpret your code without the benefit of the context within which you are writing it.
* No easter eggs. While they can be fun, NetBox must be considered as a business-critical tool. The potential, however minor, for introducing a bug caused by unnecessary logic is best avoided entirely.

View File

@@ -8,4 +8,4 @@ The `users.UserConfig` model holds individual preferences for each user in the f
| ---- | ----------- |
| extras.configcontext.format | Preferred format when rendering config context data (JSON or YAML) |
| pagination.per_page | The number of items to display per page of a paginated table |
| tables.${table_name}.columns | The ordered list of columns to display when viewing the table |
| tables.TABLE_NAME.columns | The ordered list of columns to display when viewing the table |

View File

@@ -1,57 +0,0 @@
# Utility Views
Utility views are reusable views that handle common CRUD tasks, such as listing and updating objects. Some views operate on individual objects, whereas others (referred to as "bulk" views) operate on multiple objects at once.
## Individual Views
### ObjectView
Retrieve and display a single object.
### ObjectListView
Generates a paginated table of objects from a given queryset, which may optionally be filtered.
### ObjectEditView
Updates an object identified by a primary key (PK) or slug. If no existing object is specified, a new object will be created.
### ObjectDeleteView
Deletes an object. The user is redirected to a confirmation page before the deletion is executed.
## Bulk Views
### BulkCreateView
Creates multiple objects at once based on a given pattern. Currently used only for IP addresses.
### BulkImportView
Accepts CSV-formatted data and creates a new object for each line. Creation is all-or-none.
### BulkEditView
Applies changes to multiple objects at once in a two-step operation. First, the list of PKs for selected objects is POSTed and an edit form is presented to the user. On submission of that form, the specified changes are made to all selected objects.
### BulkDeleteView
Deletes multiple objects. The user selects the objects to be deleted and confirms the deletion.
## Component Views
### ComponentCreateView
Create one or more component objects beloning to a parent object (e.g. interfaces attached to a device).
### ComponentEditView
A subclass of `ObjectEditView`: Updates an individual component object.
### ComponentDeleteView
A subclass of `ObjectDeleteView`: Deletes an individual component object.
### BulkComponentCreateView
Create a set of components objects for each of a selected set of parent objects. This view can be used e.g. to create multiple interfaces on multiple devices at once.

View File

@@ -2,7 +2,7 @@
# What is NetBox?
NetBox is an open source web application designed to help manage and document computer networks. Initially conceived by the network engineering team at [DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically to address the needs of network and infrastructure engineers. It encompasses the following aspects of network management:
NetBox is an infrastructure resource modeling (IRM) application designed to empower network automation. Initially conceived by the network engineering team at [DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically to address the needs of network and infrastructure engineers. NetBox is made available as open source under the Apache 2 license. It encompasses the following aspects of network management:
* **IP address management (IPAM)** - IP networks and addresses, VRFs, and VLANs
* **Equipment racks** - Organized by group and site
@@ -55,7 +55,7 @@ NetBox is built on the [Django](https://djangoproject.com/) Python framework and
## Supported Python Versions
NetBox supports Python 3.6 and 3.7 environments currently. (Support for Python 3.5 was removed in NetBox v2.8.)
NetBox supports Python 3.6, 3.7, and 3.8 environments currently. (Support for Python 3.5 was removed in NetBox v2.8.)
## Getting Started

View File

@@ -5,41 +5,37 @@ This section entails the installation and configuration of a local PostgreSQL da
!!! warning
NetBox requires PostgreSQL 9.6 or higher. Please note that MySQL and other relational databases are **not** currently supported.
The installation instructions provided here have been tested to work on Ubuntu 18.04 and CentOS 7.5. 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.
## Installation
#### Ubuntu
=== "Ubuntu"
If a recent enough version of PostgreSQL is not available through your distribution's package manager, you'll need to install it from an official [PostgreSQL repository](https://wiki.postgresql.org/wiki/Apt).
```no-highlight
sudo apt update
sudo apt install -y postgresql libpq-dev
```
=== "CentOS"
```no-highlight
sudo yum install -y postgresql-server libpq-devel
sudo postgresql-setup --initdb
```
!!! info
PostgreSQL 9.6 and later are available natively on CentOS 8.2. If using an earlier CentOS release, you may need to [install it from an RPM](https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/).
CentOS configures ident host-based authentication for PostgreSQL by default. Because NetBox will need to authenticate using a username and password, modify `/var/lib/pgsql/data/pg_hba.conf` to support MD5 authentication by changing `ident` to `md5` for the lines below:
```no-highlight
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
```
Once PostgreSQL has been installed, start the service and enable it to run at boot:
```no-highlight
# apt-get update
# apt-get install -y postgresql libpq-dev
```
#### CentOS
CentOS 7 does not ship with a recent enough version of PostgreSQL, so it will need to be installed from an external repository. The instructions below show the installation of PostgreSQL 9.6, however you may opt to install a more recent version.
```no-highlight
# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# yum install -y postgresql96 postgresql96-server postgresql96-devel
# /usr/pgsql-9.6/bin/postgresql96-setup initdb
```
CentOS users should modify the PostgreSQL configuration to accept password-based authentication by replacing `ident` with `md5` for all host entries within `/var/lib/pgsql/9.6/data/pg_hba.conf`. For example:
```no-highlight
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
```
Then, start the service and enable it to run at boot:
```no-highlight
# systemctl start postgresql-9.6
# systemctl enable postgresql-9.6
sudo systemctl start postgresql
sudo systemctl enable postgresql
```
## Database Creation
@@ -50,8 +46,8 @@ At a minimum, we need to create a database for NetBox and assign it a username a
**Do not use the password from the example.** Choose a strong, random password to ensure secure database authentication for your NetBox installation.
```no-highlight
# sudo -u postgres psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
$ sudo -u postgres psql
psql (12.5 (Ubuntu 12.5-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# CREATE DATABASE netbox;
@@ -68,13 +64,16 @@ postgres=# \q
You can verify that authentication works issuing the following command and providing the configured password. (Replace `localhost` with your database server if using a remote database.)
```no-highlight
# psql --username netbox --password --host localhost netbox
$ psql --username netbox --password --host localhost netbox
Password for user netbox:
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
psql (12.5 (Ubuntu 12.5-0ubuntu0.20.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
netbox=> \conninfo
You are connected to database "netbox" as user "netbox" on host "localhost" (address "127.0.0.1") at port "5432".
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
netbox=> \q
```
If successful, you will enter a `netbox` prompt. Type `\q` to exit.
If successful, you will enter a `netbox` prompt. Type `\conninfo` to confirm your connection, or type `\q` to exit.

View File

@@ -7,20 +7,19 @@
!!! note
NetBox v2.9.0 and later require Redis v4.0 or higher. If your distribution does not offer a recent enough release, you will need to build Redis from source. Please see [the Redis installation documentation](https://github.com/redis/redis) for further details.
### Ubuntu
=== "Ubuntu"
```no-highlight
# apt-get install -y redis-server
```
```no-highlight
sudo apt install -y redis-server
```
### CentOS
=== "CentOS"
```no-highlight
# yum install -y epel-release
# yum install -y redis
# systemctl start redis
# systemctl enable redis
```
```no-highlight
sudo yum install -y redis
sudo systemctl start redis
sudo systemctl enable redis
```
You may wish to modify the Redis configuration at `/etc/redis.conf` or `/etc/redis/redis.conf`, however in most cases the default configuration is sufficient.

View File

@@ -7,40 +7,39 @@ This section of the documentation discusses installing and configuring the NetBo
Begin by installing all system packages required by NetBox and its dependencies.
!!! note
NetBox v2.8.0 and later require Python 3.6 or 3.7. This documentation assumes Python 3.6.
NetBox v2.8.0 and later require Python 3.6, 3.7, or 3.8.
### Ubuntu
=== "Ubuntu"
```no-highlight
# apt-get install -y python3.6 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
```
```no-highlight
sudo apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
```
### CentOS
=== "CentOS"
```no-highlight
# yum install -y gcc python36 python36-devel python36-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config
# easy_install-3.6 pip
```
```no-highlight
sudo yum install -y gcc python36 python36-devel python3-pip libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config
```
Before continuing with either platform, update pip (Python's package management tool) to its latest release:
```no-highlight
# pip3 install --upgrade pip
sudo pip3 install --upgrade pip
```
## Download NetBox
This documentation provides two options for installing NetBox: from a downloadable archive, or from the git repository. Installing from a package (option A below) requires manually fetching and decompressing the archive for every future update, whereas installation via git (option B) allows for seamless upgrades by re-pulling the `master` branch.
This documentation provides two options for installing NetBox: from a downloadable archive, or from the git repository. Installing from a package (option A below) requires manually fetching and extracting the archive for every future update, whereas installation via git (option B) allows for seamless upgrades by re-pulling the `master` branch.
### Option A: Download a Release Archive
Download the [latest stable release](https://github.com/netbox-community/netbox/releases) from GitHub as a tarball or ZIP archive and extract it to your desired path. In this example, we'll use `/opt/netbox` as the NetBox root.
```no-highlight
# wget https://github.com/netbox-community/netbox/archive/vX.Y.Z.tar.gz
# tar -xzf vX.Y.Z.tar.gz -C /opt
# ln -s /opt/netbox-X.Y.Z/ /opt/netbox
# ls -l /opt | grep netbox
$ sudo wget https://github.com/netbox-community/netbox/archive/vX.Y.Z.tar.gz
$ sudo tar -xzf vX.Y.Z.tar.gz -C /opt
$ sudo ln -s /opt/netbox-X.Y.Z/ /opt/netbox
$ ls -l /opt | grep netbox
lrwxrwxrwx 1 root root 13 Jul 20 13:44 netbox -> netbox-2.9.0/
drwxr-xr-x 2 root root 4096 Jul 20 13:44 netbox-2.9.0
```
@@ -53,27 +52,27 @@ drwxr-xr-x 2 root root 4096 Jul 20 13:44 netbox-2.9.0
Create the base directory for the NetBox installation. For this guide, we'll use `/opt/netbox`.
```no-highlight
# mkdir -p /opt/netbox/ && cd /opt/netbox/
sudo mkdir -p /opt/netbox/ && cd /opt/netbox/
```
If `git` is not already installed, install it:
#### Ubuntu
=== "Ubuntu"
```no-highlight
# apt-get install -y git
```
```no-highlight
sudo apt install -y git
```
#### CentOS
=== "CentOS"
```no-highlight
# yum install -y git
```
```no-highlight
sudo yum install -y git
```
Next, clone the **master** branch of the NetBox GitHub repository into the current directory. (This branch always holds the current stable release.)
```no-highlight
# git clone -b master https://github.com/netbox-community/netbox.git .
$ sudo git clone -b master https://github.com/netbox-community/netbox.git .
Cloning into '.'...
remote: Counting objects: 1994, done.
remote: Compressing objects: 100% (150/150), done.
@@ -84,37 +83,37 @@ Checking connectivity... done.
```
!!! note
Installation via git also allows you to easily try out development versions of NetBox. The `develop` branch contains all work underway for the next minor release, and the `develop-x.y` branch (if present) tracks progress on the next major release.
Installation via git also allows you to easily try out development versions of NetBox. The `develop` branch contains all work underway for the next minor release, and the `feature` branch tracks progress on the next major release.
## Create the NetBox System User
Create a system user account named `netbox`. We'll configure the WSGI and HTTP services to run under this account. We'll also assign this user ownership of the media directory. This ensures that NetBox will be able to save uploaded files.
#### Ubuntu
=== "Ubuntu"
```
# adduser --system --group netbox
# chown --recursive netbox /opt/netbox/netbox/media/
```
```
sudo adduser --system --group netbox
sudo chown --recursive netbox /opt/netbox/netbox/media/
```
#### CentOS
=== "CentOS"
```
# groupadd --system netbox
# adduser --system -g netbox netbox
# chown --recursive netbox /opt/netbox/netbox/media/
```
```
sudo groupadd --system netbox
sudo adduser --system -g netbox netbox
sudo chown --recursive netbox /opt/netbox/netbox/media/
```
## Configuration
Move into the NetBox configuration directory and make a copy of `configuration.example.py` named `configuration.py`. This file will hold all of your local configuration parameters.
```no-highlight
# cd /opt/netbox/netbox/netbox/
# cp configuration.example.py configuration.py
cd /opt/netbox/netbox/netbox/
sudo cp configuration.example.py configuration.py
```
Open `configuration.py` with your preferred editor to begin configuring NetBox. NetBox offers [many configuration parameters](/configuration/), but only the following four are required for new installations:
Open `configuration.py` with your preferred editor to begin configuring NetBox. NetBox offers [many configuration parameters](../configuration/index.md), but only the following four are required for new installations:
* `ALLOWED_HOSTS`
* `DATABASE`
@@ -137,7 +136,7 @@ ALLOWED_HOSTS = ['*']
### DATABASE
This parameter holds the database configuration details. You must define the username and password used when you configured PostgreSQL. If the service is running on a remote host, update the `HOST` and `PORT` parameters accordingly. See the [configuration documentation](/configuration/required-settings/#database) for more detail on individual parameters.
This parameter holds the database configuration details. You must define the username and password used when you configured PostgreSQL. If the service is running on a remote host, update the `HOST` and `PORT` parameters accordingly. See the [configuration documentation](../configuration/required-settings.md#database) for more detail on individual parameters.
```python
DATABASE = {
@@ -152,9 +151,9 @@ DATABASE = {
### REDIS
Redis is a in-memory key-value store used by NetBox for caching and background task queuing. Redis typically requires minimal configuration; the values below should suffice for most installations. See the [configuration documentation](/configuration/required-settings/#redis) for more detail on individual parameters.
Redis is a in-memory key-value store used by NetBox for caching and background task queuing. Redis typically requires minimal configuration; the values below should suffice for most installations. See the [configuration documentation](../configuration/required-settings.md#redis) for more detail on individual parameters.
Note that NetBox requires the specification of two separate Redis databases: `tasks` and `caching`. These may both be provided by the same Redis service, however each should have a unique database ID.
Note that NetBox requires the specification of two separate Redis databases: `tasks` and `caching`. These may both be provided by the same Redis service, however each should have a unique numeric database ID.
```python
REDIS = {
@@ -163,7 +162,6 @@ REDIS = {
'PORT': 6379, # Redis port
'PASSWORD': '', # Redis password (optional)
'DATABASE': 0, # Database ID
'DEFAULT_TIMEOUT': 300, # Timeout (seconds)
'SSL': False, # Use SSL (optional)
},
'caching': {
@@ -171,7 +169,6 @@ REDIS = {
'PORT': 6379,
'PASSWORD': '',
'DATABASE': 1, # Unique ID for second database
'DEFAULT_TIMEOUT': 300,
'SSL': False,
}
}
@@ -184,7 +181,7 @@ This parameter must be assigned a randomly-generated key employed as a salt for
A simple Python script named `generate_secret_key.py` is provided in the parent directory to assist in generating a suitable key:
```no-highlight
# python3 ../generate_secret_key.py
python3 ../generate_secret_key.py
```
!!! warning
@@ -201,15 +198,15 @@ All Python packages required by NetBox are listed in `requirements.txt` and will
The [NAPALM automation](https://napalm-automation.net/) library allows NetBox to fetch live data from devices and return it to a requester via its REST API. The `NAPALM_USERNAME` and `NAPALM_PASSWORD` configuration parameters define the credentials to be used when connecting to a device.
```no-highlight
# echo napalm >> /opt/netbox/local_requirements.txt
sudo sh -c "echo 'napalm' >> /opt/netbox/local_requirements.txt"
```
### Remote File Storage
By default, NetBox will use the local filesystem to store uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired storage backend](/configuration/optional-settings/#storage_backend) in `configuration.py`.
By default, NetBox will use the local filesystem to store uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired storage backend](../configuration/optional-settings.md#storage_backend) in `configuration.py`.
```no-highlight
# echo django-storages >> /opt/netbox/local_requirements.txt
sudo sh -c "echo 'django-storages' >> /opt/netbox/local_requirements.txt"
```
## Run the Upgrade Script
@@ -222,7 +219,7 @@ Once NetBox has been configured, we're ready to proceed with the actual installa
* Aggregate static resource files on disk
```no-highlight
# /opt/netbox/upgrade.sh
sudo /opt/netbox/upgrade.sh
```
!!! note
@@ -233,7 +230,7 @@ Once NetBox has been configured, we're ready to proceed with the actual installa
NetBox does not come with any predefined user accounts. You'll need to create a super user (administrative account) to be able to log into NetBox. First, enter the Python virtual environment created by the upgrade script:
```no-highlight
# source /opt/netbox/venv/bin/activate
source /opt/netbox/venv/bin/activate
```
Once the virtual environment has been activated, you should notice the string `(venv)` prepended to your console prompt.
@@ -241,8 +238,8 @@ Once the virtual environment has been activated, you should notice the string `(
Next, we'll create a superuser account using the `createsuperuser` Django management command (via `manage.py`). Specifying an email address for the user is not required, but be sure to use a very strong password.
```no-highlight
(venv) # cd /opt/netbox/netbox
(venv) # python3 manage.py createsuperuser
(venv) $ cd /opt/netbox/netbox
(venv) $ python3 manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:
@@ -252,28 +249,33 @@ Superuser created successfully.
## Test the Application
At this point, we should be able to run NetBox. We can check by starting a development instance:
At this point, we should be able to run NetBox's development server for testing. We can check by starting a development instance:
```no-highlight
(venv) # python3 manage.py runserver 0.0.0.0:8000 --insecure
(venv) $ python3 manage.py runserver 0.0.0.0:8000 --insecure
Performing system checks...
System check identified no issues (0 silenced).
November 28, 2018 - 09:33:45
Django version 2.0.9, using settings 'netbox.settings'
November 17, 2020 - 16:08:13
Django version 3.1.3, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
```
Next, connect to the name or IP of the server (as defined in `ALLOWED_HOSTS`) on port 8000; for example, <http://127.0.0.1:8000/>. You should be greeted with the NetBox home page. Note that this built-in web service is for development and testing purposes only. **It is not suited for production use.**
Next, connect to the name or IP of the server (as defined in `ALLOWED_HOSTS`) on port 8000; for example, <http://127.0.0.1:8000/>. You should be greeted with the NetBox home page.
!!! danger
The development server is for development and testing purposes only. It is neither performant nor secure enough for production use. **Do not use it in production.**
!!! warning
If the test service does not run, or you cannot reach the NetBox home page, something has gone wrong. Do not proceed with the rest of this guide until the installation has been corrected.
Note that the initial UI will be locked down for non-authenticated users.
Note that the initial user interface will be locked down for non-authenticated users.
![NetBox UI as seen by a non-authenticated user](../media/installation/netbox_ui_guest.png)
Try logging in as the super user we just created. Once authenticated, you'll be able to access all areas of the UI:
Try logging in using the superuser account we just created. Once authenticated, you'll be able to access all areas of the UI:
![NetBox UI as seen by an administrator](../media/installation/netbox_ui_admin.png)
Type `Ctrl+c` to stop the development server.

View File

@@ -1,32 +1,31 @@
# Gunicorn
Like most Django applications, NetBox runs as a [WSGI application](https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface) behind an HTTP server. This documentation shows how to install and configure [gunicorn](http://gunicorn.org/) for this role, however other WSGIs are available and should work similarly well.
Like most Django applications, NetBox runs as a [WSGI application](https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface) behind an HTTP server. This documentation shows how to install and configure [gunicorn](http://gunicorn.org/) (which is automatically installed with NetBox) for this role, however other WSGI servers are available and should work similarly well. [uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/) is a popular alternative.
## Configuration
NetBox ships with a default configuration file for gunicorn. To use it, copy `/opt/netbox/contrib/gunicorn.py` to `/opt/netbox/gunicorn.py`. (We make a copy of this file rather than pointing to it directly to ensure that any changes to it do not get overwritten by a future upgrade.)
NetBox ships with a default configuration file for gunicorn. To use it, copy `/opt/netbox/contrib/gunicorn.py` to `/opt/netbox/gunicorn.py`. (We make a copy of this file rather than pointing to it directly to ensure that any local changes to it do not get overwritten by a future upgrade.)
```no-highlight
# cd /opt/netbox
# cp contrib/gunicorn.py /opt/netbox/gunicorn.py
sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
```
While this default configuration should suffice for most initial installations, you may wish to edit this file to change the bound IP address and/or port number, or to make performance-related adjustments. See [the Gunicorn documentation](https://docs.gunicorn.org/en/stable/configure.html) for the available configuration parameters.
While the provided configuration should suffice for most initial installations, you may wish to edit this file to change the bound IP address and/or port number, or to make performance-related adjustments. See [the Gunicorn documentation](https://docs.gunicorn.org/en/stable/configure.html) for the available configuration parameters.
## systemd Setup
We'll use systemd to control both gunicorn and NetBox's background worker process. First, copy `contrib/netbox.service` and `contrib/netbox-rq.service` to the `/etc/systemd/system/` directory and reload the systemd dameon:
```no-highlight
# cp contrib/*.service /etc/systemd/system/
# systemctl daemon-reload
sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
sudo systemctl daemon-reload
```
Then, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
```no-highlight
# systemctl start netbox netbox-rq
# systemctl enable netbox netbox-rq
sudo systemctl start netbox netbox-rq
sudo systemctl enable netbox netbox-rq
```
You can use the command `systemctl status netbox` to verify that the WSGI service is running:
@@ -34,16 +33,20 @@ You can use the command `systemctl status netbox` to verify that the WSGI servic
```no-highlight
# systemctl status netbox.service
● netbox.service - NetBox WSGI Service
Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-12-12 19:23:40 UTC; 25s ago
Docs: https://netbox.readthedocs.io/en/stable/
Main PID: 11993 (gunicorn)
Tasks: 6 (limit: 2362)
CGroup: /system.slice/netbox.service
├─11993 /usr/bin/python3 /usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─12015 /usr/bin/python3 /usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─12016 /usr/bin/python3 /usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-11-17 16:18:23 UTC; 3min 35s ago
Docs: https://netbox.readthedocs.io/en/stable/
Main PID: 22836 (gunicorn)
Tasks: 6 (limit: 2345)
Memory: 339.3M
CGroup: /system.slice/netbox.service
├─22836 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid>
├─22854 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid>
├─22855 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid>
...
```
!!! note
If the NetBox service fails to start, issue the command `journalctl -eu netbox` to check for log messages that may indicate the problem.
Once you've verified that the WSGI workers are up and running, move on to HTTP server setup.

View File

@@ -1,9 +1,9 @@
# HTTP Server Setup
This documentation provides example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](http://httpd.apache.org/docs/2.4), though any HTTP server which supports WSGI should be compatible.
This documentation provides example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](https://httpd.apache.org/docs/current/), though any HTTP server which supports WSGI should be compatible.
!!! info
For the sake of brevity, only Ubuntu 18.04 instructions are provided here, these tasks not unique to NetBox and should carry over to other distributions with mininal changes. Please consult your distribution's documentation for assistance if needed.
For the sake of brevity, only Ubuntu 20.04 instructions are provided here. These tasks are not unique to NetBox and should carry over to other distributions with minimal changes. Please consult your distribution's documentation for assistance if needed.
## Obtain an SSL Certificate
@@ -12,7 +12,7 @@ To enable HTTPS access to NetBox, you'll need a valid SSL certificate. You can p
The command below can be used to generate a self-signed certificate for testing purposes, however it is strongly recommended to use a certificate from a trusted authority in production. Two files will be created: the public certificate (`netbox.crt`) and the private key (`netbox.key`). The certificate is published to the world, whereas the private key must be kept secret at all times.
```no-highlight
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/netbox.key \
-out /etc/ssl/certs/netbox.crt
```
@@ -26,27 +26,26 @@ The above command will prompt you for additional details of the certificate; all
Begin by installing nginx:
```no-highlight
# apt-get install -y nginx
sudo apt install -y nginx
```
Once nginx is installed, copy the nginx configuration file provided by NetBox to `/etc/nginx/sites-available/netbox`. Be sure to replace `netbox.example.com` with the domain name or IP address of your installation. (This should match the value configured for `ALLOWED_HOSTS` in `configuration.py`.)
```no-highlight
# cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox
sudo cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox
```
Then, delete `/etc/nginx/sites-enabled/default` and create a symlink in the `sites-enabled` directory to the configuration file you just created.
```no-highlight
# cd /etc/nginx/sites-enabled/
# rm default
# ln -s /etc/nginx/sites-available/netbox
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/netbox /etc/nginx/sites-enabled/netbox
```
Finally, restart the `nginx` service to use the new configuration.
```no-highlight
# service nginx restart
sudo systemctl restart nginx
```
### Option B: Apache
@@ -54,26 +53,26 @@ Finally, restart the `nginx` service to use the new configuration.
Begin by installing Apache:
```no-highlight
# apt-get install -y apache2
sudo apt install -y apache2
```
Next, copy the default configuration file to `/etc/apache2/sites-available/`. Be sure to modify the `ServerName` parameter appropriately.
```no-highlight
# cp /opt/netbox/contrib/apache.conf /etc/apache2/sites-available/netbox.conf
sudo cp /opt/netbox/contrib/apache.conf /etc/apache2/sites-available/netbox.conf
```
Finally, ensure that the required Apache modules are enabled, enable the `netbox` site, and reload Apache:
```no-highlight
# a2enmod ssl proxy proxy_http headers
# a2ensite netbox
# service apache2 restart
sudo a2enmod ssl proxy proxy_http headers
sudo a2ensite netbox
sudo systemctl restart apache2
```
## Confirm Connectivity
At this point, you should be able to connect to the HTTP service at the server name or IP address you provided.
At this point, you should be able to connect to the HTTPS service at the server name or IP address you provided.
!!! info
Please keep in mind that the configurations provided here are bare minimums required to get NetBox up and running. You may want to make adjustments to better suit your production environment.
@@ -91,5 +90,5 @@ If you are unable to connect to the HTTP server, check that:
If you are able to connect but receive a 502 (bad gateway) error, check the following:
* The WSGI worker processes (gunicorn) are running (`systemctl status netbox` should show a status of "active (running)")
* nginx/Apache is configured to connect to the port on which gunicorn is listening (default is 8001).
* Nginx/Apache is configured to connect to the port on which gunicorn is listening (default is 8001).
* SELinux is not preventing the reverse proxy connection. You may need to allow HTTP network connections with the command `setsebool -P httpd_can_network_connect 1`

View File

@@ -9,13 +9,13 @@ This guide explains how to implement LDAP authentication using an external serve
On Ubuntu:
```no-highlight
# apt-get install -y libldap2-dev libsasl2-dev libssl-dev
sudo apt install -y libldap2-dev libsasl2-dev libssl-dev
```
On CentOS:
```no-highlight
# yum install -y openldap-devel
sudo yum install -y openldap-devel
```
### Install django-auth-ldap
@@ -23,15 +23,14 @@ On CentOS:
Activate the Python virtual environment and install the `django-auth-ldap` package using pip:
```no-highlight
# cd /opt/netbox/
# source venv/bin/activate
(venv) # pip3 install django-auth-ldap
source /opt/netbox/venv/bin/activate
pip3 install django-auth-ldap
```
Once installed, add the package to `local_requirements.txt` to ensure it is re-installed during future rebuilds of the virtual environment:
```no-highlight
(venv) # echo django-auth-ldap >> local_requirements.txt
sudo sh -c "echo 'django-auth-ldap' >> /opt/netbox/local_requirements.txt"
```
## Configuration
@@ -42,7 +41,7 @@ First, enable the LDAP authentication backend in `configuration.py`. (Be sure to
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
```
Next, create a file in the same directory as `configuration.py` (typically `netbox/netbox/`) named `ldap_config.py`. Define all of the parameters required below in `ldap_config.py`. Complete documentation of all `django-auth-ldap` configuration options is included in the project's [official documentation](http://django-auth-ldap.readthedocs.io/).
Next, create a file in the same directory as `configuration.py` (typically `/opt/netbox/netbox/netbox/`) named `ldap_config.py`. Define all of the parameters required below in `ldap_config.py`. Complete documentation of all `django-auth-ldap` configuration options is included in the project's [official documentation](https://django-auth-ldap.readthedocs.io/).
### General Server Configuration
@@ -141,19 +140,30 @@ AUTH_LDAP_CACHE_TIMEOUT = 3600
## Troubleshooting LDAP
`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`.
`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`.
For troubleshooting LDAP user/group queries, add the following lines to the start of `ldap_config.py` after `import ldap`.
For troubleshooting LDAP user/group queries, add or merge the following [logging](../configuration/optional-settings.md#logging) configuration to `configuration.py`:
```python
import logging, logging.handlers
logfile = "/opt/netbox/logs/django-ldap-debug.log"
my_logger = logging.getLogger('django_auth_ldap')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
logfile, maxBytes=1024 * 500, backupCount=5
)
my_logger.addHandler(handler)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'netbox_auth_log': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/netbox/logs/django-ldap-debug.log',
'maxBytes': 1024 * 500,
'backupCount': 5,
},
},
'loggers': {
'django_auth_ldap': {
'handlers': ['netbox_auth_log'],
'level': 'DEBUG',
},
},
}
```
Ensure the file and path specified in logfile exist and are writable and executable by the application service account. Restart the netbox service and attempt to log into the site to trigger log entries to this file.

View File

@@ -1,5 +1,7 @@
# Installation
The installation instructions provided here have been tested to work on Ubuntu 20.04 and CentOS 8.2. 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.
The following sections detail how to set up a new instance of NetBox:
1. [PostgreSQL database](1-postgresql.md)
@@ -9,6 +11,21 @@ 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 v2.10.3 on Ubuntu 20.04 for your reference.
<iframe width="560" height="315" src="https://www.youtube.com/embed/dFANGlxXEng" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
## Requirements
| Dependency | Minimum Version |
|------------|-----------------|
| Python | 3.6 |
| PostgreSQL | 9.6 |
| Redis | 4.0 |
!!! note
Python 3.7 or later will be required in NetBox v3.0. Users are strongly encouraged to install NetBox using Python 3.7 or later for new deployments.
Below is a simplified overview of the NetBox application stack for reference:
![NetBox UI as seen by a non-authenticated user](../media/installation/netbox_application_stack.png)
@@ -16,6 +33,3 @@ Below is a simplified overview of the NetBox application stack for reference:
## Upgrading
If you are upgrading from an existing installation, please consult the [upgrading guide](upgrading.md).
!!! note
Beginning with v2.5.9, the official documentation calls for systemd to be used for managing the WSGI workers in place of supervisord. Please see the instructions for [migrating to systemd](migrating-to-systemd.md) if you are still using supervisord.

View File

@@ -38,14 +38,14 @@ You can use the command `systemctl status netbox` to verify that the WSGI servic
# systemctl status netbox.service
● netbox.service - NetBox WSGI Service
Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-12-12 19:23:40 UTC; 25s ago
Active: active (running) since Sat 2020-10-24 19:23:40 UTC; 25s ago
Docs: https://netbox.readthedocs.io/en/stable/
Main PID: 11993 (gunicorn)
Tasks: 6 (limit: 2362)
CGroup: /system.slice/netbox.service
├─11993 /usr/bin/python3 /usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─12015 /usr/bin/python3 /usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─12016 /usr/bin/python3 /usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─11993 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─12015 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
├─12016 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/...
...
```

View File

@@ -2,7 +2,7 @@
## Review the Release Notes
Prior to upgrading your NetBox instance, be sure to carefully review all [release notes](../../release-notes/) that have been published since your current version was released. Although the upgrade process typically does not involve additional work, certain releases may introduce breaking or backward-incompatible changes. These are called out in the release notes under the version in which the change went into effect.
Prior to upgrading your NetBox instance, be sure to carefully review all [release notes](../release-notes/index.md) that have been published since your current version was released. Although the upgrade process typically does not involve additional work, certain releases may introduce breaking or backward-incompatible changes. These are called out in the release notes under the release in which the change went into effect.
## Update Dependencies to Required Versions
@@ -14,7 +14,7 @@ NetBox v2.9.0 and later requires the following:
| PostgreSQL | 9.6 |
| Redis | 4.0 |
## Install the Latest Code
## Install the Latest Release
As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by cloning the `master` branch of the git repository.
@@ -25,47 +25,36 @@ Download the [latest stable release](https://github.com/netbox-community/netbox/
Download and extract the latest version:
```no-highlight
# wget https://github.com/netbox-community/netbox/archive/vX.Y.Z.tar.gz
# tar -xzf vX.Y.Z.tar.gz -C /opt
# cd /opt/
# ln -sfn netbox-X.Y.Z/ netbox
wget https://github.com/netbox-community/netbox/archive/vX.Y.Z.tar.gz
sudo tar -xzf vX.Y.Z.tar.gz -C /opt
sudo ln -sfn /opt/netbox-X.Y.Z/ /opt/netbox
```
Copy the 'configuration.py' you created when first installing to the new version:
Copy `local_requirements.txt`, `configuration.py`, and `ldap_config.py` (if present) from the current installation to the new version:
```no-highlight
# cp netbox-X.Y.Z/netbox/netbox/configuration.py netbox/netbox/netbox/configuration.py
```
Copy your local requirements file if used:
```no-highlight
# cp netbox-X.Y.Z/local_requirements.txt netbox/local_requirements.txt
```
Also copy the LDAP configuration if using LDAP:
```no-highlight
# cp netbox-X.Y.Z/netbox/netbox/ldap_config.py netbox/netbox/netbox/ldap_config.py
sudo cp /opt/netbox-X.Y.Z/local_requirements.txt /opt/netbox/
sudo cp /opt/netbox-X.Y.Z/netbox/netbox/configuration.py /opt/netbox/netbox/netbox/
sudo cp /opt/netbox-X.Y.Z/netbox/netbox/ldap_config.py /opt/netbox/netbox/netbox/
```
Be sure to replicate your uploaded media as well. (The exact action necessary will depend on where you choose to store your media, but in general moving or copying the media directory will suffice.)
```no-highlight
# cp -pr netbox-X.Y.Z/netbox/media/ netbox/netbox/
sudo cp -pr /opt/netbox-X.Y.Z/netbox/media/ /opt/netbox/netbox/
```
Also make sure to copy over any custom scripts and reports that you've made. Note that if these are stored outside the project root, you will not need to copy them. (Check the `SCRIPTS_ROOT` and `REPORTS_ROOT` parameters in the configuration file above if you're unsure.)
Also make sure to copy or link any custom scripts and reports that you've made. Note that if these are stored outside the project root, you will not need to copy them. (Check the `SCRIPTS_ROOT` and `REPORTS_ROOT` parameters in the configuration file above if you're unsure.)
```no-highlight
# cp -r /opt/netbox-X.Y.Z/netbox/scripts /opt/netbox/netbox/scripts/
# cp -r /opt/netbox-X.Y.Z/netbox/reports /opt/netbox/netbox/reports/
sudo cp -r /opt/netbox-X.Y.Z/netbox/scripts /opt/netbox/netbox/
sudo cp -r /opt/netbox-X.Y.Z/netbox/reports /opt/netbox/netbox/
```
If you followed the original installation guide to set up gunicorn, be sure to copy its configuration as well:
```no-highlight
# cp netbox-X.Y.Z/gunicorn.py netbox/gunicorn.py
sudo cp /opt/netbox-X.Y.Z/gunicorn.py /opt/netbox/
```
### Option B: Clone the Git Repository
@@ -73,10 +62,9 @@ If you followed the original installation guide to set up gunicorn, be sure to c
This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most recent iteration of the master branch:
```no-highlight
# cd /opt/netbox
# git checkout master
# git pull origin master
# git status
cd /opt/netbox
sudo git checkout master
sudo git pull origin master
```
## Run the Upgrade Script
@@ -84,10 +72,10 @@ This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most
Once the new code is in place, verify that any optional Python packages required by your deployment (e.g. `napalm` or `django-auth-ldap`) are listed in `local_requirements.txt`. Then, run the upgrade script:
```no-highlight
# ./upgrade.sh
sudo ./upgrade.sh
```
This script:
This script performs the following actions:
* Destroys and rebuilds the Python virtual environment
* Installs all required Python packages (listed in `requirements.txt`)
@@ -99,23 +87,20 @@ This script:
* Clears all cached data to prevent conflicts with the new release
!!! note
It's possible that the upgrade script will display a notice warning of unreflected database migrations:
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
This may occur due to semantic differences in environment, and can be safely ignored. Never attempt to create new migrations unless you are intentionally modifying the database schema.
If the upgrade script prompts a warning about unreflected database migrations, this indicates that some change has
been made to your local codebase and should be investigated. Never attempt to create new migrations unless you are
intentionally modifying the database schema.
## Restart the NetBox Services
!!! warning
If you are upgrading from an installation that does not use a Python virtual environment, you'll need to update the systemd service files to reference the new Python and gunicorn executables before restarting the services. These are located in `/opt/netbox/venv/bin/`. See the example service files in `/opt/netbox/contrib/` for reference.
If you are upgrading from an installation that does not use a Python virtual environment (any release prior to v2.7.9), you'll need to update the systemd service files to reference the new Python and gunicorn executables before restarting the services. These are located in `/opt/netbox/venv/bin/`. See the example service files in `/opt/netbox/contrib/` for reference.
Finally, restart the gunicorn and RQ services:
```no-highlight
# sudo systemctl restart netbox netbox-rq
sudo systemctl restart netbox netbox-rq
```
!!! note
It's possible you are still using supervisord instead of systemd. If so, please see the instructions for [migrating to systemd](migrating-to-systemd.md).
If upgrading from an installation that uses supervisord, please see the instructions for [migrating to systemd](migrating-to-systemd.md). The use of supervisord is no longer supported.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -2,9 +2,9 @@
The association of a circuit with a particular site and/or device is modeled separately as a circuit termination. A circuit may have up to two terminations, labeled A and Z. A single-termination circuit can be used when you don't know (or care) about the far end of a circuit (for example, an Internet access circuit which connects to a transit provider). A dual-termination circuit is useful for tracking circuits which connect two sites.
Each circuit termination is tied to a site, and may optionally be connected via a cable to a specific device interface or port within that site. Each termination must be assigned a port speed, and can optionally be assigned an upstream speed if it differs from the downstream speed (a common scenario with e.g. DOCSIS cable modems). Fields are also available to track cross-connect and patch panel details.
Each circuit termination is attached to either a site or to a provider network. Site terminations may optionally be connected via a cable to a specific device interface or port within that site. Each termination must be assigned a port speed, and can optionally be assigned an upstream speed if it differs from the downstream speed (a common scenario with e.g. DOCSIS cable modems). Fields are also available to track cross-connect and patch panel details.
In adherence with NetBox's philosophy of closely modeling the real world, a circuit may terminate only to a physical interface. For example, circuits may not terminate to LAG interfaces, which are virtual in nature. In such cases, a separate physical circuit is associated with each LAG member interface and each needs to be modeled discretely.
In adherence with NetBox's philosophy of closely modeling the real world, a circuit may be connected only to a physical interface. For example, circuits may not terminate to LAG interfaces, which are virtual in nature. In such cases, a separate physical circuit is associated with each LAG member interface and each needs to be modeled discretely.
!!! note
A circuit in NetBox represents a physical link, and cannot have more than two endpoints. When modeling a multi-point topology, each leg of the topology must be defined as a discrete circuit, with one end terminating within the provider's infrastructure.
A circuit in NetBox represents a physical link, and cannot have more than two endpoints. When modeling a multi-point topology, each leg of the topology must be defined as a discrete circuit, with one end terminating within the provider's infrastructure. The provider network model is ideal for representing these networks.

View File

@@ -0,0 +1,5 @@
# Provider Networks
This model can be used to represent the boundary of a provider network, the details of which are unknown or unimportant to the NetBox user. For example, it might represent a provider's regional MPLS network to which multiple circuits provide connectivity.
Each provider network must be assigned to a provider. A circuit may terminate to either a provider network or to a site.

View File

@@ -8,7 +8,7 @@ A device is said to be full-depth if its installation on one rack face prevents
Each device must be instantiated from a pre-created device type, and its default components (console ports, power ports, interfaces, etc.) will be created automatically. (The device type associated with a device may be changed after its creation, however its components will not be updated retroactively.)
Each device must be assigned a site, device role, and operational status, and may optionally be assigned to a specific rack within a site. A platform, serial number, and asset tag may optionally be assigned to each device.
Each device must be assigned a site, device role, and operational status, and may optionally be assigned to a specific location and/or rack within a site. A platform, serial number, and asset tag may optionally be assigned to each device.
Device names must be unique within a site, unless the device has been assigned to a tenant. Devices may also be unnamed.

View File

@@ -2,11 +2,15 @@
Interfaces in NetBox represent network interfaces used to exchange data with connected devices. On modern networks, these are most commonly Ethernet, but other types are supported as well. Each interface must be assigned a type, and may optionally be assigned a MAC address, MTU, and IEEE 802.1Q mode (tagged or access). Each interface can also be enabled or disabled, and optionally designated as management-only (for out-of-band management).
Interfaces may be physical or virtual in nature, but only physical interfaces may be connected via cables. Cables can connect interfaces to pass-through ports, circuit terminations, or other interfaces.
!!! note
Although devices and virtual machines both can have interfaces, a separate model is used for each. Thus, device interfaces have some properties that are not present on virtual machine interfaces and vice versa.
### Interface Types
Interfaces may be physical or virtual in nature, but only physical interfaces may be connected via cables. Cables can connect interfaces to pass-through ports, circuit terminations, or other interfaces. Virtual interfaces, such as 802.1Q-tagged subinterfaces, may be assigned to physical parent interfaces.
Physical interfaces may be arranged into a link aggregation group (LAG) and associated with a parent LAG (virtual) interface. LAG interfaces can be recursively nested to model bonding of trunk groups. Like all virtual interfaces, LAG interfaces cannot be connected physically.
IP addresses can be assigned to interfaces. VLANs can also be assigned to each interface as either tagged or untagged. (An interface may have only one untagged VLAN.)
### IP Address Assignment
!!! note
Although devices and virtual machines both can have interfaces, a separate model is used for each. Thus, device interfaces have some properties that are not present on virtual machine interfaces and vice versa.
IP addresses can be assigned to interfaces. VLANs can also be assigned to each interface as either tagged or untagged. (An interface may have only one untagged VLAN.)

View File

@@ -0,0 +1,5 @@
# Locations
Racks and devices can be grouped by location within a site. A location may represent a floor, room, cage, or similar organizational unit. Locations can be nested to form a hierarchy. For example, you may have floors within a site, and rooms within a floor.
The name and facility ID of each rack within a location must be unique. (Racks not assigned to the same location may have identical names and/or facility IDs.)

View File

@@ -1,6 +1,6 @@
# Power Feed
A power feed represents the distribution of power from a power panel to a particular device, typically a power distribution unit (PDU). The power pot (inlet) on a device can be connected via a cable to a power feed. A power feed may optionally be assigned to a rack to allow more easily tracking the distribution of power among racks.
A power feed represents the distribution of power from a power panel to a particular device, typically a power distribution unit (PDU). The power port (inlet) on a device can be connected via a cable to a power feed. A power feed may optionally be assigned to a rack to allow more easily tracking the distribution of power among racks.
Each power feed is assigned an operational type (primary or redundant) and one of the following statuses:

View File

@@ -2,7 +2,7 @@
A power panel represents the origin point in NetBox for electrical power being disseminated by one or more power feeds. In a data center environment, one power panel often serves a group of racks, with an individual power feed extending to each rack, though this is not always the case. It is common to have two sets of panels and feeds arranged in parallel to provide redundant power to each rack.
Each power panel must be assigned to a site, and may optionally be assigned to a particular rack group.
Each power panel must be assigned to a site, and may optionally be assigned to a particular location within that site.
!!! note
NetBox does not model the mechanism by which power is delivered to a power panel. Power panels define the root level of the power distribution hierarchy in NetBox.

View File

@@ -1,6 +1,6 @@
# Racks
The rack model represents a physical two- or four-post equipment rack in which devices can be installed. Each rack must be assigned to a site, and may optionally be assigned to a rack group and/or tenant. Racks can also be organized by user-defined functional roles.
The rack model represents a physical two- or four-post equipment rack in which devices can be installed. Each rack must be assigned to a site, and may optionally be assigned to a location and/or tenant. Racks can also be organized by user-defined functional roles.
Rack height is measured in *rack units* (U); racks are commonly between 42U and 48U tall, but NetBox allows you to define racks of arbitrary height. A toggle is provided to indicate whether rack units are in ascending (from the ground up) or descending order.

View File

@@ -1,7 +0,0 @@
# Rack Groups
Racks can be organized into groups, which can be nested into themselves similar to regions. As with sites, how you choose to designate rack groups will depend on the nature of your organization. For example, if each site represents a campus, each group might represent a building within a campus. If each site represents a building, each rack group might equate to a floor or room.
Each rack group must be assigned to a parent site, and rack groups may optionally be nested within a site to model a multi-level hierarchy. For example, you might have a tier of rooms beneath a tier of floors, all belonging to the same parent building (site).
The name and facility ID of each rack within a group must be unique. (Racks not assigned to the same rack group may have identical names and/or facility IDs.)

View File

@@ -1,3 +1,3 @@
## Rear Port Templates
A template for a rear-facing pass-through port that will be created on all instantiations of the parent device type. Each rear port may have a physical type and one or more front port templates assigned to it. The number of positions associated with a rear port determines how many front ports can be assigned to it (the maximum is 64).
A template for a rear-facing pass-through port that will be created on all instantiations of the parent device type. Each rear port may have a physical type and one or more front port templates assigned to it. The number of positions associated with a rear port determines how many front ports can be assigned to it (the maximum is 1024).

View File

@@ -0,0 +1,3 @@
# Site Groups
Like regions, site groups can be used to organize sites. Whereas regions are intended to provide geographic organization, site groups can be used to classify sites by role or function. Also like regions, site groups can be nested to form a hierarchy. Sites which belong to a child group are also considered to be members of any of its parent groups.

View File

@@ -3,11 +3,13 @@
Sometimes it is desirable to associate additional data with a group of devices or virtual machines to aid in automated configuration. For example, you might want to associate a set of syslog servers for all devices within a particular region. Context data enables the association of extra user-defined data with devices and virtual machines grouped by one or more of the following assignments:
* Region
* Site group
* Site
* Device type (devices only)
* Role
* Platform
* Cluster group
* Cluster
* Cluster group (VMs only)
* Cluster (VMs only)
* Tenant group
* Tenant
* Tag

View File

@@ -0,0 +1,5 @@
# Route Targets
A route target is a particular type of [extended BGP community](https://tools.ietf.org/html/rfc4360#section-4) used to control the redistribution of routes among VRF tables in a network. Route targets can be assigned to individual VRFs in NetBox as import or export targets (or both) to model this exchange in an L3VPN. Each route target must be given a unique name, which should be in a format prescribed by [RFC 4364](https://tools.ietf.org/html/rfc4364#section-4.2), similar to a VR route distinguisher.
Each route target can optionally be assigned to a tenant, and may have tags assigned to it.

View File

@@ -1,6 +1,6 @@
# VLANs
A VLAN represents an isolated layer two domain, identified by a name and a numeric ID (1-4094) as defined in [IEEE 802.1Q](https://en.wikipedia.org/wiki/IEEE_802.1Q). Each VLAN may be assigned to a site, tenant, and/or VLAN group.
A VLAN represents an isolated layer two domain, identified by a name and a numeric ID (1-4094) as defined in [IEEE 802.1Q](https://en.wikipedia.org/wiki/IEEE_802.1Q). VLANs are arranged into VLAN groups to define scope and to enforce uniqueness.
Each VLAN must be assigned one of the following operational statuses:

View File

@@ -1,5 +1,5 @@
# VLAN Groups
VLAN groups can be used to organize VLANs within NetBox. Each group may optionally be assigned to a specific site, but a group cannot belong to multiple sites.
VLAN groups can be used to organize VLANs within NetBox. Each VLAN group can be scoped to a particular region, site group, site, location, rack, cluster group, or cluster. Member VLANs will be available for assignment to devices and/or virtual machines within the specified scope.
Groups can also be used to enforce uniqueness: Each VLAN within a group must have a unique ID and name. VLANs which are not assigned to a group may have overlapping names and IDs (including VLANs which belong to a common site). For example, you can create two VLANs with ID 123, but they cannot both be assigned to the same group.

View File

@@ -10,3 +10,5 @@ By default, NetBox will allow duplicate prefixes to be assigned to a VRF. This b
!!! note
Enforcement of unique IP space can be toggled for global table (non-VRF prefixes) using the `ENFORCE_GLOBAL_UNIQUE` configuration setting.
Each VRF may have one or more import and/or export route targets applied to it. Route targets are used to control the exchange of routes (prefixes) among VRFs in L3VPNs.

View File

@@ -11,4 +11,6 @@ Like devices, each VM can be assigned a platform and/or functional role, and mus
* Failed
* Decommissioning
Additional fields are available for annotating the vCPU count, memory (GB), and disk (GB) allocated to each VM. Each VM may optionally be assigned to a tenant. Virtual machines may have virtual interfaces assigned to them, but do not support any physical component.
Additional fields are available for annotating the vCPU count, memory (GB), and disk (GB) allocated to each VM. A VM may be allocated a partial vCPU count (e.g. 1.5 vCPU).
Each VM may optionally be assigned to a tenant. Virtual machines may have virtual interfaces assigned to them, but do not support any physical component.

View File

@@ -12,6 +12,9 @@ Plugins can do a lot, including:
However, keep in mind that each piece of functionality is entirely optional. For example, if your plugin merely adds a piece of middleware or an API endpoint for existing data, there's no need to define any new models.
!!! warning
While very powerful, the NetBox plugins API is necessarily limited in its scope. The plugins API is discussed here in its entirety: Any part of the NetBox code base not documented here is _not_ part of the supported plugins API, and should not be employed by a plugin. Internal elements of NetBox are subject to change at any time and without warning. Plugin authors are **strongly** encouraged to develop plugins using only the officially supported components discussed here and those provided by the underlying Django framework so as to avoid breaking changes in future releases.
## Initial Setup
## Plugin Structure
@@ -60,11 +63,15 @@ setup(
install_requires=[],
packages=find_packages(),
include_package_data=True,
zip_safe=False,
)
```
Many of these are self-explanatory, but for more information, see the [setuptools documentation](https://setuptools.readthedocs.io/en/latest/setuptools.html).
!!! note
`zip_safe=False` is **required** as the current plugin iteration is not zip safe due to upstream python issue [issue19699](https://bugs.python.org/issue19699)
### Define a PluginConfig
The `PluginConfig` class is a NetBox-specific wrapper around Django's built-in [`AppConfig`](https://docs.djangoproject.com/en/stable/ref/applications/) class. It is used to declare NetBox plugin functionality within a Python package. Each plugin should provide its own subclass, defining its name, metadata, and default and required configuration parameters. An example is below:
@@ -198,26 +205,37 @@ class RandomAnimalView(View):
})
```
This view retrieves a random animal from the database and and passes it as a context variable when rendering a template named `animal.html`, which doesn't exist yet. To create this template, first create a directory named `templates/netbox_animal_sounds/` within the plugin source directory. (We use the plugin's name as a subdirectory to guard against naming collisions with other plugins.) Then, create `animal.html`:
This view retrieves a random animal from the database and and passes it as a context variable when rendering a template named `animal.html`, which doesn't exist yet. To create this template, first create a directory named `templates/netbox_animal_sounds/` within the plugin source directory. (We use the plugin's name as a subdirectory to guard against naming collisions with other plugins.) Then, create a template named `animal.html` as described below.
### Extending the Base Template
NetBox provides a base template to ensure a consistent user experience, which plugins can extend with their own content. This template includes four content blocks:
* `title` - The page title
* `header` - The upper portion of the page
* `content` - The main page body
* `javascript` - A section at the end of the page for including Javascript code
For more information on how template blocks work, consult the [Django documentation](https://docs.djangoproject.com/en/stable/ref/templates/builtins/#block).
```jinja2
{% extends 'base.html' %}
{% block content %}
{% with config=settings.PLUGINS_CONFIG.netbox_animal_sounds %}
<h2 class="text-center" style="margin-top: 200px">
{% if animal %}
The {{ animal.name|lower }} says
{% if config.loud %}
{{ animal.sound|upper }}!
{% else %}
{{ animal.sound }}
{% endif %}
{% else %}
No animals have been created yet!
{% endif %}
</h2>
{% endwith %}
{% with config=settings.PLUGINS_CONFIG.netbox_animal_sounds %}
<h2 class="text-center" style="margin-top: 200px">
{% if animal %}
The {{ animal.name|lower }} says
{% if config.loud %}
{{ animal.sound|upper }}!
{% else %}
{{ animal.sound }}
{% endif %}
{% else %}
No animals have been created yet!
{% endif %}
</h2>
{% endwith %}
{% endblock %}
```

View File

@@ -64,6 +64,15 @@ PLUGINS_CONFIG = {
}
```
### Run Database Migrations
If the plugin introduces new database models, run the provided schema migrations:
```no-highlight
(venv) $ cd /opt/netbox/netbox/
(venv) $ python3 manage.py migrate
```
### Collect Static Files
Plugins may package static files to be served directly by the HTTP front end. Ensure that these are copied to the static root directory with the `collectstatic` management command:

View File

@@ -1 +1 @@
version-2.9.md
version-2.11.md

View File

@@ -121,7 +121,7 @@ A new API endpoint has been added at `/api/ipam/prefixes/<pk>/available-ips/`. A
#### NAPALM Integration ([#1348](https://github.com/netbox-community/netbox/issues/1348))
The [NAPALM automation](https://napalm-automation.net/) library provides an abstracted interface for pulling live data (e.g. uptime, software version, running config, LLDP neighbors, etc.) from network devices. The NetBox API has been extended to support executing read-only NAPALM methods on devices defined in NetBox. To enable this functionality, ensure that NAPALM has been installed (`pip install napalm`) and the `NETBOX_USERNAME` and `NETBOX_PASSWORD` [configuration parameters](http://netbox.readthedocs.io/en/stable/configuration/optional-settings/#netbox_username) have been set in configuration.py.
The [NAPALM automation](https://napalm-automation.net/) library provides an abstracted interface for pulling live data (e.g. uptime, software version, running config, LLDP neighbors, etc.) from network devices. The NetBox API has been extended to support executing read-only NAPALM methods on devices defined in NetBox. To enable this functionality, ensure that NAPALM has been installed (`pip install napalm`) and the `NETBOX_USERNAME` and `NETBOX_PASSWORD` [configuration parameters](https://netbox.readthedocs.io/en/stable/configuration/optional-settings/#netbox_username) have been set in configuration.py.
### Enhancements

View File

@@ -0,0 +1,349 @@
# NetBox v2.10
## v2.10.10 (2021-04-15)
### Enhancements
* [#5796](https://github.com/netbox-community/netbox/issues/5796) - Add DC terminal power port, outlet types
* [#5980](https://github.com/netbox-community/netbox/issues/5980) - Add Saf-D-Grid power port, outlet types
* [#6157](https://github.com/netbox-community/netbox/issues/6157) - Support Markdown rendering for report logs
* [#6160](https://github.com/netbox-community/netbox/issues/6160) - Add F connector port type
* [#6168](https://github.com/netbox-community/netbox/issues/6168) - Add SFP56 50GE interface type
### Bug Fixes
* [#5419](https://github.com/netbox-community/netbox/issues/5419) - Update parent device/VM when deleting a primary IP
* [#5643](https://github.com/netbox-community/netbox/issues/5643) - Fix VLAN assignment when editing VM interfaces in bulk
* [#5652](https://github.com/netbox-community/netbox/issues/5652) - Update object data when renaming a custom field
* [#6056](https://github.com/netbox-community/netbox/issues/6056) - Optimize change log cleanup
* [#6144](https://github.com/netbox-community/netbox/issues/6144) - Fix MAC address field display in VM interfaces search form
* [#6152](https://github.com/netbox-community/netbox/issues/6152) - Fix custom field filtering for cables, virtual chassis
* [#6162](https://github.com/netbox-community/netbox/issues/6162) - Fix choice field filters (multiple models)
---
## v2.10.9 (2021-04-12)
### Enhancements
* [#5526](https://github.com/netbox-community/netbox/issues/5526) - Add MAC address search field to VM interfaces list
* [#5756](https://github.com/netbox-community/netbox/issues/5756) - Omit child devices from non-racked devices list under rack view
* [#5840](https://github.com/netbox-community/netbox/issues/5840) - Add column to cable termination objects to display cable color
* [#6054](https://github.com/netbox-community/netbox/issues/6054) - Display NAPALM-enabled device tabs only when relevant
* [#6083](https://github.com/netbox-community/netbox/issues/6083) - Support disabling TLS certificate validation for Redis
### Bug Fixes
* [#5805](https://github.com/netbox-community/netbox/issues/5805) - Fix missing custom field filters for cables, rack reservations
* [#6070](https://github.com/netbox-community/netbox/issues/6070) - Add missing `count_ipaddresses` attribute to VMInterface serializer
* [#6073](https://github.com/netbox-community/netbox/issues/6073) - Permit users to manage their own REST API tokens without needing explicit permission
* [#6081](https://github.com/netbox-community/netbox/issues/6081) - Fix interface connections REST API endpoint
* [#6082](https://github.com/netbox-community/netbox/issues/6082) - Support colons in webhook header values
* [#6108](https://github.com/netbox-community/netbox/issues/6108) - Do not infer tenant assignment from parent objects for prefixes, IP addresses
* [#6117](https://github.com/netbox-community/netbox/issues/6117) - Handle exception when attempting to assign an MPTT-enabled model as its own parent
* [#6131](https://github.com/netbox-community/netbox/issues/6131) - Correct handling of boolean fields when cloning objects
---
## v2.10.8 (2021-03-26)
### Bug Fixes
* [#6060](https://github.com/netbox-community/netbox/issues/6060) - Fix exception on cable trace in UI (regression from #5650)
---
## v2.10.7 (2021-03-25)
### Enhancements
* [#5641](https://github.com/netbox-community/netbox/issues/5641) - Allow filtering device components by label
* [#5723](https://github.com/netbox-community/netbox/issues/5723) - Allow customization of the geographic mapping service via `MAPS_URL` config parameter
* [#5736](https://github.com/netbox-community/netbox/issues/5736) - Allow changing site assignment when bulk editing devices
* [#5953](https://github.com/netbox-community/netbox/issues/5953) - Support Markdown rendering for custom script descriptions
* [#6040](https://github.com/netbox-community/netbox/issues/6040) - Add UI search fields for asset tag for devices and racks
### Bug Fixes
* [#5595](https://github.com/netbox-community/netbox/issues/5595) - Restore ability to delete an uploaded device type image
* [#5650](https://github.com/netbox-community/netbox/issues/5650) - Denote when the total length of a cable trace may exceed the indicated value
* [#5962](https://github.com/netbox-community/netbox/issues/5962) - Ensure consistent display of change log action labels
* [#5966](https://github.com/netbox-community/netbox/issues/5966) - Skip Markdown reference link when tabbing through form fields
* [#5977](https://github.com/netbox-community/netbox/issues/5977) - Correct validation of `RELEASE_CHECK_URL` config parameter
* [#6006](https://github.com/netbox-community/netbox/issues/6006) - Fix VLAN group/site association for bulk prefix import
* [#6010](https://github.com/netbox-community/netbox/issues/6010) - Eliminate duplicate virtual chassis search results
* [#6012](https://github.com/netbox-community/netbox/issues/6012) - Pre-populate attributes when creating an available child prefix via the UI
* [#6023](https://github.com/netbox-community/netbox/issues/6023) - Fix display of bottom banner with uBlock Origin enabled
---
## v2.10.6 (2021-03-09)
### Enhancements
* [#5592](https://github.com/netbox-community/netbox/issues/5592) - Add IP addresses count to VRF view
* [#5630](https://github.com/netbox-community/netbox/issues/5630) - Add QSFP+ (64GFC) FibreChannel Interface option
* [#5884](https://github.com/netbox-community/netbox/issues/5884) - Enable custom links for device components
* [#5914](https://github.com/netbox-community/netbox/issues/5914) - Add edit/delete buttons for IP addresses on interface view
* [#5942](https://github.com/netbox-community/netbox/issues/5942) - Add button to add a new IP address on interface view
### Bug Fixes
* [#5703](https://github.com/netbox-community/netbox/issues/5703) - Fix VRF and Tenant field population when adding IP addresses from prefix
* [#5819](https://github.com/netbox-community/netbox/issues/5819) - Enable ordering of virtual machines by primary IP address
* [#5872](https://github.com/netbox-community/netbox/issues/5872) - Ordering of devices by primary IP should respect `PREFER_IPV4` configuration parameter
* [#5922](https://github.com/netbox-community/netbox/issues/5922) - Fix options for filtering object permissions in admin UI
* [#5935](https://github.com/netbox-community/netbox/issues/5935) - Fix filtering prefixes list by multiple prefix values
* [#5948](https://github.com/netbox-community/netbox/issues/5948) - Invalidate cached queries when running `renaturalize`
---
## v2.10.5 (2021-02-24)
### Bug Fixes
* [#5315](https://github.com/netbox-community/netbox/issues/5315) - Fix site unassignment from VLAN when using "None" option
* [#5626](https://github.com/netbox-community/netbox/issues/5626) - Fix REST API representation for circuit terminations connected to non-interface endpoints
* [#5716](https://github.com/netbox-community/netbox/issues/5716) - Fix filtering rack reservations by custom field
* [#5718](https://github.com/netbox-community/netbox/issues/5718) - Fix bulk editing of services when no port(s) are defined
* [#5735](https://github.com/netbox-community/netbox/issues/5735) - Ensure consistent treatment of duplicate IP addresses
* [#5738](https://github.com/netbox-community/netbox/issues/5738) - Fix redirect to device components view after disconnecting a cable
* [#5753](https://github.com/netbox-community/netbox/issues/5753) - Fix Redis Sentinel password application for caching
* [#5786](https://github.com/netbox-community/netbox/issues/5786) - Allow setting null tenant group on tenant via REST API
* [#5841](https://github.com/netbox-community/netbox/issues/5841) - Disallow the creation of available prefixes/IP addresses in violation of assigned permission constraints
---
## v2.10.4 (2021-01-26)
### Enhancements
* [#5542](https://github.com/netbox-community/netbox/issues/5542) - Show cable trace lengths in both meters and feet
* [#5570](https://github.com/netbox-community/netbox/issues/5570) - Add "management only" filter widget for interfaces list
* [#5586](https://github.com/netbox-community/netbox/issues/5586) - Allow filtering virtual chassis by name and master
* [#5612](https://github.com/netbox-community/netbox/issues/5612) - Add GG45 and TERA port types, and CAT7a and CAT8 cable types
* [#5678](https://github.com/netbox-community/netbox/issues/5678) - Show available type choices for all device component import forms
### Bug Fixes
* [#5232](https://github.com/netbox-community/netbox/issues/5232) - Correct swagger definition for ip_prefixes_available-ips_create API
* [#5574](https://github.com/netbox-community/netbox/issues/5574) - Restrict the creation of device bay templates on non-parent device types
* [#5584](https://github.com/netbox-community/netbox/issues/5584) - Restore power utilization panel under device view
* [#5597](https://github.com/netbox-community/netbox/issues/5597) - Fix ordering devices by primary IP address
* [#5603](https://github.com/netbox-community/netbox/issues/5603) - Fix display of white cables in trace view
* [#5639](https://github.com/netbox-community/netbox/issues/5639) - Fix filtering connection lists by device name
* [#5640](https://github.com/netbox-community/netbox/issues/5640) - Fix permissions assessment when adding VM interfaces in bulk
* [#5648](https://github.com/netbox-community/netbox/issues/5648) - Include VC member interfaces on interfaces tab count when viewing VC master
* [#5665](https://github.com/netbox-community/netbox/issues/5665) - Validate rack group is assigned to same site when creating a rack
* [#5683](https://github.com/netbox-community/netbox/issues/5683) - Correct rack elevation displayed when viewing a reservation
---
## v2.10.3 (2021-01-05)
### Bug Fixes
* [#5049](https://github.com/netbox-community/netbox/issues/5049) - Add check for LLDP neighbor chassis name to lldp_neighbors
* [#5301](https://github.com/netbox-community/netbox/issues/5301) - Fix misleading error when racking a device with invalid parameters
* [#5311](https://github.com/netbox-community/netbox/issues/5311) - Update child objects when a rack group is moved to a new site
* [#5518](https://github.com/netbox-community/netbox/issues/5518) - Fix persistent vertical scrollbar
* [#5533](https://github.com/netbox-community/netbox/issues/5533) - Fix bulk editing of objects with required custom fields
* [#5540](https://github.com/netbox-community/netbox/issues/5540) - Fix exception when viewing a provider with one or more tags assigned
* [#5543](https://github.com/netbox-community/netbox/issues/5543) - Fix rendering of config contexts with cluster assignment for devices
* [#5546](https://github.com/netbox-community/netbox/issues/5546) - Add custom field bulk edit support for cables, power panels, rack reservations, and virtual chassis
* [#5547](https://github.com/netbox-community/netbox/issues/5547) - Add custom field bulk import support for cables, power panels, rack reservations, and virtual chassis
* [#5551](https://github.com/netbox-community/netbox/issues/5551) - Restore missing import button on services list
* [#5557](https://github.com/netbox-community/netbox/issues/5557) - Fix VRF route target assignment via REST API
* [#5558](https://github.com/netbox-community/netbox/issues/5558) - Fix regex validation support for custom URL fields
* [#5563](https://github.com/netbox-community/netbox/issues/5563) - Fix power feed cable trace link
* [#5564](https://github.com/netbox-community/netbox/issues/5564) - Raise validation error if a power port template's `allocated_draw` exceeds its `maximum_draw`
* [#5569](https://github.com/netbox-community/netbox/issues/5569) - Ensure consistent labeling of interface `mgmt_only` field
* [#5573](https://github.com/netbox-community/netbox/issues/5573) - Report inconsistent values when migrating custom field data
---
## v2.10.2 (2020-12-21)
### Enhancements
* [#5489](https://github.com/netbox-community/netbox/issues/5489) - Add filters for type and width to racks list
* [#5496](https://github.com/netbox-community/netbox/issues/5496) - Add form field to filter rack reservation by user
### Bug Fixes
* [#5254](https://github.com/netbox-community/netbox/issues/5254) - Require plugin authors to set zip_safe=False
* [#5468](https://github.com/netbox-community/netbox/issues/5468) - Fix unlocking secrets from device/VM view
* [#5473](https://github.com/netbox-community/netbox/issues/5473) - Fix alignment of rack names in elevations list
* [#5478](https://github.com/netbox-community/netbox/issues/5478) - Fix display of route target description
* [#5484](https://github.com/netbox-community/netbox/issues/5484) - Fix "tagged" indication in VLAN members list
* [#5486](https://github.com/netbox-community/netbox/issues/5486) - Optimize retrieval of config context data for device/VM REST API views
* [#5487](https://github.com/netbox-community/netbox/issues/5487) - Support filtering rack type/width with multiple values
* [#5488](https://github.com/netbox-community/netbox/issues/5488) - Fix caching error when viewing cable trace after toggling cable status
* [#5498](https://github.com/netbox-community/netbox/issues/5498) - Fix filtering rack reservations by username
* [#5499](https://github.com/netbox-community/netbox/issues/5499) - Fix filtering of displayed device/VM interfaces by regex
* [#5507](https://github.com/netbox-community/netbox/issues/5507) - Fix custom field data assignment via UI for IP addresses, secrets
* [#5510](https://github.com/netbox-community/netbox/issues/5510) - Fix filtering by boolean custom fields
---
## v2.10.1 (2020-12-15)
### Bug Fixes
* [#5444](https://github.com/netbox-community/netbox/issues/5444) - Don't force overwriting of boolean fields when bulk editing interfaces
* [#5450](https://github.com/netbox-community/netbox/issues/5450) - API serializer foreign count fields do not have a default value
* [#5453](https://github.com/netbox-community/netbox/issues/5453) - Correct change log representation when creating a cable
* [#5458](https://github.com/netbox-community/netbox/issues/5458) - Creating a component template throws an exception
* [#5461](https://github.com/netbox-community/netbox/issues/5461) - Rack Elevations throw reverse match exception
* [#5463](https://github.com/netbox-community/netbox/issues/5463) - Back-to-back Circuit Termination throws AttributeError exception
* [#5465](https://github.com/netbox-community/netbox/issues/5465) - Correct return URL when disconnecting a cable from a device
* [#5466](https://github.com/netbox-community/netbox/issues/5466) - Fix validation for required custom fields
* [#5470](https://github.com/netbox-community/netbox/issues/5470) - Fix exception when making `OPTIONS` request for a REST API list endpoint
---
## v2.10.0 (2020-12-14)
**NOTE:** This release completely removes support for embedded graphs.
**NOTE:** The Django templating language (DTL) is no longer supported for export templates. Ensure that all export templates use Jinja2 before upgrading.
### New Features
#### Route Targets ([#259](https://github.com/netbox-community/netbox/issues/259))
This release introduces support for modeling L3VPN route targets, which can be used to control the redistribution of advertised prefixes among VRFs. Each VRF may be assigned one or more route targets in the import and/or export direction. Like VRFs, route targets may be assigned to tenants and support tag assignment.
#### REST API Bulk Deletion ([#3436](https://github.com/netbox-community/netbox/issues/3436))
The REST API now supports the bulk deletion of objects of the same type in a single request. Send a `DELETE` HTTP request to the list to the model's list endpoint (e.g. `/api/dcim/sites/`) with a list of JSON objects specifying the numeric ID of each object to be deleted. For example, to delete sites with IDs 10, 11, and 12, issue the following request:
```no-highlight
curl -s -X DELETE \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
http://netbox/api/dcim/sites/ \
--data '[{"id": 10}, {"id": 11}, {"id": 12}]'
```
#### REST API Bulk Update ([#4882](https://github.com/netbox-community/netbox/issues/4882))
Similar to bulk deletion, the REST API also now supports bulk updates. Send a `PUT` or `PATCH` HTTP request to the list to the model's list endpoint (e.g. `/api/dcim/sites/`) with a list of JSON objects specifying the numeric ID of each object and the attribute(s) to be updated. For example, to set a description for sites with IDs 10 and 11, issue the following request:
```no-highlight
curl -s -X PATCH \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
http://netbox/api/dcim/sites/ \
--data '[{"id": 10, "description": "Foo"}, {"id": 11, "description": "Bar"}]'
```
#### Reimplementation of Custom Fields ([#4878](https://github.com/netbox-community/netbox/issues/4878))
NetBox v2.10 introduces a completely overhauled approach to custom fields. Whereas previous versions used CustomFieldValue instances to store values, custom field data is now stored directly on each model instance as JSON data and may be accessed using the `cf` property:
```python
>>> site = Site.objects.first()
>>> site.cf
{'site_code': 'US-RAL01'}
>>> site.cf['foo'] = 'ABC'
>>> site.full_clean()
>>> site.save()
>>> site = Site.objects.first()
>>> site.cf
{'foo': 'ABC', 'site_code': 'US-RAL01'}
```
Additionally, custom selection field choices are now defined on the CustomField model within the admin UI, which greatly simplifies working with choice values.
#### Improved Cable Trace Performance ([#4900](https://github.com/netbox-community/netbox/issues/4900))
All end-to-end cable paths are now cached using the new CablePath backend model. This allows NetBox to now immediately return the complete path originating from any endpoint directly from the database, rather than having to trace each cable recursively. It also resolves some systemic validation issues present in the original implementation.
**Note:** As part of this change, cable traces will no longer traverse circuits: A circuit termination will be considered the origin or destination of an end-to-end path.
### Enhancements
* [#609](https://github.com/netbox-community/netbox/issues/609) - Add min/max value and regex validation for custom fields
* [#1503](https://github.com/netbox-community/netbox/issues/1503) - Allow assigment of secrets to virtual machines
* [#1692](https://github.com/netbox-community/netbox/issues/1692) - Allow assigment of inventory items to parent items in web UI
* [#2179](https://github.com/netbox-community/netbox/issues/2179) - Support the use of multiple port numbers when defining a service
* [#4897](https://github.com/netbox-community/netbox/issues/4897) - Allow filtering by content type identified as `<app>.<model>` string
* [#4918](https://github.com/netbox-community/netbox/issues/4918) - Add a REST API endpoint (`/api/status/`) which returns NetBox's current operational status
* [#4956](https://github.com/netbox-community/netbox/issues/4956) - Include inventory items on primary device view
* [#4967](https://github.com/netbox-community/netbox/issues/4967) - Support tenant assignment for aggregates
* [#5003](https://github.com/netbox-community/netbox/issues/5003) - CSV import now accepts slug values for choice fields
* [#5146](https://github.com/netbox-community/netbox/issues/5146) - Add custom field support for cables, power panels, rack reservations, and virtual chassis
* [#5154](https://github.com/netbox-community/netbox/issues/5154) - The web interface now consumes the entire browser window
* [#5190](https://github.com/netbox-community/netbox/issues/5190) - Add a REST API endpoint for retrieving content types (`/api/extras/content-types/`)
* [#5274](https://github.com/netbox-community/netbox/issues/5274) - Add REST API support for custom fields
* [#5399](https://github.com/netbox-community/netbox/issues/5399) - Show options for cable endpoint types during bulk import
* [#5411](https://github.com/netbox-community/netbox/issues/5411) - Include cable tags in trace view
### Other Changes
* [#1846](https://github.com/netbox-community/netbox/issues/1846) - Enable MPTT for InventoryItem hierarchy
* [#2755](https://github.com/netbox-community/netbox/issues/2755) - Switched from Font Awesome/Glyphicons to Material Design icons
* [#4349](https://github.com/netbox-community/netbox/issues/4349) - Dropped support for embedded graphs
* [#4360](https://github.com/netbox-community/netbox/issues/4360) - Dropped support for the Django template language from export templates
* [#4711](https://github.com/netbox-community/netbox/issues/4711) - Renamed Webhook `obj_type` to `content_types`
* [#4941](https://github.com/netbox-community/netbox/issues/4941) - `commit` argument is now required argument in a custom script's `run()` method
* [#5011](https://github.com/netbox-community/netbox/issues/5011) - Standardized name field lengths across all models
* [#5139](https://github.com/netbox-community/netbox/issues/5139) - Omit utilization statistics from RIR list
* [#5225](https://github.com/netbox-community/netbox/issues/5225) - Circuit termination port speed is now an optional field
### REST API Changes
* Added support for `PUT`, `PATCH`, and `DELETE` operations on list endpoints (bulk update and delete)
* Added the `/extras/content-types/` endpoint for Django ContentTypes
* Added the `/extras/custom-fields/` endpoint for custom fields
* Removed the `/extras/_custom_field_choices/` endpoint (replaced by new custom fields endpoint)
* Added the `/status/` endpoint to convey NetBox's current status
* circuits.CircuitTermination:
* Added the `/trace/` endpoint
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
* Added `cable_peer` and `cable_peer_type`
* `port_speed` may now be null
* dcim.Cable: Added `custom_fields`
* dcim.ConsolePort:
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
* Added `cable_peer` and `cable_peer_type`
* Removed `connection_status` from nested serializer
* dcim.ConsoleServerPort:
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
* Added `cable_peer` and `cable_peer_type`
* Removed `connection_status` from nested serializer
* dcim.FrontPort:
* Replaced the `/trace/` endpoint with `/paths/`, which returns a list of cable paths
* Added `cable_peer` and `cable_peer_type`
* dcim.Interface:
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
* Added `cable_peer` and `cable_peer_type`
* Removed `connection_status` from nested serializer
* dcim.InventoryItem: The `_depth` field has been added to reflect MPTT positioning
* dcim.PowerFeed:
* Added the `/trace/` endpoint
* Added fields `connected_endpoint`, `connected_endpoint_type`, `connected_endpoint_reachable`, `cable_peer`, and `cable_peer_type`
* dcim.PowerOutlet:
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
* Added `cable_peer` and `cable_peer_type`
* Removed `connection_status` from nested serializer
* dcim.PowerPanel: Added `custom_fields`
* dcim.PowerPort
* Replaced `connection_status` with `connected_endpoint_reachable` (boolean)
* Added `cable_peer` and `cable_peer_type`
* Removed `connection_status` from nested serializer
* dcim.RackReservation: Added `custom_fields`
* dcim.RearPort:
* Replaced the `/trace/` endpoint with `/paths/`, which returns a list of cable paths
* Added `cable_peer` and `cable_peer_type`
* dcim.VirtualChassis: Added `custom_fields`
* extras.ExportTemplate: The `template_language` field has been removed
* extras.Graph: This API endpoint has been removed (see #4349)
* extras.ImageAttachment: Filtering by `content_type` now takes a string in the form `<app>.<model>`
* extras.ObjectChange: Filtering by `changed_object_type` now takes a string in the form `<app>.<model>`
* ipam.Aggregate: Added `tenant` field
* ipam.RouteTarget: New endpoint
* ipam.Service: Renamed `port` to `ports`; now holds a list of one or more port numbers
* ipam.VRF: Added `import_targets` and `export_targets` fields
* secrets.Secret: Removed `device` field; replaced with `assigned_object` generic foreign key. This may represent either a device or a virtual machine. Assign an object by setting `assigned_object_type` and `assigned_object_id`.

View File

@@ -0,0 +1,337 @@
# NetBox v2.11
## v2.11.7 (2021-06-16)
### Enhancements
* [#6455](https://github.com/netbox-community/netbox/issues/6455) - Permit /32 IPv4 and /128 IPv6 prefixes
* [#6493](https://github.com/netbox-community/netbox/issues/6493) - Show change log diff for non-atomic (pre-2.11) changes
* [#6564](https://github.com/netbox-community/netbox/issues/6564) - Add N connector type for pass-through ports
* [#6588](https://github.com/netbox-community/netbox/issues/6588) - Add support for webp files as front/rear device type images
* [#6589](https://github.com/netbox-community/netbox/issues/6589) - Standardize breadcrumb navigation for power panels and feeds
### Bug Fixes
* [#6553](https://github.com/netbox-community/netbox/issues/6553) - ProviderNetwork search should match on name
* [#6562](https://github.com/netbox-community/netbox/issues/6562) - Disable ordering of secrets by assigned object
* [#6563](https://github.com/netbox-community/netbox/issues/6563) - Fix filtering by location for cable connection forms
* [#6584](https://github.com/netbox-community/netbox/issues/6584) - Fix ordering of nested inventory items
* [#6602](https://github.com/netbox-community/netbox/issues/6602) - Fix deletion of devices with cables attached
---
## v2.11.6 (2021-06-04)
### Bug Fixes
* [#6544](https://github.com/netbox-community/netbox/issues/6544) - Fix migration error when upgrading with VRF(s) defined
---
## v2.11.5 (2021-06-04)
**NOTE:** This release includes a database migration that calculates and annotates prefix depth. It may impose a noticeable delay on the upgrade process: Users should anticipate roughly one minute of delay per 100 thousand prefixes being updated.
### Enhancements
* [#6087](https://github.com/netbox-community/netbox/issues/6087) - Improved prefix hierarchy rendering
* [#6487](https://github.com/netbox-community/netbox/issues/6487) - Add location filter to cable connection form
* [#6501](https://github.com/netbox-community/netbox/issues/6501) - Expose prefix depth and children on REST API serializer
* [#6527](https://github.com/netbox-community/netbox/issues/6527) - Support Markdown for report descriptions
* [#6540](https://github.com/netbox-community/netbox/issues/6540) - Add a "flat" column to the prefix table
### Bug Fixes
* [#6064](https://github.com/netbox-community/netbox/issues/6064) - Fix object permission assignments for user and group models
* [#6217](https://github.com/netbox-community/netbox/issues/6217) - Disallow passing of string values for integer custom fields
* [#6284](https://github.com/netbox-community/netbox/issues/6284) - Avoid sending redundant webhooks when adding/removing tags
* [#6492](https://github.com/netbox-community/netbox/issues/6492) - Correct tag population in post-change data resulting from REST API changes
* [#6496](https://github.com/netbox-community/netbox/issues/6496) - Fix upgrade script when Python installed in nonstandard path
* [#6502](https://github.com/netbox-community/netbox/issues/6502) - Correct permissions evaluation for running a report via the REST API
* [#6517](https://github.com/netbox-community/netbox/issues/6517) - Fix assignment of user when creating rack reservations via REST API
* [#6525](https://github.com/netbox-community/netbox/issues/6525) - Paginate related IPs table under IP address view
---
## v2.11.4 (2021-05-25)
### Enhancements
* [#5121](https://github.com/netbox-community/netbox/issues/5121) - Add content type filters for tags
* [#6358](https://github.com/netbox-community/netbox/issues/6358) - Add search field for VLAN groups
* [#6393](https://github.com/netbox-community/netbox/issues/6393) - Add `description` filter for IP addresses
* [#6400](https://github.com/netbox-community/netbox/issues/6400) - Add cyan color choice for plugin buttons
* [#6422](https://github.com/netbox-community/netbox/issues/6422) - Enable filtering users by group under admin UI
* [#6441](https://github.com/netbox-community/netbox/issues/6441) - Improve UI paginator to optimize page object count
### Bug Fixes
* [#6376](https://github.com/netbox-community/netbox/issues/6376) - Fix assignment of VLAN groups to clusters, cluster groups via REST API
* [#6398](https://github.com/netbox-community/netbox/issues/6398) - Avoid exception when deleting device connected to self via circuit
* [#6426](https://github.com/netbox-community/netbox/issues/6426) - Allow assigning virtual chassis member interfaces to LAG on VC master
* [#6438](https://github.com/netbox-community/netbox/issues/6438) - Fix missing descriptions and label for device type imports and exports
* [#6465](https://github.com/netbox-community/netbox/issues/6465) - Fix typo in installed plugins REST API endpoint
* [#6467](https://github.com/netbox-community/netbox/issues/6467) - Fix access to metrics on custom `BASE_PATH` when login is required
* [#6468](https://github.com/netbox-community/netbox/issues/6468) - Disable ordering VLAN groups list by scope object
---
## v2.11.3 (2021-05-07)
### Enhancements
* [#6197](https://github.com/netbox-community/netbox/issues/6197) - Introduced `SESSION_COOKIE_NAME` config parameter
* [#6318](https://github.com/netbox-community/netbox/issues/6318) - Add OM5 MMF cable type
* [#6351](https://github.com/netbox-community/netbox/issues/6351) - Add aggregates count to tenant view
* [#6359](https://github.com/netbox-community/netbox/issues/6359) - Enable custom links for organizational and nested group models
### Bug Fixes
* [#6240](https://github.com/netbox-community/netbox/issues/6240) - Fix display of available VLAN ranges under VLAN group view
* [#6308](https://github.com/netbox-community/netbox/issues/6308) - Fix linking of available VLANs in VLAN group view
* [#6309](https://github.com/netbox-community/netbox/issues/6309) - Restrict parent VM interface assignment to the parent VM
* [#6312](https://github.com/netbox-community/netbox/issues/6312) - Interface device filter should return all virtual chassis interfaces only if device is master
* [#6313](https://github.com/netbox-community/netbox/issues/6313) - Fix device type instance count under manufacturer view
* [#6321](https://github.com/netbox-community/netbox/issues/6321) - Restore "add an IP" button under prefix IPs view
* [#6333](https://github.com/netbox-community/netbox/issues/6333) - Fix filtering of circuit terminations by primary key
* [#6339](https://github.com/netbox-community/netbox/issues/6339) - Improve ordering of interfaces when viewing virtual chassis master
* [#6350](https://github.com/netbox-community/netbox/issues/6350) - Include first & last IP addresses when allocating available IPv6 addresses via the REST API
* [#6355](https://github.com/netbox-community/netbox/issues/6355) - Fix caching error when swapping A/Z circuit terminations
* [#6357](https://github.com/netbox-community/netbox/issues/6357) - Fix ProviderNetwork nested API serializer
* [#6363](https://github.com/netbox-community/netbox/issues/6363) - Correct pre-population of cluster group when creating a cluster
* [#6369](https://github.com/netbox-community/netbox/issues/6369) - Fix interface assignment for VLANs in non-scoped groups
---
## v2.11.2 (2021-04-27)
### Enhancements
* [#6275](https://github.com/netbox-community/netbox/issues/6275) - Linkify rack, device counts on locations list
* [#6278](https://github.com/netbox-community/netbox/issues/6278) - Note device locations on cable traces
* [#6287](https://github.com/netbox-community/netbox/issues/6287) - Add option to clear assigned max length filter on prefixes list
### Bug Fixes
* [#6236](https://github.com/netbox-community/netbox/issues/6236) - Journal entry title should account for configured timezone
* [#6246](https://github.com/netbox-community/netbox/issues/6246) - Permit full-length descriptions when creating device components and VM interfaces
* [#6248](https://github.com/netbox-community/netbox/issues/6248) - Fix table column reconfiguration under Chrome
* [#6252](https://github.com/netbox-community/netbox/issues/6252) - Fix assignment of console port speed values above 19.2kbps
* [#6254](https://github.com/netbox-community/netbox/issues/6254) - Disable ordering of space column in racks table
* [#6258](https://github.com/netbox-community/netbox/issues/6258) - Fix parent assignment for SiteGroup API serializer
* [#6262](https://github.com/netbox-community/netbox/issues/6262) - Support filtering by created/updated time for all relevant objects
* [#6267](https://github.com/netbox-community/netbox/issues/6267) - Fix cable tracing API endpoint for circuit terminations
* [#6289](https://github.com/netbox-community/netbox/issues/6289) - Fix assignment of VC member interfaces to LAG interfaces
---
## v2.11.1 (2021-04-21)
### Enhancements
* [#6161](https://github.com/netbox-community/netbox/issues/6161) - Enable ordering of device component tables
* [#6179](https://github.com/netbox-community/netbox/issues/6179) - Enable natural ordering for virtual machines
* [#6189](https://github.com/netbox-community/netbox/issues/6189) - Add ability to search for locations by name or description
* [#6190](https://github.com/netbox-community/netbox/issues/6190) - Allow filtering devices with no location assigned
* [#6210](https://github.com/netbox-community/netbox/issues/6210) - Include child locations on location view
### Bug Fixes
* [#6184](https://github.com/netbox-community/netbox/issues/6184) - Fix parent object table column in prefix IP addresses list
* [#6188](https://github.com/netbox-community/netbox/issues/6188) - Support custom field filtering for regions, site groups, and locations
* [#6196](https://github.com/netbox-community/netbox/issues/6196) - Fix object list display for users with read-only permissions
* [#6215](https://github.com/netbox-community/netbox/issues/6215) - Restore tenancy section in virtual machine form
---
## v2.11.0 (2021-04-16)
**Note:** NetBox v2.11 is the last major release that will support Python 3.6. Beginning with NetBox v3.0, Python 3.7 or later will be required.
### Breaking Changes
* All objects now use numeric IDs in their UI view URLs instead of slugs. You may need to update external references to NetBox objects. (Note that this does _not_ affect the REST API.)
* The UI now uses numeric IDs when filtering object lists. You may need to update external links to filtered object lists. (Note that the slug- and name-based filters will continue to work, however the filter selection fields within the UI will not be automatically populated.)
* The RackGroup model has been renamed to Location (see [#4971](https://github.com/netbox-community/netbox/issues/4971)). Its REST API endpoint has changed from `/api/dcim/rack-groups/` to `/api/dcim/locations/`.
* The foreign key field `group` on dcim.Rack has been renamed to `location`.
* The foreign key field `site` on ipam.VLANGroup has been replaced with the `scope` generic foreign key (see [#5284](https://github.com/netbox-community/netbox/issues/5284)).
* Custom script ObjectVars no longer support the `queryset` parameter: Use `model` instead (see [#5995](https://github.com/netbox-community/netbox/issues/5995)).
### New Features
#### Journaling Support ([#151](https://github.com/netbox-community/netbox/issues/151))
NetBox now supports journaling for all primary objects. The journal is a collection of human-generated notes and comments about an object maintained for historical context. It supplements NetBox's change log to provide additional information about why changes have been made or to convey events which occur outside NetBox. Unlike the change log, in which records typically expire after some time, journal entries persist for the life of the associated object.
#### Parent Interface Assignments ([#1519](https://github.com/netbox-community/netbox/issues/1519))
Virtual device and VM interfaces can now be assigned to a "parent" interface by setting the `parent` field on the interface object. This is helpful for associating subinterfaces with their physical counterpart. For example, you might assign virtual interfaces Gi0/0.100 and Gi0/0.200 as children of the physical interface Gi0/0.
#### Pre- and Post-Change Snapshots in Webhooks ([#3451](https://github.com/netbox-community/netbox/issues/3451))
In conjunction with the newly improved change logging functionality ([#5913](https://github.com/netbox-community/netbox/issues/5913)), outgoing webhooks now include both pre- and post-change representations of the modified object. These are available in the rendering context as a dictionary named `snapshots` with keys `prechange` and `postchange`. For example, here are the abridged snapshots resulting from renaming a site and changing its status:
```json
"snapshots": {
"prechange": {
"name": "Site 1",
"slug": "site-1",
"status": "active",
...
},
"postchange": {
"name": "Site 2",
"slug": "site-2",
"status": "planned",
...
}
}
```
Note: The pre-change snapshot for a newly created will always be null, as will the post-change snapshot for a deleted object.
#### Mark as Connected Without a Cable ([#3648](https://github.com/netbox-community/netbox/issues/3648))
Cable termination objects (circuit terminations, power feeds, and most device components) can now be marked as "connected" without actually attaching a cable. This helps simplify the process of modeling an infrastructure boundary where we don't necessarily know or care what is connected to an attachment point, but still need to reflect the termination as being occupied.
In addition to the new `mark_connected` boolean field, the REST API representation of these objects now also includes a read-only boolean field named `_occupied`. This conveniently returns true if either a cable is attached or `mark_connected` is true.
#### Allow Assigning Devices to Locations ([#4971](https://github.com/netbox-community/netbox/issues/4971))
Devices can now be assigned to locations (formerly known as rack groups) within a site without needing to be assigned to a particular rack. This is handy for assigning devices to rooms or floors within a building where racks are not used. The `location` foreign key field has been added to the Device model to support this.
#### Dynamic Object Exports ([#4999](https://github.com/netbox-community/netbox/issues/4999))
When exporting a list of objects in NetBox, users now have the option of selecting the "current view". This will render CSV output matching the current configuration of the table being viewed. For example, if you modify the sites list to display only the site name, tenant, and status, the rendered CSV will include only these columns, and they will appear in the order chosen.
The legacy static export behavior has been retained to ensure backward compatibility for dependent integrations. However, users are strongly encouraged to adapt custom export templates where needed as this functionality will be removed in v3.0.
#### Variable Scope Support for VLAN Groups ([#5284](https://github.com/netbox-community/netbox/issues/5284))
In previous releases, VLAN groups could be assigned only to a site. To afford more flexibility in conveying the true scope of an L2 domain, a VLAN group can now be assigned to a region, site group (new in v2.11), site, location, or rack. VLANs assigned to a group will be available only to devices and virtual machines which exist within its scope.
For example, a VLAN within a group assigned to a location will be available only to devices assigned to that location (or one of its child locations), or to a rack within that location.
#### New Site Group Model ([#5892](https://github.com/netbox-community/netbox/issues/5892))
This release introduces the new SiteGroup model, which can be used to organize sites similar to the existing Region model. Whereas regions are intended for geographically arranging sites into countries, states, and so on, the new site group model can be used to organize sites by functional role or other arbitrary classification. Using regions and site groups in conjunction provides two dimensions along which sites can be organized, offering greater flexibility to the user.
#### Improved Change Logging ([#5913](https://github.com/netbox-community/netbox/issues/5913))
The ObjectChange model (which is used to record the creation, modification, and deletion of NetBox objects) now explicitly records the pre-change and post-change state of each object, rather than only the post-change state. This was done to present a more clear depiction of each change being made, and to prevent the erroneous association of a previous unlogged change with its successor.
#### Provider Network Modeling ([#5986](https://github.com/netbox-community/netbox/issues/5986))
A new provider network model has been introduced to represent the boundary of a network that exists outside the scope of NetBox. Each instance of this model must be assigned to a provider, and circuits can now terminate to either provider networks or to sites. The use of this model will likely be extended by future releases to support overlay and virtual circuit modeling.
### Enhancements
* [#4833](https://github.com/netbox-community/netbox/issues/4833) - Allow assigning config contexts by device type
* [#5344](https://github.com/netbox-community/netbox/issues/5344) - Add support for custom fields in tables
* [#5370](https://github.com/netbox-community/netbox/issues/5370) - Extend custom field support to organizational models
* [#5375](https://github.com/netbox-community/netbox/issues/5375) - Add `speed` attribute to console port models
* [#5401](https://github.com/netbox-community/netbox/issues/5401) - Extend custom field support to device component models
* [#5425](https://github.com/netbox-community/netbox/issues/5425) - Create separate tabs for VMs and devices under the cluster view
* [#5451](https://github.com/netbox-community/netbox/issues/5451) - Add support for multiple-selection custom fields
* [#5608](https://github.com/netbox-community/netbox/issues/5608) - Add REST API endpoint for custom links
* [#5610](https://github.com/netbox-community/netbox/issues/5610) - Add REST API endpoint for webhooks
* [#5757](https://github.com/netbox-community/netbox/issues/5757) - Add unique identifier to every object view
* [#5830](https://github.com/netbox-community/netbox/issues/5830) - Add `as_attachment` to ExportTemplate to control download behavior
* [#5848](https://github.com/netbox-community/netbox/issues/5848) - Filter custom fields by content type in format `<app_label>.<model>`
* [#5891](https://github.com/netbox-community/netbox/issues/5891) - Add `display` field to all REST API serializers
* [#5894](https://github.com/netbox-community/netbox/issues/5894) - Use primary keys when filtering object lists by related objects in the UI
* [#5895](https://github.com/netbox-community/netbox/issues/5895) - Rename RackGroup to Location
* [#5901](https://github.com/netbox-community/netbox/issues/5901) - Add `created` and `last_updated` fields to device component models
* [#5971](https://github.com/netbox-community/netbox/issues/5971) - Add dedicated views for organizational models
* [#5972](https://github.com/netbox-community/netbox/issues/5972) - Enable bulk editing for organizational models
* [#5975](https://github.com/netbox-community/netbox/issues/5975) - Allow partial (decimal) vCPU allocations for virtual machines
* [#6001](https://github.com/netbox-community/netbox/issues/6001) - Paginate component tables under device views
* [#6038](https://github.com/netbox-community/netbox/issues/6038) - Include tagged objects list on tag view
* [#6088](https://github.com/netbox-community/netbox/issues/6088) - Improved table configuration form
* [#6097](https://github.com/netbox-community/netbox/issues/6097) - Redirect old slug-based object views
* [#6125](https://github.com/netbox-community/netbox/issues/6125) - Add locations count to home page
* [#6146](https://github.com/netbox-community/netbox/issues/6146) - Add bulk disconnect support for power feeds
* [#6149](https://github.com/netbox-community/netbox/issues/6149) - Support image attachments for locations
### Bug Fixes (from v2.11-beta1)
* [#5583](https://github.com/netbox-community/netbox/issues/5583) - Eliminate redundant change records when adding/removing tags
* [#6100](https://github.com/netbox-community/netbox/issues/6100) - Fix VM interfaces table "add interfaces" link
* [#6104](https://github.com/netbox-community/netbox/issues/6104) - Fix location column on racks table
* [#6105](https://github.com/netbox-community/netbox/issues/6105) - Hide checkboxes for VMs under cluster VMs view
* [#6106](https://github.com/netbox-community/netbox/issues/6106) - Allow assigning a virtual interface as the parent of an existing interface
* [#6107](https://github.com/netbox-community/netbox/issues/6107) - Fix rack selection field on device form
* [#6110](https://github.com/netbox-community/netbox/issues/6110) - Fix handling of TemplateColumn values for table export
* [#6123](https://github.com/netbox-community/netbox/issues/6123) - Prevent device from being assigned to mismatched site and location
* [#6124](https://github.com/netbox-community/netbox/issues/6124) - Location `parent` filter should return all child locations (not just those directly assigned)
* [#6130](https://github.com/netbox-community/netbox/issues/6130) - Improve display of assigned models in custom fields list
* [#6155](https://github.com/netbox-community/netbox/issues/6155) - Fix admin links for plugins, background tasks
* [#6171](https://github.com/netbox-community/netbox/issues/6171) - Fix display of horizontally-scrolling object lists
* [#6173](https://github.com/netbox-community/netbox/issues/6173) - Fix assigned device/VM count when bulk editing/deleting device roles
* [#6176](https://github.com/netbox-community/netbox/issues/6176) - Correct position of MAC address field when creating VM interfaces
* [#6177](https://github.com/netbox-community/netbox/issues/6177) - Prevent VM interface from being assigned as its own parent
### Other Changes
* [#1638](https://github.com/netbox-community/netbox/issues/1638) - Migrate all primary keys to 64-bit integers
* [#5873](https://github.com/netbox-community/netbox/issues/5873) - Use numeric IDs in all object URLs
* [#5938](https://github.com/netbox-community/netbox/issues/5938) - Deprecated support for Python 3.6
* [#5990](https://github.com/netbox-community/netbox/issues/5990) - Deprecated `display_field` parameter for custom script ObjectVar and MultiObjectVar fields
* [#5995](https://github.com/netbox-community/netbox/issues/5995) - Dropped backward compatibility for `queryset` parameter on ObjectVar and MultiObjectVar (use `model` instead)
* [#6014](https://github.com/netbox-community/netbox/issues/6014) - Moved the virtual machine interfaces list to a separate view
* [#6071](https://github.com/netbox-community/netbox/issues/6071) - Cable traces now traverse circuits
### REST API Changes
* All primary keys are now 64-bit integers
* All model serializers now include a `display` field to be used for the presentation of an object to a human user
* All device components
* Added support for custom fields
* Added `created` and `last_updated` fields to track object creation and modification
* All device component templates
* Added `created` and `last_updated` fields to track object creation and modification
* All organizational models
* Added support for custom fields
* All cable termination models (cabled device components, power feeds, and circuit terminations)
* Added `mark_connected` boolean field to force connection status
* Added `_occupied` read-only boolean field as common attribute for determining whether an object is occupied
* Renamed RackGroup to Location
* The `/dcim/rack-groups/` endpoint is now `/dcim/locations/`
* circuits.CircuitTermination
* Added the `provider_network` field
* Removed the `connected_endpoint`, `connected_endpoint_type`, and `connected_endpoint_reachable` fields
* The `trace/` endpoint has been replaced with `paths/`
* circuits.ProviderNetwork
* Added the `/api/circuits/provider-networks/` endpoint
* dcim.Device
* Added the `location` field
* dcim.Interface
* Added the `parent` field
* dcim.PowerPanel
* Renamed `rack_group` field to `location`
* dcim.Rack
* Renamed `group` field to `location`
* dcim.Site
* Added the `group` foreign key field to SiteGroup
* dcim.SiteGroup
* Added the `/api/dcim/site-groups/` endpoint
* extras.ConfigContext
* Added the `site_groups` many-to-many field to track the assignment of ConfigContexts to SiteGroups
* extras.CustomField
* Added new custom field type: `multi-select`
* extras.CustomLink
* Added the `/api/extras/custom-links/` endpoint
* extras.ExportTemplate
* Added the `as_attachment` boolean field
* extras.ObjectChange
* Added the `prechange_data` field
* Renamed `object_data` to `postchange_data`
* extras.Webhook
* Added the `/api/extras/webhooks/` endpoint
* ipam.VLANGroup
* Added the `scope_type`, `scope_id`, and `scope` fields (`scope` is a generic foreign key)
* Dropped the `site` foreign key field
* virtualization.VirtualMachine
* `vcpus` has been changed from an integer to a decimal value
* virtualization.VMInterface
* Added the `parent` field

View File

@@ -196,7 +196,7 @@ Our second-most popular feature request has arrived! NetBox now supports the cre
#### Custom Validation Reports ([#1511](https://github.com/netbox-community/netbox/issues/1511))
Users can now create custom reports which are run to validate data in NetBox. Reports work very similar to Python unit tests: Each report inherits from NetBox's Report class and contains one or more test method. Reports can be run and retrieved via the web UI, API, or CLI. See [the docs](http://netbox.readthedocs.io/en/stable/miscellaneous/reports/) for more info.
Users can now create custom reports which are run to validate data in NetBox. Reports work very similar to Python unit tests: Each report inherits from NetBox's Report class and contains one or more test method. Reports can be run and retrieved via the web UI, API, or CLI. See [the docs](https://netbox.readthedocs.io/en/stable/miscellaneous/reports/) for more info.
### Enhancements

View File

@@ -1,5 +1,155 @@
# NetBox v2.9
## v2.9.11 (2020-12-11)
### Enhancements
* [#5424](https://github.com/netbox-community/netbox/issues/5424) - Allow passing Python code to `nbshell` using `--command`
* [#5439](https://github.com/netbox-community/netbox/issues/5439) - Add CS and SN fiber port types
### Bug Fixes
* [#5383](https://github.com/netbox-community/netbox/issues/5383) - Fix setting user password via REST API
* [#5396](https://github.com/netbox-community/netbox/issues/5396) - Fix uniqueness constraint for virtual machine names
* [#5387](https://github.com/netbox-community/netbox/issues/5387) - Fix error when rendering config contexts when objects have multiple tags assigned
* [#5407](https://github.com/netbox-community/netbox/issues/5407) - Add direct link to secret on secrets list
* [#5408](https://github.com/netbox-community/netbox/issues/5408) - Fix updating secrets without setting new plaintext
* [#5410](https://github.com/netbox-community/netbox/issues/5410) - Restore tags field on cable connection forms
* [#5433](https://github.com/netbox-community/netbox/issues/5433) - Exclude SVG files from front/rear image upload for device types (currently unsupported)
* [#5436](https://github.com/netbox-community/netbox/issues/5436) - Show assigned IP addresses in interfaces list
* [#5446](https://github.com/netbox-community/netbox/issues/5446) - Fix validation for plugin version and required settings
---
## v2.9.10 (2020-11-24)
### Enhancements
* [#5319](https://github.com/netbox-community/netbox/issues/5319) - Add USB types for power ports and outlets
* [#5337](https://github.com/netbox-community/netbox/issues/5337) - Add "splice" type for pass-through ports
### Bug Fixes
* [#5235](https://github.com/netbox-community/netbox/issues/5235) - Fix exception when editing IP address with a NAT IP assigned to a non-racked device
* [#5309](https://github.com/netbox-community/netbox/issues/5309) - Avoid extraneous database queries when manipulating objects
* [#5345](https://github.com/netbox-community/netbox/issues/5345) - Fix non-deterministic ordering of prefixes and IP addresses
* [#5350](https://github.com/netbox-community/netbox/issues/5350) - Filter available racks by selected group when creating a rack reservation
* [#5355](https://github.com/netbox-community/netbox/issues/5355) - Limit rack groups by selected site when editing a rack
* [#5356](https://github.com/netbox-community/netbox/issues/5356) - Populate manufacturer field when adding a device component template
* [#5360](https://github.com/netbox-community/netbox/issues/5360) - Clear VLAN assignments when setting interface mode to none
---
## v2.9.9 (2020-11-09)
### Enhancements
* [#5304](https://github.com/netbox-community/netbox/issues/5304) - Return server error messages as JSON when handling REST API requests
* [#5310](https://github.com/netbox-community/netbox/issues/5310) - Link to rack groups within rack list table
* [#5327](https://github.com/netbox-community/netbox/issues/5327) - Be more strict when capturing anticipated ImportError exceptions
### Bug Fixes
* [#5271](https://github.com/netbox-community/netbox/issues/5271) - Fix auto-population of region field when editing a device
* [#5314](https://github.com/netbox-community/netbox/issues/5314) - Fix config context rendering when multiple tags are assigned to an object
* [#5316](https://github.com/netbox-community/netbox/issues/5316) - Dry running scripts should not trigger webhooks
* [#5324](https://github.com/netbox-community/netbox/issues/5324) - Add missing template extension tags for plugins for VM interface view
* [#5328](https://github.com/netbox-community/netbox/issues/5328) - Fix CreatedUpdatedFilterTest when running in non-UTC timezone
* [#5331](https://github.com/netbox-community/netbox/issues/5331) - Fix filtering of sites by null region
---
## v2.9.8 (2020-10-30)
### Enhancements
* [#4559](https://github.com/netbox-community/netbox/issues/4559) - Improve device/VM context data rendering performance
### Bug Fixes
* [#3672](https://github.com/netbox-community/netbox/issues/3672) - Fix a caching issue causing incorrect related object counts in API responses
* [#5113](https://github.com/netbox-community/netbox/issues/5113) - Fix incorrect caching of permission object assignments to user groups in the admin panel
* [#5243](https://github.com/netbox-community/netbox/issues/5243) - Redirect user to appropriate tab after modifying device components
* [#5273](https://github.com/netbox-community/netbox/issues/5273) - Fix exception when validating a new permission with no models selected
* [#5282](https://github.com/netbox-community/netbox/issues/5282) - Fix high CPU load when LDAP authentication is enabled
* [#5285](https://github.com/netbox-community/netbox/issues/5285) - Plugins no longer need to define `app_name` for API URLs to be included in the root view
---
## v2.9.7 (2020-10-12)
### Bug Fixes
* [#5231](https://github.com/netbox-community/netbox/issues/5231) - Fix KeyError exception when viewing object with custom link and debugging is disabled
---
## v2.9.6 (2020-10-09)
### Bug Fixes
* [#5229](https://github.com/netbox-community/netbox/issues/5229) - Fix AttributeError exception when LDAP authentication is enabled
---
## v2.9.5 (2020-10-09)
### Enhancements
* [#5202](https://github.com/netbox-community/netbox/issues/5202) - Extend the available context data when rendering custom links
### Bug Fixes
* [#4523](https://github.com/netbox-community/netbox/issues/4523) - Populate site vlan list when bulk editing interfaces under certain circumstances
* [#5174](https://github.com/netbox-community/netbox/issues/5174) - Ensure consistent alignment of rack elevations
* [#5175](https://github.com/netbox-community/netbox/issues/5175) - Fix toggling of rack elevation order
* [#5184](https://github.com/netbox-community/netbox/issues/5184) - Fix missing Power Utilization
* [#5197](https://github.com/netbox-community/netbox/issues/5197) - Limit duplicate IPs shown on IP address view
* [#5199](https://github.com/netbox-community/netbox/issues/5199) - Change default LDAP logging to INFO
* [#5201](https://github.com/netbox-community/netbox/issues/5201) - Fix missing querystring when bulk editing/deleting VLAN Group VLANs when selecting "select all x items matching query"
* [#5206](https://github.com/netbox-community/netbox/issues/5206) - Apply user pagination preferences to all paginated object lists
* [#5211](https://github.com/netbox-community/netbox/issues/5211) - Add missing `has_primary_ip` filter for virtual machines
* [#5217](https://github.com/netbox-community/netbox/issues/5217) - Prevent erroneous removal of prefetched GenericForeignKey data from tables
* [#5218](https://github.com/netbox-community/netbox/issues/5218) - Raise validation error if a power port's `allocated_draw` exceeds its `maximum_draw`
* [#5220](https://github.com/netbox-community/netbox/issues/5220) - Fix API patch request against IP Address endpoint with null assigned_object_type
* [#5221](https://github.com/netbox-community/netbox/issues/5221) - Fix bulk component creation for virtual machines
* [#5224](https://github.com/netbox-community/netbox/issues/5224) - Don't allow a rear port to have fewer positions than the number of mapped front ports
* [#5226](https://github.com/netbox-community/netbox/issues/5226) - Custom choice fields should be blank initially if no default choice has been designated
---
## v2.9.4 (2020-09-23)
**NOTE:** This release removes support for the `DEFAULT_TIMEOUT` parameter under `REDIS` database configuration. Set `RQ_DEFAULT_TIMEOUT` as a global configuration parameter instead.
**NOTE:** Any permissions referencing the legacy ReportResult model (e.g. `extras.view_reportresult`) should be updated to reference the Report model.
### Enhancements
* [#1755](https://github.com/netbox-community/netbox/issues/1755) - Toggle order in which rack elevations are displayed
* [#5128](https://github.com/netbox-community/netbox/issues/5128) - Increase maximum rear port positions from 64 to 1024
* [#5134](https://github.com/netbox-community/netbox/issues/5134) - Display full hierarchy in breadcrumbs for sites/racks
* [#5149](https://github.com/netbox-community/netbox/issues/5149) - Add rack group field to device edit form
* [#5164](https://github.com/netbox-community/netbox/issues/5164) - Show total rack count per rack group under site view
* [#5171](https://github.com/netbox-community/netbox/issues/5171) - Introduce the `RQ_DEFAULT_TIMEOUT` configuration parameter
### Bug Fixes
* [#5050](https://github.com/netbox-community/netbox/issues/5050) - Fix potential failure on `0016_replicate_interfaces` schema migration from old release
* [#5066](https://github.com/netbox-community/netbox/issues/5066) - Update `view_reportresult` to `view_report` permission
* [#5075](https://github.com/netbox-community/netbox/issues/5075) - Include a VLAN membership view for VM interfaces
* [#5105](https://github.com/netbox-community/netbox/issues/5105) - Validation should fail when reassigning a primary IP from device to VM
* [#5109](https://github.com/netbox-community/netbox/issues/5109) - Fix representation of custom choice field values for webhook data
* [#5108](https://github.com/netbox-community/netbox/issues/5108) - Fix execution of reports via CLI
* [#5111](https://github.com/netbox-community/netbox/issues/5111) - Allow use of tuples when specifying ObjectVar `query_params`
* [#5118](https://github.com/netbox-community/netbox/issues/5118) - Specifying an empty list of tags should clear assigned tags (REST API)
* [#5133](https://github.com/netbox-community/netbox/issues/5133) - Fix disassociation of an IP address from a VM interface
* [#5136](https://github.com/netbox-community/netbox/issues/5136) - Fix exception when bulk editing interface 802.1Q mode
* [#5156](https://github.com/netbox-community/netbox/issues/5156) - Add missing "add" button to rack reservations list
* [#5167](https://github.com/netbox-community/netbox/issues/5167) - Support filtering ObjectChanges by multiple users
---
## v2.9.3 (2020-09-04)
### Enhancements
@@ -121,6 +271,7 @@ Two new REST API endpoints have been added to facilitate the retrieval and manip
* If using NetBox's built-in remote authentication backend, update `REMOTE_AUTH_BACKEND` to `'netbox.authentication.RemoteUserBackend'`, as the authentication class has moved.
* If using LDAP authentication, set `REMOTE_AUTH_BACKEND` to `'netbox.authentication.LDAPBackend'`. (LDAP configuration parameters in `ldap_config.py` remain unchanged.)
* `REMOTE_AUTH_DEFAULT_PERMISSIONS` now takes a dictionary rather than a list. This is a mapping of permission names to a dictionary of constraining attributes, or `None`. For example, `['dcim.add_site', 'dcim.change_site']` would become `{'dcim.add_site': None, 'dcim.change_site': None}`.
* Backward compatibility for the old `webhooks` Redis queue name has been dropped. Ensure that your `REDIS` configuration parameter specifies both the `tasks` and `caching` databases.
### REST API Changes

View File

@@ -1,2 +1,2 @@
mkdocs==1.1
mkdocs-material
git+https://github.com/cmacmackin/markdown-include.git

View File

@@ -20,7 +20,7 @@ http://netbox/api/dcim/sites/
}
```
A token is not required for read-only operations which have been exempted from permissions enforcement (using the [`EXEMPT_VIEW_PERMISSIONS`](../../configuration/optional-settings/#exempt_view_permissions) configuration parameter). However, if a token _is_ required but not present in a request, the API will return a 403 (Forbidden) response:
A token is not required for read-only operations which have been exempted from permissions enforcement (using the [`EXEMPT_VIEW_PERMISSIONS`](../configuration/optional-settings.md#exempt_view_permissions) configuration parameter). However, if a token _is_ required but not present in a request, the API will return a 403 (Forbidden) response:
```
$ curl http://netbox/api/dcim/sites/

View File

@@ -78,8 +78,8 @@ String based (char) fields (Name, Address, etc) support these lookup expressions
- `nisw` - negated case insensitive starts with
- `iew` - case insensitive ends with
- `niew` - negated case insensitive ends with
- `ie` - case sensitive exact match
- `nie` - negated case sensitive exact match
- `ie` - case insensitive exact match
- `nie` - negated case insensitive exact match
### Foreign Keys & Other Fields

View File

@@ -2,7 +2,7 @@
## What is a REST API?
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](http://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb:
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb:
* `GET`: Retrieve an object or list of objects
* `POST`: Create an object
@@ -269,7 +269,7 @@ The brief format is supported for both lists and individual objects.
### Excluding Config Contexts
When retrieving devices and virtual machines via the REST API, each will included its rendered [configuration context data](../models/extras/configcontext/) by default. Users with large amounts of context data will likely observe suboptimal performance when returning multiple objects, particularly with very high page sizes. To combat this, context data may be excluded from the response data by attaching the query parameter `?exclude=config_context` to the request. This parameter works for both list and detail views.
When retrieving devices and virtual machines via the REST API, each will included its rendered [configuration context data](../models/extras/configcontext.md) by default. Users with large amounts of context data will likely observe suboptimal performance when returning multiple objects, particularly with very high page sizes. To combat this, context data may be excluded from the response data by attaching the query parameter `?exclude=config_context` to the request. This parameter works for both list and detail views.
## Pagination
@@ -308,7 +308,7 @@ Vary: Accept
}
```
The default page is determined by the [`PAGINATE_COUNT`](../../configuration/optional-settings/#paginate_count) configuration parameter, which defaults to 50. However, this can be overridden per request by specifying the desired `offset` and `limit` query parameters. For example, if you wish to retrieve a hundred devices at a time, you would make a request for:
The default page is determined by the [`PAGINATE_COUNT`](../configuration/optional-settings.md#paginate_count) configuration parameter, which defaults to 50. However, this can be overridden per request by specifying the desired `offset` and `limit` query parameters. For example, if you wish to retrieve a hundred devices at a time, you would make a request for:
```
http://netbox/api/dcim/devices/?limit=100
@@ -325,7 +325,7 @@ The response will return devices 1 through 100. The URL provided in the `next` a
}
```
The maximum number of objects that can be returned is limited by the [`MAX_PAGE_SIZE`](../../configuration/optional-settings/#max_page_size) configuration parameter, which is 1000 by default. Setting this to `0` or `None` will remove the maximum limit. An API consumer can then pass `?limit=0` to retrieve _all_ matching objects with a single request.
The maximum number of objects that can be returned is limited by the [`MAX_PAGE_SIZE`](../configuration/optional-settings.md#max_page_size) configuration parameter, which is 1000 by default. Setting this to `0` or `None` will remove the maximum limit. An API consumer can then pass `?limit=0` to retrieve _all_ matching objects with a single request.
!!! warning
Disabling the page size limit introduces a potential for very resource-intensive requests, since one API request can effectively retrieve an entire table from the database.
@@ -387,7 +387,7 @@ curl -s -X GET http://netbox/api/ipam/ip-addresses/5618/ | jq '.'
### Creating a New Object
To create a new object, make a `POST` request to the model's _list_ endpoint with JSON data pertaining to the object being created. Note that a REST API token is required for all write operations; see the [authentication documentation](../authentication/) for more information. Also be sure to set the `Content-Type` HTTP header to `application/json`.
To create a new object, make a `POST` request to the model's _list_ endpoint with JSON data pertaining to the object being created. Note that a REST API token is required for all write operations; see the [authentication documentation](authentication.md) for more information. Also be sure to set the `Content-Type` HTTP header to `application/json`.
```no-highlight
curl -s -X POST \
@@ -468,16 +468,16 @@ http://netbox/api/dcim/sites/ \
]
```
### Modifying an Object
### Updating an Object
To modify an object which has already been created, make a `PATCH` request to the model's _detail_ endpoint specifying its unique numeric ID. Include any data which you wish to update on the object. As with object creation, the `Authorization` and `Content-Type` headers must also be specified.
```no-highlight
curl -s -X PATCH \
> -H "Authorization: Token $TOKEN" \
> -H "Content-Type: application/json" \
> http://netbox/api/ipam/prefixes/18691/ \
> --data '{"status": "reserved"}' | jq '.'
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
http://netbox/api/ipam/prefixes/18691/ \
--data '{"status": "reserved"}' | jq '.'
```
```json
@@ -515,6 +515,23 @@ curl -s -X PATCH \
!!! note "PUT versus PATCH"
The NetBox REST API support the use of either `PUT` or `PATCH` to modify an existing object. The difference is that a `PUT` request requires the user to specify a _complete_ representation of the object being modified, whereas a `PATCH` request need include only the attributes that are being updated. For most purposes, using `PATCH` is recommended.
### Updating Multiple Objects
Multiple objects can be updated simultaneously by issuing a `PUT` or `PATCH` request to a model's list endpoint with a list of dictionaries specifying the numeric ID of each object to be deleted and the attributes to be updated. For example, to update sites with IDs 10 and 11 to a status of "active", issue the following request:
```no-highlight
curl -s -X PATCH \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
http://netbox/api/dcim/sites/ \
--data '[{"id": 10, "status": "active"}, {"id": 11, "status": "active"}]'
```
Note that there is no requirement for the attributes to be identical among objects. For instance, it's possible to update the status of one site along with the name of another in the same request.
!!! note
The bulk update of objects is an all-or-none operation, meaning that if NetBox fails to successfully update any of the specified objects (e.g. due a validation error), the entire operation will be aborted and none of the objects will be updated.
### Deleting an Object
To delete an object from NetBox, make a `DELETE` request to the model's _detail_ endpoint specifying its unique numeric ID. The `Authorization` header must be included to specify an authorization token, however this type of request does not support passing any data in the body.
@@ -529,3 +546,18 @@ Note that `DELETE` requests do not return any data: If successful, the API will
!!! note
You can run `curl` with the verbose (`-v`) flag to inspect the HTTP response codes.
### Deleting Multiple Objects
NetBox supports the simultaneous deletion of multiple objects of the same type by issuing a `DELETE` request to the model's list endpoint with a list of dictionaries specifying the numeric ID of each object to be deleted. For example, to delete sites with IDs 10, 11, and 12, issue the following request:
```no-highlight
curl -s -X DELETE \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
http://netbox/api/dcim/sites/ \
--data '[{"id": 10}, {"id": 11}, {"id": 12}]'
```
!!! note
The bulk deletion of objects is an all-or-none operation, meaning that if NetBox fails to delete any of the specified objects (e.g. due a dependency by a related object), the entire operation will be aborted and none of the objects will be deleted.

View File

@@ -4,7 +4,7 @@ As with most other objects, the REST API can be used to view, create, modify, an
## Generating a Session Key
In order to encrypt or decrypt secret data, a session key must be attached to the API request. To generate a session key, send an authenticated request to the `/api/secrets/get-session-key/` endpoint with the private RSA key which matches your [UserKey](../../core-functionality/secrets/#user-keys). The private key must be POSTed with the name `private_key`.
In order to encrypt or decrypt secret data, a session key must be attached to the API request. To generate a session key, send an authenticated request to the `/api/secrets/get-session-key/` endpoint with the private RSA key which matches your [UserKey](../core-functionality/secrets.md#user-keys). The private key must be POSTed with the name `private_key`.
```no-highlight
$ curl -X POST http://netbox/api/secrets/get-session-key/ \

View File

@@ -5,14 +5,18 @@ python:
install:
- requirements: docs/requirements.txt
theme:
name: readthedocs
navigation_depth: 3
name: material
extra_css:
- extra.css
markdown_extensions:
- admonition:
- admonition
- markdown_include.include:
headingOffset: 1
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
- pymdownx.superfences
- pymdownx.tabbed
nav:
- Introduction: 'index.md'
- Installation:
@@ -49,7 +53,7 @@ nav:
- Custom Links: 'additional-features/custom-links.md'
- Custom Scripts: 'additional-features/custom-scripts.md'
- Export Templates: 'additional-features/export-templates.md'
- Graphs: 'additional-features/graphs.md'
- Journaling: 'additional-features/journaling.md'
- NAPALM: 'additional-features/napalm.md'
- Prometheus Metrics: 'additional-features/prometheus-metrics.md'
- Reports: 'additional-features/reports.md'
@@ -69,13 +73,16 @@ nav:
- Working with Secrets: 'rest-api/working-with-secrets.md'
- Development:
- Introduction: 'development/index.md'
- Getting Started: 'development/getting-started.md'
- Style Guide: 'development/style-guide.md'
- Utility Views: 'development/utility-views.md'
- Models: 'development/models.md'
- Extending Models: 'development/extending-models.md'
- Application Registry: 'development/application-registry.md'
- User Preferences: 'development/user-preferences.md'
- Release Checklist: 'development/release-checklist.md'
- Release Notes:
- Version 2.11: 'release-notes/version-2.11.md'
- Version 2.10: 'release-notes/version-2.10.md'
- Version 2.9: 'release-notes/version-2.9.md'
- Version 2.8: 'release-notes/version-2.8.md'
- Version 2.7: 'release-notes/version-2.7.md'

View File

@@ -1,16 +1,29 @@
from rest_framework import serializers
from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
from utilities.api import WritableNestedSerializer
from circuits.models import *
from netbox.api import WritableNestedSerializer
__all__ = [
'NestedCircuitSerializer',
'NestedCircuitTerminationSerializer',
'NestedCircuitTypeSerializer',
'NestedProviderNetworkSerializer',
'NestedProviderSerializer',
]
#
# Provider networks
#
class NestedProviderNetworkSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
class Meta:
model = ProviderNetwork
fields = ['id', 'url', 'display', 'name']
#
# Providers
#
@@ -21,7 +34,7 @@ class NestedProviderSerializer(WritableNestedSerializer):
class Meta:
model = Provider
fields = ['id', 'url', 'name', 'slug', 'circuit_count']
fields = ['id', 'url', 'display', 'name', 'slug', 'circuit_count']
#
@@ -34,7 +47,7 @@ class NestedCircuitTypeSerializer(WritableNestedSerializer):
class Meta:
model = CircuitType
fields = ['id', 'url', 'name', 'slug', 'circuit_count']
fields = ['id', 'url', 'display', 'name', 'slug', 'circuit_count']
class NestedCircuitSerializer(WritableNestedSerializer):
@@ -42,7 +55,7 @@ class NestedCircuitSerializer(WritableNestedSerializer):
class Meta:
model = Circuit
fields = ['id', 'url', 'cid']
fields = ['id', 'url', 'display', 'cid']
class NestedCircuitTerminationSerializer(WritableNestedSerializer):
@@ -51,4 +64,4 @@ class NestedCircuitTerminationSerializer(WritableNestedSerializer):
class Meta:
model = CircuitTermination
fields = ['id', 'url', 'circuit', 'term_side', 'cable']
fields = ['id', 'url', 'display', 'circuit', 'term_side', 'cable', '_occupied']

View File

@@ -1,13 +1,14 @@
from rest_framework import serializers
from circuits.choices import CircuitStatusChoices
from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
from dcim.api.nested_serializers import NestedCableSerializer, NestedInterfaceSerializer, NestedSiteSerializer
from dcim.api.serializers import ConnectedEndpointSerializer
from extras.api.customfields import CustomFieldModelSerializer
from extras.api.serializers import TaggedObjectSerializer
from circuits.models import *
from dcim.api.nested_serializers import NestedCableSerializer, NestedSiteSerializer
from dcim.api.serializers import CableTerminationSerializer, ConnectedEndpointSerializer
from netbox.api import ChoiceField
from netbox.api.serializers import (
BaseModelSerializer, OrganizationalModelSerializer, PrimaryModelSerializer, WritableNestedSerializer
)
from tenancy.api.nested_serializers import NestedTenantSerializer
from utilities.api import ChoiceField, ValidatedModelSerializer, WritableNestedSerializer
from .nested_serializers import *
@@ -15,15 +16,31 @@ from .nested_serializers import *
# Providers
#
class ProviderSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
class ProviderSerializer(PrimaryModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
circuit_count = serializers.IntegerField(read_only=True)
class Meta:
model = Provider
fields = [
'id', 'url', 'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments', 'tags',
'custom_fields', 'created', 'last_updated', 'circuit_count',
'id', 'url', 'display', 'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact',
'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'circuit_count',
]
#
# Provider networks
#
class ProviderNetworkSerializer(PrimaryModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
provider = NestedProviderSerializer()
class Meta:
model = ProviderNetwork
fields = [
'id', 'url', 'display', 'provider', 'name', 'description', 'comments', 'tags', 'custom_fields', 'created',
'last_updated',
]
@@ -31,26 +48,31 @@ class ProviderSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
# Circuits
#
class CircuitTypeSerializer(ValidatedModelSerializer):
class CircuitTypeSerializer(OrganizationalModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
circuit_count = serializers.IntegerField(read_only=True)
class Meta:
model = CircuitType
fields = ['id', 'url', 'name', 'slug', 'description', 'circuit_count']
fields = [
'id', 'url', 'display', 'name', 'slug', 'description', 'custom_fields', 'created', 'last_updated',
'circuit_count',
]
class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
site = NestedSiteSerializer()
connected_endpoint = NestedInterfaceSerializer()
provider_network = NestedProviderNetworkSerializer()
class Meta:
model = CircuitTermination
fields = ['id', 'url', 'site', 'connected_endpoint', 'port_speed', 'upstream_speed', 'xconnect_id']
fields = [
'id', 'url', 'display', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id',
]
class CircuitSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
class CircuitSerializer(PrimaryModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
provider = NestedProviderSerializer()
status = ChoiceField(choices=CircuitStatusChoices, required=False)
@@ -62,20 +84,23 @@ class CircuitSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
class Meta:
model = Circuit
fields = [
'id', 'url', 'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate', 'description',
'termination_a', 'termination_z', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
'id', 'url', 'display', 'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate',
'description', 'termination_a', 'termination_z', 'comments', 'tags', 'custom_fields', 'created',
'last_updated',
]
class CircuitTerminationSerializer(ConnectedEndpointSerializer):
class CircuitTerminationSerializer(BaseModelSerializer, CableTerminationSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
circuit = NestedCircuitSerializer()
site = NestedSiteSerializer()
site = NestedSiteSerializer(required=False)
provider_network = NestedProviderNetworkSerializer(required=False)
cable = NestedCableSerializer(read_only=True)
class Meta:
model = CircuitTermination
fields = [
'id', 'url', 'circuit', 'term_side', 'site', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info',
'description', 'connected_endpoint_type', 'connected_endpoint', 'connection_status', 'cable',
'id', 'url', 'display', 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed',
'xconnect_id', 'pp_info', 'description', 'mark_connected', 'cable', 'cable_peer', 'cable_peer_type',
'_occupied',
]

View File

@@ -1,4 +1,4 @@
from utilities.api import OrderedDefaultRouter
from netbox.api import OrderedDefaultRouter
from . import views
@@ -13,5 +13,8 @@ router.register('circuit-types', views.CircuitTypeViewSet)
router.register('circuits', views.CircuitViewSet)
router.register('circuit-terminations', views.CircuitTerminationViewSet)
# Provider networks
router.register('provider-networks', views.ProviderNetworkViewSet)
app_name = 'circuits-api'
urlpatterns = router.urls

View File

@@ -1,15 +1,11 @@
from django.db.models import Count, Prefetch
from django.shortcuts import get_object_or_404
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.routers import APIRootView
from circuits import filters
from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
from extras.api.serializers import RenderedGraphSerializer
from circuits import filtersets
from circuits.models import *
from dcim.api.views import PassThroughPortMixin
from extras.api.views import CustomFieldModelViewSet
from extras.models import Graph
from utilities.api import ModelViewSet
from netbox.api.views import ModelViewSet
from utilities.utils import count_related
from . import serializers
@@ -27,32 +23,22 @@ class CircuitsRootView(APIRootView):
class ProviderViewSet(CustomFieldModelViewSet):
queryset = Provider.objects.prefetch_related('tags').annotate(
circuit_count=Count('circuits')
).order_by(*Provider._meta.ordering)
circuit_count=count_related(Circuit, 'provider')
)
serializer_class = serializers.ProviderSerializer
filterset_class = filters.ProviderFilterSet
@action(detail=True)
def graphs(self, request, pk):
"""
A convenience method for rendering graphs for a particular provider.
"""
provider = get_object_or_404(self.queryset, pk=pk)
queryset = Graph.objects.restrict(request.user).filter(type__model='provider')
serializer = RenderedGraphSerializer(queryset, many=True, context={'graphed_object': provider})
return Response(serializer.data)
filterset_class = filtersets.ProviderFilterSet
#
# Circuit Types
#
class CircuitTypeViewSet(ModelViewSet):
class CircuitTypeViewSet(CustomFieldModelViewSet):
queryset = CircuitType.objects.annotate(
circuit_count=Count('circuits')
).order_by(*CircuitType._meta.ordering)
circuit_count=count_related(Circuit, 'type')
)
serializer_class = serializers.CircuitTypeSerializer
filterset_class = filters.CircuitTypeFilterSet
filterset_class = filtersets.CircuitTypeFilterSet
#
@@ -61,22 +47,30 @@ class CircuitTypeViewSet(ModelViewSet):
class CircuitViewSet(CustomFieldModelViewSet):
queryset = Circuit.objects.prefetch_related(
Prefetch('terminations', queryset=CircuitTermination.objects.prefetch_related(
'site', 'connected_endpoint__device'
)),
'type', 'tenant', 'provider',
'type', 'tenant', 'provider', 'termination_a', 'termination_z'
).prefetch_related('tags')
serializer_class = serializers.CircuitSerializer
filterset_class = filters.CircuitFilterSet
filterset_class = filtersets.CircuitFilterSet
#
# Circuit Terminations
#
class CircuitTerminationViewSet(ModelViewSet):
class CircuitTerminationViewSet(PassThroughPortMixin, ModelViewSet):
queryset = CircuitTermination.objects.prefetch_related(
'circuit', 'site', 'connected_endpoint__device', 'cable'
'circuit', 'site', 'provider_network', 'cable'
)
serializer_class = serializers.CircuitTerminationSerializer
filterset_class = filters.CircuitTerminationFilterSet
filterset_class = filtersets.CircuitTerminationFilterSet
brief_prefetch_fields = ['circuit']
#
# Provider networks
#
class ProviderNetworkViewSet(CustomFieldModelViewSet):
queryset = ProviderNetwork.objects.prefetch_related('tags')
serializer_class = serializers.ProviderNetworkSerializer
filterset_class = filtersets.ProviderNetworkFilterSet

View File

@@ -23,6 +23,15 @@ class CircuitStatusChoices(ChoiceSet):
(STATUS_DECOMMISSIONED, 'Decommissioned'),
)
CSS_CLASSES = {
STATUS_DEPROVISIONING: 'warning',
STATUS_ACTIVE: 'success',
STATUS_PLANNED: 'info',
STATUS_PROVISIONING: 'primary',
STATUS_OFFLINE: 'danger',
STATUS_DECOMMISSIONED: 'default',
}
#
# CircuitTerminations

View File

@@ -1,24 +1,25 @@
import django_filters
from django.db.models import Q
from dcim.models import Region, Site
from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
from tenancy.filters import TenancyFilterSet
from utilities.filters import (
BaseFilterSet, NameSlugSearchFilterSet, TagFilter, TreeNodeMultipleChoiceFilter
)
from dcim.filtersets import CableTerminationFilterSet
from dcim.models import Region, Site, SiteGroup
from extras.filters import TagFilter
from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
from tenancy.filtersets import TenancyFilterSet
from utilities.filters import TreeNodeMultipleChoiceFilter
from .choices import *
from .models import Circuit, CircuitTermination, CircuitType, Provider
from .models import *
__all__ = (
'CircuitFilterSet',
'CircuitTerminationFilterSet',
'CircuitTypeFilterSet',
'ProviderNetworkFilterSet',
'ProviderFilterSet',
)
class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
class ProviderFilterSet(PrimaryModelFilterSet):
q = django_filters.CharFilter(
method='search',
label='Search',
@@ -36,6 +37,19 @@ class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilte
to_field_name='slug',
label='Region (slug)',
)
site_group_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='circuits__terminations__site__group',
lookup_expr='in',
label='Site group (ID)',
)
site_group = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='circuits__terminations__site__group',
lookup_expr='in',
to_field_name='slug',
label='Site group (slug)',
)
site_id = django_filters.ModelMultipleChoiceFilter(
field_name='circuits__terminations__site',
queryset=Site.objects.all(),
@@ -65,14 +79,7 @@ class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilte
)
class CircuitTypeFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
class Meta:
model = CircuitType
fields = ['id', 'name', 'slug']
class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, CreatedUpdatedFilterSet):
class ProviderNetworkFilterSet(PrimaryModelFilterSet):
q = django_filters.CharFilter(
method='search',
label='Search',
@@ -87,6 +94,49 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr
to_field_name='slug',
label='Provider (slug)',
)
tag = TagFilter()
class Meta:
model = ProviderNetwork
fields = ['id', 'name']
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value) |
Q(description__icontains=value) |
Q(comments__icontains=value)
).distinct()
class CircuitTypeFilterSet(OrganizationalModelFilterSet):
class Meta:
model = CircuitType
fields = ['id', 'name', 'slug']
class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
q = django_filters.CharFilter(
method='search',
label='Search',
)
provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(),
label='Provider (ID)',
)
provider = django_filters.ModelMultipleChoiceFilter(
field_name='provider__slug',
queryset=Provider.objects.all(),
to_field_name='slug',
label='Provider (slug)',
)
provider_network_id = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__provider_network',
queryset=ProviderNetwork.objects.all(),
label='ProviderNetwork (ID)',
)
type_id = django_filters.ModelMultipleChoiceFilter(
queryset=CircuitType.objects.all(),
label='Circuit type (ID)',
@@ -101,17 +151,6 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr
choices=CircuitStatusChoices,
null_value=None
)
site_id = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site',
queryset=Site.objects.all(),
label='Site (ID)',
)
site = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site__slug',
queryset=Site.objects.all(),
to_field_name='slug',
label='Site (slug)',
)
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
field_name='terminations__site__region',
@@ -125,6 +164,30 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr
to_field_name='slug',
label='Region (slug)',
)
site_group_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='terminations__site__group',
lookup_expr='in',
label='Site group (ID)',
)
site_group = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='terminations__site__group',
lookup_expr='in',
to_field_name='slug',
label='Site group (slug)',
)
site_id = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site',
queryset=Site.objects.all(),
label='Site (ID)',
)
site = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site__slug',
queryset=Site.objects.all(),
to_field_name='slug',
label='Site (slug)',
)
tag = TagFilter()
class Meta:
@@ -144,7 +207,7 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr
).distinct()
class CircuitTerminationFilterSet(BaseFilterSet):
class CircuitTerminationFilterSet(ChangeLoggedModelFilterSet, CableTerminationFilterSet):
q = django_filters.CharFilter(
method='search',
label='Search',
@@ -163,10 +226,14 @@ class CircuitTerminationFilterSet(BaseFilterSet):
to_field_name='slug',
label='Site (slug)',
)
provider_network_id = django_filters.ModelMultipleChoiceFilter(
queryset=ProviderNetwork.objects.all(),
label='ProviderNetwork (ID)',
)
class Meta:
model = CircuitTermination
fields = ['term_side', 'port_speed', 'upstream_speed', 'xconnect_id']
fields = ['id', 'term_side', 'port_speed', 'upstream_speed', 'xconnect_id']
def search(self, queryset, name, value):
if not value.strip():

View File

@@ -1,6 +1,7 @@
from django import forms
from django.utils.translation import gettext as _
from dcim.models import Region, Site
from dcim.models import Region, Site, SiteGroup
from extras.forms import (
AddRemoveTagsForm, CustomFieldBulkEditForm, CustomFieldFilterForm, CustomFieldModelForm, CustomFieldModelCSVForm,
)
@@ -8,12 +9,12 @@ from extras.models import Tag
from tenancy.forms import TenancyFilterForm, TenancyForm
from tenancy.models import Tenant
from utilities.forms import (
add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField, CSVModelChoiceField, CSVModelForm, DatePicker,
DynamicModelChoiceField, DynamicModelMultipleChoiceField, SmallTextarea, SlugField, StaticSelect2,
StaticSelect2Multiple, TagFilterField,
add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField, CSVModelChoiceField, DatePicker,
DynamicModelChoiceField, DynamicModelMultipleChoiceField, SelectSpeedWidget, SmallTextarea, SlugField,
StaticSelect2, StaticSelect2Multiple, TagFilterField,
)
from .choices import CircuitStatusChoices
from .models import Circuit, CircuitTermination, CircuitType, Provider
from .models import *
#
@@ -33,6 +34,10 @@ class ProviderForm(BootstrapMixin, CustomFieldModelForm):
fields = [
'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments', 'tags',
]
fieldsets = (
('Provider', ('name', 'slug', 'asn', 'tags')),
('Support Info', ('account', 'portal_url', 'noc_contact', 'admin_contact')),
)
widgets = {
'noc_contact': SmallTextarea(
attrs={'rows': 5}
@@ -101,24 +106,101 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm):
model = Provider
q = forms.CharField(
required=False,
label='Search'
label=_('Search')
)
region = DynamicModelMultipleChoiceField(
region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
required=False,
label=_('Region')
)
site = DynamicModelMultipleChoiceField(
site_id = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(),
to_field_name='slug',
required=False,
query_params={
'region': '$region'
}
'region_id': '$region_id'
},
label=_('Site')
)
asn = forms.IntegerField(
required=False,
label='ASN'
label=_('ASN')
)
tag = TagFilterField(model)
#
# Provider networks
#
class ProviderNetworkForm(BootstrapMixin, CustomFieldModelForm):
provider = DynamicModelChoiceField(
queryset=Provider.objects.all()
)
comments = CommentField()
tags = DynamicModelMultipleChoiceField(
queryset=Tag.objects.all(),
required=False
)
class Meta:
model = ProviderNetwork
fields = [
'provider', 'name', 'description', 'comments', 'tags',
]
fieldsets = (
('Provider Network', ('provider', 'name', 'description', 'tags')),
)
class ProviderNetworkCSVForm(CustomFieldModelCSVForm):
provider = CSVModelChoiceField(
queryset=Provider.objects.all(),
to_field_name='name',
help_text='Assigned provider'
)
class Meta:
model = ProviderNetwork
fields = [
'provider', 'name', 'description', 'comments',
]
class ProviderNetworkBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditForm):
pk = forms.ModelMultipleChoiceField(
queryset=ProviderNetwork.objects.all(),
widget=forms.MultipleHiddenInput
)
provider = DynamicModelChoiceField(
queryset=Provider.objects.all(),
required=False
)
description = forms.CharField(
max_length=100,
required=False
)
comments = CommentField(
widget=SmallTextarea,
label='Comments'
)
class Meta:
nullable_fields = [
'description', 'comments',
]
class ProviderNetworkFilterForm(BootstrapMixin, CustomFieldFilterForm):
model = ProviderNetwork
field_order = ['q', 'provider_id']
q = forms.CharField(
required=False,
label=_('Search')
)
provider_id = DynamicModelMultipleChoiceField(
queryset=Provider.objects.all(),
required=False,
label=_('Provider')
)
tag = TagFilterField(model)
@@ -127,7 +209,7 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm):
# Circuit types
#
class CircuitTypeForm(BootstrapMixin, forms.ModelForm):
class CircuitTypeForm(BootstrapMixin, CustomFieldModelForm):
slug = SlugField()
class Meta:
@@ -137,7 +219,21 @@ class CircuitTypeForm(BootstrapMixin, forms.ModelForm):
]
class CircuitTypeCSVForm(CSVModelForm):
class CircuitTypeBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
pk = forms.ModelMultipleChoiceField(
queryset=CircuitType.objects.all(),
widget=forms.MultipleHiddenInput
)
description = forms.CharField(
max_length=200,
required=False
)
class Meta:
nullable_fields = ['description']
class CircuitTypeCSVForm(CustomFieldModelCSVForm):
slug = SlugField()
class Meta:
@@ -171,6 +267,10 @@ class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
'cid', 'type', 'provider', 'status', 'install_date', 'commit_rate', 'description', 'tenant_group', 'tenant',
'comments', 'tags',
]
fieldsets = (
('Circuit', ('provider', 'cid', 'type', 'status', 'install_date', 'commit_rate', 'description', 'tags')),
('Tenancy', ('tenant_group', 'tenant')),
)
help_texts = {
'cid': "Unique circuit ID",
'commit_rate': "Committed rate",
@@ -178,6 +278,7 @@ class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
widgets = {
'status': StaticSelect2(),
'install_date': DatePicker(),
'commit_rate': SelectSpeedWidget(),
}
@@ -256,44 +357,53 @@ class CircuitBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEdit
class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
model = Circuit
field_order = [
'q', 'type', 'provider', 'status', 'region', 'site', 'tenant_group', 'tenant', 'commit_rate',
'q', 'type_id', 'provider_id', 'provider_network_id', 'status', 'region_id', 'site_id', 'tenant_group_id', 'tenant_id',
'commit_rate',
]
q = forms.CharField(
required=False,
label='Search'
label=_('Search')
)
type = DynamicModelMultipleChoiceField(
type_id = DynamicModelMultipleChoiceField(
queryset=CircuitType.objects.all(),
to_field_name='slug',
required=False
required=False,
label=_('Type')
)
provider = DynamicModelMultipleChoiceField(
provider_id = DynamicModelMultipleChoiceField(
queryset=Provider.objects.all(),
to_field_name='slug',
required=False
required=False,
label=_('Provider')
)
provider_network_id = DynamicModelMultipleChoiceField(
queryset=ProviderNetwork.objects.all(),
required=False,
query_params={
'provider_id': '$provider_id'
},
label=_('Provider network')
)
status = forms.MultipleChoiceField(
choices=CircuitStatusChoices,
required=False,
widget=StaticSelect2Multiple()
)
region = DynamicModelMultipleChoiceField(
region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
required=False,
label=_('Region')
)
site = DynamicModelMultipleChoiceField(
site_id = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(),
to_field_name='slug',
required=False,
query_params={
'region': '$region'
}
'region_id': '$region_id'
},
label=_('Site')
)
commit_rate = forms.IntegerField(
required=False,
min_value=0,
label='Commit rate (Kbps)'
label=_('Commit rate (Kbps)')
)
tag = TagFilterField(model)
@@ -303,14 +413,38 @@ class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm
#
class CircuitTerminationForm(BootstrapMixin, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site_group = DynamicModelChoiceField(
queryset=SiteGroup.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField(
queryset=Site.objects.all()
queryset=Site.objects.all(),
query_params={
'region_id': '$region',
'group_id': '$site_group',
},
required=False
)
provider_network = DynamicModelChoiceField(
queryset=ProviderNetwork.objects.all(),
required=False
)
class Meta:
model = CircuitTermination
fields = [
'term_side', 'site', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description',
'term_side', 'region', 'site_group', 'site', 'provider_network', 'mark_connected', 'port_speed',
'upstream_speed', 'xconnect_id', 'pp_info', 'description',
]
help_texts = {
'port_speed': "Physical circuit speed",
@@ -319,4 +453,11 @@ class CircuitTerminationForm(BootstrapMixin, forms.ModelForm):
}
widgets = {
'term_side': forms.HiddenInput(),
'port_speed': SelectSpeedWidget(),
'upstream_speed': SelectSpeedWidget(),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['provider_network'].widget.add_query_param('provider_id', self.instance.circuit.provider_id)

View File

@@ -0,0 +1,22 @@
import django.core.serializers.json
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('circuits', '0019_nullbooleanfield_to_booleanfield'),
]
operations = [
migrations.AddField(
model_name='circuit',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
),
migrations.AddField(
model_name='provider',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
),
]

View File

@@ -0,0 +1,49 @@
import sys
from django.db import migrations, models
import django.db.models.deletion
def cache_cable_peers(apps, schema_editor):
ContentType = apps.get_model('contenttypes', 'ContentType')
Cable = apps.get_model('dcim', 'Cable')
CircuitTermination = apps.get_model('circuits', 'CircuitTermination')
if 'test' not in sys.argv:
print(f"\n Updating circuit termination cable peers...", flush=True)
ct = ContentType.objects.get_for_model(CircuitTermination)
for cable in Cable.objects.filter(termination_a_type=ct):
CircuitTermination.objects.filter(pk=cable.termination_a_id).update(
_cable_peer_type_id=cable.termination_b_type_id,
_cable_peer_id=cable.termination_b_id
)
for cable in Cable.objects.filter(termination_b_type=ct):
CircuitTermination.objects.filter(pk=cable.termination_b_id).update(
_cable_peer_type_id=cable.termination_a_type_id,
_cable_peer_id=cable.termination_a_id
)
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('circuits', '0020_custom_field_data'),
]
operations = [
migrations.AddField(
model_name='circuittermination',
name='_cable_peer_id',
field=models.PositiveIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='circuittermination',
name='_cable_peer_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'),
),
migrations.RunPython(
code=cache_cable_peers,
reverse_code=migrations.RunPython.noop
),
]

View File

@@ -0,0 +1,26 @@
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('dcim', '0121_cablepath'),
('circuits', '0021_cache_cable_peer'),
]
operations = [
migrations.AddField(
model_name='circuittermination',
name='_path',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'),
),
migrations.RemoveField(
model_name='circuittermination',
name='connected_endpoint',
),
migrations.RemoveField(
model_name='circuittermination',
name='connection_status',
),
]

Some files were not shown because too many files have changed in this diff Show More