Compare commits

...

1045 Commits

Author SHA1 Message Date
Jeremy Stretch
bac3ace8fc Merge pull request #4762 from netbox-community/develop
Release v2.8.6
2020-06-15 14:45:01 -04:00
Jeremy Stretch
60deb3f0ba Release v2.8.6 2020-06-15 14:37:36 -04:00
Jeremy Stretch
eaaaaec5a5 Fixes #4710: Fix merging of form fields among custom scripts 2020-06-15 14:20:00 -04:00
Jeremy Stretch
5bcf85e57d Closes #4744: Hide IP addresses tab when viewing a container prefix 2020-06-15 13:33:16 -04:00
Jeremy Stretch
1d466d6fd1 Closes #4761: Enable tag assignment during bulk creation of IP addresses 2020-06-15 13:24:34 -04:00
Jeremy Stretch
57cfb4ed7e Fixes #4760: Enable power port template assignment when bulk editing power outlet templates 2020-06-15 13:18:26 -04:00
Jeremy Stretch
9fa4cbdfa5 Correction for #4756 2020-06-15 12:43:08 -04:00
Jeremy Stretch
5af2b3c2f5 Closes #4717: Introduce ALLOWED_URL_SCHEMES configuration parameter to mitigate dangerous hyperlinks 2020-06-15 11:53:47 -04:00
Jeremy Stretch
2e5058c4c9 Fixes #4756: Filter parent group by site when creating rack groups 2020-06-15 10:02:35 -04:00
Jeremy Stretch
9fc4a4f24a Closes #4755: Enable creation of rack reservations directly from navigation menu 2020-06-12 15:11:27 -04:00
Jeremy Stretch
9fd36279ab Fixes #4743: Allow users to create "next available" IPs without needing permission to create prefixes 2020-06-10 16:06:11 -04:00
Jeremy Stretch
40947f8cb2 Merge pull request #4734 from tyler-8/bulk_api_docs
Add example of bulk object creation in documentation
2020-06-10 11:39:44 -04:00
Jeremy Stretch
9abc67bbeb Fixes #4737: Introduce ColoredLabelColumn for consistent display of colored labels 2020-06-10 11:38:23 -04:00
Jeremy Stretch
16cdf3006f Fixes #4736: Add cable trace endpoints for pass-through ports 2020-06-09 15:12:10 -04:00
Jeremy Stretch
15004c654f Add missing API cable trace test for interfaces 2020-06-09 14:47:05 -04:00
Tyler Bigler
062a319a7c Add example of bulk object creation 2020-06-09 13:35:44 -04:00
Jeremy Stretch
ed9ca270a7 Add missing API tests for pass-through port templates 2020-06-09 13:24:07 -04:00
Jeremy Stretch
20ec700045 Changelog for #4674 2020-06-08 17:00:47 -04:00
Jeremy Stretch
ecd3963b7c Merge pull request #4718 from netbox-community/4674-drf_yasg_definitions
Fixes #4674 - Fix available-ips and available-prefixes swagger definitions
2020-06-08 16:59:04 -04:00
Jeremy Stretch
1ea368856b Merge pull request #4728 from netbox-community/4722-api-tests
Closes #4722: Standardize API view tests
2020-06-08 10:16:10 -04:00
Jeremy Stretch
a8077e6ed1 Extend assertInstanceEqual() to accommodate REST API data 2020-06-08 09:47:14 -04:00
Jeremy Stretch
7def37961a Correct exempted test methods on InterfaceTestCase 2020-06-05 16:17:10 -04:00
Jeremy Stretch
4f830c9c22 Fix list_brief tests 2020-06-05 16:09:55 -04:00
Jeremy Stretch
032f87caec Merge branch 'develop' into 4722-api-tests 2020-06-05 15:50:14 -04:00
Jeremy Stretch
e616aad911 Fixes #4725: Fix "brief" rendering of various REST API endpoints 2020-06-05 15:49:06 -04:00
Jeremy Stretch
c2f6f5a7cd Fix ProviderTest 2020-06-05 15:18:18 -04:00
Jeremy Stretch
d3fbaca228 Standardize virtualization API tests 2020-06-05 15:06:08 -04:00
Jeremy Stretch
ae913f14ce Standardize tenancy API tests 2020-06-05 14:30:01 -04:00
Jeremy Stretch
1ee79ee61e Standardize SecretRoleTest 2020-06-05 14:18:38 -04:00
Jeremy Stretch
b5ebfd0b07 Standardize IPAM API tests 2020-06-05 14:09:54 -04:00
Jeremy Stretch
665646707c Standardize extras API tests 2020-06-05 13:41:54 -04:00
Jeremy Stretch
279ae7ea10 Standardize DCIM API tests 2020-06-05 13:23:33 -04:00
Jeremy Stretch
8cc1dc9f1c Fix update data 2020-06-05 10:05:54 -04:00
Jeremy Stretch
86e5a09b01 Optimize test_get_provider_graphs() 2020-06-05 09:36:38 -04:00
Jeremy Stretch
1d5f2fbd11 Correct test method name 2020-06-05 09:19:31 -04:00
Jeremy Stretch
4219691e62 Update circuits API tests to use APIViewTestCases 2020-06-04 16:47:15 -04:00
Jeremy Stretch
4ae1879b87 Introduce APIViewTestCases for standardized API view testing 2020-06-04 16:45:03 -04:00
Jeremy Stretch
d2dce6db25 Merge pull request #4719 from netbox-community/4715-avoid-unnecessary-queries
Fixes #4715: Avoid unnecessary queries in Cable.from_db
2020-06-04 13:13:17 -04:00
Jeremy Stretch
fae115b995 Closes #4698: Improve display of template code for object in admin UI 2020-06-04 13:11:24 -04:00
Sander Steffann
8f9dcf5a97 Avoid unnecessary queries in Cable.from_db 2020-06-04 17:46:09 +02:00
Jeremy Stretch
91ba44cc96 Add local_requirements.txt to .gitignore 2020-06-04 11:44:16 -04:00
Daniel Sheppard
5330914431 #4674 - Correct many=False to many=True on the response serializers 2020-06-04 09:42:00 -05:00
Daniel Sheppard
927c012fc9 #4674 - Fix available-ips and available-prefixes swagger definitions 2020-06-04 09:35:58 -05:00
Jeremy Stretch
56f6698ba5 Fixes #4707: Fix prefix_count population on VLAN API serializer 2020-06-02 13:40:14 -04:00
Jeremy Stretch
edf15532d2 Fixes #4702: Catch IntegrityError exception when adding a non-unique secret 2020-06-01 10:00:32 -04:00
Jeremy Stretch
d23b18beb5 Fixes #4704: Update example template code 2020-06-01 09:40:58 -04:00
Jeremy Stretch
56b7ab1734 Post-release version bump 2020-05-26 16:30:36 -04:00
Jeremy Stretch
68599351aa Merge pull request #4693 from netbox-community/develop
Release v2.8.5
2020-05-26 16:27:36 -04:00
Jeremy Stretch
c9a7527f33 Release v2.8.5 2020-05-26 16:17:01 -04:00
Jeremy Stretch
5f9b25453d Merge pull request #4692 from netbox-community/4525-objectvar-initial-data
Fixes #4525: Allow passing initial data to custom script MultiObjectVar
2020-05-26 15:54:25 -04:00
Jeremy Stretch
ccc31b2c7c Fixes #4525: Allow passing initial data to custom script MultiObjectVar 2020-05-26 15:34:29 -04:00
Jeremy Stretch
e54d441433 Remove "disable plugins" from bug report to prevent irrelevant search results 2020-05-26 10:06:46 -04:00
Jeremy Stretch
88cffca270 Closes #4650: Expose INTERNAL_IPS configuration parameter 2020-05-26 10:01:49 -04:00
Jeremy Stretch
92f49b4711 Closes #4672: Set default color for rack and devices roles 2020-05-26 09:36:27 -04:00
Jeremy Stretch
faf3885775 Merge pull request #4689 from kobayashi/4684-devicetype-import-comment
Fixes #4684: Fix ignored comment when importing DeviceType
2020-05-26 09:12:14 -04:00
Jeremy Stretch
f04340679e Merge branch 'develop' into 4684-devicetype-import-comment 2020-05-26 09:11:50 -04:00
Jeremy Stretch
7f5583c7ae Merge pull request #4690 from kobayashi/4676-docs-default-remote-auth
Closes #4676: Set `False` as default value of REMOTE_AUTH_AUTO_CREATE_USER
2020-05-26 09:07:26 -04:00
Jeremy Stretch
a5785552d9 Changelog for #4651, #4652 2020-05-26 09:05:18 -04:00
Jeremy Stretch
abcd26da43 Merge pull request #4682 from netbox-community/4651-csrf-in-plugintemplateextension
4651: Add `csrf_token` to PluginTemplateExtension context
2020-05-26 09:03:07 -04:00
Jeremy Stretch
4545c15173 Merge branch 'develop' into 4651-csrf-in-plugintemplateextension 2020-05-26 09:02:39 -04:00
Jeremy Stretch
b7cf85e8c8 Merge pull request #4681 from netbox-community/4652-perms-in-plugintemplateextension
4652: Add `perms` to PluginTemplateExtension context
2020-05-26 09:02:08 -04:00
kobayashi
9cde377133 Closes #4676: Set default value of REMOTE_AUTH_AUTO_CREATE_USER as False in docs 2020-05-26 01:26:26 -04:00
kobayashi
74c29b0bb7 Fixes #4684: Fix ignored comment when importing DeviceType 2020-05-26 01:17:10 -04:00
Sander Steffann
ff3b348771 Add csrf_token to PluginTemplateExtension context 2020-05-22 22:28:04 +02:00
Sander Steffann
27700d316f Add perms to PluginTemplateExtension context 2020-05-22 22:24:39 +02:00
Jeremy Stretch
1f5d2520c3 Formatting fix 2020-05-20 10:37:26 -04:00
Jeremy Stretch
d2e1428c75 Closes #4665: Add NEMA L14 and L21 power port/outlet types 2020-05-20 09:36:55 -04:00
Jeremy Stretch
cd236aa886 Closes #4645: Update minimum required version of PostgreSQL to 9.6 2020-05-15 10:11:36 -04:00
Jeremy Stretch
3c8e7e739d Fixes #4649: Fix interface assignment for bulk-imported IP addresses 2020-05-15 09:44:00 -04:00
Jeremy Stretch
a64351279d Fixes #4648: Fix bulk CSV import of child devices 2020-05-15 09:36:16 -04:00
Jeremy Stretch
ba91b3aa2e Fixes #4646: Correct UI link for reports with custom name 2020-05-15 09:13:51 -04:00
Jeremy Stretch
8394ff5537 Fixes #4644: Fix ordering of services table by parent 2020-05-15 09:02:56 -04:00
John Anderson
14744da8f6 fixes #4647 - caching invalidation related to assinging new IP addresses to interfaces 2020-05-15 02:45:48 -04:00
John Anderson
2c2d6c6d47 fixes #3304 - primary IP address caching invalidation 2020-05-15 02:31:45 -04:00
Jeremy Stretch
422eeddbef Post-release version bump 2020-05-13 17:32:27 -04:00
Jeremy Stretch
86755029ef Merge pull request #4642 from netbox-community/develop
Release v2.8.4
2020-05-13 17:31:12 -04:00
Jeremy Stretch
2900013118 Release v2.8.4 2020-05-13 17:24:25 -04:00
Jeremy Stretch
cfe8882f72 Merge pull request #4623 from tyler-8/metrics_docs
Notes on multiprocessing metrics and gunicorn vs uwsgi
2020-05-13 17:17:26 -04:00
Tyler Bigler
29abcbced8 Grammar improvements 2020-05-13 17:13:41 -04:00
Jeremy Stretch
e0ebb8e7d8 Fixes #4617: Restore IP prefix depth notation in list view 2020-05-13 17:08:48 -04:00
Tyler Bigler
96e05fb12d Notes on multiprocessing and gunicorn vs uwsgi 2020-05-13 17:07:32 -04:00
Jeremy Stretch
07fd92cd4c Fixes #4629: Replicate assigned interface when cloning IP addresses 2020-05-13 16:25:22 -04:00
Daniel Sheppard
38d8b0a1ec Merge pull request #4637 from netbox-community/4634-InventoryItemException
#4634 - Correct inventory item table accessor definition on manufacturer column
2020-05-13 10:46:29 -05:00
Daniel Sheppard
fd0be35d99 #4634 - Correct inventory item table accessor definition on manufacturer column 2020-05-13 09:33:48 -05:00
Jeremy Stretch
1461be2004 Fixes #4613: Fix tag assignment on config contexts (regression from #4527) 2020-05-13 10:28:48 -04:00
Jeremy Stretch
569d4ee201 Closes #4632: Extend email configuration parameters to support SSL/TLS 2020-05-13 09:20:24 -04:00
Jeremy Stretch
1d93d9a63a Fixes #4633: Bump django-rq to v2.3.2 to fix ImportError with rq 1.4.0 2020-05-13 08:53:29 -04:00
Daniel Sheppard
41361ce2a2 Fixes: #4618 - Add group creation and correct user creation group syntax 2020-05-11 16:10:23 -05:00
Jeremy Stretch
91e46ceb77 Merge pull request #4616 from kobayashi/4607-token-context-help
Fix: 4607 Missing token context help
2020-05-11 09:21:01 -04:00
weisdd
cea01e037a Fix: incorrect DeviceConnectionsReport in reports.md (#4606)
Since the CONNECTION_STATUS_PLANNED constant is gone from dcim.constants, the DeviceConnectionsReport script is no longer correct.
The suggested fix is based on the fact that console_port.connection_status and power_port.connection_status currently have the following set of values:
* None = A cable is not connected to a Console Server Port or it's connected to a Rear/Front Port;
* False = A cable is connected to a Console Server Port and marked as Planned;
* True = A cable is connected to a Console Server Port and marked as Installed.
2020-05-11 09:14:25 -04:00
kobayashi
465d3ae1af Fix: 4607 Missing token context help 2020-05-09 23:08:14 -04:00
Jeremy Stretch
d5b9722533 Merge pull request #4608 from netbox-community/3226-customfield-manager
Closes #3226: Implement a custom manager for CustomField
2020-05-08 12:55:13 -04:00
Jeremy Stretch
745c9a9c2b Add test for CustomFieldManager.get_for_model() 2020-05-08 12:18:08 -04:00
Jeremy Stretch
e3be5f8468 Remove local caching attempt 2020-05-08 10:05:05 -04:00
Jeremy Stretch
2c19390d7c Introduce CustomFieldManager (WIP) 2020-05-07 17:20:32 -04:00
Jeremy Stretch
da8380c62c Refactor extras.models 2020-05-07 16:59:27 -04:00
Jeremy Stretch
e14e217fcd Fixes #4604: Multi-position rear ports may only be connected to other rear ports 2020-05-07 16:22:04 -04:00
Jeremy Stretch
b7a96a33ef Fixes #4598: Display error message when invalid cable length is specified 2020-05-07 10:34:33 -04:00
Jeremy Stretch
7c6faff405 Post-release version bump 2020-05-06 23:50:41 -04:00
Jeremy Stretch
c507ab30e9 Merge pull request #4594 from netbox-community/develop
Release v2.8.3
2020-05-06 23:49:27 -04:00
Jeremy Stretch
af96ffb3e9 Release v2.8.3 2020-05-06 23:46:52 -04:00
Jeremy Stretch
5c1adf9e37 Fixes #4593: Fix AttributeError exception when viewing object lists as a non-authenticated user 2020-05-06 23:44:06 -04:00
Jeremy Stretch
3711283de5 Extend ViewTestCases to get and list objects as a non-authenticated user 2020-05-06 23:43:46 -04:00
Jeremy Stretch
5dfcca96c8 Post-release version bump 2020-05-06 15:17:06 -04:00
Jeremy Stretch
7d1614b933 Merge pull request #4589 from netbox-community/develop
Release v2.8.2
2020-05-06 15:14:45 -04:00
Jeremy Stretch
c9d0293bd0 Release v2.8.2 2020-05-06 15:04:01 -04:00
Jeremy Stretch
2e25f6b217 Update release notes index 2020-05-06 15:03:35 -04:00
Jeremy Stretch
cd0eb0d8ce Fixes #4588: Restore ability to add/remove tags on services, virtual chassis in bulk 2020-05-06 15:00:01 -04:00
Jeremy Stretch
a4dbd2dae5 Closes #3064: Include tags in object lists as a toggleable table column 2020-05-06 14:42:51 -04:00
Jeremy Stretch
fbc8b46d13 Cosmetic tweaks to the user area 2020-05-06 13:25:17 -04:00
Jeremy Stretch
881b0a6add Changelog for #4584 2020-05-06 12:49:04 -04:00
Jeremy Stretch
5378f01462 Merge pull request #4586 from netbox-community/4584-id-filters
Fixes #4584
2020-05-06 12:47:38 -04:00
Jeremy Stretch
3baf983e86 Updated REST API documentation 2020-05-06 12:46:24 -04:00
Jeremy Stretch
1ccb3162ff Ensure all model FilterSets support the 'id' field 2020-05-06 12:33:52 -04:00
Jeremy Stretch
4d5d298ee1 Update super() call for get_filters() 2020-05-06 11:47:05 -04:00
Jeremy Stretch
b1aa7fa7f8 Changelog for #3147 2020-05-06 10:16:23 -04:00
Jeremy Stretch
9312dea2b2 Merge pull request #4564 from netbox-community/3147-csv-import-fields
Closes #3147: Allow dynamic access to related objects during CSV import
2020-05-06 10:15:00 -04:00
Jeremy Stretch
270d61ce1b Remove boilerplate error messages from CSV model choice fields 2020-05-06 09:58:12 -04:00
Jeremy Stretch
70d0a5f665 Introduce CSVModelChoiceField to provide better validation for CSV model choices 2020-05-06 09:43:10 -04:00
Jeremy Stretch
607744813a Extend tests for CSV import 2020-05-05 16:49:16 -04:00
Jeremy Stretch
839e999a71 Introduce CSVModelForm for dynamic CSV imports 2020-05-05 16:15:09 -04:00
Jeremy Stretch
0239be9be5 Fixes #4578: Prevent setting 0U height on device type with racked instances 2020-05-05 13:41:23 -04:00
Jeremy Stretch
6e2c68ef42 Fixes #4652: Update repo RPM link for PosgtreSQL on CentOS 2020-05-05 13:05:54 -04:00
Jeremy Stretch
d85d963842 Remove example choices from CSV import form 2020-05-04 16:30:21 -04:00
Jeremy Stretch
3d8001ae1c Changelog for #492 2020-05-04 15:14:52 -04:00
Jeremy Stretch
80f08e6830 Merge pull request #4555 from netbox-community/492-table-column-ordering
Closes #492: Table column ordering
2020-05-04 15:12:29 -04:00
Jeremy Stretch
7c4d634ae6 Fix group column on RackTable 2020-05-04 14:56:29 -04:00
Jeremy Stretch
51ccbdf6c4 Remove descriptions from interface connections list 2020-05-04 14:10:40 -04:00
Jeremy Stretch
b0478a7e5b Enable dynamic queryset field prefetching based on table columns 2020-05-04 14:08:11 -04:00
koratfood
e6598fac20 Replace supervisord with systemd in LDAP troubleshooting (#4569)
Update the LDAP troubleshooting steps so that they are consistent with the rest of the documentaiton, which nowadays expects us to be running netbox via systemd instead of supervisord. Fixes #4504.
2020-05-04 09:56:03 -04:00
Jeremy Stretch
f9f7c19d81 Clean up CSV import table 2020-05-01 16:01:55 -04:00
Jeremy Stretch
4486957b9a Clean up comments 2020-05-01 16:01:30 -04:00
Jeremy Stretch
718ff4a743 Update help_texts for models, import forms 2020-05-01 15:40:34 -04:00
Jeremy Stretch
fa630c048c Overhaul CSV import template 2020-05-01 14:26:04 -04:00
Jeremy Stretch
4b8ef6b09a Removed FlexibleModelChoiceField 2020-05-01 13:40:52 -04:00
Jeremy Stretch
61ae4be16a Add tests for CSVDataField 2020-05-01 13:32:28 -04:00
Jeremy Stretch
34a17d4571 Enable the specifcation of related objects by arbitrary attribute during CSV import 2020-05-01 12:18:04 -04:00
Jeremy Stretch
6ab046ba8f Fix tests for #4502 2020-04-30 15:43:33 -04:00
Jeremy Stretch
05cb47e650 Closes #4502: Enable configuration of proxies for outbound HTTP requests 2020-04-30 14:59:13 -04:00
Jeremy Stretch
e75c4c012d Closes #4554: Add HDOT Cx power outlet type 2020-04-30 13:39:12 -04:00
Jeremy Stretch
bcb7899b04 Fixes #4548: Fix tracing cables through a single RearPort 2020-04-29 16:32:30 -04:00
Jeremy Stretch
81ffa0811e Closes #4556: Update form for adding devices to clusters 2020-04-29 15:50:16 -04:00
Jeremy Stretch
f8060ce112 Ignore clearing of invalid user config keys 2020-04-29 15:05:29 -04:00
Jeremy Stretch
3b6d9dc552 Add button to select all columns 2020-04-29 14:56:22 -04:00
Jeremy Stretch
c096232cb1 #492: Extend virtualization tables 2020-04-29 11:42:44 -04:00
Jeremy Stretch
33c44c2dd9 #492: Extend tenancy tables 2020-04-29 11:34:51 -04:00
Jeremy Stretch
cd0ee4cd69 #492: Extend secrets tables 2020-04-29 11:32:53 -04:00
Jeremy Stretch
6e9e6af2f0 #492: Extend IPAM tables 2020-04-29 11:29:30 -04:00
Jeremy Stretch
7ad27a2b65 #492: Extend extras tables 2020-04-29 11:03:49 -04:00
Jeremy Stretch
e3cfc9ad80 #492: Extend DCIM tables 2020-04-29 10:58:08 -04:00
Jeremy Stretch
88687608e7 Always include the 'actions' column, if present 2020-04-29 10:17:52 -04:00
Jeremy Stretch
ed21ff52ee Merge branch 'develop' into 492-table-column-ordering 2020-04-29 10:08:56 -04:00
Jeremy Stretch
f98a236a5b Changelog for #4545 2020-04-29 09:46:24 -04:00
Jeremy Stretch
5f8970e6bf Merge pull request #4552 from netbox-community/4545-remove-squashed-migrations
Fixes #4545: Remove squashed migrations
2020-04-29 09:45:09 -04:00
Jeremy Stretch
f535ef4924 Update development docs to remove squashing instructions 2020-04-29 09:44:41 -04:00
Jeremy Stretch
6e832de4a9 Remove squashed migrations 2020-04-29 09:31:52 -04:00
Jeremy Stretch
3226e7f6df Merge pull request #4550 from kobayashi/4549-webhook-utf8
Fix: #4549 encode webhook body in utf-8
2020-04-29 08:57:17 -04:00
kobayashi
39ea14202e Fix 4549 webhook body encode in utf-8 2020-04-29 01:48:53 -04:00
Jeremy Stretch
55b40d92d4 Extend DCIM tables (WIP) 2020-04-28 17:06:16 -04:00
Jeremy Stretch
8ec2e3cc7b Introduce default_columns Meta parameter to reduce boilerplate 2020-04-28 16:33:06 -04:00
Jeremy Stretch
725e3cdbf3 Extend circuits tables to include all relevant model fields 2020-04-28 16:20:11 -04:00
Jeremy Stretch
96eafe6dc1 Document table columns preference 2020-04-28 14:32:32 -04:00
Jeremy Stretch
f51e7519dc Enable reordering table columns 2020-04-28 14:27:27 -04:00
Jeremy Stretch
3442ec77a7 Enable setting/clearing of table column prefs 2020-04-28 13:21:58 -04:00
Jeremy Stretch
e8d493578b Create form for setting table preferences 2020-04-28 12:14:51 -04:00
Jeremy Stretch
0ee1112d9d Initial support for table column reordering 2020-04-27 16:56:25 -04:00
Jeremy Stretch
4971054c34 Standardize import statement as django_rq is no longer optional 2020-04-24 15:43:58 -04:00
Jeremy Stretch
d8cb58c746 #4416: Add bulk edit & delete views for VirtualChassis 2020-04-24 15:20:52 -04:00
Jeremy Stretch
eb14c08cab #4416: Enable custom links for virtual chassis 2020-04-24 15:01:23 -04:00
Jeremy Stretch
fed9408b90 #4416: Establish a dedicated view for VirtualChassis objects 2020-04-24 14:59:38 -04:00
Jeremy Stretch
ffba1c1d43 Add extras.configcontext.format to preferences doc 2020-04-24 13:11:01 -04:00
Jeremy Stretch
bdbf21b3e2 Closes #4421: Retain user's preference for config context format 2020-04-24 12:01:41 -04:00
Jeremy Stretch
f019c8d2ce Fixes #4527: Fix assignment of certain tags to config contexts 2020-04-24 11:31:01 -04:00
Jeremy Stretch
ad099d79f2 Changelog for #3294, #4531 2020-04-24 11:03:14 -04:00
Jeremy Stretch
7feaa896e5 Merge pull request #4532 from netbox-community/3294-user-prefs
Closes #3294: User preference tracking
2020-04-24 11:00:48 -04:00
Jeremy Stretch
178052b2f6 Prepare for merge into 2.8 2020-04-24 10:38:09 -04:00
Jeremy Stretch
dc9617c7aa Fix returning default for unknown userconfig key 2020-04-24 10:37:02 -04:00
Jeremy Stretch
587339bea0 Add page for user to view/clear preferences 2020-04-24 10:29:06 -04:00
Jeremy Stretch
7c8c85e435 Add all() method to UserConfig 2020-04-24 09:50:26 -04:00
Jeremy Stretch
d8494e44e7 Document available user preferences 2020-04-24 09:46:02 -04:00
Jeremy Stretch
30c3d6ee40 Remember user's per_page preference (POC for UserConfig) 2020-04-23 16:48:13 -04:00
Jeremy Stretch
f3012ed839 Automatically create UserConfig for users 2020-04-23 16:46:36 -04:00
Jeremy Stretch
afa0565a44 Show user config in admin UI 2020-04-23 15:53:43 -04:00
Jeremy Stretch
750deac2cf Initial implementation of UserConfig model 2020-04-23 15:34:32 -04:00
Jeremy Stretch
c0b1ae4923 Initialize v2.9 development 2020-04-23 11:02:35 -04:00
Jeremy Stretch
14b9a12a2f Post-release version bump 2020-04-23 10:27:33 -04:00
Jeremy Stretch
a77d1e502c Merge pull request #4528 from netbox-community/develop
Release v2.8.1
2020-04-23 10:24:08 -04:00
Jeremy Stretch
e5e5725a24 Fix typo in validation error message 2020-04-23 10:12:56 -04:00
Jeremy Stretch
92343469e7 Correct release date 2020-04-23 10:11:11 -04:00
Jeremy Stretch
3ece4f137f Release v2.8.1 2020-04-23 10:09:13 -04:00
Sander Steffann
70b8b9ecdb Fix minor typo 2020-04-23 14:10:58 +02:00
John Anderson
11ee6f417f fix #4459 - Fix caching issue resulting in erroneous nested data for regions, rack groups, and tenant groups 2020-04-22 16:45:26 -04:00
Jeremy Stretch
5ea92dda4b Changelog for #4139 2020-04-22 14:15:41 -04:00
Jeremy Stretch
ca08125d55 Merge pull request #4524 from netbox-community/4139-component-bulk-create
Fixes #4139: Extend forms for bulk device component creation
2020-04-22 14:11:07 -04:00
Jeremy Stretch
7b50f2b0eb Fix tag assignment when bulk creating components 2020-04-22 14:05:27 -04:00
Jeremy Stretch
6a61f0911d Update InterfaceBulkCreateForm for VMs 2020-04-22 12:09:40 -04:00
Jeremy Stretch
e975f1b216 Update device component bulk edit forms to use form_from_model() 2020-04-22 11:47:26 -04:00
Jeremy Stretch
62cdf0d928 Add bulk creation view for rear ports 2020-04-22 11:26:04 -04:00
Jeremy Stretch
97b8e73716 Introduce model-specific bulk create forms for device components 2020-04-22 11:15:39 -04:00
Jeremy Stretch
131d2c97ca Fixes #4336: Ensure interfaces without a subinterface ID are ordered before subinterface zero 2020-04-21 16:13:34 -04:00
Jeremy Stretch
ada55dfdfb Fixes #4510: Enforce address family for device primary IPv4/v6 addresses 2020-04-21 14:50:15 -04:00
Jeremy Stretch
cc721efe97 Fixes #3356: Correct Swagger schema specification for the available prefixes/IPs API endpoints 2020-04-21 14:12:49 -04:00
Jeremy Stretch
b362c6a967 Fixes #2994: Prevent modifying termination points of existing cable to ensure end-to-end path integrity 2020-04-21 13:41:38 -04:00
Jeremy Stretch
5eef6bc527 Changelog for #4388 2020-04-21 12:51:43 -04:00
Jeremy Stretch
8a3a5a8cb1 Merge pull request #4521 from netbox-community/4388-cable-tracing
Fixes #4388: Improve connection endpoint detection
2020-04-21 12:49:48 -04:00
Jeremy Stretch
ca762588ca Pretty-up cable trace template 2020-04-21 11:59:14 -04:00
Jeremy Stretch
26c335fc68 Extend tests for #4388 2020-04-21 10:53:21 -04:00
Jeremy Stretch
f80eb16060 Closes #4505: Fix typo in application stack diagram 2020-04-20 11:06:52 -04:00
Jeremy Stretch
8ea611df44 Changelog for #4464 2020-04-20 11:04:15 -04:00
Jeremy Stretch
3db83dd3a2 Merge pull request #4501 from toerb/develop
add rack width of 21 inches for ETSI racks
2020-04-20 11:03:09 -04:00
Jeremy Stretch
29707cd496 Adapt tracing view to account for split ends (WIP) 2020-04-15 17:09:04 -04:00
Jeremy Stretch
5205c4963f Refactor cable tracing logic 2020-04-15 15:46:41 -04:00
Jeremy Stretch
5aadfff1de Merge pull request #4492 from kobayashi/4361-type-connection_status
Fix #4361 Set correct type of connection_status in swagger schema
2020-04-15 09:45:39 -04:00
Jeremy Stretch
cb84e3bb2e Closes #4491: Update docs to indicate support for nesting objects 2020-04-15 09:41:57 -04:00
Jeremy Stretch
e0f819691f Fixes #4496: Fix exception when validating certain models via REST API 2020-04-15 09:37:30 -04:00
kobayashi
1ce0191a74 Fixes #4361: Set correct type of connection_state 2020-04-15 01:02:11 -04:00
Jeremy Stretch
788909de94 Fixes #4489: Fix display of parent/child role on device type view 2020-04-14 12:13:05 -04:00
Jeremy Stretch
2dbc04c6fb Fix typo 2020-04-14 10:03:02 -04:00
Jeremy Stretch
fc1feec8bf Fix format string 2020-04-14 09:43:12 -04:00
Jeremy Stretch
819f842cf1 Call out requirement for Python 3.6 or later 2020-04-13 14:38:26 -04:00
Jeremy Stretch
0ffc74c669 Fix link to logging configuration docs 2020-04-13 14:37:11 -04:00
Jeremy Stretch
9ed0494b45 Clarify requirement for Python 3.6 or later 2020-04-13 14:22:17 -04:00
Jeremy Stretch
d37a74846a Remove format strings to ensure compilation under old Python releases 2020-04-13 14:07:44 -04:00
Jeremy Stretch
e97205922c Fixes #4481: Remove extraneous material from example configuration file 2020-04-13 13:49:34 -04:00
Jeremy Stretch
8b57a888e7 Post-release version bump 2020-04-13 11:31:16 -04:00
Jeremy Stretch
d79ed76d80 Merge pull request #4479 from netbox-community/develop
Release v2.8.0
2020-04-13 11:29:33 -04:00
Jeremy Stretch
488129d7ad Release v2.8.0 2020-04-13 11:21:33 -04:00
Jeremy Stretch
dc9f991e5f Update dependencies for v2.8 release 2020-04-13 11:09:39 -04:00
Jeremy Stretch
c691ec843d Fixes #4476: Correct typo in slugs for Infiniband interface types 2020-04-13 10:51:25 -04:00
Jeremy Stretch
67f2cdc921 Fixes #4474: Fix population of device types when bulk editing devices 2020-04-13 10:34:44 -04:00
Jeremy Stretch
ee51dae73f Merge pull request #4473 from netbox-community/develop-2.8
Merge v2.8 work into develop
2020-04-13 10:17:27 -04:00
Jeremy Stretch
0316063ba9 Update v2.8 release notes 2020-04-10 11:56:52 -04:00
Jeremy Stretch
8939d4de92 Use packaging.version.parse directly 2020-04-10 11:18:01 -04:00
Jeremy Stretch
5de085d83d Tweak PluginMenuButton icon_class to require additional "fa" class 2020-04-10 10:36:03 -04:00
Jeremy Stretch
19a10cee82 Rename base template 2020-04-10 10:21:02 -04:00
Jeremy Stretch
db70f04447 Minor tweaks to plugins development doc 2020-04-10 10:20:36 -04:00
Jeremy Stretch
d5dbd5ccf1 Update bug report template to denote disabling plugins 2020-04-09 15:55:17 -04:00
Jeremy Stretch
b5aff1575d Add plugins settings to example config 2020-04-09 15:45:38 -04:00
Jeremy Stretch
884d648cc2 Set X_FRAME_OPTIONS to SAMEORIGIN (changed in Django 3.0) 2020-04-09 15:31:18 -04:00
Jeremy Stretch
ed05198c45 Add static file collection to plugins installation doc 2020-04-09 14:52:18 -04:00
Jeremy Stretch
c593eca936 Minor improvements to installation docs 2020-04-09 14:43:22 -04:00
Jeremy Stretch
cfc09bfcc8 Merge pull request #4471 from qaxi/patch-2
#4470 correct Ubuntu package name
2020-04-09 10:06:35 -04:00
Petr Klíma
2daf1e2004 #4470 wrong Ubuntu package name 2020-04-09 16:02:57 +02:00
Jeremy Stretch
5266bf93a3 Merge branch 'develop' into develop-2.8 2020-04-08 13:50:15 -04:00
Jeremy Stretch
e04a5dc81f Post-release version bump 2020-04-08 13:34:36 -04:00
Jeremy Stretch
ccf8059452 Merge pull request #4467 from netbox-community/develop
Release v2.7.12
2020-04-08 13:31:49 -04:00
Jeremy Stretch
b86c61dcdb Release v2.7.12 2020-04-08 13:26:33 -04:00
toerb
f7e7699d93 add rack width of 21 inches for ETSI racks 2020-04-08 09:30:14 +02:00
Jeremy Stretch
eb2e960af4 Merge pull request #4462 from netbox-community/4460-webhook-listener
Closes #4460: Add a webhook listener for troubleshooting
2020-04-07 13:56:35 -04:00
Jeremy Stretch
2357928e72 Add documentation for webhook_receiver 2020-04-07 13:51:20 -04:00
Jeremy Stretch
ae58af4bb7 Added webhook_receiver management command 2020-04-07 13:37:48 -04:00
Jeremy Stretch
902b1b2c32 Fixes #4458: Remove custom admin site to avoid conflict with django-rq 2.3.0 2020-04-07 10:17:34 -04:00
Daniel Sheppard
225ba4cc35 Fixes: #4395 - Fix typing on interface serializer 2020-04-07 08:36:13 -05:00
Daniel Sheppard
fe088dba7a Fixes: #4396 - Fix typing on interface serializer 2020-04-07 08:33:00 -05:00
Jeremy Stretch
46b896b2cf Merge branch 'develop' into develop-2.8 2020-04-06 13:51:05 -04:00
Jeremy Stretch
52ef488208 Fix nav menu w/plugins enabled 2020-04-06 13:27:41 -04:00
Jeremy Stretch
34c33549b8 Add tests for plugins caching config 2020-04-06 12:00:28 -04:00
Jeremy Stretch
76230cad53 Remove extraneous plugin config 2020-04-06 11:51:03 -04:00
Jeremy Stretch
9ffc404027 Add tests for plugin configuration, min/max version 2020-04-06 11:44:38 -04:00
Jeremy Stretch
58442b1af6 Correct author name parameter 2020-04-06 11:43:52 -04:00
Jeremy Stretch
5f6b63e978 Remove extraneous package from Apache installation instructions 2020-04-03 16:03:50 -04:00
Jeremy Stretch
ad08935c57 Move nginx/Apache configs to discrete files 2020-04-03 15:46:48 -04:00
Jeremy Stretch
af405a8ab2 Closes #4391: Extend installation docs to include enabling SSL 2020-04-03 15:35:45 -04:00
Jeremy Stretch
1ffbeba181 #4439: Fix null integer field display 2020-04-03 13:47:58 -04:00
Jeremy Stretch
630788731e Closes #4448: Allow connecting cables between two circuit terminations 2020-04-03 13:44:41 -04:00
Jeremy Stretch
721368ea8d Closes #4147: Use absolute URLs in rack elevation SVG renderings 2020-04-03 13:16:35 -04:00
Jeremy Stretch
1f3a21ba20 Fixes #4449: Fix reservation edit/delete button URLs on rack view 2020-04-03 12:13:36 -04:00
Jeremy Stretch
6cfd68d9fb Merge pull request #4446 from netbox-community/plugin-testing
Plugin testing
2020-04-03 09:24:44 -04:00
Jeremy Stretch
6413d47fb2 Skip PluginTest if dummy_plugin not in PLUGINS list 2020-04-02 16:13:15 -04:00
Jeremy Stretch
9e0aa0d11e Naming tweaks 2020-04-02 15:43:23 -04:00
Jeremy Stretch
ee4c5ef64a Fix CI tests 2020-04-02 15:11:19 -04:00
Jeremy Stretch
4ab3854d66 Fixes #4438: Fix exception when disconnecting a cable from a power feed 2020-04-02 10:19:50 -04:00
Jeremy Stretch
354f87c888 Fixes #4439: Tweak display of unset custom integer fields 2020-04-02 10:06:01 -04:00
Jeremy Stretch
92fc28aa09 Remove errant references to external plugin 2020-04-01 17:18:15 -04:00
Jeremy Stretch
30e330c887 Initial implementation of tests for plugins framework 2020-04-01 17:08:47 -04:00
Jeremy Stretch
093181c186 Correct path to test configuration file 2020-04-01 13:29:54 -04:00
Jeremy Stretch
f316958943 Establish a separate configuration file for testing 2020-04-01 13:23:29 -04:00
Jeremy Stretch
0432b1a6f9 Move default caching_config to PluginConfig class 2020-04-01 12:10:19 -04:00
Jeremy Stretch
b2f4ef06c7 Merge pull request #4433 from netbox-community/plugins-list
Change PLUGINS_ENABLED to a list of specific plugins (PLUGINS)
2020-04-01 11:44:41 -04:00
Jeremy Stretch
f469c794ce Change PLUGINS_ENABLED to a list of specific plugins (PLUGINS) 2020-04-01 10:10:29 -04:00
Jeremy Stretch
221e014a25 Remove survey notification from README 2020-03-31 11:36:53 -04:00
Jeremy Stretch
fb2868f8bb Fixes #4418: Fail cleanly when trying to import multiple device types simultaneously 2020-03-30 16:44:04 -04:00
Jeremy Stretch
aa38dcf490 Closes #3676: Reference VRF by name rather than RD during IP/prefix import 2020-03-30 15:54:35 -04:00
Jeremy Stretch
06116cdde7 Add developer docs for application registry 2020-03-30 15:31:13 -04:00
Jeremy Stretch
5f1329c71c Changelog for #3351 2020-03-30 13:09:10 -04:00
Jeremy Stretch
613e37837b Update Python dependencies for v2.8 release 2020-03-30 12:39:45 -04:00
Jeremy Stretch
a914a7c438 Update serializer context assignment for DRF 3.11 2020-03-30 12:39:15 -04:00
Jeremy Stretch
8c7b3a1f9b Merge pull request #4385 from netbox-community/3351-plugins
Implements 3351 plugins
2020-03-27 14:19:11 -04:00
Jeremy Stretch
9c16d5a747 Misc cleanup of PluginConfig processing logic 2020-03-27 13:57:11 -04:00
Jeremy Stretch
0d9d0b0446 Convert installed_plugins_admin_view to a class-based view 2020-03-27 13:35:25 -04:00
Jeremy Stretch
cb344a3792 Clean up plugin URL registration 2020-03-27 13:26:53 -04:00
Jeremy Stretch
dd9fc4173d Expose regsitry in templates using existing context processor for settings 2020-03-27 13:18:51 -04:00
Jeremy Stretch
fd6739f0cc Improved menu item/button validation 2020-03-27 13:12:58 -04:00
Jeremy Stretch
fa83750e72 Merge branch 'develop-2.8' into 3351-plugins 2020-03-27 13:05:34 -04:00
Jeremy Stretch
a72d5c899e Merge branch 'develop' into develop-2.8 2020-03-27 12:53:55 -04:00
Jeremy Stretch
5cf872d000 Post-release version bump 2020-03-27 12:49:48 -04:00
Jeremy Stretch
3d3d1bc623 Merge pull request #4417 from netbox-community/develop
Release v2.7.11
2020-03-27 12:47:28 -04:00
Jeremy Stretch
59e6386361 Release v2.7.11 2020-03-27 12:40:21 -04:00
Jeremy Stretch
9c1eda0d9a Closes #4404: Add cable trace button for circuit terminations 2020-03-27 12:35:36 -04:00
Daniel Sheppard
785119f5bb Fixes: #4415 - Add site on validate_unique() for device model 2020-03-27 08:37:48 -05:00
Jeremy Stretch
8a3ebf64bc Rename obj to object; clean up docstrings 2020-03-26 21:46:56 -04:00
Jeremy Stretch
af302d8368 Avoid instantiating PluginTemplateExtension subclasses when the specified method has not been defined 2020-03-26 21:25:10 -04:00
Jeremy Stretch
f03cc96050 Restrict context data available to PluginTemplateExtensions 2020-03-26 16:50:55 -04:00
Jeremy Stretch
e7f7b14214 Extend menu items and buttons to accept a list of required permissions 2020-03-26 16:04:12 -04:00
Jeremy Stretch
84d2db0d35 Tweak variable naming 2020-03-26 13:37:52 -04:00
Jeremy Stretch
74e56a890c Remove unused PluginSignal class 2020-03-26 12:26:58 -04:00
Jeremy Stretch
b94ef39a51 Standardize naming of menu items 2020-03-26 12:25:36 -04:00
Jeremy Stretch
877417d68f Rename PluginTemplateContent to PluginTemplateExtension 2020-03-26 12:18:58 -04:00
Jeremy Stretch
62f14f0473 Convert PluginConfig attrs list to a table 2020-03-26 12:03:10 -04:00
Jeremy Stretch
66a99e13bb Fix up styling of tables in documentation 2020-03-26 11:54:58 -04:00
Jeremy Stretch
d316d8ac61 Rename PluginNavMenuButton to PluginMenuButton 2020-03-26 11:30:42 -04:00
Jeremy Stretch
40574b65af Rename PluginNavMenuLink to PluginMenuItem 2020-03-26 11:29:05 -04:00
Jeremy Stretch
81c9177c09 Add a default button color 2020-03-26 11:26:11 -04:00
Jeremy Stretch
68ef5dd2a4 Revised plugins documentation 2020-03-26 11:09:20 -04:00
Jeremy Stretch
59815ea53d Merge pull request #4407 from netbox-community/4402-plugins-template-content
Closes #4402: Rework template content registration for plugins
2020-03-26 09:05:07 -04:00
Jeremy Stretch
5540079e81 Add documentation for PluginTemplateContent 2020-03-25 16:32:16 -04:00
Jeremy Stretch
68a0e76ca6 Rework template content registration to work like menu items 2020-03-25 16:06:00 -04:00
Jeremy Stretch
1d9fbeed81 Merge pull request #4403 from netbox-community/4401-plugins-navlinks
Closes #4401: Simplify registration process for pluin menu items
2020-03-25 14:55:21 -04:00
Jeremy Stretch
d0edd9d5c1 Update documentation for #4401 2020-03-25 14:33:32 -04:00
Jeremy Stretch
9ea30c057f Replace get_menu_items() with static attribute 2020-03-25 13:51:37 -04:00
Jeremy Stretch
c1f2ad90ef Simplify the mechanism for plugins to register navigation menu items 2020-03-25 11:32:50 -04:00
Jeremy Stretch
2a47bb8b54 Rename url_slug to base_url 2020-03-24 16:20:47 -04:00
Jeremy Stretch
b6686a5fcb Merge pull request #4397 from netbox-community/plugins-docs
Add documentation for the plugins framework
2020-03-24 15:55:14 -04:00
Jeremy Stretch
16b8a45ed6 Get menu header via apps.get_config 2020-03-24 15:24:14 -04:00
Jeremy Stretch
579c365808 Extend plugins docs to include nav menu links 2020-03-24 15:22:57 -04:00
Jeremy Stretch
745ac294a5 Tweak plugin template docs 2020-03-24 14:21:08 -04:00
Jeremy Stretch
eedda6e648 Incorporate John's feedback 2020-03-24 09:42:24 -04:00
Jeremy Stretch
5ec1b31804 Add disclaimer/warning to PLUGINS_ENABLED 2020-03-24 09:41:46 -04:00
Jeremy Stretch
8e661c34e9 Merge branch '3351-plugins' into plugins-docs 2020-03-23 14:03:35 -04:00
Jeremy Stretch
ce0b1733fe Derive API URLs app_name for plugins from url_slug 2020-03-23 14:03:04 -04:00
Jeremy Stretch
0a8b09a11a Add docs for plugin API endpoints 2020-03-23 13:58:45 -04:00
Jeremy Stretch
0b77702626 Add docs for plugin models, views 2020-03-23 13:28:56 -04:00
Jeremy Stretch
a4382f0b27 Merge branch '3351-plugins' into plugins-docs 2020-03-23 12:02:18 -04:00
Jeremy Stretch
2732e7c3d9 Specify path to PluginConfig in INSTALLED_APPS 2020-03-23 12:01:24 -04:00
Jeremy Stretch
2188b0982c More work on plugins development docs 2020-03-23 12:00:10 -04:00
Jeremy Stretch
eeb9633854 Merge branch '3351-plugins' into plugins-docs 2020-03-23 10:20:53 -04:00
John Anderson
60b6c48775 remove duplicate import 2020-03-20 22:21:00 -04:00
John Anderson
4e84e8048f added admin and api views for listing all plugins, and refactored urls import 2020-03-20 20:10:02 -04:00
John Anderson
e220c38b97 Merge pull request #4392 from netbox-community/refactor-plugins-import
Refactor plugins import
2020-03-20 17:04:33 -04:00
Jeremy Stretch
ad1522f428 Update plugin URL loading logic 2020-03-20 15:51:14 -04:00
Jeremy Stretch
bc50c2aa55 Introduce PluginConfig 2020-03-20 15:50:47 -04:00
Jeremy Stretch
28b5e88c50 Rename entry point group; simplify import 2020-03-20 14:35:54 -04:00
Jeremy Stretch
33ca352fd9 Initial documentation for plugins framework 2020-03-20 14:21:49 -04:00
Jeremy Stretch
058c78d8be Closes #4389: Add a bulk edit view for device bays 2020-03-19 16:32:08 -04:00
Jeremy Stretch
05fdf5e9a0 Closes #4386: Update admin links for Django RQ to reflect multiple queues 2020-03-19 13:54:49 -04:00
Jeremy Stretch
533521b29d Changelog for #4255 2020-03-19 11:03:35 -04:00
Jeremy Stretch
2dff093305 Merge pull request #4258 from netbox-community/4255-dynamic_object_vars
Fixes: #4255 - Modify script ObjectVars to utilize DynamicModelChoiceField
2020-03-19 11:02:07 -04:00
Jeremy Stretch
ba6ce07759 Changelog for #3193 2020-03-19 10:56:42 -04:00
Jeremy Stretch
33eb5e11de Merge pull request #4387 from netbox-community/3193-cable-tracing
Fixes #3193: Fix cable tracing across multiple rear ports
2020-03-19 10:55:24 -04:00
Jeremy Stretch
8d3801896f Rewrite and extend cabling logic tests 2020-03-19 10:43:51 -04:00
Jeremy Stretch
f1236e9bf7 Tweak tracing logic to ensure consistent behavior 2020-03-19 10:42:53 -04:00
dansheps
fa1548f3ce Remove extraneous import 2020-03-19 08:11:14 -05:00
dansheps
0995e10d87 Modify script ObjectVars to use DynamicModelChoiceFields 2020-03-19 08:09:31 -05:00
Jeremy Stretch
e143158f12 Remove unused follow_circuits arg for cable tracing 2020-03-18 21:14:53 -04:00
Jeremy Stretch
40bfb55370 Improved cable tracing logic 2020-03-18 20:47:27 -04:00
John Anderson
dab313897e Merge branch 'develop-2.8' into 3351-plugins 2020-03-18 18:30:47 -04:00
John Anderson
c7fb2ff894 add version contraints and cacheops config 2020-03-18 18:28:27 -04:00
Jeremy Stretch
ced6fe313a Fix RackGroupForm field 2020-03-18 15:41:23 -04:00
Jeremy Stretch
7f5571200c Closes #4382: Enable custom links for rack reservations 2020-03-18 14:50:49 -04:00
John Anderson
fd879c7cf5 Merge branch 'develop-2.8' into 3351-plugins 2020-03-18 14:48:11 -04:00
Jeremy Stretch
a9d04547d1 Closes #4381: Enable export templates for rack reservations 2020-03-18 14:46:23 -04:00
John Anderson
09e09e43ba Merge branch 'develop' into develop-2.8 2020-03-18 14:44:18 -04:00
Jeremy Stretch
87f0b19dc0 Closes #4380: Enable webhooks for rack reservations 2020-03-18 14:43:19 -04:00
Jeremy Stretch
eab79faaeb Changelog for #738 2020-03-18 14:02:24 -04:00
Jeremy Stretch
dbbb2cdaba Merge pull request #4366 from netbox-community/738-detect-new-releases
Closes #738: Automatically detect new releases
2020-03-18 14:00:01 -04:00
Jeremy Stretch
7246fd667e Move releases.py to netbox/ 2020-03-18 13:54:41 -04:00
Jeremy Stretch
fe4f4bddc8 Tweaked logging; renamed release config parameters 2020-03-18 13:46:47 -04:00
Jeremy Stretch
f7ba766de3 Merge pull request #4379 from netbox-community/refactor-registry
Refactor registry to behave as a dictionary
2020-03-18 13:21:55 -04:00
Jeremy Stretch
70c29051b3 Raise specific exceptions 2020-03-18 13:15:22 -04:00
Jeremy Stretch
043b1c28d2 Refactor the registry into a dictionary object 2020-03-18 12:00:31 -04:00
Jeremy Stretch
022653f446 Fix Python 3.5 compatability for tests 2020-03-17 15:07:45 -04:00
Jeremy Stretch
1706db38df Fix Python 3.5 compatability for tests 2020-03-17 15:00:39 -04:00
Jeremy Stretch
81287833ee Update tests 2020-03-17 14:44:49 -04:00
Jeremy Stretch
2f12d09663 Clean up URL damping 2020-03-17 12:14:17 -04:00
Jeremy Stretch
3ace83c5aa Cache only the most recent NetBox release 2020-03-17 11:58:17 -04:00
Jeremy Stretch
356de985d2 Tweak release template variables 2020-03-17 11:49:45 -04:00
Jeremy Stretch
ab93606e4a Check for an existing job before queuing a new one 2020-03-17 11:37:35 -04:00
Jeremy Stretch
ec2dc8d7a4 Fix template logic 2020-03-17 11:28:35 -04:00
Jeremy Stretch
a2eb2e7da6 Introduce a new 'check_releases' RQ queue 2020-03-17 11:22:56 -04:00
Jeremy Stretch
3590ed378d Rename 'webhooks' REDIS config to 'tasks' 2020-03-17 10:22:56 -04:00
John Anderson
2f37357a1b added support for prepending elements to middleware 2020-03-17 02:35:34 -04:00
John Anderson
981c982237 added support for plugin nav bar links 2020-03-17 02:35:12 -04:00
John Anderson
457354c244 inject origional context as obj_context 2020-03-17 00:03:58 -04:00
Jeremy Stretch
00afe7aa94 Merge pull request #4375 from netbox-community/4374-dynamic-fields-api-url
Closes #4374: Automatically derive API endpoint for dynamic choice fields
2020-03-16 16:02:25 -04:00
Jeremy Stretch
450615e0bb Change IPAddressForm.nat_vrf to DynamicModelChoiceField 2020-03-16 14:29:01 -04:00
Jeremy Stretch
73881ad1e0 Change CircuitTerminationForm.site to a DynamicModelChoiceField 2020-03-16 14:24:17 -04:00
John Anderson
2522b88fc6 Merge branch 'develop-2.8' into 3351-plugins 2020-03-16 14:21:05 -04:00
Jeremy Stretch
0068108c57 Remove APISelect widget/api_url argument from dynamic fields 2020-03-16 14:08:48 -04:00
Jeremy Stretch
400f6fc5fb Dynamically resolve the API URL for dynamic choice fields 2020-03-16 13:30:35 -04:00
John Anderson
901143b72a Merge branch 'develop' into develop-2.8 2020-03-16 12:17:00 -04:00
John Anderson
9a38586e13 rename FeatureQuery class 2020-03-16 11:58:35 -04:00
Jeremy Stretch
62ad7734b2 Merge pull request #4373 from kobayashi/2769-validate-prefixlength
Fixes #2769: improve prefix_length validations
2020-03-16 10:44:13 -04:00
kobayashi
7ef9a6c0a7 Fixes #2769: improve prefix_length validations 2020-03-16 03:20:15 -04:00
John Anderson
8364694fb4 added plugin template content injection to primary model detail views 2020-03-15 23:45:18 -04:00
John Anderson
683c5a22db Merge branch 'develop-2.8' into 3351-plugins 2020-03-15 00:55:25 -04:00
John Anderson
0574ac7530 fixed migration order 2020-03-15 00:48:05 -04:00
John Anderson
a955f90a7e Merge branch 'develop-2.8' into 3351-plugins 2020-03-15 00:26:33 -04:00
John Anderson
2dc31c0edd Revert "implemented registry for extras model functionality"
This reverts commit 235d99021b.
2020-03-15 00:25:46 -04:00
John Anderson
6ea15cec6f Revert "refactor extras registry"
This reverts commit c189895f6c.
2020-03-15 00:24:05 -04:00
John Anderson
9df238c5f2 Merge branch 'develop' into develop-2.8 2020-03-15 00:18:32 -04:00
John Anderson
9466802a95 closes #4368 - extras features model registration 2020-03-14 03:03:22 -04:00
Jeremy Stretch
36130965f2 Merge pull request #4370 from netbox-community/4078-standardize-fields
Closes #4078: Standardize description fields
2020-03-13 17:07:07 -04:00
Jeremy Stretch
d4f6909859 Rename Tag.comments to description 2020-03-13 17:00:00 -04:00
Jeremy Stretch
1a8554fd32 Changelog for #4078 2020-03-13 16:42:47 -04:00
Jeremy Stretch
9f5b138b0f Add migrations for description fields 2020-03-13 16:35:36 -04:00
Jeremy Stretch
cebe580484 Add a description field to all organizational models 2020-03-13 16:33:28 -04:00
Jeremy Stretch
3b4ec5926d Standardize existing description fields to a length of 200 chars 2020-03-13 15:49:58 -04:00
Jeremy Stretch
c5776d9da4 Closes #4369: Add a dedicated view for rack reservations 2020-03-13 13:53:44 -04:00
Jeremy Stretch
9e45cafac4 Cleaned up new release notification banner 2020-03-13 12:20:00 -04:00
Jeremy Stretch
2033d15b2f Tweak UPDATE_REPO_URL to convey the full URL 2020-03-13 12:14:27 -04:00
Jeremy Stretch
e2123f4a9e Clean up logging 2020-03-13 11:55:06 -04:00
Jeremy Stretch
f6dfd2fa43 Simplify update repo URL validation 2020-03-13 10:20:09 -04:00
Jeremy Stretch
1f382f9252 Merge branch 'develop' into 738-detect-new-releases 2020-03-13 10:05:24 -04:00
Jeremy Stretch
459bcd88a9 Fixes #4365: Fix exception raised on IP address bulk add view 2020-03-13 09:07:03 -04:00
Jeremy Stretch
1487b5004d Closes #4309: Add descriptive tooltip to custom fields on object views 2020-03-12 21:43:34 -04:00
Jeremy Stretch
a28509019a Closes #4363: Standardize secret creation URL 2020-03-12 21:14:14 -04:00
John Anderson
c189895f6c refactor extras registry 2020-03-12 18:12:12 -04:00
Jeremy Stretch
5e971994ff Closes #4362: Standardize URL for creation of RackReservations 2020-03-12 17:43:11 -04:00
Jeremy Stretch
f108049142 Remove outdated TODOs 2020-03-12 11:57:26 -04:00
Jeremy Stretch
9fc1e88d9f Update minimum Python version to 3.6 2020-03-12 11:46:11 -04:00
Jeremy Stretch
2cd44d0234 Changelog for #3416 2020-03-12 11:38:39 -04:00
Jeremy Stretch
16bc262a4f Merge pull request #4359 from netbox-community/3416-remove-API-choices
Closes #3416: Remove API _choices endpoints
2020-03-12 11:29:31 -04:00
Jeremy Stretch
ef5c20dc6f Update documentation 2020-03-12 11:14:27 -04:00
Jeremy Stretch
a53f854187 Remove tests for API _choices endpoints 2020-03-12 10:48:53 -04:00
Jeremy Stretch
ea9de37dd1 Remove FieldChoicesViewSet 2020-03-12 10:48:17 -04:00
John Anderson
235d99021b implemented registry for extras model functionality 2020-03-12 04:07:54 -04:00
John Anderson
8af4cf87b5 Merge branch 'develop-2.8' into 3351-plugins 2020-03-12 01:19:15 -04:00
Jeremy Stretch
997247ee77 Update changelog for #1754, #3939 2020-03-11 21:22:06 -04:00
Jeremy Stretch
b92e518370 Merge pull request #4353 from netbox-community/3939-nested-tenantgroups
Closes #3939: Nested tenant groups
2020-03-11 21:20:14 -04:00
Jeremy Stretch
b5d57262f9 Update tests for nested TenantGroups 2020-03-11 21:14:53 -04:00
Jeremy Stretch
45f6ea211d Implement support for nested TenantGroups 2020-03-11 21:12:55 -04:00
Jeremy Stretch
a4a276083a Merge pull request #4351 from netbox-community/1754-nested-rackgroups
Closes #1754: Nested rack groups
2020-03-11 20:03:50 -04:00
Jeremy Stretch
c42613cf4d Update filter fields 2020-03-11 14:57:48 -04:00
Jeremy Stretch
84de0458aa Implement nested RackGroups 2020-03-11 14:40:29 -04:00
Jeremy Stretch
2b33e91e2c Changelog for #2328 2020-03-11 11:27:47 -04:00
Jeremy Stretch
71c363ebc8 Merge pull request #4299 from netbox-community/2328-external-authentication
Closes #2328: External user authentication
2020-03-11 11:17:40 -04:00
Jeremy Stretch
7ffc00159e Tweak settings/middleware to support testing; improve tests 2020-03-11 11:10:26 -04:00
Jeremy Stretch
79aba5edf2 Fixes #4343: Fix Markdown support for tables 2020-03-11 09:52:02 -04:00
John Anderson
a504f5f309 closes #4340 - Enforce unique constraints for device and virtual machine names in the API 2020-03-10 19:15:24 -04:00
Jeremy Stretch
90144ccd9a Add tests for remote authentication configuration 2020-03-10 16:57:34 -04:00
Jeremy Stretch
8c6d35645d Remote auth cleanup 2020-03-10 16:56:57 -04:00
John Anderson
0706c65ce6 Merge branch 'develop-2.8' into 3351-plugins 2020-03-10 15:15:23 -04:00
Jeremy Stretch
0dc3a72912 Merge branch 'develop-2.8' into 2328-external-authentication 2020-03-10 15:07:19 -04:00
Jeremy Stretch
0de857bf7a Merge branch 'develop' into develop-2.8 2020-03-10 15:06:37 -04:00
Jeremy Stretch
55558cb272 Post-release version bump 2020-03-10 14:03:22 -04:00
Jeremy Stretch
e66d065b6d Merge pull request #4339 from netbox-community/develop
Release v2.7.10
2020-03-10 13:59:50 -04:00
Jeremy Stretch
7bf1420463 Release v2.7.10 2020-03-10 13:50:17 -04:00
Jeremy Stretch
3a0b28144f Force mkdocs to v1.1 for RTD build 2020-03-10 13:37:31 -04:00
Jeremy Stretch
bc19072dc6 Update upgrade documentation for non-git installations 2020-03-10 13:24:10 -04:00
Jeremy Stretch
1eddac4066 Fixes #4338: Catch AddrFormatError exception when filtering aggregates/prefixes by an invalid prefix 2020-03-10 11:58:34 -04:00
Jeremy Stretch
2571f22ae5 Revert initial fix for #4336 2020-03-10 11:43:00 -04:00
Jeremy Stretch
5346efe009 Fixes #4337: Allow bulk editing/deletion of all device components matching a query 2020-03-10 10:18:48 -04:00
Jeremy Stretch
bb3f37ca35 Fixes #4336: Ensure interfaces without a channel/unit are ordered before a channel/unit of zero 2020-03-10 10:03:42 -04:00
Jeremy Stretch
0e49a7a1fd Closes #4332: Redirect to a user-friendly error page when CSS/JS resources fail to load 2020-03-09 15:33:57 -04:00
Jeremy Stretch
93159fec4b Update changelog 2020-03-09 14:28:06 -04:00
Jeremy Stretch
ab2ea5697f Closes #4322: Introduce and document local_requirements.txt support for installation/upgrade of optional dependencies 2020-03-09 14:22:27 -04:00
Jeremy Stretch
0eaec6bd83 Merge pull request #4335 from netbox-community/4325-rack-reservation-import
Closes #4325: Add suport for rack reservations CSV import
2020-03-09 13:45:38 -04:00
Jeremy Stretch
8cca22d79c Add nav menu entry for rack reservations import 2020-03-09 13:39:12 -04:00
Jeremy Stretch
e364a25e46 Add test for RackReservation import 2020-03-09 13:35:44 -04:00
Jeremy Stretch
049da81bf2 Convert units to SimpleArrayField 2020-03-09 12:46:12 -04:00
Jeremy Stretch
947affd78f Extend BulkImportView._save_obj to pass request context 2020-03-09 12:39:07 -04:00
Jeremy Stretch
cdcbf20d6a Merge pull request #4334 from netbox-community/4320-clean-up-template-tags-filters
Closes #4320: Clean up template tags filters
2020-03-09 10:56:41 -04:00
Jeremy Stretch
15ab30d0c6 Replace model_name and model_name_verbose filters with meta 2020-03-09 10:50:46 -04:00
Jeremy Stretch
16d3cebf3e Update markdown filter name 2020-03-09 10:42:32 -04:00
Jeremy Stretch
1069ad21d8 Remove unused contains filter 2020-03-09 10:38:29 -04:00
Jeremy Stretch
1423fd9024 Rename gfm filter to render_markdown 2020-03-09 10:31:29 -04:00
Jeremy Stretch
0439be2870 Remove unused getlist and getkey filters 2020-03-09 10:24:37 -04:00
Jeremy Stretch
22246353e2 Remove oneline filter 2020-03-09 10:22:30 -04:00
Jeremy Stretch
02bf6bd3a6 Changelog for #4217 2020-03-09 10:15:18 -04:00
Jeremy Stretch
8d511b0f72 Merge pull request #4333 from netbox-community/4217-contextual-docs
Closes #4217: Implement contextual documentation for models
2020-03-09 10:13:14 -04:00
Jeremy Stretch
4edd0b1fd6 Merge branch 'develop' into 4217-contextual-docs 2020-03-09 09:56:14 -04:00
Jeremy Stretch
f9073a2f07 Fixes #4326: Exclude Python modules without Script classes from scripts list 2020-03-06 20:59:32 -05:00
Jeremy Stretch
ad9dfec894 Started on #4325 (WIP) 2020-03-06 17:14:26 -05:00
Jeremy Stretch
9a829500cd Fix typo 2020-03-06 16:40:00 -05:00
Jeremy Stretch
9fa5004a35 Closes #4324: Add CSV import view for services 2020-03-06 16:33:43 -05:00
Jeremy Stretch
2a5bf2a222 Fixes #4323: Add bulk edit view for power panels 2020-03-06 16:05:26 -05:00
Jeremy Stretch
b22bf0c4b0 Fix upgrade.sh to show virtualenv warning only when needed 2020-03-06 15:07:29 -05:00
Jeremy Stretch
17c76e413d Install wheel before NetBox dependencies 2020-03-06 13:59:19 -05:00
Jeremy Stretch
803287a514 Closes #4313: Remove id__in filters 2020-03-06 12:05:53 -05:00
Jeremy Stretch
1a89e35729 Merge branch 'develop' into develop-2.8 2020-03-06 11:34:01 -05:00
Jeremy Stretch
5950bedfae Post-release version bump 2020-03-06 11:26:59 -05:00
Jeremy Stretch
c1ef87e009 Merge pull request #4321 from netbox-community/develop
Release v2.7.9
2020-03-06 11:23:42 -05:00
Jeremy Stretch
09298dab7a Release v2.7.9 2020-03-06 11:17:17 -05:00
Jeremy Stretch
afcd9b801f Delete squashed migration to avoid 'pending trigger events' exception under certain conditions 2020-03-06 10:32:12 -05:00
Jeremy Stretch
12bedac28a Tweak upgrade script to exit immediately if any individual tasks fail 2020-03-06 10:26:12 -05:00
Jeremy Stretch
c50714ec42 Introduce DOCS_ROOT configuration parameter 2020-03-06 09:35:58 -05:00
kobayashi
9f8d1d2436 Merge pull request #4063 from deathbeam/issue-4062
List choices for choice fields as enums in Swagger openapi spec
2020-03-05 23:58:43 -05:00
kobayashi
920078a738 set fix#4062 to release note 2020-03-05 23:52:33 -05:00
Tomas Slusny
4136a5fd5e List choices for choice fields as enums
Fixes #4062

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
2020-03-05 23:44:37 -05:00
Jeremy Stretch
7d236b607e Tweak navigation max depth 2020-03-05 17:30:55 -05:00
Jeremy Stretch
f2d1c7d82a Update release notes navigation; ditch v1.x release notes 2020-03-05 17:27:59 -05:00
Jeremy Stretch
a7c133daa6 Reset documentation hierarchy 2020-03-05 17:23:56 -05:00
Jeremy Stretch
f89773f4a3 Cleaned up model documentation hierarchy 2020-03-05 17:03:03 -05:00
Jeremy Stretch
363c4acadc Drop GitHub-flavored Markdown (py-gfm) 2020-03-05 16:30:12 -05:00
Jeremy Stretch
b9d66f010f Add missing nav link for device types 2020-03-05 16:26:23 -05:00
Jeremy Stretch
57df250128 Add doc pages for device component templates 2020-03-05 15:24:02 -05:00
Jeremy Stretch
1657d6a0b8 Add missing docs page for tags 2020-03-05 15:16:15 -05:00
Jeremy Stretch
3b200bbffc Remove title from docs modal 2020-03-05 14:54:48 -05:00
Jeremy Stretch
121c7ada1f Add admonition support for embedded docs 2020-03-05 14:49:52 -05:00
Jeremy Stretch
25f4cae3ff Add model doc modal to object add/edit template 2020-03-05 13:56:03 -05:00
Jeremy Stretch
9f42bce16a Update modal template 2020-03-05 13:55:27 -05:00
Jeremy Stretch
defe59d79e Introduce get_docs() template filter for models 2020-03-05 13:52:34 -05:00
Jeremy Stretch
8a23811831 Add missing model doc pages 2020-03-05 13:48:47 -05:00
Jeremy Stretch
5190710aef Refactored device component docs 2020-03-05 11:44:18 -05:00
Jeremy Stretch
04ddc0487a Standardize circuits page 2020-03-05 11:26:10 -05:00
Jeremy Stretch
f9c9cf9ad2 Refactor virtualization docs 2020-03-05 11:24:57 -05:00
Jeremy Stretch
b8b02c7b25 Refactor tenancy docs 2020-03-05 11:21:52 -05:00
Jeremy Stretch
a061a03860 Refactor service docs 2020-03-05 11:20:10 -05:00
Jeremy Stretch
7793f281c5 Refactor secrets docs 2020-03-05 11:18:57 -05:00
Jeremy Stretch
593374764d Refactor IPAM docs 2020-03-05 11:16:54 -05:00
Jeremy Stretch
a320b54c2f Refactor power docs 2020-03-05 11:13:06 -05:00
Jeremy Stretch
6ba24c3296 Refactor site/rack docs 2020-03-05 11:10:09 -05:00
Jeremy Stretch
92949ddcdb Refactor device docs 2020-03-05 11:05:48 -05:00
Jeremy Stretch
b2bc1bf74a Refactor circuits docs 2020-03-05 10:52:56 -05:00
Jeremy Stretch
70397461eb Enable support for Markdown inclusions 2020-03-05 10:47:12 -05:00
Jeremy Stretch
aefed0df89 Add user survey note to README 2020-03-05 08:51:03 -05:00
John Anderson
bc954bc7be Merge branch 'develop-2.8' into 3351-plugins 2020-03-04 22:17:14 -05:00
Jeremy Stretch
e4cfeb1977 Add reminder to reload systemctl daemon if needed 2020-03-04 17:19:16 -05:00
Jeremy Stretch
e4e4af1b2d Delete obsolete old_requirements.txt 2020-03-04 16:07:19 -05:00
Jeremy Stretch
2bd3f1fcc3 Merge pull request #4315 from netbox-community/4195-application-logging
Closes #4195: Application logging
2020-03-04 14:39:12 -05:00
Jeremy Stretch
7454efe648 Documentation and changelog for #4195 2020-03-04 14:33:55 -05:00
Jeremy Stretch
9df2769383 Enable system logging for reports 2020-03-04 14:22:30 -05:00
Jeremy Stretch
36cbbac870 Enable system logging for custom scripts 2020-03-04 14:05:59 -05:00
Jeremy Stretch
406b88777c Add logging for DRF views 2020-03-04 13:32:45 -05:00
Jeremy Stretch
113313e000 Merge pull request #4001 from steffann/738-automatically-check-for-new-releases
Fixes: #738: Automatically check for new versions
2020-03-04 12:22:57 -05:00
Jeremy Stretch
f7c6df6e6a Improved verbosity of upgrade script 2020-03-04 12:20:06 -05:00
Jeremy Stretch
9e92520266 Changelog for #4121 2020-03-04 11:53:53 -05:00
Jeremy Stretch
1dd07337fd Merge pull request #4189 from netbox-community/4121-filter-lookup-expressions
4121 filter lookup expressions
2020-03-04 11:51:19 -05:00
Jeremy Stretch
746bfd8bca Closes #4119: Extend upgrade script to clear expired user sessions 2020-03-04 10:29:22 -05:00
Jeremy Parker
10dee9b57b Fix typo in caching.md (#4310)
Co-authored-by: Jeremy Stretch <jeremy.stretch@networktocode.com>
2020-03-04 10:07:58 -05:00
Jeremy Stretch
31e5d9ffe6 Changelog for #4298 2020-03-04 10:03:39 -05:00
Jeremy Stretch
a45b18b335 Merge pull request #4311 from netbox-community/4298-custom-fields-api
Fixes #4298: Bulk creation of objects with custom fields via API
2020-03-04 10:02:23 -05:00
Jeremy Stretch
57b6ac7cb1 Finish work on improved custom fields API tests 2020-03-04 09:53:49 -05:00
Jeremy Stretch
4611536ca9 Revise custom field API tests to check for single/multiple objects with/without custom field values 2020-03-03 17:07:43 -05:00
Jeremy Stretch
e4abfd192e Introduce CustomFieldDefaultValues class to handle default custom field values 2020-03-03 14:54:48 -05:00
Jeremy Stretch
c85bcbcf31 Merge branch 'develop' into develop-2.8 2020-03-03 13:20:00 -05:00
Jeremy Stretch
cb7932ecda Merge pull request #4308 from kobayashi/4229-docs-python-version
Fix #4229: Describe supported Python version
2020-03-03 12:14:10 -05:00
Jeremy Stretch
e4fc37e91a Merge pull request #4304 from dstarner/4288-incorrect-swagger-type
Set local_context_data serializer on Device and VM to method
2020-03-03 12:13:06 -05:00
Jeremy Stretch
74821c2c17 Closes #4218: Allow negative voltage for DC power feeds 2020-03-03 12:10:08 -05:00
Dan Starner
e6ee9803d4 use FieldInspector for JSONField type 2020-03-03 12:04:46 -05:00
kobayashi
fa992853b0 Describe supported Python version 2020-03-03 10:52:56 -05:00
Jeremy Stretch
1e4dd102bd Closes #4290: Include device name in tooltip on rack elevations 2020-03-03 10:35:07 -05:00
Jeremy Stretch
0f9c37fbc7 Closes #4284: Add MRJ21 port and cable types 2020-03-03 10:13:21 -05:00
Jeremy Stretch
a261060e5c Closes #4305: Add 10-inch option for rack width 2020-03-03 10:07:20 -05:00
Jeremy Stretch
78a1aad6c0 Fixes #4306: Fix toggling of device images for all racks in elevations view 2020-03-03 10:04:35 -05:00
Jeremy Stretch
7b6bd75c22 #4295 follow-up: Tweak handling of initial data for bulk edit forms 2020-03-03 09:43:56 -05:00
Jeremy Stretch
c983dac771 Add logging output to login/logout views 2020-03-02 17:04:54 -05:00
Jeremy Stretch
7a10748355 Add logging output to API viewsets 2020-03-02 16:52:21 -05:00
Jeremy Stretch
ca1186dca1 Add logging output to utility views 2020-03-02 16:38:51 -05:00
Daniel Starner
3070c7e991 fix linting mistake 2020-03-02 15:45:58 -05:00
Dan Starner
406708218b set local_context_data serializer on device and vm to method 2020-03-02 13:47:07 -05:00
Jeremy Stretch
c7b74b2090 Fixes #4300: Pass "commit" argument when executing scripts via REST API 2020-03-02 13:29:32 -05:00
Jeremy Stretch
1b38f3ad3a Merge pull request #4303 from kobayashi/4274-prefix-schema
Fix #4274: Set correct value schema for int typed ChoiceField
2020-03-02 13:14:04 -05:00
Jeremy Stretch
1e1c6526b2 Add BaseFilterSetTest to validate automatic generation of filters 2020-03-02 12:25:21 -05:00
kobayashi
0be5488104 Fix #4274: Set correct value schema for int typed ChoiceField 2020-03-02 11:26:56 -05:00
Jeremy Stretch
13fcdc0c1e Fixes #4301: Fix exception when deleting device type with components 2020-03-02 09:41:37 -05:00
John Anderson
5f5edbc10e added config option to disable plugins 2020-03-01 03:42:05 -05:00
John Anderson
71a8a13644 add api urls and signals interface for detail route buttons 2020-03-01 03:24:17 -05:00
John Anderson
a17c22746d initial work on #3351 2020-02-29 02:23:01 -05:00
John Anderson
e5f8f15293 added lookup map for treenode filter 2020-02-28 19:58:06 -05:00
Jeremy Stretch
22ec11c766 Fix up CentOS installation instructions; add troubleshooting guide 2020-02-28 17:31:51 -05:00
Jeremy Stretch
1b6f721e50 Extend installation docs to include creation of a specific netbox user 2020-02-28 16:25:43 -05:00
Jeremy Stretch
9c88f12abe Add note about Redis config to installation instructions 2020-02-28 15:58:55 -05:00
Jeremy Stretch
e285d0b547 Remove obsolete querydict_to_dict() utility function 2020-02-28 15:47:59 -05:00
Jeremy Stretch
5dc956fbe1 First stab at external authentication support 2020-02-28 15:16:31 -05:00
Jeremy Stretch
1449dfc966 Fixes #4295: Fix assignment of parent LAG during interface bulk edit 2020-02-28 09:44:41 -05:00
Sander Steffann
fcf3b14712 Add unittests 2020-02-27 21:54:43 +01:00
Sander Steffann
28473fa3e0 Disable update check by default 2020-02-27 19:40:06 +01:00
Sander Steffann
8ce106cb4b Move request to background task 2020-02-27 19:36:02 +01:00
Jeremy Stretch
bdf9857e6f Closes #4294: Add tenancy filter tests for all models 2020-02-27 13:28:08 -05:00
Sander Steffann
22ac9f63a1 Don't overwrite the header block, append to it 2020-02-27 18:27:36 +01:00
Sander Steffann
0de7f4712f Fix check for permissions 2020-02-27 18:27:36 +01:00
Sander Steffann
8d92089487 Improve comments and error message on invalid characters in URL 2020-02-27 18:27:36 +01:00
Sander Steffann
3a0849699f Rename settings to be more generic, not GitHub-only 2020-02-27 18:27:36 +01:00
Sander Steffann
008fc5623e Full URL for API, more consistent naming, only enabled for staff and better configuration validation 2020-02-27 18:27:36 +01:00
Sander Steffann
9d66ac4a6a Refactor the code to be more readable 2020-02-27 18:26:15 +01:00
Sander Steffann
405d93c6f2 Update versions.py 2020-02-27 18:26:15 +01:00
Sander Steffann
2fcdc90d3f Automatically check for new versions 2020-02-27 18:26:15 +01:00
dansheps
27e3b6f377 Remove second variables, make widget mandatory on ObjectVar and MultiObjectVar 2020-02-27 07:45:11 -06:00
Jeremy Stretch
faf676e6e0 Closes #4281: Allow filtering device component list views by type 2020-02-26 17:22:53 -05:00
Jeremy Stretch
624566b04e Fixes #4282: Fix label on export button for device types 2020-02-26 16:49:39 -05:00
Jeremy Stretch
5a00939512 Fixes #4285: Include A/Z termination sites in provider circuits table 2020-02-26 16:41:59 -05:00
Jeremy Stretch
4431259cd8 Merge pull request #4287 from netbox-community/3949-virtualenv-install
Closes #3949: Revise installation docs to use a Python virtual environment
2020-02-26 16:04:51 -05:00
Jeremy Stretch
87c914bece Reorganize .gitignore; add /venv/ 2020-02-26 15:59:26 -05:00
Jeremy Stretch
56c26f80b3 Changelog for #3949 2020-02-26 15:56:26 -05:00
Jeremy Stretch
215dbef7a0 Improved formatting of upgrade script messages 2020-02-26 15:40:05 -05:00
Jeremy Stretch
64c9bf27c1 Fix exit statement in upgrade script 2020-02-26 15:34:42 -05:00
Jeremy Stretch
1abc82e718 Update upgrade script & instructions to better accomodate moving to a venv 2020-02-26 15:26:12 -05:00
Jeremy Stretch
be9df3c07d Simplify the systemctl commands 2020-02-26 14:38:25 -05:00
Jeremy Stretch
798ecfc8f0 Clean up the upgrade guide 2020-02-26 14:09:54 -05:00
Jeremy Stretch
015a339202 Update systemd migration guide 2020-02-26 14:09:27 -05:00
Jeremy Stretch
2ee06c13f9 Remove Python 2 migration guide 2020-02-26 13:56:44 -05:00
Jeremy Stretch
0851b97ba5 Update the upgrade script & instructions to use a virtual environment 2020-02-26 13:54:07 -05:00
Jeremy Stretch
1b64f67f2b Update installation instructions to use a Python virtual environment 2020-02-26 12:28:35 -05:00
John Anderson
c908f132ec Merge branch 'develop' into 4121-filter-lookup-expressions 2020-02-26 12:05:27 -05:00
Jeremy Stretch
c78df40cb0 Refactor installtion docs 2020-02-26 11:40:31 -05:00
Jeremy Stretch
5a61bbec26 Fixes #4277: Fix filtering of clusters by tenant 2020-02-26 09:11:38 -05:00
John Anderson
3b4607d30d refactor lookup map logic 2020-02-25 15:16:27 -05:00
Jeremy Stretch
5befe66aa5 Post-release version bump 2020-02-25 15:11:04 -05:00
Jeremy Stretch
3c249a40a0 Merge pull request #4275 from netbox-community/develop
Release v2.7.8
2020-02-25 15:09:41 -05:00
Jeremy Stretch
7e81d5fe11 Release v2.7.8 2020-02-25 15:04:08 -05:00
Jeremy Stretch
6b4858303b Fix object list table width when no filter_form is present 2020-02-25 15:03:27 -05:00
Jeremy Stretch
5000f7f8d7 Extend custom scripts to pass the 'commit' value via run() 2020-02-25 14:49:41 -05:00
Jeremy Stretch
f643af13d7 Fix field label for Prefix.vrf 2020-02-25 14:12:53 -05:00
John Anderson
afc8c9bfe9 fix tenancy filterset bases 2020-02-25 13:50:31 -05:00
Jeremy Stretch
a6e859d9b7 Remove extraneous prefetches from racks queryset 2020-02-25 12:35:27 -05:00
Jeremy Stretch
5bf68493df Changelog & cleanup for #4267 2020-02-25 12:34:48 -05:00
Jeremy Stretch
43f3488270 Merge pull request #4271 from ananace/4267-rack-roles-in-elevations
Fixes #4267: Display rack roles in elevation list view
2020-02-25 12:18:31 -05:00
Jeremy Stretch
62efe0621f Fixes #4272: Interface type should be required by API serializer 2020-02-25 11:20:43 -05:00
Jeremy Stretch
161f03217e Merge pull request #4269 from hSaria/4227-omit-private-changelog
Fixes #4227: Omit internal fields from the change log data
2020-02-25 11:02:22 -05:00
Jeremy Stretch
40b56d7f62 Merge branch 'develop' into 4227-omit-private-changelog 2020-02-25 11:02:11 -05:00
Jeremy Stretch
4eb731cfae Merge pull request #4263 from netbox-community/4237-custom-webhooks
Closes #4237: Enable custom templating for webhook request content
2020-02-25 10:54:30 -05:00
Jeremy Stretch
35786966c6 Changelog for #4237 2020-02-25 10:46:16 -05:00
Jeremy Stretch
c3b64164ba Always use a JSON object to convey change data when no body template is present 2020-02-25 10:43:14 -05:00
Jeremy Stretch
644b4aa42d Revised webhook documentation 2020-02-25 10:24:27 -05:00
Alexander Olofsson
838291c3f3 Display rack roles in elevation list view 2020-02-25 16:00:21 +01:00
Saria Hajjar
3296298d21 Fixes #4227: Omit internal fields from the change log data 2020-02-25 14:48:11 +00:00
Jeremy Stretch
211311be9f Add http_method field to Webhook 2020-02-24 20:42:24 -05:00
Jeremy Stretch
9a532b1eb2 Extend templatization ability to additional_headers field 2020-02-24 17:47:17 -05:00
Jeremy Stretch
1fbd3a2c26 Convert additional_headers to a TextField 2020-02-24 16:59:35 -05:00
Jeremy Stretch
99038ffc44 Enable custom templating for webhook request content 2020-02-24 16:12:46 -05:00
John Anderson
67565ca191 added docs and more tests 2020-02-24 15:03:07 -05:00
Jeremy Stretch
81d001d49e Add a note about X-Frame-Options to the HTTP daemon instructions 2020-02-24 14:30:03 -05:00
Jeremy Stretch
cc4a22b2d1 Merge pull request #4261 from netbox-community/3145-cable-status-decommissioning
Closes #3145: Add a "decommissioning" status for cables
2020-02-24 14:24:34 -05:00
Jeremy Stretch
4d1749cc71 Remove CONNECTION_STATUS_CONNECTED and CONNECTION_STATUS_PLANNED constants 2020-02-24 14:18:19 -05:00
Jeremy Stretch
f7b620c6a2 Closes #3145: Add 'decommissioning' status for cables 2020-02-24 14:09:36 -05:00
Jeremy Stretch
76138f3080 Fixes #4222: Escape double quotes on encapsulated values during CSV export 2020-02-24 13:29:00 -05:00
Jeremy Stretch
36f8d6d259 Disconnect post_save & pre_delete signals after the response has been received 2020-02-24 12:42:51 -05:00
Jeremy Stretch
909971f237 Fixes #4221: Fix exception when deleting a device with interface connections when an interfaces webhook is defined 2020-02-24 12:41:55 -05:00
Jeremy Stretch
4e76e4ec9c Merge pull request #4253 from hSaria/3612-update-screenshots
Fixes #3612: Update screenshots
2020-02-24 11:45:15 -05:00
Saria Hajjar
87d90adaef Downscaled pictures to 50% (~1600 x ~1000) 2020-02-24 16:41:32 +00:00
dansheps
8ed0d0400f Add tests 2020-02-24 10:30:57 -06:00
Jeremy Stretch
cfd813772d Merge pull request #4257 from netbox-community/4250-extend-view-tests
Extend ViewTestCases for create/edit/delete/import views
2020-02-24 11:30:01 -05:00
Jeremy Stretch
2b484955aa Extend ViewTestCases for create/edit/delete/import views to also check non-data-bound GET requests 2020-02-24 11:23:42 -05:00
dansheps
a5853427d4 Update __all__ for #4255 2020-02-24 10:21:17 -06:00
dansheps
d0bd1ad25b Fixes: #4255 - Add new script variable types based on dynamic model fields 2020-02-24 10:18:19 -06:00
dansheps
d9dcc92300 Update release notes for #4230 2020-02-24 09:31:52 -06:00
Daniel Sheppard
d0c82c23bd Merge pull request #4244 from netbox-community/4230-filter_rack_unit_on_elevations
Fixes: #4230 - Fixes rack units filtering on elevation endpoint
2020-02-24 09:25:42 -06:00
Saria Hajjar
6cdb86931e Added separators between screenshots 2020-02-24 15:22:33 +00:00
Saria Hajjar
23d0241865 Updated screenshots with v2.7.7 2020-02-24 15:21:17 +00:00
Jeremy Stretch
61c0a4cc61 Fixes #4252: Fix power port assignment for power outlet templates created via REST API 2020-02-24 10:13:47 -05:00
Jeremy Stretch
b97d3b0716 Fixes #4246: Fix duplication of field attributes when multiple IPNetworkVars are present in a script 2020-02-24 10:01:31 -05:00
Jeremy Stretch
25d126d4ff Call prepare_value() to avoid passing model instances directly to the filterset 2020-02-24 09:31:31 -05:00
Dan Sheppard
2b75e05ea7 Fixes: #4230 - Fixes filtering by position on elevation endpoint
* Add tests for rack elevation filtering
* Add q variable to serializers for RackElevationDetailFilterSerializer
* Add code to allow filtering of position on the rack elevation
2020-02-22 08:24:26 -06:00
Jeremy Stretch
1a997610c7 Fixes #4241: Correct IP address hyperlinks on interface view 2020-02-21 21:43:04 -05:00
Jeremy Stretch
04ee55a40c Fixes #4240: Fix exception when filtering foreign keys by NULL 2020-02-21 21:38:25 -05:00
Jeremy Stretch
1c72d75b62 Fixes #4239: Fix exception when selecting all filtered objects during bulk edit 2020-02-21 20:44:53 -05:00
Jeremy Stretch
9128dc961c Closes #4173: Return graceful error message when webhook queuing fails 2020-02-21 17:21:04 -05:00
Jeremy Stretch
28e3b7af18 Merge branch 'develop' into develop-2.8 2020-02-21 15:26:55 -05:00
Jeremy Stretch
12602a95ea All fields on RenderedGraphSerializer should be read-only 2020-02-21 14:45:07 -05:00
Jeremy Stretch
11d012de4e Fixes #4235: Fix API representation of content_type for export templates 2020-02-21 14:38:38 -05:00
Jeremy Stretch
45cdac6f36 Changelog for #4228 2020-02-21 14:19:02 -05:00
Jeremy Stretch
2c4136f514 Merge pull request #4233 from netbox-community/4228-rack-elevation-images
Fixes #4228: Fix display of device images in rack elevations
2020-02-21 13:55:32 -05:00
Jeremy Stretch
a14c7980f6 Fixes #4232: Enforce consistent background striping in rack elevations 2020-02-21 13:49:28 -05:00
Jeremy Stretch
329740d2a7 Add "Save SVG" link beneath rack elevation display 2020-02-21 13:28:18 -05:00
Jeremy Stretch
8ffba6a279 Clean up rack view CSS 2020-02-21 13:19:45 -05:00
Jeremy Stretch
5a02dc457c Fixes #4228: Fit device images to rack unit; tweak default aspect ratio 2020-02-21 12:43:24 -05:00
Jeremy Stretch
cf312e9690 Changelog for #4224 2020-02-21 09:42:07 -05:00
Jeremy Stretch
20b36f910f Merge pull request #4225 from LuPo/develop
rear rack face doesn't draw if full-height device type assigned only front image
2020-02-21 09:40:23 -05:00
LuPo
0b3111c47f Fix drawing rear elevation when full-height device has been assigned only front image 2020-02-21 13:42:52 +02:00
Jeremy Stretch
493d68a57a Post-release version bump 2020-02-20 14:59:00 -05:00
Jeremy Stretch
5092641157 Merge pull request #4216 from netbox-community/develop
Release v2.7.7
2020-02-20 14:56:27 -05:00
Jeremy Stretch
2b134ea0f0 Release v2.7.7 2020-02-20 14:48:23 -05:00
Jeremy Stretch
58ff08be4e #1529: Add front/rear image fields to DeviceType serializer 2020-02-20 14:37:08 -05:00
Jeremy Stretch
682fd40fff Changelog for #4206 2020-02-20 14:27:26 -05:00
Jeremy Stretch
cdcc63fdf6 Merge pull request #4208 from wtinetworkgear/rj11add
Added serial console_port type rj-11 for a POTS modem connection
2020-02-20 14:26:24 -05:00
Jeremy Stretch
c0052eb416 Closes #4209: Enable filtering interfaces list view by enabled 2020-02-20 14:24:22 -05:00
Jeremy Stretch
74e3e2e5e1 Changelog for #4213 2020-02-20 14:17:18 -05:00
Jeremy Stretch
214470fb84 Rearrange powerfeed view 2020-02-20 14:16:18 -05:00
Jeremy Stretch
e76ea2a03c Merge pull request #4214 from ironick09/develop
Fix Power Feed page to render Custom Fields and Tags
2020-02-20 14:14:57 -05:00
Jeremy Stretch
6c272adb0e Clean up rack headers and border 2020-02-20 14:10:48 -05:00
Jeremy Stretch
51f7b7a5bf Changelog for #1529 2020-02-20 13:49:34 -05:00
Jeremy Stretch
b81622222d Merge pull request #4215 from netbox-community/1529-rack-elevation-images
Closes #1529: Rack elevation images
2020-02-20 13:48:44 -05:00
Jeremy Stretch
e8a8b39c47 Tweak gitignore to include devicetype-images directory 2020-02-20 13:42:23 -05:00
Jeremy Stretch
c78d30d47e Enable toggling of device images on elevations list 2020-02-20 13:20:58 -05:00
Jeremy Stretch
ba6562a5db Add ability to toggle the inclusion of device images when rendering a rack elevation SVG 2020-02-20 13:09:43 -05:00
Josh Niec
b28729baff Fix rendering for powerfeeds_list to show any added custom fields or tags on object
Signed-off-by: Josh Niec <ironick09@gmail.com>
2020-02-20 12:03:09 -06:00
Jeremy Stretch
adf9221bab Refactor rack elevation mixin to RackElevationSVG 2020-02-20 12:48:44 -05:00
Jeremy Stretch
d2157a3423 Add front/rear images for device types; include in rack elevations 2020-02-20 12:11:59 -05:00
Jeremy Stretch
e07ed3de93 Ignore media files 2020-02-20 11:22:04 -05:00
Jeremy Stretch
584539d0a3 #3810: Fix bug in Javascript 2020-02-20 10:20:19 -05:00
Jeremy Stretch
322b328584 Fixes #4211: Include trailing text when naturalizing interface names 2020-02-20 09:49:15 -05:00
Jeremy Stretch
b38eeaebc9 Clarify ciphertext length calculation; remove Python 2 compatibility 2020-02-19 21:14:56 -05:00
Jeremy Stretch
66fa79741d Add min/max length tests for secrets 2020-02-19 21:06:21 -05:00
Ken Partridge
09805ddc4a Added serial console_port type rj-11 for a POTS modem connection 2020-02-19 15:39:53 -08:00
Jeremy Stretch
1130f6b9f0 Remove dependency on RawSQL from IPAddress manager 2020-02-19 17:17:41 -05:00
Jeremy Stretch
38ff01e874 Merge pull request #4207 from netbox-community/3848-django-3.0
Closes #3848: Django 3.0
2020-02-19 15:41:39 -05:00
Jeremy Stretch
be23230938 Update tests to match new string representation of ContentTypes 2020-02-19 15:31:15 -05:00
Jeremy Stretch
7b93155b06 Fix form field ordering; self.fields no longer an OrderedDict 2020-02-19 15:08:15 -05:00
Jeremy Stretch
b7d41bc42c Rename MPTT migration 2020-02-19 14:46:53 -05:00
Jeremy Stretch
e17597a0a9 Update CI build to Python 3.6 and PostgreSQL 9.6 2020-02-19 14:30:49 -05:00
Jeremy Stretch
7a53e24f97 Closes #3810: Preserve slug value when editing existing objects 2020-02-19 13:53:11 -05:00
Jeremy Stretch
f05c7be394 Fixes #4204: Fix assignment of mask length when bulk editing prefixes 2020-02-19 13:28:07 -05:00
Jeremy Stretch
2cf990bd92 Standardize on two-word form of "change log" 2020-02-19 12:45:52 -05:00
Jeremy Stretch
21473548a5 Merge pull request #4181 from hSaria/2511-change-diff
Fixes #2511: Compare object change to the previous change
2020-02-19 12:41:24 -05:00
Jeremy Stretch
626513a8b2 Fixes #4202: Prevent reassignment to master device when bulk editing VC member interfaces 2020-02-19 11:29:42 -05:00
Jeremy Stretch
5871640701 Closes #4199: Update example report to use ChoiceSet 2020-02-19 10:31:10 -05:00
Jeremy Stretch
f1b0421805 Temporary hack to avoid name collision without renaming the secrets app 2020-02-18 18:00:00 -05:00
Jeremy Stretch
8cfb5ac5c6 Fixes #3967: Fix missing migration for interface templates of type "other" 2020-02-18 16:56:50 -05:00
Jeremy Stretch
ae1767b5d0 Remove obsolete InterfaceManager 2020-02-18 16:22:17 -05:00
Jeremy Stretch
84d078a539 Fixes #4196: Fix exception when viewing LLDP neighbors page 2020-02-18 16:21:50 -05:00
Jeremy Stretch
01b9d1a493 Closes #3848: Upgrade to Django 3.0 2020-02-18 16:03:28 -05:00
Jeremy Stretch
2a1de0202f Add helpful links to "new issue" page 2020-02-18 11:43:47 -05:00
Jeremy Stretch
4ea8967c2d Fixes #4194: Role field should not be required when searching/filtering secrets 2020-02-18 11:14:37 -05:00
Jeremy Stretch
a456cbb26c Fixes #4179: Site is required when creating a rack group or power panel 2020-02-18 11:08:16 -05:00
Jeremy Stretch
5b505b21c8 Fixes #4183: Fix representation of NaturalOrderingField values in change log 2020-02-18 10:50:14 -05:00
John Anderson
9116d74cf7 merge develop 2020-02-18 00:39:30 -05:00
John Anderson
a136a0788c #4121 - dynamic filter lookup expressions 2020-02-18 00:32:58 -05:00
Saria Hajjar
89ab6553d6 Changelog for #2511 2020-02-15 23:55:03 +00:00
Saria Hajjar
faa22cb637 Fixes #2511: Compare object change to the previous change 2020-02-15 22:39:08 +00:00
Jeremy Stretch
d6ccf13167 Changelog for #4081 2020-02-14 15:44:52 -05:00
Jeremy Stretch
f6cbce65fa Merge pull request #4178 from netbox-community/4081-drop-ip-family
Closes #4081: Drop the family column from IP objects
2020-02-14 15:42:19 -05:00
Jeremy Stretch
f0ced98dc6 Delete unused test data 2020-02-14 15:17:04 -05:00
Jeremy Stretch
fcdb05238c Restore filters 2020-02-14 15:16:18 -05:00
Jeremy Stretch
8687226cc7 Update family filters in querysets 2020-02-14 15:11:12 -05:00
Jeremy Stretch
047f13ac5d Update tests 2020-02-14 15:10:34 -05:00
Jeremy Stretch
b475a575e4 Drop family column from Aggregate, Prefix, and IPAddress models 2020-02-14 15:04:33 -05:00
Jeremy Stretch
1a8eea5aa9 Fixes #4175: Fix potential exception when bulk editing objects from a filtered list 2020-02-14 14:27:47 -05:00
Jeremy Stretch
8cb6aed8fa Closes #3753: Remove rack units endpoint (replaced with elevation) 2020-02-14 13:59:07 -05:00
Jeremy Stretch
926b1fadf2 Merge branch 'develop' into develop-2.8 2020-02-14 13:44:10 -05:00
Jeremy Stretch
2de8d8b73d Merge pull request #4174 from netbox-community/4164-object-list-template
Closes #4164: Consolidate object list templates
2020-02-14 13:31:25 -05:00
Jeremy Stretch
440f754fec Clean up TODO notes 2020-02-14 13:30:53 -05:00
Jeremy Stretch
815a46bfbe Convert device and VM list views to use obj_list.html 2020-02-14 13:21:32 -05:00
Jeremy Stretch
182fddddd2 Merge branch 'develop' into 4164-object-list-template 2020-02-14 13:11:30 -05:00
Jeremy Stretch
ce89fa74b9 Closes #4170: Improve color contrast in rack elevation drawings 2020-02-14 13:09:01 -05:00
Jeremy Stretch
7ce1289bb2 Clean up unused imports 2020-02-14 12:04:56 -05:00
Jeremy Stretch
e4df02887b Changelog for #3840 2020-02-14 12:04:35 -05:00
Jeremy Stretch
6bc7be7ba5 Merge pull request #3925 from hSaria/3840-limit-vlan-choices
Fixes #3840: Only show valid interface VLAN choices
2020-02-14 11:48:29 -05:00
Saria Hajjar
7aba8e3ec4 Added back clean 2020-02-14 16:43:42 +00:00
Jeremy Stretch
8d5ea5d005 Merge pull request #4169 from dstarner/redis-sentinel-conn-check
[Corollary to #4161] Redis Connection Check when Using Sentinel
2020-02-14 11:43:04 -05:00
Dan Starner
ec0f45e20d remove redis conn check from extras AppConfig 2020-02-14 11:16:59 -05:00
Jeremy Stretch
0c8ad45976 Merge pull request #4172 from dstarner/4171-required-settings-documentation-format
[Fix #4171] fix extraneous formatting of notice boxes in required settings doc
2020-02-14 10:47:40 -05:00
Dan Starner
e431ef09e5 fix extraneous formatting of notice boxes in required settings doc 2020-02-14 10:29:09 -05:00
Dan Starner
03a7f6bbda ammend redis conn check to acccount for sentinel 2020-02-14 09:39:01 -05:00
Jeremy Stretch
a4705fa73a Changelog for #2519 2020-02-14 09:35:43 -05:00
Jeremy Stretch
0a8d39cfe4 Merge pull request #3726 from eSentire/fix-2519
Fix race condition in available-prefix/ip APIs
2020-02-14 09:32:51 -05:00
Jeremy Stretch
1d72436bfc Fixes #4168: Role is not required when creating a virtual machine 2020-02-14 09:13:05 -05:00
Jeremy Stretch
598d23fc03 Post-release version bump 2020-02-13 21:51:03 -05:00
Jeremy Stretch
472a45ddec Merge pull request #4167 from netbox-community/develop
Release v2.7.6
2020-02-13 21:50:44 -05:00
Jeremy Stretch
0863145c7f Release v2.7.6 2020-02-13 21:46:03 -05:00
Jeremy Stretch
909323663e Fixes #4166: Fix schema migrations to enforce maximum character length for naturalized fields 2020-02-13 21:41:00 -05:00
Jeremy Stretch
8212c8f6fc Convert IPAM list views to extend standard template 2020-02-13 17:22:17 -05:00
Jeremy Stretch
8df9bb6fb4 Convert change log view to extend standard template 2020-02-13 17:11:39 -05:00
Jeremy Stretch
ff952fb221 Migrate extras views to use common object list template 2020-02-13 16:39:38 -05:00
John Anderson
9ead2635c5 merge develop 2020-02-13 16:00:07 -05:00
Jeremy Stretch
4d50cad6ed Post-release version bump 2020-02-13 15:39:08 -05:00
Jeremy Stretch
120cbb0159 Merge pull request #4165 from netbox-community/develop
Release v2.7.5
2020-02-13 15:36:50 -05:00
Jeremy Stretch
08ce024473 Release v2.7.5 2020-02-13 15:32:09 -05:00
Jeremy Stretch
807c2f048d Changelog for #3984 2020-02-13 15:16:07 -05:00
Jeremy Stretch
fafcdf7def Merge pull request #4161 from dstarner/issue-3984-redis-sentinel-conn
Fixes #3984: Allow for Redis Sentinel Connection Configuration
2020-02-13 15:14:42 -05:00
Jeremy Stretch
92fab048d1 Add tests for naturalization functions 2020-02-13 15:13:43 -05:00
Jeremy Stretch
6884404957 Migrate virtualization views to use common object list template 2020-02-13 14:24:22 -05:00
Jeremy Stretch
88c917231d Migrate tenancy views to use common object list template 2020-02-13 14:21:14 -05:00
Jeremy Stretch
a054aff3c4 Migrate secrets views to use common object list template 2020-02-13 14:19:14 -05:00
Jeremy Stretch
8fd809ac5e Migrate IPAM views to use common object list template 2020-02-13 14:17:13 -05:00
Jeremy Stretch
fff657cd5a Migrate DCIM views to use common object list template 2020-02-13 14:07:15 -05:00
Jeremy Stretch
4ef15e4dc8 Migrate circuits views to use common object list template 2020-02-13 13:31:04 -05:00
Jeremy Stretch
c5f74cce80 Introduce a common template for object list views 2020-02-13 13:29:50 -05:00
Jeremy Stretch
35498c17d7 Updated the style guide 2020-02-13 11:04:07 -05:00
Jeremy Stretch
874e59b01a Closes #4060: Move secrets panel on home page to righthand column 2020-02-13 10:30:12 -05:00
Dan Starner
72f0e31b84 fixed extraneous linting error 2020-02-13 10:27:56 -05:00
Dan Starner
ba9a2956a8 documentation on redis sentinel 2020-02-13 10:26:03 -05:00
Dan Starner
3538eeda14 allow for redis sentinel connection 2020-02-13 10:26:03 -05:00
Jeremy Stretch
0c89534bfb Closes #4160: Link to full database configuration parameters in configuration docs 2020-02-13 10:08:10 -05:00
Jeremy Stretch
47b15aacef Changelog for #4159 2020-02-13 09:48:12 -05:00
Jeremy Stretch
3e0ab79977 Merge pull request #4162 from netbox-community/4159-caching_redis_using_wrong_key
Fixes: #4159 - Corrects settings.py to use CACHING_REDIS
2020-02-13 09:46:41 -05:00
Jeremy Stretch
344fa72357 renaturalize command should not skip any values 2020-02-13 09:33:01 -05:00
Daniel Sheppard
617fc7659f Fixes: #4159 - Corrects settings.py to use CACHING_REDIS instead of WEBHOOKS_REDIS 2020-02-13 08:26:47 -06:00
Jeremy Stretch
0d91b6b74b Merge pull request #4102 from kobayashi/4093-vm-status-choice
Fixes #4093: Additional status choices for vms
2020-02-12 22:58:43 -05:00
kobayashi
335343642b additional status choices for vms 2020-02-12 22:43:40 -05:00
kobayashi
bc7f5fb33a Modify offline status color for vm 2020-02-12 22:19:17 -05:00
kobayashi
ca56fc709a Fixes #4093: Add decommissioning for vms 2020-02-12 22:19:17 -05:00
Jeremy Stretch
a08ee68033 Exempt pull requests from stalebot 2020-02-12 21:56:23 -05:00
Jeremy Stretch
0d57cb0033 Changelog & docs for #3766 2020-02-12 16:54:40 -05:00
Jeremy Stretch
53804d39bb Merge pull request #4142 from netbox-community/3766-enable_widgets_in_script_fields
Fixes: #3766 - Enable widget usage in scripts
2020-02-12 16:48:08 -05:00
Jeremy Stretch
1e221cd9bb Update changelog 2020-02-12 16:28:19 -05:00
Jeremy Stretch
0c942f18c1 Merge pull request #4068 from netbox-community/4034-prefix_ordering_tests
Fixes: #4034 - Adds Prefix & IPAddress Ordering Tests
2020-02-12 16:27:02 -05:00
Jeremy Stretch
00d32f0a7d Merge pull request #4156 from netbox-community/4153-renaturalize-command
Closes #4153: Add a "renaturalize" management command
2020-02-12 16:20:52 -05:00
Jeremy Stretch
df3fef8bb1 Merge pull request #4154 from netbox-community/4138-device_bays_in_rack_elevations
Fixes: #4138 - Add Device Bay count to rack elevation
2020-02-12 16:19:57 -05:00
Jeremy Stretch
5cc24c055b Tweak docs link for send_mail() to reference stable; formatting 2020-02-12 16:18:08 -05:00
Jeremy Stretch
4064c32a7f Fix nav menu link for configcontext_add 2020-02-12 16:16:23 -05:00
Joshua Corrick
6d7c5d51fe Add email testing example (#4152)
* Add email testing example

Includes an example provided by  Jeremy

* Updated with suggestions

Co-authored-by: Jeremy Stretch <jeremy.stretch@networktocode.com>
2020-02-12 16:15:05 -05:00
Jeremy Stretch
64c0059dd8 Merge pull request #4155 from hSaria/4150-yaml-nested-tags
Fixes #4150: Replace OrderedDict with Dict when rendering YAML
2020-02-12 16:13:32 -05:00
Jeremy Stretch
d0ece2e48d Merge pull request #4144 from netbox-community/3986-rack_positions_svg
Fixes: #3986 - Convert rack units to part of SVG rendered document
2020-02-12 16:06:05 -05:00
Jeremy Stretch
139f18b2e5 Closes #4153: Add a management command to manually renaturalize applicable objects (from #3799) 2020-02-12 15:59:37 -05:00
Saria Hajjar
8eea0331bf Fixes #4150: Replace OrderedDict with Dict when rendering YAML 2020-02-12 19:59:04 +00:00
Daniel Sheppard
62d6e02d6b Modify _draw_elevations
* Add legend_width argument, variable & constant
* Applied legend_width variable where required
* Removed U prefix
2020-02-12 13:15:29 -06:00
Jeremy Stretch
a8601bb1fd Merge pull request #4151 from netbox-community/4146-secretrole-enforcement
Fixes #4146: Fix SecretRole permissions enforcement
2020-02-12 13:51:44 -05:00
Daniel Sheppard
fe452735be Add Device Bay count to rack elevation names 2020-02-12 12:48:13 -06:00
Jeremy Stretch
3b1128f8f3 Establish standard test cases for all models 2020-02-12 13:25:56 -05:00
Daniel Sheppard
0402323ef9 Fixes: #4130
Corrects service name for the RQ worker service in docs/installation/upgrading.md
2020-02-12 11:26:40 -06:00
Jeremy Stretch
5bf85597ed Fixes #4146: Fix SecretRole permissions enforcement 2020-02-12 11:13:32 -05:00
Jeremy Stretch
e4b910fe87 Fixes #4148: Remove dead link to topology maps docs page 2020-02-12 09:44:30 -05:00
Jeremy Stretch
24db573764 Merge pull request #3997 from hSaria/3995-navbar-overflow
Fixes #3995: Navbar scroll when overflowing
2020-02-12 09:41:48 -05:00
Jeremy Stretch
5befa533c6 Merge branch 'develop' into 3995-navbar-overflow 2020-02-12 09:40:31 -05:00
Dan Sheppard
15bc731f61 Convert rack units to part of SVG rendered document 2020-02-11 23:31:51 -06:00
Dan Sheppard
8fb4988fa1 Fix typo in docstring 2020-02-11 21:01:43 -06:00
Daniel Sheppard
ab378ed218 Fixes: #4130
Corrects service name for the RQ worker service in docs/installation/upgrading.md
2020-02-11 20:39:50 -06:00
Daniel Sheppard
56bb053146 Fix test error 2020-02-11 20:27:02 -06:00
Daniel Sheppard
3c3cca8ec1 Enable widget usage (APISelect, APIMultipleSelect, StaticSelect2, etc) in scripts 2020-02-11 20:12:02 -06:00
Dan Sheppard
908586c93a Fix PEP8 errors 2020-02-11 18:21:58 -06:00
Matt Olenik
2e83ce76ed Fix race condition in available-prefix/ip APIs
Implement advisory lock to prevent duplicate records being inserted
when making simultaneous calls. Fixes #2519
2020-02-11 13:36:52 -08:00
Jeremy Stretch
2ab382eec5 Fixes #4137: Disable occupied terminations when connecting a cable to a circuit 2020-02-11 14:56:02 -05:00
Jeremy Stretch
2503978555 Add navigation menu link for adding config contexts 2020-02-11 14:32:41 -05:00
Anton Tokarev
55886d6793 fix typo (#4135)
Co-authored-by: Jeremy Stretch <jeremy.stretch@networktocode.com>
2020-02-11 14:22:32 -05:00
Jeremy Stretch
009c0ba31c Fixes #4134: Device power ports and outlets should inherit type from the parent device type 2020-02-11 14:18:45 -05:00
Jeremy Stretch
ec53e1c74c Merge pull request #4136 from netbox-community/3912-remove-chained-fields
Closes #3912: Remove chained form fields
2020-02-11 14:01:55 -05:00
Jeremy Stretch
7177fcfa61 Use DynamicModelChoiceField for all fields using APISelect 2020-02-11 12:25:40 -05:00
Jeremy Stretch
fb56d5bc66 Account for initial data when binding a DynamicModelChoiceField 2020-02-11 10:21:44 -05:00
Jeremy Stretch
221805a63e Use TreeNode choice fields for region assignment 2020-02-11 09:50:33 -05:00
Jeremy Stretch
da68968d75 Replace FilterChoiceField with DynamicModelMultipleChoiceField 2020-02-11 09:33:41 -05:00
Dan Sheppard
ca795f729f Merge branch '4034-prefix_ordering_tests' of https://github.com/netbox-community/netbox into 4034-prefix_ordering_tests
 Conflicts:
	netbox/ipam/tests/test_ordering.py
2020-02-10 21:38:53 -06:00
Dan Sheppard
ff4e6bd166 Update tests
Add docstrings
Consolidate tests
2020-02-10 21:37:40 -06:00
Jeremy Stretch
5ea30c8628 Replace ChainedModelChoiceField with DynamicModelChoiceField 2020-02-10 17:23:52 -05:00
Jeremy Stretch
a54fcda781 Merge pull request #4133 from netbox-community/4083-serializer-null-choices
Fixes #4083: Permit nullifying applicable choice fields via API requests
2020-02-10 15:16:38 -05:00
Jeremy Stretch
7388fa3556 Fixes #4083: Permit nullifying applicable choice fields via API requests 2020-02-10 15:10:33 -05:00
Jeremy Stretch
a966a4c8ac Closes #4129: Add individual deletion views for device type components 2020-02-10 11:43:51 -05:00
Jeremy Stretch
ebef48e472 Merge pull request #4075 from kobayashi/3507-filter-by-devices
Fixes #3507: Filtering IP by multiple devices
2020-02-10 11:11:18 -05:00
Jeremy Stretch
26ca6b4a84 #4108: Fix null choice population 2020-02-10 10:57:23 -05:00
Jeremy Stretch
3da6f22479 Merge pull request #4128 from netbox-community/4108-apiselect-performance
Closes #4108: Extraneous queryset evaluation by FilterChoiceFields
2020-02-10 10:26:49 -05:00
Jeremy Stretch
d4789b7c9e Changelog for #4108 2020-02-10 10:20:06 -05:00
Jeremy Stretch
5008526db1 Set a default self.to_field_name for FilterChoiceField 2020-02-10 10:08:20 -05:00
Jeremy Stretch
009fc4f301 Remove custom template for APISelect widget 2020-02-10 10:02:42 -05:00
Jeremy Stretch
55f5ede970 Standardize usage of FilterChoiceField 2020-02-10 09:58:33 -05:00
Jeremy Stretch
5ddfde2214 Clean up unneeded code relevant to FilterChoiceField 2020-02-10 09:44:19 -05:00
John Anderson
9284e83270 py3.5 compatibility 2020-02-09 21:32:45 -05:00
John Anderson
a6b43b30e9 functional dynamic filter lookups 2020-02-09 17:46:21 -05:00
John Anderson
a311002141 initial work on dynamic lookup expressions 2020-02-09 03:20:59 -05:00
kobayashi
505cb9cab8 Enabled filtering virtual chassis devices 2020-02-09 00:58:54 -05:00
kobayashi
d5c4a9d159 Fixes #3507: Filtering IP by multiple devices 2020-02-09 00:42:01 -05:00
Saria Hajjar
26ddd96e30 Cleaned duplicate code 2020-02-08 16:18:58 +00:00
Saria Hajjar
f0c83e168e Merge branch 'develop' into 3840-limit-vlan-choices 2020-02-08 16:14:10 +00:00
Jeremy Stretch
885ea8a4d5 Override get_bound_field() on FilterChoiceFieldMixin to restrict the queryset of bound fields 2020-02-07 18:04:40 -05:00
Jeremy Stretch
202a0a0e73 Merge pull request #4122 from netbox-community/3799-natural-ordering-field
Closes #3799: Remove NaturalOrderingManager
2020-02-07 16:26:45 -05:00
Jeremy Stretch
5bfd65b5fe Changelog for #3799 2020-02-07 16:18:15 -05:00
Jeremy Stretch
7c74d2ca65 Convert interface models to use NaturalOrderingField 2020-02-07 15:58:03 -05:00
Jeremy Stretch
9adeed55fb Update table field ordering 2020-02-07 12:44:51 -05:00
Jeremy Stretch
12c7d83a91 Fix PowerOutlet migrations 2020-02-07 12:43:53 -05:00
Jeremy Stretch
dc1b7874ff Store empty names as null 2020-02-07 12:24:38 -05:00
Jeremy Stretch
c72a353733 Enable reverse migration 2020-02-07 12:23:52 -05:00
Jeremy Stretch
35511cfdc1 Remove NaturalOrderingManager 2020-02-07 11:59:32 -05:00
Jeremy Stretch
099c446f38 Convert remaining DCIM models to use NaturalOrderingField 2020-02-07 11:59:16 -05:00
Jeremy Stretch
705c352885 Convert device component templates to use NaturalOrderingField 2020-02-07 11:42:12 -05:00
Jeremy Stretch
12d09e2274 Convert device components to use NaturalOrderingField 2020-02-07 11:36:58 -05:00
Jeremy Stretch
b271fd32bd Introduce NaturalOrderingField 2020-02-07 11:36:22 -05:00
Jeremy Stretch
b3c2b78e8a Chnagelog for #4100 2020-02-07 09:24:51 -05:00
Jeremy Stretch
97a89948c8 Merge pull request #4115 from hSaria/4100-interface-filter-device
Fixes #4100: Added device field to device components filter forms
2020-02-07 09:20:49 -05:00
Jeremy Stretch
1e61fcb485 Merge pull request #4117 from netbox-community/4116-component-bulk-actions
Closes #4116: Enable bulk edit and delete functions for device component list views
2020-02-06 22:03:25 -05:00
Jeremy Stretch
4cc9f2f67d Changelog for #4116 2020-02-06 21:52:10 -05:00
Jeremy Stretch
52257467c3 Tweak bulk edit views to dynamically remove device-dependent fields 2020-02-06 21:44:28 -05:00
Jeremy Stretch
4563749fd9 Enable bulk edit/delete views for all device components 2020-02-06 20:58:14 -05:00
Jeremy Stretch
6d242ec348 Correct typo 2020-02-06 20:46:19 -05:00
Saria Hajjar
d0e00162ed Account for header height 2020-02-07 00:14:05 +00:00
Saria Hajjar
21f2e0b131 Changed navbar scrollbar to auto 2020-02-06 23:30:58 +00:00
hSaria
6ac8d41323 Merge branch 'develop' into 3995-navbar-overflow 2020-02-06 23:18:24 +00:00
Saria Hajjar
bb9e1ad857 Fixes #4100: Added device field to device components filter forms 2020-02-06 23:10:38 +00:00
Jeremy Stretch
98de88de90 Standardize URL paths for VM interfaces 2020-02-06 17:40:04 -05:00
Jeremy Stretch
c571aa68be Changelog for #4113 2020-02-06 16:05:30 -05:00
Jeremy Stretch
091d860ae5 Merge pull request #4114 from netbox-community/4113-component-bulk-editing
Closes #4113: Add bulk edit functionality for device type components
2020-02-06 16:03:37 -05:00
Jeremy Stretch
b5344b0aa7 Fix table links for adding new components 2020-02-06 15:54:52 -05:00
Jeremy Stretch
17e0054941 Fix up bulk editing forms 2020-02-06 15:51:51 -05:00
Jeremy Stretch
1b5969a5ee Add tests for DeviceType component bulk edit views 2020-02-06 15:33:47 -05:00
Jeremy Stretch
3378287b0c Add bulk edit views for DeviceType components 2020-02-06 15:29:10 -05:00
Jeremy Stretch
077d692d6d Merge pull request #4112 from netbox-community/4109-devicetype-component-tests
Closes #4109: Add view tests for device component templates
2020-02-06 14:57:10 -05:00
Jeremy Stretch
5620fdc63e Add tests for device type component views 2020-02-06 14:39:36 -05:00
Jeremy Stretch
f7ca97d51f Fix bulk edit buttons 2020-02-06 13:19:25 -05:00
Jeremy Stretch
d400f92ee8 Overhaul device component template creation views/URLs 2020-02-06 13:13:40 -05:00
Jeremy Stretch
c1792653cc Rename device component edit URLs 2020-02-06 12:18:53 -05:00
Jeremy Stretch
aebfb143e0 Rename component template deletion URLs 2020-02-06 12:16:28 -05:00
Jeremy Stretch
ef4ea06f5d Reorganized device component URLs (again) 2020-02-06 11:51:27 -05:00
Jeremy Stretch
85729f3df8 Simplify help_text for ExpandableNameField 2020-02-06 11:44:29 -05:00
Jeremy Stretch
a2475ee501 Remove obsolete ComponentForm 2020-02-06 11:36:25 -05:00
Jeremy Stretch
71601aad39 Replace HiddenInput widget on device component creation forms with APISelect 2020-02-06 11:29:50 -05:00
Jeremy Stretch
c1c8b5e816 Introduce InventoryItemCreateView to bring inventory items up to par with other components 2020-02-06 10:59:13 -05:00
Jeremy Stretch
2296cdc222 Fixes #4090: Render URL custom fields as links under object view 2020-02-05 17:08:39 -05:00
Jeremy Stretch
070b41e694 Reduce number of changelog entries to improve page loading time 2020-02-05 17:01:46 -05:00
Jeremy Stretch
d04626e75f Fixes #4099: Linkify interfaces on global interfaces list 2020-02-05 16:52:42 -05:00
Jeremy Stretch
68738e683a Fixes #4091: Fix filtering of objects by custom fields using UI search form 2020-02-05 16:39:42 -05:00
Jeremy Stretch
3f2c74f5e7 Merge pull request #4096 from elju/patch-1
Updated forms.py to match current naming (Fix for #4095)
2020-02-05 16:25:34 -05:00
Jeremy Stretch
a58bbccfd3 Fixes #4094: Convert unnecessary regular expressions to strings in URL patterns 2020-02-05 16:12:48 -05:00
Jeremy Stretch
b1e78fa3c4 Merge pull request #4098 from netbox-community/4086-device-component-urls
Closes #4086: Rename device component create/edit/delete URLs
2020-02-05 16:03:14 -05:00
Jeremy Stretch
0d3ff664b6 Move model_to_dict() into assertInstanceEqual(); clean up test data 2020-02-05 15:47:50 -05:00
Jeremy Stretch
b0c0ad7c82 Adapt component creation forms to infer parent device/VM from initial or bound data 2020-02-05 15:31:30 -05:00
Jeremy Stretch
0ad613e6b4 Enable bulk creation tests for device components 2020-02-05 15:22:57 -05:00
Jeremy Stretch
75906f7591 Move component bulk creation views to new URLs 2020-02-05 12:36:38 -05:00
El Ju
c49d977379 Updated forms.py to match current naming 2020-02-05 17:26:44 +01:00
Jeremy Stretch
6b9fa5e76f Enable tests for component bulk edit views 2020-02-05 11:14:07 -05:00
Jeremy Stretch
57a0cf0a33 Fix component bulk edit views 2020-02-05 10:28:39 -05:00
Jeremy Stretch
f8ce67c69f Tweak BulkEditView to improve handling of initial PK values 2020-02-05 09:56:49 -05:00
Jeremy Stretch
d0295f089d Fixes #4089: Selection of power outlet type during bulk update is optional 2020-02-04 20:49:42 -05:00
Jeremy Stretch
f805b57778 Adapt BulkEditView to not require a parent object for device components 2020-02-04 18:08:40 -05:00
Jeremy Stretch
3e79b9d26a Add InterfaceTestCase for virtual machines 2020-02-04 16:40:18 -05:00
Jeremy Stretch
c1639b7781 Move component bulk delete views to new URLs 2020-02-04 16:06:55 -05:00
Jeremy Stretch
fca347e49e Reorder URLs 2020-02-04 15:41:15 -05:00
Jeremy Stretch
32623148dc Post-release version bump 2020-02-04 15:06:58 -05:00
Jeremy Stretch
68fbd9b017 Merge pull request #4088 from netbox-community/develop
Release v2.7.4
2020-02-04 15:04:34 -05:00
Jeremy Stretch
11d67509e0 Release v2.7.4 2020-02-04 14:57:12 -05:00
Jeremy Stretch
c96fc6e21a Merge pull request #4087 from netbox-community/4085-dcim-component-view-tests
Closes #4085: Standardize device component view tests
2020-02-04 14:51:48 -05:00
Jeremy Stretch
763d9b9cf7 Convert all DCIM component view tests to use StandardTestCases 2020-02-04 14:25:02 -05:00
Jeremy Stretch
bece1155ee Introduce create_test_device() to reduce test setup boilerplate 2020-02-04 11:58:52 -05:00
Jeremy Stretch
cbe090cd3c Fixes #4084: Fix exception when creating an interface with tagged VLANs 2020-02-04 11:47:14 -05:00
Jeremy Stretch
c3a6a4520a #3894 follow-up 2020-02-04 10:09:22 -05:00
Jeremy Stretch
67e427403f Merge pull request #3894 from hSaria/2921-tags-select2
Fixes #2921: Replace tags filter with Select2 widget
2020-02-04 09:38:14 -05:00
Jeremy Stretch
0d41d12267 Merge branch 'develop' into 2921-tags-select2 2020-02-04 09:37:31 -05:00
Jeremy Stretch
efb7f151ec Changelog for #3313 2020-02-03 16:20:29 -05:00
Jeremy Stretch
fe22a8d0af Merge pull request #4011 from hSaria/3313-config-context-gui
Fixes #3313: YAML-format the config context in the GUI
2020-02-03 16:13:58 -05:00
Jeremy Stretch
ed99158391 Merge branch 'develop' into 3313-config-context-gui 2020-02-03 16:07:15 -05:00
Jeremy Stretch
b0f7feefa8 Changelog for #3886 2020-02-03 16:04:25 -05:00
Jeremy Stretch
fcd8e93e2e Merge pull request #4014 from hSaria/3886-config-context-cluster
Fixes #3886: Config context cluster (group)
2020-02-03 16:02:56 -05:00
Jeremy Stretch
173c530fab Merge pull request #4064 from netbox-community/3961-change-systemd-instructions
Fixes: #3961 - Update migrate-to-systemd.md documentation
2020-02-03 15:46:20 -05:00
Jeremy Stretch
0a87df48ab Update GitHub issue templates 2020-02-03 14:45:36 -05:00
Jeremy Stretch
eef79e1443 Fixes #4079: Fix assignment of power panel when bulk editing power feeds 2020-02-03 14:34:47 -05:00
Jeremy Stretch
91929aae1b Merge pull request #4080 from netbox-community/4077-view-tests
Closes #4077: Add tests for bulk edit/delete views
2020-02-03 14:32:56 -05:00
Jeremy Stretch
3f13441a5d Add view tests for power panels and power feeds 2020-02-03 14:25:06 -05:00
Jeremy Stretch
7b4f3e8261 Correct view for PowerFeed creation URL 2020-02-03 14:24:32 -05:00
Jeremy Stretch
d431efb7d4 Add bulk edit view tests 2020-02-03 13:53:19 -05:00
Jeremy Stretch
4aa694f044 Skip non-model fields when applying bulk changes 2020-02-03 13:07:46 -05:00
Jeremy Stretch
c3bd1881f5 Correct nullable_fields for ServiceBulkEditForm 2020-02-03 12:25:20 -05:00
Jeremy Stretch
a4aadf730c Correct default_return_url for TagBulkEditView 2020-02-03 11:59:43 -05:00
Jeremy Stretch
24ab082674 Add bulk delete view tests 2020-02-03 10:04:09 -05:00
Saria Hajjar
bceaa4a9a4 Corrected models for cluster and cluster group fields 2020-02-02 23:37:01 +00:00
Jeremy Stretch
5386ed438e Extend standard view test case to validate built-in CSV export 2020-01-31 17:09:50 -05:00
Jeremy Stretch
2ea95941e2 Removed obsolete CSV headers from DeviceType (export is now YAML-based) 2020-01-31 17:08:38 -05:00
Jeremy Stretch
f632b5bc29 Fixes #4067: Correct permission checked when creating a rack (vs. editing) 2020-01-31 16:12:46 -05:00
Jeremy Stretch
cea1e3d090 Fixes #4071: Enforce "view tag" permission on individual tag view 2020-01-31 16:10:16 -05:00
Jeremy Stretch
ce081a6e15 Merge pull request #4072 from netbox-community/4000-view-tests
Closes #4000: Add tests for the create, edit, and delete views of all models
2020-01-31 16:07:32 -05:00
Jeremy Stretch
eb9538d6da Clean up imports 2020-01-31 15:59:26 -05:00
Jeremy Stretch
e50eab2342 Convert virtualization view tests to use StandardTestCases 2020-01-31 15:57:33 -05:00
Jeremy Stretch
5517145ae3 Convert tenancy view tests to use StandardTestCases 2020-01-31 15:44:10 -05:00
Jeremy Stretch
e8e39dc5e3 Convert secrets view tests to use StandardTestCases 2020-01-31 15:37:58 -05:00
Jeremy Stretch
b361cb00f2 Convert IPAM view tests to use StandardTestCases 2020-01-31 15:19:10 -05:00
Jeremy Stretch
3668aa21fe Fix DeviceTypeTestCase permissions assignment for custom tests 2020-01-31 14:29:56 -05:00
Jeremy Stretch
8881bba696 Suppress tag view test until #4071 is fixed 2020-01-31 14:22:56 -05:00
Jeremy Stretch
250bda2bf6 Extend and correct evaluation of view permissions 2020-01-31 14:13:30 -05:00
Jeremy Stretch
936e3424bb Refactor model_to_dict() to better handle tags 2020-01-31 14:12:48 -05:00
Jeremy Stretch
ab7b921641 Convert extras view tests to StandardTestCases 2020-01-31 13:45:09 -05:00
Jeremy Stretch
c9d0dcecf3 model_to_dict(): Convert object lists to PK lists 2020-01-31 13:44:34 -05:00
Jeremy Stretch
86ef739c12 Migrate (most) DCIM view tests to use StandardTestCases 2020-01-31 12:32:33 -05:00
Jeremy Stretch
c14496d0c4 DeviceForm.manufacturer should not be a required field 2020-01-31 12:28:50 -05:00
Jeremy Stretch
a208cbdf0b model_to_dict(): Remove fields that start with an underscore 2020-01-31 12:14:51 -05:00
Jeremy Stretch
6a17be740b post_data(): Ignore iterables 2020-01-31 11:50:12 -05:00
Daniel Sheppard
8e9a0eeef0 Fix PEP8 errors and document functions 2020-01-31 10:05:57 -06:00
Daniel Sheppard
d746448d7d Fixes: #3961 - Edit migrate-to-systemd.md to closely match installation instructions under 3-http-daemon.md 2020-01-31 09:39:27 -06:00
Jeremy Stretch
7daf1df22d Add _get_url() for View test case 2020-01-31 10:30:13 -05:00
Jeremy Stretch
78d43a5d66 Move form/CSV data declaration under setUpTestData 2020-01-31 09:27:41 -05:00
Jeremy Stretch
939b5f2e29 Reorganize test classes to prevent unittest from running the base TestCases 2020-01-31 09:00:01 -05:00
Saria Hajjar
0d18c296a9 Set default config context format to JSON to maintain existing behavior 2020-01-31 11:11:42 +00:00
Jeremy Stretch
98cce7eee4 Added ViewTestCase (WIP) 2020-01-30 21:57:20 -05:00
Jeremy Stretch
e01c984c01 Introduced a custom model_to_dict() 2020-01-30 20:48:26 -05:00
Jeremy Stretch
4522a285e0 Fix headings 2020-01-30 20:05:27 -05:00
Jeremy Stretch
a44c4d14e4 Convert view tests under extras to the new TestCase 2020-01-30 18:13:02 -05:00
Jeremy Stretch
67fafb2b9d Use assertHttpStatus for evaluating HTTP response codes 2020-01-30 18:08:25 -05:00
Jeremy Stretch
179abcc79d Refactor APITestCase to subclass TestCase 2020-01-30 17:57:34 -05:00
Jeremy Stretch
316c0b6168 Merge pull request #4053 from netbox-community/4051-disable-makemigrations
Closes #4051: Disable the makemigrations management command
2020-01-30 16:50:40 -05:00
Jeremy Stretch
ac27759250 Merge branch 'develop' into 4051-disable-makemigrations 2020-01-30 16:49:15 -05:00
Jeremy Stretch
c8c9f78829 Documented the new DEVELOPER configuration parameter 2020-01-30 16:47:44 -05:00
Jeremy Stretch
61ac7c44ba Migrate view tests to use new TestCase class 2020-01-30 16:37:40 -05:00
Jeremy Stretch
43b2c36066 Introduced a custom TestCase 2020-01-30 16:19:51 -05:00
Jeremy Stretch
1a25f5a7f2 Fixes #4030: Fix exception when bulk editing interfaces (revised) 2020-01-30 15:12:10 -05:00
Jeremy Stretch
b9765b857d Merge pull request #4050 from netbox-community/568-customfield-csv-import
Closes #568: Extend CSV import to support custom fields
2020-01-30 14:04:57 -05:00
agrrajag
d0d2af4cab Update 3-http-daemon.md (#4055)
There was no documentation to move back into the netbox folder after installing/configuring nginx. You would move into nginx on line 42 then try and figure out why you couldn't copy gunicorn on line 113.
2020-01-30 14:00:37 -05:00
Jeremy Stretch
4b02d294ce Fixes #4052: Fix error when bulk importing interfaces to virtual machines 2020-01-30 13:55:39 -05:00
Jeremy Stretch
d9b8bc0422 Fix VM interfaces table header alignment 2020-01-30 13:39:50 -05:00
Saria Hajjar
ace8fac2c1 Removed changelog to avoid merge conflicts 2020-01-30 18:29:08 +00:00
Saria Hajjar
ae95b159bc Virtualization interfaces VLAN filtering 2020-01-30 18:26:30 +00:00
Saria Hajjar
ff822743cc Corrected linter warning 2020-01-30 18:10:39 +00:00
Saria Hajjar
7897ebb2ed Corrected changelog 2020-01-30 17:52:30 +00:00
Saria Hajjar
52f7ef4864 Merge branch 'develop' into 2921-tags-select2 2020-01-30 17:51:55 +00:00
Saria Hajjar
5879671971 Avoid overriding private attribute in super 2020-01-30 17:49:42 +00:00
Saria Hajjar
2375d66f75 Added TagFilterField to device components' filter forms 2020-01-30 17:45:03 +00:00
Jeremy Stretch
923c2728b3 Fixes #4056: Repair schema migration for Rack.outer_unit (from #3569) 2020-01-30 12:08:40 -05:00
Jeremy Stretch
4ba2579936 Closes #4051: Disable the makemigrations management command 2020-01-30 10:12:53 -05:00
John Anderson
8274903985 version bump for v2.8.0 2020-01-29 16:46:44 -05:00
Jeremy Stretch
03087e9d01 Fixes #4049: Restore missing tags field in IPAM service serializer 2020-01-29 16:22:06 -05:00
Jeremy Stretch
eafeaab014 Add tests for invalid import data 2020-01-29 16:07:32 -05:00
Jeremy Stretch
c75315fda6 Extend CSV import test 2020-01-29 15:34:55 -05:00
Jeremy Stretch
193435b554 Enable CSV import for custom fields 2020-01-29 14:29:47 -05:00
Dan Sheppard
d30d79b4e3 Cleanup Imports 2020-01-29 12:55:19 -06:00
Dan Sheppard
23155551d1 Remove complex ordering for IP addresses
After review complex ordering does not appear to be required
2020-01-29 12:54:55 -06:00
Jeremy Stretch
e6b018909d Introduced CustomFieldModelCSVForm 2020-01-29 13:53:26 -05:00
Dan Sheppard
22228b58f1 #4034 - Create tests for addresses 2020-01-29 12:52:48 -06:00
Jeremy Stretch
35f2291edc Fix assignment of initial CustomField values when editing an object 2020-01-29 13:31:36 -05:00
Jeremy Stretch
c3f86456d6 Remove get_custom_fields_for_model() 2020-01-29 12:12:47 -05:00
Jeremy Stretch
585ea71d1a Move form field generation logic to CustomField class 2020-01-29 11:44:37 -05:00
Jeremy Stretch
9929a05bfe Update release notes 2020-01-29 11:00:46 -05:00
Jeremy Stretch
f12199dcb5 Rename and simplify CustomFieldChoiceField 2020-01-29 11:00:03 -05:00
Jeremy Stretch
bc7cf63958 Rename and refactor CustomFieldForm 2020-01-29 10:59:18 -05:00
Jeremy Stretch
db3b4505c1 Merge pull request #3885 from hSaria/568-csv-import-cf
Fixes #568: CSV import/export of custom fields
2020-01-29 10:11:40 -05:00
Jeremy Stretch
943c644dc9 Merge pull request #4037 from newlandk/patch-1
Fixes #4039: LDAP Documentation
2020-01-29 10:09:07 -05:00
Jeremy Stretch
e0d538ad31 Fixes #4043: Fix toggling of required fields in custom scripts 2020-01-29 09:40:17 -05:00
Jeremy Stretch
1849473469 Merge pull request #4023 from smutel/UpdateDoc
Fixes #4024: Update nginx documentation
2020-01-29 09:29:50 -05:00
Dan Sheppard
084a68f6d1 #4034 - Create tests for prefixes 2020-01-28 22:11:31 -06:00
Kevin Newland
6fefa3c7dd update ldap documentation
use new ldap cache configuration in documentation
https://github.com/netbox-community/netbox/blob/develop/netbox/netbox/settings.py#L360
2020-01-28 18:34:26 -06:00
Jeremy Stretch
4629cda9ad Post-release version bump 2020-01-28 16:42:33 -05:00
Saria Hajjar
8849f4b0a5 Added cluster groups and clusters to serializers 2020-01-28 17:30:26 +00:00
Samuel Mutel
73b35e72d8 Update nginx documentation 2020-01-27 21:10:10 +01:00
Saria Hajjar
4abd3866ab Fixes #3886: Config context cluster (group) 2020-01-26 10:53:58 +00:00
Saria Hajjar
7cfdc5188c Corrected ConfigContext data 2020-01-25 17:55:01 +00:00
Saria Hajjar
265d5c87e7 Format for local and source contexts 2020-01-25 16:12:37 +00:00
Saria Hajjar
724d3b8894 Fixes #3313: YAML-format the config context in the GUI 2020-01-25 15:56:24 +00:00
Saria Hajjar
8ec0ad96bd Formatting 2020-01-24 22:20:41 +00:00
Saria Hajjar
c22024b618 Added CSV import test 2020-01-24 22:15:09 +00:00
hSaria
ca035a72bd Merge branch 'develop' into 2921-tags-select2 2020-01-24 20:56:36 +00:00
hSaria
deb653cbf3 Merge branch 'develop' into 3840-limit-vlan-choices 2020-01-24 20:54:56 +00:00
hSaria
6ce38ffa0f Merge branch 'develop' into 3995-navbar-overflow 2020-01-23 20:36:35 +00:00
Saria Hajjar
09faaff849 Fixes #3995: Navbar scroll when overflowing 2020-01-23 20:34:06 +00:00
hSaria
06398a9ac6 Merge branch 'develop' into 568-csv-import-cf 2020-01-23 20:27:07 +00:00
Saria Hajjar
bed08a7b07 Use model's get_custom_fields 2020-01-23 20:26:21 +00:00
Saria Hajjar
8f86244b4f Cleaned the CustomField choice field 2020-01-23 18:54:37 +00:00
Saria Hajjar
0a5eecd0e3 Explicitly use the value of the choice, instead of relying on __str__ 2020-01-23 17:37:51 +00:00
Saria Hajjar
0ab19d723d Moved the header join logic after the custom fields are added 2020-01-23 17:18:58 +00:00
Saria Hajjar
9128435113 Removed CustomFieldForm class from models without custom fields 2020-01-23 17:03:14 +00:00
hSaria
bdfead6265 Merge branch 'develop' into 568-csv-import-cf 2020-01-21 21:30:38 +00:00
hSaria
77c8bcef6d Merge branch 'develop' into 2921-tags-select2 2020-01-21 21:29:21 +00:00
hSaria
2684f86594 Merge branch 'develop' into 3840-limit-vlan-choices 2020-01-21 21:27:42 +00:00
hSaria
b11224a8b4 Merge branch 'develop' into 568-csv-import-cf 2020-01-17 11:47:01 +00:00
hSaria
8b02cd47fb Merge branch 'develop' into 2921-tags-select2 2020-01-17 11:45:13 +00:00
hSaria
f052b90ec3 Merge branch 'develop' into 3840-limit-vlan-choices 2020-01-17 11:42:15 +00:00
hSaria
c0a3285b8b Merge branch 'develop' into 568-csv-import-cf 2020-01-16 22:47:10 +00:00
hSaria
a30e50ecc4 Merge branch 'develop' into 3840-limit-vlan-choices 2020-01-16 22:45:23 +00:00
hSaria
42962db263 Merge branch 'develop' into 2921-tags-select2 2020-01-16 21:52:14 +00:00
Saria Hajjar
c31c8b1a25 Moved into v2.7.1 2020-01-16 21:51:37 +00:00
Saria Hajjar
e05cecb481 Moved into v2.7.1 2020-01-16 21:51:01 +00:00
Saria Hajjar
9f68f8d1a6 Update component CSV forms 2020-01-16 16:07:24 +00:00
Saria Hajjar
a2d5aca1d9 Moved changelog to v2.7 2020-01-16 16:05:45 +00:00
Saria Hajjar
89e6de3652 Merge branch 'develop' into 568-csv-import-cf 2020-01-16 16:05:01 +00:00
Saria Hajjar
26ebed0182 Removed legacy work regarding inc/tags_panel.html 2020-01-16 15:42:31 +00:00
Saria Hajjar
2c0f321456 Merge branch '2921-tags-select2' of https://github.com/hSaria/netbox into 2921-tags-select2 2020-01-16 15:34:56 +00:00
Saria Hajjar
8f91e9b079 Added #2921 changelog 2020-01-16 15:34:11 +00:00
Saria Hajjar
2949bfaaa7 Merge branch 'develop' into 2921-tags-select2 2020-01-16 15:33:42 +00:00
Saria Hajjar
c8997868ce Added #3840 changelog 2020-01-16 15:10:25 +00:00
Saria Hajjar
02cf39c85b Merge branch 'develop' into 3840-limit-vlan-choices 2020-01-16 15:09:39 +00:00
Saria Hajjar
201416ba52 Semicolons for completeness 2020-01-15 12:38:09 +00:00
Saria Hajjar
9d846d7b87 Fixes #3840: Only show valid interface VLAN choices 2020-01-15 12:23:34 +00:00
hSaria
a7e87eeadc Merge branch 'develop' into 2921-tags-select2 2020-01-15 09:30:51 +00:00
Saria Hajjar
e10333bf2b Fetch choices during form initialization 2020-01-14 08:22:27 +00:00
hSaria
d075bf5882 Merge branch 'develop' into 568-csv-import-cf 2020-01-13 21:17:29 +00:00
hSaria
83ee83142a Merge branch 'develop' into 2921-tags-select2 2020-01-13 20:17:34 +00:00
Saria Hajjar
865e3e7c9f Updated changelog 2020-01-13 20:17:47 +00:00
Saria Hajjar
2f28dec891 Tag filter field for filter forms 2020-01-13 20:16:13 +00:00
Saria Hajjar
a8d9fe799b Removed tags filter field from view 2020-01-13 19:06:05 +00:00
Saria Hajjar
834fd408bd Fixes #2921: Replace tags filter with Select2 widget 2020-01-11 15:18:27 +00:00
Saria Hajjar
de1355e6bc Changelog #568 2020-01-10 15:00:57 +00:00
Saria Hajjar
37322fc100 Fixed import choice name 2020-01-10 14:58:15 +00:00
Saria Hajjar
f1d5e28f13 CSV import/export custom fields 2020-01-10 14:26:39 +00:00
551 changed files with 22733 additions and 21593 deletions

View File

@@ -5,7 +5,9 @@ about: Report a reproducible bug in the current release of NetBox
---
<!--
NOTE: This form is only for reproducible bugs. If you need assistance with
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:
@@ -13,24 +15,24 @@ about: Report a reproducible bug in the current release of NetBox
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.
before submitting a bug report, and that any plugins have been disabled.
-->
### Environment
* Python version: <!-- Example: 3.5.4 -->
* NetBox version: <!-- Example: 2.5.2 -->
* 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 (or the current beta
release where applicable). 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 wrapper like pynetbox.
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.
1.
2.
3.
<!-- What did you expect to happen? -->
### Expected Behavior

9
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,9 @@
# Reference: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
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

View File

@@ -5,6 +5,8 @@ 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.
-->
@@ -14,5 +16,13 @@ about: Suggest an addition or modification to the NetBox documentation
[ ] 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

@@ -5,7 +5,9 @@ about: Propose a new NetBox feature or enhancement
---
<!--
NOTE: This form is only for proposing specific new features or enhancements.
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:
@@ -19,8 +21,8 @@ about: Propose a new NetBox feature or enhancement
before submitting a bug report.
-->
### Environment
* Python version: <!-- Example: 3.5.4 -->
* NetBox version: <!-- Example: 2.3.6 -->
* Python version: <!-- Example: 3.6.9 -->
* NetBox version: <!-- Example: 2.7.3 -->
<!--
Describe in detail the new functionality you are proposing. Include any

View File

@@ -1,14 +1,13 @@
---
name: 🏡 Housekeeping
about: A change pertaining to the codebase itself
about: A change pertaining to the codebase itself (developers only)
---
<!--
NOTE: This type of issue should be opened only by those reasonably familiar
with NetBox's code base and interested in contributing to its development.
Describe the proposed change(s) in detail.
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

3
.github/stale.yml vendored
View File

@@ -1,5 +1,8 @@
# 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: 14

9
.gitignore vendored
View File

@@ -1,4 +1,5 @@
*.pyc
*.swp
/netbox/netbox/configuration.py
/netbox/netbox/ldap_config.py
/netbox/reports/*
@@ -6,15 +7,15 @@
/netbox/scripts/*
!/netbox/scripts/__init__.py
/netbox/static
.idea
/venv/
/*.sh
local_requirements.txt
!upgrade.sh
fabfile.py
*.swp
gunicorn_config.py
gunicorn.py
netbox.log
netbox.pid
.DS_Store
.vscode
.idea
.coverage
.vscode

View File

@@ -3,10 +3,11 @@ services:
- postgresql
- redis-server
addons:
postgresql: "9.4"
postgresql: "9.6"
language: python
python:
- "3.5"
- "3.6"
- "3.7"
install:
- pip install -r requirements.txt
- pip install pycodestyle

View File

@@ -22,21 +22,25 @@ or join us in the #netbox Slack channel on [NetworkToCode](https://networktocode
| **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/) |
## Screenshots
### 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
## Installation
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
## 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).)
@@ -45,6 +49,6 @@ For general discussion, please consider joining our [mailing list](https://group
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
## Related projects
Please see [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for a list of relevant community projects.

View File

@@ -22,6 +22,10 @@ django-filter
# https://github.com/django-mptt/django-mptt
django-mptt
# Context managers for PostgreSQL advisory locks
# https://github.com/Xof/django-pglocks
django-pglocks
# Prometheus metrics library for Django
# https://github.com/korfuri/django-prometheus
django-prometheus
@@ -54,14 +58,17 @@ djangorestframework
# https://github.com/axnsan12/drf-yasg
drf-yasg[validation]
# WSGI HTTP server
# https://gunicorn.org/
gunicorn
# Platform-agnostic template rendering engine
# https://github.com/pallets/jinja
Jinja2
# Simple markup language for rendering HTML
# https://github.com/Python-Markdown/markdown
# py-gfm requires Markdown<3.0
Markdown<3.0
Markdown
# Library for manipulating IP prefixes and addresses
# https://github.com/drkjam/netaddr
@@ -75,10 +82,6 @@ Pillow
# https://github.com/psycopg/psycopg2
psycopg2-binary
# GitHub-flavored Markdown extensions
# https://github.com/zopieux/py-gfm
py-gfm
# Extensive cryptographic library (fork of pycrypto)
# https://github.com/Legrandin/pycryptodome
pycryptodome

26
contrib/apache.conf Normal file
View File

@@ -0,0 +1,26 @@
<VirtualHost *:443>
ProxyPreserveHost On
# CHANGE THIS TO YOUR SERVER'S NAME
ServerName netbox.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/netbox.crt
SSLCertificateKeyFile /etc/ssl/private/netbox.key
Alias /static /opt/netbox/netbox/static
<Directory /opt/netbox/netbox/static>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
<Location /static>
ProxyPass !
</Location>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
ProxyPass / http://127.0.0.1:8001/
ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>

View File

@@ -7,12 +7,11 @@ Wants=network-online.target
[Service]
Type=simple
User=www-data
Group=www-data
User=netbox
Group=netbox
WorkingDirectory=/opt/netbox
ExecStart=/usr/bin/python3 /opt/netbox/netbox/manage.py rqworker
ExecStart=/opt/netbox/venv/bin/python3 /opt/netbox/netbox/manage.py rqworker
Restart=on-failure
RestartSec=30

View File

@@ -7,12 +7,12 @@ Wants=network-online.target
[Service]
Type=simple
User=www-data
Group=www-data
User=netbox
Group=netbox
PIDFile=/var/tmp/netbox.pid
WorkingDirectory=/opt/netbox
ExecStart=/usr/local/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
ExecStart=/opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
Restart=on-failure
RestartSec=30

29
contrib/nginx.conf Normal file
View File

@@ -0,0 +1,29 @@
server {
listen 443 ssl;
# CHANGE THIS TO YOUR SERVER'S NAME
server_name netbox.example.com;
ssl_certificate /etc/ssl/certs/netbox.crt;
ssl_certificate_key /etc/ssl/private/netbox.key;
client_max_body_size 25m;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
# Redirect HTTP traffic to HTTPS
listen 80;
server_name _;
return 301 https://$host$request_uri;
}

View File

@@ -3,7 +3,7 @@
To improve performance, NetBox supports caching for most object and list views. Caching is implemented using Redis,
and [django-cacheops](https://github.com/Suor/django-cacheops)
Several management commands are avaliable for administrators to manaully invalidate cache entries in extenuating circumstances.
Several management commands are avaliable for administrators to manually invalidate cache entries in extenuating circumstances.
To invalidate a specifc model instance (for example a Device with ID 34):
```

View File

@@ -1,5 +1,3 @@
# Contextual Configuration Data
# Context Data
Sometimes it is desirable to associate arbitrary data with a group of devices to aid in their configuration. For example, you might want to associate a set of syslog servers for all devices at a particular site. Context data enables the association of arbitrary data to devices and virtual machines grouped by region, site, role, platform, and/or tenant. Context data is arranged hierarchically, so that data with a higher weight can be entered to override more general lower-weight data. Multiple instances of data are automatically merged by NetBox to present a single dictionary for each object.
Devices and Virtual Machines may also have a local config context defined. This local context will always overwrite the rendered config context objects for the Device/VM. This is useful in situations were the device requires a one-off value different from the rest of the environment.
{!docs/models/extras/configcontext.md!}

View File

@@ -24,7 +24,7 @@ Only links which render with non-empty text are included on the page. You can em
For example, if you only want to display a link for active devices, you could set the link text to
```
{% if obj.status == 1 %}View NMS{% endif %}
{% if obj.status == 'active' %}View NMS{% endif %}
```
The link will not appear when viewing a device with any status other than "active."

View File

@@ -27,11 +27,17 @@ class MyScript(Script):
var2 = IntegerVar(...)
var3 = ObjectVar(...)
def run(self, data):
def run(self, data, commit):
...
```
The `run()` method is passed a single argument: a dictionary containing all of the variable data passed via the web form. Your script can reference this data during execution.
The `run()` method should accept two arguments:
* `data` - A dictionary containing all of the variable data passed via the web form.
* `commit` - A boolean indicating whether database changes will be committed.
!!! note
The `commit` argument was introduced in NetBox v2.7.8. Backward compatibility is maintained for scripts which accept only the `data` argument, however moving forward scripts should accept both arguments.
Defining variables is optional: You may create a script with only a `run()` method if no user input is needed.
@@ -57,7 +63,7 @@ A human-friendly description of what your script does.
### `field_order`
A list of field names indicating the order in which the form fields should appear. This is optional, however on Python 3.5 and earlier the fields will appear in random order. (Declarative ordering is preserved on Python 3.6 and above.) For example:
A list of field names indicating the order in which the form fields should appear. This is optional, and should not be required on Python 3.6 and above. For example:
```
field_order = ['var1', 'var2', 'var3']
@@ -177,10 +183,11 @@ An IPv4 or IPv6 network with a mask. Returns a `netaddr.IPNetwork` object. Two a
All variables support the following default options:
* `label` - The name of the form field
* `description` - A brief description of the field
* `default` - The field's default value
* `description` - A brief description of the field
* `label` - The name of the form field
* `required` - Indicates whether the field is mandatory (default: true)
* `widget` - The class of form widget to use (see the [Django documentation](https://docs.djangoproject.com/en/stable/ref/forms/widgets/))
## Example
@@ -195,7 +202,7 @@ These variables are presented as a web form to be completed by the user. Once su
```
from django.utils.text import slugify
from dcim.constants import *
from dcim.choices import DeviceStatusChoices, SiteStatusChoices
from dcim.models import Device, DeviceRole, DeviceType, Site
from extras.scripts import *
@@ -221,13 +228,13 @@ class NewBranchScript(Script):
)
)
def run(self, data):
def run(self, data, commit):
# Create the new site
site = Site(
name=data['site_name'],
slug=slugify(data['site_name']),
status=SITE_STATUS_PLANNED
status=SiteStatusChoices.STATUS_PLANNED
)
site.save()
self.log_success("Created new site: {}".format(site))
@@ -239,7 +246,7 @@ class NewBranchScript(Script):
device_type=data['switch_model'],
name='{}-switch{}'.format(site.slug, i),
site=site,
status=DEVICE_STATUS_PLANNED,
status=DeviceStatusChoices.STATUS_PLANNED,
device_role=switch_role
)
switch.save()

View File

@@ -3,7 +3,7 @@
NetBox supports integration with the [NAPALM automation](https://napalm-automation.net/) library. NAPALM allows NetBox to fetch live data from devices and return it to a requester via its REST API.
!!! info
To enable the integration, the NAPALM library must be installed. See [installation steps](../../installation/2-netbox/#napalm-automation-optional) for more information.
To enable the integration, the NAPALM library must be installed. See [installation steps](../../installation/3-netbox/#napalm-automation-optional) for more information.
```
GET /api/dcim/devices/1/napalm/?method=get_environment

View File

@@ -32,3 +32,7 @@ This can be setup by first creating a shared directory and then adding this line
```
environment=prometheus_multiproc_dir=/tmp/prometheus_metrics
```
#### Accuracy
If having accurate long-term metrics in a multiprocess environment is important to you then 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

@@ -32,7 +32,7 @@ class DeviceIPsReport(Report):
Within each report class, we'll create a number of test methods to execute our report's logic. In DeviceConnectionsReport, for instance, we want to ensure that every live device has a console connection, an out-of-band management connection, and two power connections.
```
from dcim.constants import CONNECTION_STATUS_PLANNED, DEVICE_STATUS_ACTIVE
from dcim.choices import DeviceStatusChoices
from dcim.models import ConsolePort, Device, PowerPort
from extras.reports import Report
@@ -43,13 +43,14 @@ class DeviceConnectionsReport(Report):
def test_console_connection(self):
# Check that every console port for every active device has a connection defined.
for console_port in ConsolePort.objects.prefetch_related('device').filter(device__status=DEVICE_STATUS_ACTIVE):
active = DeviceStatusChoices.STATUS_ACTIVE
for console_port in ConsolePort.objects.prefetch_related('device').filter(device__status=active):
if console_port.connected_endpoint is None:
self.log_failure(
console_port.device,
"No console connection defined for {}".format(console_port.name)
)
elif console_port.connection_status == CONNECTION_STATUS_PLANNED:
elif not console_port.connection_status:
self.log_warning(
console_port.device,
"Console connection for {} marked as planned".format(console_port.name)
@@ -60,12 +61,12 @@ class DeviceConnectionsReport(Report):
def test_power_connections(self):
# Check that every active device has at least two connected power supplies.
for device in Device.objects.filter(status=DEVICE_STATUS_ACTIVE):
for device in Device.objects.filter(status=DeviceStatusChoices.STATUS_ACTIVE):
connected_ports = 0
for power_port in PowerPort.objects.filter(device=device):
if power_port.connected_endpoint is not None:
connected_ports += 1
if power_port.connection_status == CONNECTION_STATUS_PLANNED:
if not power_port.connection_status:
self.log_warning(
device,
"Power connection for {} marked as planned".format(power_port.name)

View File

@@ -1,24 +1,3 @@
# Tags
# Tagging
Tags are free-form text labels which can be applied to a variety of objects within NetBox. Tags are created on-demand as they are assigned to objects. Use commas to separate tags when adding multiple tags to an object (for example: `Inventoried, Monitored`). Use double quotes around a multi-word tag when adding only one tag, e.g. `"Core Switch"`.
Each tag has a label and a URL-friendly slug. For example, the slug for a tag named "Dunder Mifflin, Inc." would be `dunder-mifflin-inc`. The slug is generated automatically and makes tags easier to work with as URL parameters.
Objects can be filtered by the tags they have applied. For example, the following API request will retrieve all devices tagged as "monitored":
```
GET /api/dcim/devices/?tag=monitored
```
Tags are included in the API representation of an object as a list of plain strings:
```
{
...
"tags": [
"Core Switch",
"Monitored"
],
...
}
```
{!docs/models/extras/tag.md!}

View File

@@ -1,61 +1,106 @@
# Webhooks
A webhook defines an HTTP request that is sent to an external application when certain types of objects are created, updated, and/or deleted in NetBox. When a webhook is triggered, a POST request is sent to its configured URL. This request will include a full representation of the object being modified for consumption by the receiver. Webhooks are configured via the admin UI under Extras > Webhooks.
A webhook is a mechanism for conveying to some external system a change that took place in NetBox. For example, you may want to notify a monitoring system whenever a device status is changed in NetBox. This can be done by creating a webhook for the device model in NetBox. When NetBox detects a change to a device, an HTTP request containing the details of the change and who made it be sent to the specified receiver. Webhooks are configured in the admin UI under Extras > Webhooks.
An optional secret key can be configured for each webhook. This will append a `X-Hook-Signature` header to the request, consisting of a HMAC (SHA-512) hex digest of the request body using the secret as the key. This digest can be used by the receiver to authenticate the request's content.
## Configuration
## Requests
* **Name** - A unique name for the webhook. The name is not included with outbound messages.
* **Object type(s)** - The type or types of NetBox object that will trigger the webhook.
* **Enabled** - If unchecked, the webhook will be inactive.
* **Events** - A webhook may trigger on any combination of create, update, and delete events. At least one event type must be selected.
* **HTTP method** - The type of HTTP request to send. Options include GET, POST, PUT, PATCH, and DELETE.
* **URL** - The fuly-qualified URL of the request to be sent. This may specify a destination port number if needed.
* **HTTP content type** - The value of the request's `Content-Type` header. (Defaults to `application/json`)
* **Additional headers** - Any additional headers to include with the request (optional). Add one header per line in the format `Name: Value`. Jinja2 templating is supported for this field (see below).
* **Body template** - The content of the request being sent (optional). Jinja2 templating is supported for this field (see below). If blank, NetBox will populate the request body with a raw dump of the webhook context. (If the HTTP cotent type is set to `application/json`, this will be formatted as a JSON object.)
* **Secret** - A secret string used to prove authenticity of the request (optional). This will append a `X-Hook-Signature` header to the request, consisting of a HMAC (SHA-512) hex digest of the request body using the secret as the key.
* **SSL verification** - Uncheck this option to disable validation of the receiver's SSL certificate. (Disable with caution!)
* **CA file path** - The file path to a particular certificate authority (CA) file to use when validating the receiver's SSL certificate (optional).
The webhook POST request is structured as so (assuming `application/json` as the Content-Type):
## Jinja2 Template Support
[Jinja2 templating](https://jinja.palletsprojects.com/) is supported for the `additional_headers` and `body_template` fields. This enables the user to convey change data in the request headers as well as to craft a customized request body. Request content can be crafted to enable the direct interaction with external systems by ensuring the outgoing message is in a format the receiver expects and understands.
For example, you might create a NetBox webhook to [trigger a Slack message](https://api.slack.com/messaging/webhooks) any time an IP address is created. You can accomplish this using the following configuration:
* Object type: IPAM > IP address
* HTTP method: POST
* URL: <Slack incoming webhook URL>
* HTTP content type: `application/json`
* Body template: `{"text": "IP address {{ data['address'] }} was created by {{ username }}!"}`
### Available Context
The following data is available as context for Jinja2 templates:
* `event` - The type of event which triggered the webhook: created, updated, or deleted.
* `model` - The NetBox model which triggered the change.
* `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.
### Default Request Body
If no body template is specified, the request body will be populated with a JSON object containing the context data. For example, a newly created site might appear as follows:
```no-highlight
{
"event": "created",
"timestamp": "2019-10-12 12:51:29.746944",
"username": "admin",
"timestamp": "2020-02-25 15:10:26.010582+00:00",
"model": "site",
"request_id": "43d8e212-94c7-4f67-b544-0dcde4fc0f43",
"username": "jstretch",
"request_id": "fdbca812-3142-4783-b364-2e2bd5c16c6a",
"data": {
"id": 19,
"name": "Site 1",
"slug": "site-1",
"status":
"value": "active",
"label": "Active",
"id": 1
},
"region": null,
...
}
}
```
`data` is the serialized representation of the model instance(s) from the event. The same serializers from the NetBox API are used. So an example of the payload for a Site delete event would be:
## 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.
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.
## Troubleshooting
To assist with verifying that the content of outgoing webhooks is rendered correctly, NetBox provides a simple HTTP listener that can be run locally to receive and display webhook requests. First, modify the target URL of the desired webhook to `http://localhost:9000/`. This will instruct NetBox to send the request to the local server on TCP port 9000. Then, start the webhook receiver service from the NetBox root directory:
```no-highlight
{
"event": "deleted",
"timestamp": "2019-10-12 12:55:44.030750",
"username": "johnsmith",
"model": "site",
"request_id": "e9bb83b2-ebe4-4346-b13f-07144b1a00b4",
"data": {
"asn": None,
"comments": "",
"contact_email": "",
"contact_name": "",
"contact_phone": "",
"count_circuits": 0,
"count_devices": 0,
"count_prefixes": 0,
"count_racks": 0,
"count_vlans": 0,
"custom_fields": {},
"facility": "",
"id": 54,
"name": "test",
"physical_address": "",
"region": None,
"shipping_address": "",
"slug": "test",
"tenant": None
}
}
$ python netbox/manage.py webhook_receiver
Listening on port http://localhost:9000. Stop with CONTROL-C.
```
A request is considered successful if the response status code is any one of a list of "good" statuses defined in the [requests library](https://github.com/requests/requests/blob/205755834d34a8a6ecf2b0b5b2e9c3e6a7f4e4b6/requests/models.py#L688), otherwise the request is marked as having failed. The user may manually retry a failed request.
You can test the receiver itself by sending any HTTP request to it. For example:
## Backend Status
```no-highlight
$ curl -X POST http://localhost:9000 --data '{"foo": "bar"}'
```
Django-rq includes a status page in the admin site which can be used to view the result of processed webhooks and manually retry any failed webhooks. Access it from http://netbox.local/admin/webhook-backend-status/.
The server will print output similar to the following:
```no-highlight
[1] Tue, 07 Apr 2020 17:44:02 GMT 127.0.0.1 "POST / HTTP/1.1" 200 -
Host: localhost:9000
User-Agent: curl/7.58.0
Accept: */*
Content-Length: 14
Content-Type: application/x-www-form-urlencoded
{"foo": "bar"}
------------
```
Note that `webhook_receiver` does not actually _do_ anything with the information received: It merely prints the request headers and body for inspection.
Now, when the NetBox webhook is triggered and processed, you should see its headers and content appear in the terminal where the webhook receiver is listening. If you don't, check that the `rqworker` process is running and that webhook events are being placed into the queue (visible under the NetBox admin UI).

View File

@@ -1,3 +1,5 @@
# The NetBox Python Shell
NetBox includes a Python shell within which objects can be directly queried, created, modified, and deleted. To enter the shell, run the following command:
```
@@ -8,8 +10,8 @@ This will launch a customized version of [the built-in Django shell](https://doc
```
$ ./manage.py nbshell
### NetBox interactive shell (jstretch-laptop)
### Python 3.5.2 | Django 2.0.8 | NetBox 2.4.3
### NetBox interactive shell (localhost)
### Python 3.6.9 | Django 2.2.11 | NetBox 2.7.10
### lsmodels() will show available models. Use help(<model>) for more info.
```

View File

@@ -1,11 +1,13 @@
# Replicating the Database
# Replicating NetBox
## Replicating the Database
NetBox uses [PostgreSQL](https://www.postgresql.org/) for its database, so general PostgreSQL best practices will apply to NetBox. You can dump and restore the database using the `pg_dump` and `psql` utilities, respectively.
!!! note
The examples below assume that your database is named `netbox`.
## Export the Database
### Export the Database
Use the `pg_dump` utility to export the entire database to a file:
@@ -19,7 +21,7 @@ When replicating a production database for development purposes, you may find it
pg_dump --exclude-table-data=extras_objectchange netbox > netbox.sql
```
## Load an Exported Database
### Load an Exported Database
!!! warning
This will destroy and replace any existing instance of the database.
@@ -32,7 +34,7 @@ psql netbox < netbox.sql
Keep in mind that PostgreSQL user accounts and permissions are not included with the dump: You will need to create those manually if you want to fully replicate the original database (see the [installation docs](../installation/1-postgresql.md)). When setting up a development instance of NetBox, it's strongly recommended to use different credentials anyway.
## Export the Database Schema
### Export the Database Schema
If you want to export only the database schema, and not the data itself (e.g. for development reference), do the following:
@@ -47,11 +49,11 @@ python3 manage.py invalidate all
---
# Replicating Media
## Replicating Media
NetBox stored uploaded files (such as image attachments) in its media directory. To fully replicate an instance of NetBox, you'll need to copy both the database and the media files.
## Archive the Media Directory
### Archive the Media Directory
Execute the following command from the root of the NetBox installation path (typically `/opt/netbox`):
@@ -59,7 +61,7 @@ Execute the following command from the root of the NetBox installation path (typ
tar -czf netbox_media.tar.gz netbox/media/
```
## Restore the Media Directory
### Restore the Media Directory
To extract the saved archive into a new installation, run the following from the installation root:

View File

@@ -1,19 +1,10 @@
# REST API Authentication
The NetBox API employs token-based authentication. For convenience, cookie authentication can also be used when navigating the browsable API.
# Tokens
{!docs/models/users/token.md!}
A token is a unique identifier that identifies a user to the API. Each user in NetBox may have one or more tokens which he or she can use to authenticate to the API. To create a token, navigate to the API tokens page at `/user/api-tokens/`.
!!! note
The creation and modification of API tokens can be restricted per user by an administrator. If you don't see an option to create an API token, ask an administrator to grant you access.
Each token contains a 160-bit key represented as 40 hexadecimal characters. When creating a token, you'll typically leave the key field blank so that a random key will be automatically generated. However, NetBox allows you to specify a key in case you need to restore a previously deleted token to operation.
By default, a token can be used for all operations available via the API. Deselecting the "write enabled" option will restrict API requests made with the token to read operations (e.g. GET) only.
Additionally, a token can be set to expire at a specific time. This can be useful if an external client needs to be granted temporary access to NetBox.
# Authenticating to the API
## Authenticating to the API
By default, read operations will be available without authentication. In this case, a token may be included in the request, but is not necessary.

View File

@@ -14,7 +14,7 @@ To authenticate a request, attach your token in an `Authorization` header:
curl -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0"
```
### Retrieving a list of sites
## Retrieving a list of sites
Send a `GET` request to the object list endpoint. The response contains a paginated list of JSON objects.
@@ -51,7 +51,7 @@ $ curl -H "Accept: application/json; indent=4" http://localhost/api/dcim/sites/
}
```
### Retrieving a single site by ID
## Retrieving a single site by ID
Send a `GET` request to the object detail endpoint. The response contains a single JSON object.
@@ -80,7 +80,7 @@ $ curl -H "Accept: application/json; indent=4" http://localhost/api/dcim/sites/6
}
```
### Creating a new site
## Creating a new site
Send a `POST` request to the site list endpoint with token authentication and JSON-formatted data. Only mandatory fields are required. This example includes one non required field, "region."
@@ -104,7 +104,7 @@ $ curl -X POST -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0
```
Note that in this example we are creating a site bound to a region with the ID of 5. For write API actions (`POST`, `PUT`, and `PATCH`) the integer ID value is used for `ForeignKey` (related model) relationships, instead of the nested representation that is used in the `GET` (list) action.
### Modify an existing site
## Modify an existing site
Make an authenticated `PUT` request to the site detail endpoint. As with a create (`POST`) request, all mandatory fields must be included.
@@ -112,14 +112,14 @@ Make an authenticated `PUT` request to the site detail endpoint. As with a creat
$ curl -X PUT -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/sites/16/ --data '{"name": "Renamed Site", "slug": "renamed-site"}'
```
### Modify an object by changing a field
## Modify an object by changing a field
Make an authenticated `PATCH` request to the device endpoint. With `PATCH`, unlike `POST` and `PUT`, we only specify the field that is being changed. In this example, we add a serial number to a device.
```
$ curl -X PATCH -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/devices/2549/ --data '{"serial": "FTX1123A090"}'
```
### Delete an existing site
## Delete an existing site
Send an authenticated `DELETE` request to the site detail endpoint.
@@ -145,3 +145,18 @@ $ curl -v -X DELETE -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f
```
The response to a successful `DELETE` request will have code 204 (No Content); the body of the response will be empty.
## Bulk Object Creation
The REST API supports the creation of multiple objects of the same type using a single `POST` request. For example, to create multiple devices:
```
curl -X POST -H "Authorization: Token <TOKEN>" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/devices/ --data '[
{"name": "device1", "device_type": 24, "device_role": 17, "site": 6},
{"name": "device2", "device_type": 24, "device_role": 17, "site": 6},
{"name": "device3", "device_type": 24, "device_role": 17, "site": 6},
]'
```
Bulk creation is all-or-none: If any of the creations fails, the entire operation is rolled back. A successful response returns an HTTP code 201 and the body of the response will be a list/array of the objects created.

71
docs/api/filtering.md Normal file
View File

@@ -0,0 +1,71 @@
# API Filtering
The NetBox API supports robust filtering of results based on the fields of each model.
Generally speaking you are able to filter based on the attributes (fields) present in
the response body. Please note however that certain read-only or metadata fields are not
filterable.
Filtering is achieved by passing HTTP query parameters and the parameter name is the
name of the field you wish to filter on and the value is the field value.
E.g. filtering based on a device's name:
```
/api/dcim/devices/?name=DC-SPINE-1
```
## Multi Value Logic
While you are able to filter based on an arbitrary number of fields, you are also able to
pass multiple values for the same field. In most cases filtering on multiple values is
implemented as a logical OR operation. A notable exception is the `tag` filter which
is a logical AND. Passing multiple values for one field, can be combined with other fields.
For example, filtering for devices with either the name of DC-SPINE-1 _or_ DC-LEAF-4:
```
/api/dcim/devices/?name=DC-SPINE-1&name=DC-LEAF-4
```
Filtering for devices with tag `router` and `customer-a` will return only devices with
_both_ of those tags applied:
```
/api/dcim/devices/?tag=router&tag=customer-a
```
## Lookup Expressions
Certain model fields also support filtering using additional lookup expressions. This allows
for negation and other context specific filtering.
These lookup expressions can be applied by adding a suffix to the desired field's name.
E.g. `mac_address__n`. In this case, the filter expression is for negation and it is separated
by two underscores. Below are the lookup expressions that are supported across different field
types.
### Numeric Fields
Numeric based fields (ASN, VLAN ID, etc) support these lookup expressions:
- `n` - not equal (negation)
- `lt` - less than
- `lte` - less than or equal
- `gt` - greater than
- `gte` - greater than or equal
### String Fields
String based (char) fields (Name, Address, etc) support these lookup expressions:
- `n` - not equal (negation)
- `ic` - case insensitive contains
- `nic` - negated case insensitive contains
- `isw` - case insensitive starts with
- `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
### Foreign Keys & Other Fields
Certain other fields, namely foreign key relationships support just the negation
expression: `n`.

View File

@@ -1,4 +1,6 @@
# What is a REST API?
# The NetBox REST API
## 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 to create, retrieve, update, and delete objects from a database. (This set of operations is commonly referred to as CRUD.) Each type of operation is associated with a particular HTTP verb:
@@ -32,11 +34,11 @@ $ curl -s http://localhost:8000/api/ipam/ip-addresses/2954/ | jq '.'
Each attribute of the NetBox object is expressed as a field in the dictionary. Fields may include their own nested objects, as in the case of the `status` field above. Every object includes a primary key named `id` which uniquely identifies it in the database.
# Interactive Documentation
## Interactive Documentation
Comprehensive, interactive documentation of all API endpoints is available on a running NetBox instance at `/api/docs/`. This interface provides a convenient sandbox for researching and experimenting with NetBox's various API endpoints and different request types.
# URL Hierarchy
## URL Hierarchy
NetBox's entire API is housed under the API root at `https://<hostname>/api/`. The URL structure is divided at the root level by application: circuits, DCIM, extras, IPAM, secrets, and tenancy. Within each application, each model has its own path. For example, the provider and circuit objects are located under the "circuits" application:
@@ -62,7 +64,9 @@ Lists of objects can be filtered using a set of query parameters. For example, t
GET /api/dcim/interfaces/?device_id=123
```
# Serialization
See [filtering](filtering.md) for more details.
## Serialization
The NetBox API employs three types of serializers to represent model data:
@@ -106,7 +110,7 @@ The base serializer is used to represent the default view of a model. This inclu
}
```
## Related Objects
### Related Objects
Related objects (e.g. `ForeignKey` fields) are represented using a nested serializer. A nested serializer provides a minimal representation of an object, including only its URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object.
@@ -137,7 +141,7 @@ Or by a set of nested attributes used to identify the rack:
Note that if the provided parameters do not return exactly one object, a validation error is raised.
## Brief Format
### Brief Format
Most API endpoints support an optional "brief" format, which returns only a minimal representation of each object in the response. This is useful when you need only a list of the objects themselves without any related data, such as when populating a drop-down list in a form.
@@ -183,38 +187,7 @@ GET /api/ipam/prefixes/13980/?brief=1
The brief format is supported for both lists and individual objects.
## Static Choice Fields
Some model fields, such as the `status` field in the above example, utilize static integers corresponding to static choices. The available choices can be retrieved from the read-only `_choices` endpoint within each app. A specific `model:field` tuple may optionally be specified in the URL.
Each choice includes a human-friendly label and its corresponding numeric value. For example, `GET /api/ipam/_choices/prefix:status/` will return:
```
[
{
"value": 0,
"label": "Container"
},
{
"value": 1,
"label": "Active"
},
{
"value": 2,
"label": "Reserved"
},
{
"value": 3,
"label": "Deprecated"
}
]
```
Thus, to set a prefix's status to "Reserved," it would be assigned the integer `2`.
A request for `GET /api/ipam/_choices/` will return choices for _all_ fields belonging to models within the IPAM app.
# Pagination
## Pagination
API responses which contain a list of objects (for example, a request to `/api/dcim/devices/`) will be paginated to avoid unnecessary overhead. The root JSON object will contain the following attributes:
@@ -268,40 +241,45 @@ The maximum number of objects that can be returned is limited by the [`MAX_PAGE_
!!! 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.
# Filtering
## Filtering
A list of objects retrieved via the API can be filtered by passing one or more query parameters. The same parameters used by the web UI work for the API as well. For example, to return only prefixes with a status of "Active" (`1`):
A list of objects retrieved via the API can be filtered by passing one or more query parameters. The same parameters used by the web UI work for the API as well. For example, to return only prefixes with a status of "Active" (identified by the slug `active`):
```
GET /api/ipam/prefixes/?status=1
GET /api/ipam/prefixes/?status=active
```
The choices available for fixed choice fields such as `status` are exposed in the API under a special `_choices` endpoint for each NetBox app. For example, the available choices for `Prefix.status` are listed at `/api/ipam/_choices/` under the key `prefix:status`:
The choices available for fixed choice fields such as `status` can be retrieved by sending an `OPTIONS` API request for the desired endpoint:
```
"prefix:status": [
{
"label": "Container",
"value": 0
},
{
"label": "Active",
"value": 1
},
{
"label": "Reserved",
"value": 2
},
{
"label": "Deprecated",
"value": 3
}
],
```no-highlight
$ curl -s -X OPTIONS \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json; indent=4" \
http://localhost:8000/api/ipam/prefixes/ | jq ".actions.POST.status.choices"
[
{
"value": "container",
"display_name": "Container"
},
{
"value": "active",
"display_name": "Active"
},
{
"value": "reserved",
"display_name": "Reserved"
},
{
"value": "deprecated",
"display_name": "Deprecated"
}
]
```
For most fields, when a filter is passed multiple times, objects matching _any_ of the provided values will be returned. For example, `GET /api/dcim/sites/?name=Foo&name=Bar` will return all sites named "Foo" _or_ "Bar". The exception to this rule is ManyToManyFields which may have multiple values assigned. Tags are the most common example of a ManyToManyField. For example, `GET /api/dcim/sites/?tag=foo&tag=bar` will return only sites tagged with both "foo" _and_ "bar".
## Custom Fields
### Custom Fields
To filter on a custom field, prepend `cf_` to the field name. For example, the following query will return only sites where a custom field named `foo` is equal to 123:

View File

@@ -1,6 +1,8 @@
# Working with Secrets
As with most other objects, the NetBox API can be used to create, modify, and delete secrets. However, additional steps are needed to encrypt or decrypt secret data.
# Generating a Session Key
## 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`.
@@ -19,7 +21,7 @@ $ curl -X POST http://localhost:8000/api/secrets/get-session-key/ \
The request uses your private key to unlock your stored copy of the master key and generate a session key which can be attached in the `X-Session-Key` header of future API requests.
# Retrieving Secrets
## Retrieving Secrets
A session key is not needed to retrieve unencrypted secrets: The secret is returned like any normal object with its `plaintext` field set to null.
@@ -112,7 +114,7 @@ $ curl http://localhost:8000/api/secrets/secrets/?limit=3 \
}
```
# Creating Secrets
## Creating Secrets
Session keys are also used to decrypt new or modified secrets. This is done by setting the `plaintext` field of the submitted object:

View File

@@ -4,6 +4,8 @@ NetBox's local configuration is stored in `netbox/netbox/configuration.py`. An e
While NetBox has many configuration settings, only a few of them must be defined at the time of installation.
## Configuration Parameters
* [Required settings](required-settings.md)
* [Optional settings](optional-settings.md)

View File

@@ -13,6 +13,14 @@ ADMINS = [
---
## ALLOWED_URL_SCHEMES
Default: `('file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc', 'xmpp')`
A list of permitted URL schemes referenced when rendering links within NetBox. Note that only the schemes specified in this list will be accepted: If adding your own, be sure to replicate the entire default list as well (excluding those schemes which are not desirable).
---
## BANNER_TOP
## BANNER_BOTTOM
@@ -86,20 +94,59 @@ CORS_ORIGIN_WHITELIST = [
Default: False
This setting enables debugging. This should be done only during development or troubleshooting. Never enable debugging on a production system, as it can expose sensitive data to unauthenticated users.
This setting enables debugging. This should be done only during development or troubleshooting. Note that only clients
which access NetBox from a recognized [internal IP address](#internal_ips) will see debugging tools in the user
interface.
!!! warning
Never enable debugging on a production system, as it can expose sensitive data to unauthenticated users.
---
## DEVELOPER
Default: False
This parameter serves as a safeguard to prevent some potentially dangerous behavior, such as generating new database schema migrations. Set this to `True` **only** if you are actively developing the NetBox code base.
---
## DOCS_ROOT
Default: `$INSTALL_DIR/docs/`
The file path to NetBox's documentation. This is used when presenting context-sensitive documentation in the web UI. by default, this will be the `docs/` directory within the root NetBox installation path. (Set this to `None` to disable the embedded documentation.)
---
## EMAIL
In order to send email, NetBox needs an email server configured. The following items can be defined within the `EMAIL` setting:
In order to send email, NetBox needs an email server configured. The following items can be defined within the `EMAIL` configuration parameter:
* SERVER - Host name or IP address of the email server (use `localhost` if running locally)
* PORT - TCP port to use for the connection (default: 25)
* USERNAME - Username with which to authenticate
* PASSSWORD - Password with which to authenticate
* TIMEOUT - Amount of time to wait for a connection (seconds)
* FROM_EMAIL - Sender address for emails sent by NetBox
* `SERVER` - Host name or IP address of the email server (use `localhost` if running locally)
* `PORT` - TCP port to use for the connection (default: `25`)
* `USERNAME` - Username with which to authenticate
* `PASSSWORD` - Password with which to authenticate
* `USE_SSL` - Use SSL when connecting to the server (default: `False`). Mutually exclusive with `USE_TLS`.
* `USE_TLS` - Use TLS when connecting to the server (default: `False`). Mutually exclusive with `USE_SSL`.
* `SSL_CERTFILE` - Path to the PEM-formatted SSL certificate file (optional)
* `SSL_KEYFILE` - Path to the PEM-formatted SSL private key file (optional)
* `TIMEOUT` - Amount of time to wait for a connection, in seconds (default: `10`)
* `FROM_EMAIL` - Sender address for emails sent by NetBox (default: `root@localhost`)
Email is sent from NetBox only for critical events or if configured for [logging](#logging). If you would like to test the email server configuration please use the django function [send_mail()](https://docs.djangoproject.com/en/stable/topics/email/#send-mail):
```
# python ./manage.py nbshell
>>> from django.core.mail import send_mail
>>> send_mail(
'Test Email Subject',
'Test Email Body',
'noreply-netbox@example.com',
['users@example.com'],
fail_silently=False
)
```
---
@@ -127,7 +174,7 @@ EXEMPT_VIEW_PERMISSIONS = ['*']
---
# ENFORCE_GLOBAL_UNIQUE
## ENFORCE_GLOBAL_UNIQUE
Default: False
@@ -135,6 +182,31 @@ Enforcement of unique IP space can be toggled on a per-VRF basis. To enforce uni
---
## HTTP_PROXIES
Default: None
A dictionary of HTTP proxies to use for outbound requests originating from NetBox (e.g. when sending webhooks). Proxies should be specified by schema as per the [Python requests library documentation](https://2.python-requests.org/en/master/user/advanced/). For example:
```python
HTTP_PROXIES = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
```
---
## INTERNAL_IPS
Default: `('127.0.0.1', '::1',)`
A list of IP addresses recognized as internal to the system, used to control the display of debugging output. For
example, the debugging toolbar will be viewable only when a client is accessing NetBox from one of the listed IP
addresses (and [`DEBUG`](#debug) is true).
---
## LOGGING
By default, all messages of INFO severity or higher will be logged to the console. Additionally, if `DEBUG` is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in `ADMINS`.
@@ -161,6 +233,14 @@ LOGGING = {
}
```
### Available Loggers
* `netbox.auth.*` - Authentication events
* `netbox.api.views.*` - Views which handle business logic for the REST API
* `netbox.reports.*` - Report execution (`module.name`)
* `netbox.scripts.*` - Custom script execution (`module.name`)
* `netbox.views.*` - Views which handle business logic for the web UI
---
## LOGIN_REQUIRED
@@ -261,6 +341,39 @@ Determine how many objects to display per page within each list of objects.
---
## PLUGINS
Default: Empty
A list of installed [NetBox plugins](../../plugins/) to enable. Plugins will not take effect unless they are listed here.
!!! warning
Plugins extend NetBox by allowing external code to run with the same access and privileges as NetBox itself. Only install plugins from trusted sources. The NetBox maintainers make absolutely no guarantees about the integrity or security of your installation with plugins enabled.
---
## PLUGINS_CONFIG
Default: Empty
This parameter holds configuration settings for individual NetBox plugins. It is defined as a dictionary, with each key using the name of an installed plugin. The specific parameters supported are unique to each plugin: Reference the plugin's documentation to determine the supported parameters. An example configuration is shown below:
```python
PLUGINS_CONFIG = {
'plugin1': {
'foo': 123,
'bar': True
},
'plugin2': {
'foo': 456,
},
}
```
Note that a plugin must be listed in `PLUGINS` for its configuration to take effect.
---
## PREFER_IPV4
Default: False
@@ -269,6 +382,72 @@ When determining the primary IP address for a device, IPv6 is preferred over IPv
---
## REMOTE_AUTH_ENABLED
Default: `False`
NetBox can be configured to support remote user authentication by inferring user authentication from an HTTP header set by the HTTP reverse proxy (e.g. nginx or Apache). Set this to `True` to enable this functionality. (Local authentication will still take effect as a fallback.)
---
## REMOTE_AUTH_BACKEND
Default: `'utilities.auth_backends.RemoteUserBackend'`
Python path to the custom [Django authentication backend](https://docs.djangoproject.com/en/stable/topics/auth/customizing/) to use for external user authentication, if not using NetBox's built-in backend. (Requires `REMOTE_AUTH_ENABLED`.)
---
## REMOTE_AUTH_HEADER
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`.)
---
## REMOTE_AUTH_AUTO_CREATE_USER
Default: `False`
If true, NetBox will automatically create local accounts for users authenticated via a remote service. (Requires `REMOTE_AUTH_ENABLED`.)
---
## REMOTE_AUTH_DEFAULT_GROUPS
Default: `[]` (Empty list)
The list of groups to assign a new user account when created using remote authentication. (Requires `REMOTE_AUTH_ENABLED`.)
---
## REMOTE_AUTH_DEFAULT_PERMISSIONS
Default: `[]` (Empty list)
The list of permissions to assign a new user account when created using remote authentication. (Requires `REMOTE_AUTH_ENABLED`.)
---
## RELEASE_CHECK_TIMEOUT
Default: 86,400 (24 hours)
The number of seconds to retain the latest version that is fetched from the GitHub API before automatically invalidating it and fetching it from the API again. This must be set to at least one hour (3600 seconds).
---
## RELEASE_CHECK_URL
Default: None
The releases of this repository are checked to detect new releases, which are shown on the home page of the web interface. You can change this to your own fork of the NetBox repository, or set it to `None` to disable the check. The URL provided **must** be compatible with the GitHub API.
Use `'https://api.github.com/repos/netbox-community/netbox/releases'` to check for release in the official NetBox repository.
---
## REPORTS_ROOT
Default: $BASE_DIR/netbox/reports/

View File

@@ -21,7 +21,7 @@ NetBox requires access to a PostgreSQL database service to store data. This serv
* `PASSWORD` - PostgreSQL password
* `HOST` - Name or IP address of the database server (use `localhost` if running locally)
* `PORT` - TCP port of the PostgreSQL service; leave blank for default port (5432)
* `CONN_MAX_AGE` - Number in seconds for Netbox to keep database connections open. 150-300 seconds is typically a good starting point ([more info](https://docs.djangoproject.com/en/stable/ref/databases/#persistent-connections)).
* `CONN_MAX_AGE` - Lifetime of a [persistent database connection](https://docs.djangoproject.com/en/stable/ref/databases/#persistent-connections), in seconds (150-300 is recommended)
Example:
@@ -36,6 +36,9 @@ DATABASE = {
}
```
!!! note
NetBox supports all PostgreSQL database options supported by the underlying Django framework. For a complete list of available parameters, please see [the Django documentation](https://docs.djangoproject.com/en/stable/ref/settings/#databases).
---
## REDIS
@@ -43,9 +46,9 @@ DATABASE = {
[Redis](https://redis.io/) is an in-memory data store similar to memcached. While Redis has been an optional component of
NetBox since the introduction of webhooks in version 2.4, it is required starting in 2.6 to support NetBox's caching
functionality (as well as other planned features). In 2.7, the connection settings were broken down into two sections for
webhooks and caching, allowing the user to connect to different Redis instances/databases per feature.
task queuing and caching, allowing the user to connect to different Redis instances/databases per feature.
Redis is configured using a configuration setting similar to `DATABASE` and these settings are the same for both of the `webhooks` and `caching` subsections:
Redis is configured using a configuration setting similar to `DATABASE` and these settings are the same for both of the `tasks` and `caching` subsections:
* `HOST` - Name or IP address of the Redis server (use `localhost` if running locally)
* `PORT` - TCP port of the Redis service; leave blank for default port (6379)
@@ -58,7 +61,7 @@ Example:
```python
REDIS = {
'webhooks': {
'tasks': {
'HOST': 'redis.example.com',
'PORT': 1234,
'PASSWORD': 'foobar',
@@ -77,13 +80,55 @@ REDIS = {
}
```
!!! note:
!!! note
If you are upgrading from a version prior to v2.7, please note that the Redis connection configuration settings have
changed. Manual modification to bring the `REDIS` section inline with the above specification is necessary
!!! warning:
It is highly recommended to keep the webhook and cache databases separate. Using the same database number on the
same Redis instance for both may result in webhook processing data being lost during cache flushing events.
!!! warning
It is highly recommended to keep the task and cache databases separate. Using the same database number on the
same Redis instance for both may result in queued background tasks being lost during cache flushing events.
### Using Redis Sentinel
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.
* `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
Example:
```python
REDIS = {
'tasks': {
'SENTINELS': [('mysentinel.redis.example.com', 6379)],
'SENTINEL_SERVICE': 'netbox',
'PASSWORD': '',
'DATABASE': 0,
'DEFAULT_TIMEOUT': 300,
'SSL': False,
},
'caching': {
'SENTINELS': [
('mysentinel.redis.example.com', 6379),
('othersentinel.redis.example.com', 6379)
],
'SENTINEL_SERVICE': 'netbox',
'PASSWORD': '',
'DATABASE': 1,
'DEFAULT_TIMEOUT': 300,
'SSL': False,
}
}
```
!!! note
It is possible to have only one or the other Redis configurations to use Sentinel functionality. It is possible
for example to have the tasks database use sentinel via `HOST`/`PORT` and for caching to use Sentinel via
`SENTINELS`/`SENTINEL_SERVICE`.
---

View File

@@ -1,34 +1,9 @@
# Providers
# Circuits
A provider is any entity which provides some form of connectivity. While this obviously includes carriers which offer Internet and private transit service, it might also include Internet exchange (IX) points and even organizations with whom you peer directly.
Each provider may be assigned an autonomous system number (ASN), an account number, and relevant contact information.
{!docs/models/circuits/provider.md!}
---
# Circuits
A circuit represents a single _physical_ link connecting exactly two endpoints. (A circuit with more than two endpoints is a virtual circuit, which is not currently supported by NetBox.) Each circuit belongs to a provider and must be assigned a circuit ID which is unique to that provider.
## Circuit Types
Circuits are classified by type. For example, you might define circuit types for:
* Internet transit
* Out-of-band connectivity
* Peering
* Private backhaul
Circuit types are fully customizable.
## Circuit Terminations
A circuit may have one or two terminations, annotated as the "A" and "Z" sides of the circuit. 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 pass-through port. Each termination can be assigned a separate downstream and upstream speed independent from one another. Fields are also available to track cross-connect and patch panel details.
!!! note
A circuit 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.
!!! note
A circuit may terminate only to a physical interface. Circuits may not terminate to LAG interfaces, which are virtual interfaces: You must define each physical circuit within a service bundle separately and terminate it to its actual physical interface.
{!docs/models/circuits/circuit.md!}
{!docs/models/circuits/circuittype.md!}
{!docs/models/circuits/circuittermination.md!}

View File

@@ -0,0 +1,40 @@
# Device Types
{!docs/models/dcim/devicetype.md!}
{!docs/models/dcim/manufacturer.md!}
---
## Device Component Templates
Each device type is assigned a number of component templates which define the physical components within a device. These are:
* Console ports
* Console server ports
* Power ports
* Power outlets
* Network interfaces
* Front ports
* Rear ports
* Device bays (which house child devices)
Whenever a new device is created, its components are automatically created per the templates assigned to its device type. For example, a Juniper EX4300-48T device type might have the following component templates defined:
* One template for a console port ("Console")
* Two templates for power ports ("PSU0" and "PSU1")
* 48 templates for 1GE interfaces ("ge-0/0/0" through "ge-0/0/47")
* Four templates for 10GE interfaces ("xe-0/2/0" through "xe-0/2/3")
Once component templates have been created, every new device that you create as an instance of this type will automatically be assigned each of the components listed above.
!!! note
Assignment of components from templates occurs only at the time of device creation. If you modify the templates of a device type, it will not affect devices which have already been created. However, you always have the option of adding, modifying, or deleting components on existing devices.
{!docs/models/dcim/consoleporttemplate.md!}
{!docs/models/dcim/consoleserverporttemplate.md!}
{!docs/models/dcim/powerporttemplate.md!}
{!docs/models/dcim/poweroutlettemplate.md!}
{!docs/models/dcim/interfacetemplate.md!}
{!docs/models/dcim/frontporttemplate.md!}
{!docs/models/dcim/rearporttemplate.md!}
{!docs/models/dcim/devicebaytemplate.md!}

View File

@@ -1,152 +1,27 @@
# Device Types
# Devices and Cabling
A device type represents a particular make and model of hardware that exists in the real world. Device types define the physical attributes of a device (rack height and depth) and its individual components (console, power, and network interfaces).
Device types are instantiated as devices installed within racks. For example, you might define a device type to represent a Juniper EX4300-48T network switch with 48 Ethernet interfaces. You can then create multiple devices of this type named "switch1," "switch2," and so on. Each device will inherit the components (such as interfaces) of its device type at the time of creation. (However, changes made to a device type will **not** apply to instances of that device type retroactively.)
Some devices house child devices which share physical resources, like space and power, but which functional independently from one another. A common example of this is blade server chassis. Each device type is designated as one of the following:
* A parent device (which has device bays)
* A child device (which must be installed in a device bay)
* Neither
!!! note
This parent/child relationship is **not** suitable for modeling chassis-based devices, wherein child members share a common control plane.
For that application you should create a single Device for the chassis, and add Interfaces directly to it. Interfaces can be created in bulk using range patterns, e.g. "Gi1/[1-24]".
Add Inventory Items if you want to record the line cards themselves as separate entities. There is no explicit relationship between each interface and its line card, but it may be implied by the naming (e.g. interfaces "Gi1/x" are on line card 1)
## Manufacturers
Each device type must be assigned to a manufacturer. The model number of a device type must be unique to its manufacturer.
## Component Templates
Each device type is assigned a number of component templates which define the physical components within a device. These are:
* Console ports
* Console server ports
* Power ports
* Power outlets
* Network interfaces
* Front ports
* Rear ports
* Device bays (which house child devices)
Whenever a new device is created, its components are automatically created per the templates assigned to its device type. For example, a Juniper EX4300-48T device type might have the following component templates defined:
* One template for a console port ("Console")
* Two templates for power ports ("PSU0" and "PSU1")
* 48 templates for 1GE interfaces ("ge-0/0/0" through "ge-0/0/47")
* Four templates for 10GE interfaces ("xe-0/2/0" through "xe-0/2/3")
Once component templates have been created, every new device that you create as an instance of this type will automatically be assigned each of the components listed above.
!!! note
Assignment of components from templates occurs only at the time of device creation. If you modify the templates of a device type, it will not affect devices which have already been created. However, you always have the option of adding, modifying, or deleting components on existing devices.
{!docs/models/dcim/device.md!}
{!docs/models/dcim/devicerole.md!}
{!docs/models/dcim/platform.md!}
---
# Devices
Every piece of hardware which is installed within a rack exists in NetBox as a device. Devices are measured in rack units (U) and can be half depth or full depth. A device may have a height of 0U: These devices do not consume vertical rack space and cannot be assigned to a particular rack unit. A common example of a 0U device is a vertically-mounted PDU.
When assigning a multi-U device to a rack, it is considered to be mounted in the lowest-numbered rack unit which it occupies. For example, a 3U device which occupies U8 through U10 is said to be mounted in U8. This logic applies to racks with both ascending and descending unit numbering.
A device is said to be full depth if its installation on one rack face prevents the installation of any other device on the opposite face within the same rack unit(s). This could be either because the device is physically too deep to allow a device behind it, or because the installation of an opposing device would impede airflow.
## Device Components
There are eight types of device components which comprise all of the interconnection logic with NetBox:
* Console ports
* Console server ports
* Power ports
* Power outlets
* Network interfaces
* Front ports
* Rear ports
* Device bays
### Console
Console ports connect only to console server ports. Console connections can be marked as either *planned* or *connected*.
### Power
Power ports connect only to power outlets. Power connections can be marked as either *planned* or *connected*.
### Interfaces
Interfaces connect to one another in a symmetric manner: If interface A connects to interface B, interface B therefore connects to interface A. Each type of connection can be classified as either *planned* or *connected*.
Each interface is a assigned a type denoting its physical properties. Two special types exist: the "virtual" type can be used to designate logical interfaces (such as SVIs), and the "LAG" type can be used to desinate link aggregation groups to which physical interfaces can be assigned.
Each interface can also be enabled or disabled, and optionally designated as management-only (for out-of-band management). Fields are also provided to store an interface's MTU and MAC address.
VLANs can be assigned to each interface as either tagged or untagged. (An interface may have only one untagged VLAN.)
### Pass-through Ports
Pass-through ports are used to model physical terminations which comprise part of a longer path, such as a cable terminated to a patch panel. Each front port maps to a position on a rear port. A 24-port UTP patch panel, for instance, would have 24 front ports and 24 rear ports. Although this relationship is typically one-to-one, a rear port may have multiple front ports mapped to it. This can be useful for modeling instances where multiple paths share a common cable (for example, six different fiber connections sharing a 12-strand MPO cable).
Pass-through ports can also be used to model "bump in the wire" devices, such as a media convertor or passive tap.
### Device Bays
Device bays represent the ability of a device to house child devices. For example, you might install four blade servers into a 2U chassis. The chassis would appear in the rack elevation as a 2U device with four device bays. Each server within it would be defined as a 0U device installed in one of the device bays. Child devices do not appear within rack elevations or the "Non-Racked Devices" list within the rack view.
Child devices are first-class Devices in their own right: that is, fully independent managed entities which don't share any control plane with the parent. Just like normal devices, child devices have their own platform (OS), role, tags, and interfaces. You cannot create a LAG between interfaces in different child devices.
Therefore, Device bays are **not** suitable for modeling chassis-based switches and routers. These should instead be modeled as a single Device, with the line cards as Inventory Items.
## Device Roles
Devices can be organized by functional roles. These roles are fully customizable. For example, you might create roles for core switches, distribution switches, and access switches.
{!docs/models/dcim/consoleport.md!}
{!docs/models/dcim/consoleserverport.md!}
{!docs/models/dcim/powerport.md!}
{!docs/models/dcim/poweroutlet.md!}
{!docs/models/dcim/interface.md!}
{!docs/models/dcim/frontport.md!}
{!docs/models/dcim/rearport.md!}
{!docs/models/dcim/devicebay.md!}
{!docs/models/dcim/inventoryitem.md!}
---
# Platforms
A platform defines the type of software running on a device or virtual machine. This can be helpful when it is necessary to distinguish between, for instance, different feature sets. Note that two devices of the same type may be assigned different platforms: for example, one Juniper MX240 running Junos 14 and another running Junos 15.
The platform model is also used to indicate which [NAPALM](https://napalm-automation.net/) driver NetBox should use when connecting to a remote device. The name of the driver along with optional parameters are stored with the platform.
The assignment of platforms to devices is an optional feature, and may be disregarded if not desired.
{!docs/models/dcim/virtualchassis.md!}
---
# Inventory Items
Inventory items represent hardware components installed within a device, such as a power supply or CPU or line card. Currently, these are used merely for inventory tracking, although future development might see their functionality expand. Like device types, each item can optionally be assigned a manufacturer.
---
# Virtual Chassis
A virtual chassis represents a set of devices which share a single control plane: a stack of switches which are managed as a single device, for example. Each device in the virtual chassis is assigned a position and (optionally) a priority. Exactly one device is designated the virtual chassis master: This device will typically be assigned a name, secrets, services, and other attributes related to its management.
It's important to recognize the distinction between a virtual chassis and a chassis-based device. For instance, a virtual chassis is not used to model a chassis switch with removable line cards such as the Juniper EX9208, as its line cards are _not_ physically separate devices capable of operating independently.
---
# Cables
A cable represents a physical connection between two termination points, such as between a console port and a patch panel port, or between two network interfaces. Cables can be traced through pass-through ports to form a complete path between two endpoints. In the example below, three individual cables comprise a path between the two connected endpoints.
```
|<------------------------------------------ Cable Path ------------------------------------------->|
Device A Patch Panel A Patch Panel B Device B
+-----------+ +-------------+ +-------------+ +-----------+
| Interface | --- Cable --- | Front Port | | Front Port | --- Cable --- | Interface |
+-----------+ +-------------+ +-------------+ +-----------+
+-------------+ +-------------+
| Rear Port | --- Cable --- | Rear Port |
+-------------+ +-------------+
```
All connections between device components in NetBox are represented using cables. However, defining the actual cable plant is optional: Components can be be directly connected using cables with no type or other attributes assigned.
Cables are also used to associated ports and interfaces with circuit terminations. To do this, first create the circuit termination, then navigate the desired component and connect a cable between the two.
{!docs/models/dcim/cable.md!}

View File

@@ -1,93 +1,16 @@
# Aggregates
# IP Address Management
The first step to documenting your IP space is to define its scope by creating aggregates. Aggregates establish the root of your IP address hierarchy by defining the top-level allocations that you're interested in managing. Most organizations will want to track some commonly-used private IP spaces, such as:
* 10.0.0.0/8 (RFC 1918)
* 100.64.0.0/10 (RFC 6598)
* 172.16.0.0/12 (RFC 1918)
* 192.168.0.0/16 (RFC 1918)
* One or more /48s within fd00::/8 (IPv6 unique local addressing)
In addition to one or more of these, you'll want to create an aggregate for each globally-routable space your organization has been allocated. These aggregates should match the allocations recorded in public WHOIS databases.
Each IP prefix will be automatically arranged under its parent aggregate if one exists. Note that it's advised to create aggregates only for IP ranges actually allocated to your organization (or marked for private use): There is no need to define aggregates for provider-assigned space which is only used on Internet circuits, for example.
Aggregates cannot overlap with one another: They can only exist side-by-side. For instance, you cannot define both 10.0.0.0/8 and 10.16.0.0/16 as aggregates, because they overlap. 10.16.0.0/16 in this example would be created as a prefix and automatically grouped under 10.0.0.0/8. Remember, the purpose of aggregates is to establish the root of your IP addressing hierarchy.
## Regional Internet Registries (RIRs)
[Regional Internet registries](https://en.wikipedia.org/wiki/Regional_Internet_registry) are responsible for the allocation of globally-routable address space. The five RIRs are ARIN, RIPE, APNIC, LACNIC, and AFRINIC. However, some address space has been set aside for internal use, such as defined in RFCs 1918 and 6598. NetBox considers these RFCs as a sort of RIR as well; that is, an authority which "owns" certain address space. There also exist lower-tier registries which serve a particular geographic area.
Each aggregate must be assigned to one RIR. You are free to define whichever RIRs you choose (or create your own). The RIR model includes a boolean flag which indicates whether the RIR allocates only private IP space.
For example, suppose your organization has been allocated 104.131.0.0/16 by ARIN. It also makes use of RFC 1918 addressing internally. You would first create RIRs named ARIN and RFC 1918, then create an aggregate for each of these top-level prefixes, assigning it to its respective RIR.
{!docs/models/ipam/aggregate.md!}
{!docs/models/ipam/rir.md!}
---
# Prefixes
A prefix is an IPv4 or IPv6 network and mask expressed in CIDR notation (e.g. 192.0.2.0/24). A prefix entails only the "network portion" of an IP address: All bits in the address not covered by the mask must be zero. (In other words, a prefix cannot be a specific IP address.)
Prefixes are automatically arranged by their parent aggregates. Additionally, each prefix can be assigned to a particular site and VRF (routing table). All prefixes not assigned to a VRF will appear in the "global" table.
Each prefix can be assigned a status and a role. These terms are often used interchangeably so it's important to recognize the difference between them. The **status** defines a prefix's operational state. Statuses are hard-coded in NetBox and can be one of the following:
* Container - A summary of child prefixes
* Active - Provisioned and in use
* Reserved - Designated for future use
* Deprecated - No longer in use
On the other hand, a prefix's **role** defines its function. Role assignment is optional and roles are fully customizable. For example, you might create roles to differentiate between production and development infrastructure.
A prefix may also be assigned to a VLAN. This association is helpful for identifying which prefixes are included when reviewing a list of VLANs.
The prefix model include a "pool" flag. If enabled, NetBox will treat this prefix as a range (such as a NAT pool) wherein every IP address is valid and assignable. This logic is used for identifying available IP addresses within a prefix. If this flag is disabled, NetBox will assume that the first and last (broadcast) address within the prefix are unusable.
{!docs/models/ipam/prefix.md!}
---
# IP Addresses
An IP address comprises a single host address (either IPv4 or IPv6) and its subnet mask. Its mask should match exactly how the IP address is configured on an interface in the real world.
Like prefixes, an IP address can optionally be assigned to a VRF (otherwise, it will appear in the "global" table). IP addresses are automatically organized under parent prefixes within their respective VRFs.
Also like prefixes, each IP address can be assigned a status and a role. Statuses are hard-coded in NetBox and include the following:
* Active
* Reserved
* Deprecated
* DHCP
Each IP address can optionally be assigned a special role. Roles are used to indicate some special attribute of an IP address: for example, it is used as a loopback, or is a virtual IP maintained using VRRP. (Note that this differs in purpose from a _functional_ role, and thus cannot be customized.) Available roles include:
* Loopback
* Secondary
* Anycast
* VIP
* VRRP
* HSRP
* GLBP
An IP address can be assigned to a device or virtual machine interface, and an interface may have multiple IP addresses assigned to it. Further, each device and virtual machine may have one of its interface IPs designated as its primary IP address (one for IPv4 and one for IPv6).
## Network Address Translation (NAT)
An IP address can be designated as the network address translation (NAT) inside IP address for exactly one other IP address. This is useful primarily to denote a translation between public and private IP addresses. This relationship is followed in both directions: For example, if 10.0.0.1 is assigned as the inside IP for 192.0.2.1, 192.0.2.1 will be displayed as the outside IP for 10.0.0.1.
!!! note
NetBox does not support tracking one-to-many NAT relationships (also called port address translation). This type of policy requires additional logic to model and cannot be fully represented by IP address alone.
{!docs/models/ipam/ipaddress.md!}
---
# Virtual Routing and Forwarding (VRF)
A VRF object in NetBox represents a virtual routing and forwarding (VRF) domain. Each VRF is essentially a separate routing table. VRFs are commonly used to isolate customers or organizations from one another within a network, or to route overlapping address space (e.g. multiple instances of the 10.0.0.0/8 space).
Each VRF is assigned a unique name and an optional route distinguisher (RD). The RD is expected to take one of the forms prescribed in [RFC 4364](https://tools.ietf.org/html/rfc4364#section-4.2), however its formatting is not strictly enforced.
Each prefix and IP address may be assigned to one (and only one) VRF. If you have a prefix or IP address which exists in multiple VRFs, you will need to create a separate instance of it in NetBox for each VRF. Any IP prefix or address not assigned to a VRF is said to belong to the "global" table.
By default, NetBox will allow duplicate prefixes to be assigned to a VRF. This behavior can be disabled by setting the "enforce unique" flag on the VRF model.
!!! note
Enforcement of unique IP space can be toggled for global table (non-VRF prefixes) using the `ENFORCE_GLOBAL_UNIQUE` configuration setting.
{!docs/models/ipam/vrf.md!}

View File

@@ -1,31 +1,11 @@
# Power Panel
# Power Tracking
A power panel represents the distribution board where power circuits and their circuit breakers terminate on. If you have multiple power panels in your data center, you should model them as such in NetBox to assist you in determining the redundancy of your power allocation.
{!docs/models/dcim/powerpanel.md!}
{!docs/models/dcim/powerfeed.md!}
# Power Feed
# Example Power Topology
A power feed identifies the power outlet/drop that goes to a rack and is terminated to a power panel. Power feeds have a supply type (AC/DC), voltage, amperage, and phase type (single/three).
Power feeds are optionally assigned to a rack. In addition, a power port and only one can connect to a power feed; in the context of a PDU, the power feed is analogous to the power outlet that a PDU's power port/inlet connects to.
!!! info
The power usage of a rack is calculated when a power feed (or multiple) is assigned to that rack and connected to a power port.
# Power Outlet
Power outlets represent the ports on a PDU that supply power to other devices. Power outlets are downstream-facing towards power ports. A power outlet can be associated with a power port on the same device and a feed leg (i.e. in a case of a three-phase supply). This indicates which power port supplies power to a power outlet.
# Power Port
A power port is the inlet of a device where it draws its power. Power ports are upstream-facing towards power outlets. Alternatively, a power port can connect to a power feed as mentioned in the power feed section to indicate the power source of a PDU's inlet.
!!! info
If the draw of a power port is left empty, it will be dynamically calculated based on the power outlets associated with that power port. This is usually the case on the power ports of devices that supply power, like a PDU.
# Example
Below is a simple diagram demonstrating how power is modelled in NetBox.
Below is a simple diagram demonstrating how power is modeled in NetBox.
!!! note
The power feeds are connected to the same power panel for illustrative purposes; usually, you would have such feeds diversely connected to panels to avoid the single point of failure.

View File

@@ -1,55 +1,8 @@
# Secrets
A secret represents a single credential or other sensitive string of characters which must be stored securely. Each secret is assigned to a device within NetBox. The plaintext value of a secret is encrypted to a ciphertext immediately prior to storage within the database using a 256-bit AES master key. A SHA256 hash of the plaintext is also stored along with each ciphertext to validate the decrypted plaintext.
Each secret can also store an optional name parameter, which is not encrypted. This may be useful for storing user names.
## Roles
Each secret is assigned a functional role which indicates what it is used for. Secret roles are customizable. Typical roles might include:
* Login credentials
* SNMP community strings
* RADIUS/TACACS+ keys
* IKE key strings
* Routing protocol shared secrets
Roles are also used to control access to secrets. Each role is assigned an arbitrary number of groups and/or users. Only the users associated with a role have permission to decrypt the secrets assigned to that role. (A superuser has permission to decrypt all secrets, provided they have an active user key.)
{!docs/models/secrets/secret.md!}
{!docs/models/secrets/secretrole.md!}
---
# User Keys
Each user within NetBox can associate his or her account with an RSA public key. If activated by an administrator, this user key will contain a unique, encrypted copy of the AES master key needed to retrieve secret data.
User keys may be created by users individually, however they are of no use until they have been activated by a user who already possesses an active user key.
## Supported Key Format
Public key formats supported
- PKCS#1 RSAPublicKey* (PEM header: BEGIN RSA PUBLIC KEY)
- X.509 SubjectPublicKeyInfo** (PEM header: BEGIN PUBLIC KEY)
- **OpenSSH line format is not supported.**
Private key formats supported (unencrypted)
- PKCS#1 RSAPrivateKey** (PEM header: BEGIN RSA PRIVATE KEY)
- PKCS#8 PrivateKeyInfo* (PEM header: BEGIN PRIVATE KEY)
## Creating the First User Key
When NetBox is first installed, it contains no encryption keys. Before it can store secrets, a user (typically the superuser) must create a user key. This can be done by navigating to Profile > User Key.
To create a user key, you can either generate a new RSA key pair, or upload the public key belonging to a pair you already have. If generating a new key pair, **you must save the private key** locally before saving your new user key. Once your user key has been created, its public key will be displayed under your profile.
When the first user key is created in NetBox, a random master encryption key is generated automatically. This key is then encrypted using the public key provided and stored as part of your user key. **The master key cannot be recovered** without your private key.
Once a user key has been assigned an encrypted copy of the master key, it is considered activated and can now be used to encrypt and decrypt secrets.
## Creating Additional User Keys
Any user can create his or her user key by generating or uploading a public RSA key. However, a user key cannot be used to encrypt or decrypt secrets until it has been activated with an encrypted copy of the master key.
Only an administrator with an active user key can activate other user keys. To do so, access the NetBox admin UI and navigate to Secrets > User Keys. Select the user key(s) to be activated, and select "activate selected user keys" from the actions dropdown. You will need to provide your private key in order to decrypt the master key. A copy of the master key is then encrypted using the public key associated with the user key being activated.
{!docs/models/secrets/userkey.md!}

View File

@@ -1,5 +1,3 @@
# Services
# Service Mapping
A service represents a layer four TCP or UDP service available on a device or virtual machine. For example, you might want to document that an HTTP service is running on a device. Each service includes a name, protocol, and port number; for example, "SSH (TCP/22)" or "DNS (UDP/53)."
A service may optionally be bound to one or more specific IP addresses belonging to its parent device or VM. (If no IP addresses are bound, the service is assumed to be reachable via any assigned IP address.)
{!docs/models/ipam/service.md!}

View File

@@ -1,51 +1,11 @@
# Sites
# Sites and Racks
How you choose to use sites will depend on the nature of your organization, but typically a site will equate to a building or campus. For example, a chain of banks might create a site to represent each of its branches, a site for its corporate headquarters, and two additional sites for its presence in two colocation facilities.
Each site must be assigned one of the following operational statuses:
* Active
* Planned
* Retired
The site model provides a facility ID field which can be used to annotate a facility ID (such as a datacenter name) associated with the site. Each site may also have an autonomous system (AS) number and time zone associated with it. (Time zones are provided by the [pytz](https://pypi.org/project/pytz/) package.)
The site model also includes several fields for storing contact and address information.
## Regions
Sites can be arranged geographically using regions. A region might represent a continent, country, city, campus, or other area depending on your use case. Regions can be nested recursively to construct a hierarchy. For example, you might define several country regions, and within each of those several state or city regions to which sites are assigned.
{!docs/models/dcim/site.md!}
{!docs/models/dcim/region.md!}
---
# Racks
The rack model represents a physical two- or four-post equipment rack in which equipment is mounted. Each rack must be assigned to a site. 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 or descending order.
Each rack is assigned a name and (optionally) a separate facility ID. This is helpful when leasing space in a data center your organization does not own: The facility will often assign a seemingly arbitrary ID to a rack (for example, "M204.313") whereas internally you refer to is simply as "R113." A unique serial number may also be associated with each rack.
A rack must be designated as one of the following types:
* 2-post frame
* 4-post frame
* 4-post cabinet
* Wall-mounted frame
* Wall-mounted cabinet
Each rack has two faces (front and rear) on which devices can be mounted. Rail-to-rail width may be 19 or 23 inches.
## Rack Groups
Racks can be arranged into groups. 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. Hierarchical recursion of rack groups is not currently supported.
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.)
## Rack Roles
Each rack can optionally be assigned a functional role. For example, you might designate a rack for compute or storage resources, or to house colocated customer devices. Rack roles are fully customizable.
## Rack Space Reservations
Users can reserve units within a rack for future use. Multiple non-contiguous rack units can be associated with a single reservation (but reservations cannot span multiple racks). A rack reservation may optionally designate a specific tenant.
{!docs/models/dcim/rack.md!}
{!docs/models/dcim/rackgroup.md!}
{!docs/models/dcim/rackrole.md!}
{!docs/models/dcim/rackreservation.md!}

View File

@@ -1,20 +1,4 @@
# Tenants
# Tenancy Assignment
A tenant represents a discrete entity for administrative purposes. Typically, tenants are used to represent individual customers or internal departments within an organization. The following objects can be assigned to tenants:
* Sites
* Racks
* Rack reservations
* Devices
* VRFs
* Prefixes
* IP addresses
* VLANs
* Circuits
* Virtual machines
Tenant assignment is used to signify ownership of an object in NetBox. As such, each object may only be owned by a single tenant. For example, if you have a firewall dedicated to a particular customer, you would assign it to the tenant which represents that customer. However, if the firewall serves multiple customers, it doesn't *belong* to any particular customer, so tenant assignment would not be appropriate.
### Tenant Groups
Tenants can be organized by custom groups. For instance, you might create one group called "Customers" and one called "Acquisitions." The assignment of tenants to groups is optional.
{!docs/models/tenancy/tenant.md!}
{!docs/models/tenancy/tenantgroup.md!}

View File

@@ -1,27 +0,0 @@
# Clusters
A cluster is a logical grouping of physical resources within which virtual machines run. A cluster must be assigned a type, and may optionally be assigned to a group and/or site.
Physical devices may be associated with clusters as hosts. This allows users to track on which host(s) a particular VM may reside. However, NetBox does not support pinning a specific VM within a cluster to a particular host device.
## Cluster Types
A cluster type represents a technology or mechanism by which a cluster is formed. For example, you might create a cluster type named "VMware vSphere" for a locally hosted cluster or "DigitalOcean NYC3" for one hosted by a cloud provider.
## Cluster Groups
Cluster groups may be created for the purpose of organizing clusters. The assignment of clusters to groups is optional.
---
# Virtual Machines
A virtual machine represents a virtual compute instance hosted within a cluster. Each VM must be associated with exactly one cluster.
Like devices, each VM can be assigned a platform and have interfaces created on it. VM interfaces behave similarly to device interfaces, and can be assigned IP addresses, VLANs, and services. However, given their virtual nature, they cannot be connected to other interfaces. Unlike physical devices, VMs cannot be assigned console or power ports, device bays, or inventory items.
The following resources can be defined for each VM:
* vCPU count
* Memory (MB)
* Disk space (GB)

View File

@@ -0,0 +1,9 @@
# Virtual Machines and Clusters
{!docs/models/virtualization/cluster.md!}
{!docs/models/virtualization/clustertype.md!}
{!docs/models/virtualization/clustergroup.md!}
---
{!docs/models/virtualization/virtualmachine.md!}

View File

@@ -1,15 +1,4 @@
# VLANs
# VLAN Management
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 and/or VLAN group.
Each VLAN must be assigned one of the following operational statuses:
* Active
* Reserved
* Deprecated
Each VLAN may also be assigned a functional role. Prefixes and VLANs share the same set of customizable roles.
## VLAN Groups
VLAN groups can be used to organize VLANs within NetBox. 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.
{!docs/models/ipam/vlan.md!}
{!docs/models/ipam/vlangroup.md!}

View File

@@ -0,0 +1,55 @@
# 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 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.
## Stores
### `model_features`
A dictionary of particular features (e.g. custom fields) mapped to the NetBox models which support them, arranged by app. For example:
```python
{
'custom_fields': {
'circuits': ['provider', 'circuit'],
'dcim': ['site', 'rack', 'devicetype', ...],
...
},
'webhooks': {
...
},
...
}
```
### `plugin_menu_items`
Navigation menu items provided by NetBox plugins. Each plugin is registered as a key with the list of menu items it provides. An example:
```python
{
'Plugin A': (
<MenuItem>, <MenuItem>, <MenuItem>,
),
'Plugin B': (
<MenuItem>, <MenuItem>, <MenuItem>,
),
}
```
### `plugin_template_extensions`
Plugin content that gets embedded into core NetBox templates. The store comprises NetBox models registered as dictionary keys, each pointing to a list of applicable template extension classes that exist. An example:
```python
{
'dcim.site': [
<TemplateExtension>, <TemplateExtension>, <TemplateExtension>,
],
'dcim.rack': [
<TemplateExtension>, <TemplateExtension>,
],
}
```

View File

@@ -2,7 +2,7 @@
Below is a list of items to consider when adding a new field to a model:
### 1. Generate and run database migration
## 1. Generate and run database migration
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.
@@ -16,7 +16,7 @@ Where possible, try to merge related changes into a single migration. For exampl
!!! note
Migrations can only be merged within a release. Once a new release has been published, its migrations cannot be altered.
### 2. Add validation logic to `clean()`
## 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:
@@ -32,23 +32,23 @@ class Foo(models.Model):
raise ValidationError()
```
### 3. Add CSV helpers
## 3. Add CSV helpers
Add the name of the new field to `csv_headers` and included a CSV-friendly representation of its data in the model's `to_csv()` method. These will be used when exporting objects in CSV format.
### 4. Update relevant querysets
## 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.
### 5. Update API serializer
## 5. Update API serializer
Extend the model's API serializer in `<app>.api.serializers` to include the new field. In most cases, it will not be necessary to also extend the nested serializer, which produces a minimal represenation of the model.
### 6. Add choices to API view
## 6. Add choices to API view
If the new field has static choices, add it to the `FieldChoicesViewSet` for the app.
### 7. Add field to forms
## 7. Add field to forms
Extend any forms to include the new field as appropriate. Common forms include:
@@ -57,19 +57,19 @@ Extend any forms to include the new field as appropriate. Common forms include:
* **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)
### 8. Extend object filter set
## 8. Extend object filter set
If the new field should be filterable, add it to the `FilterSet` for the model. If the field should be searchable, remember to reference it in the FilterSet's `search()` method.
### 9. Add column to object table
## 9. 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.
### 10. Update the UI templates
## 10. Update the UI templates
Edit the object's view template to display the new field. There may also be a custom add/edit form template that needs to be updated.
### 11. Create/extend test cases
## 11. Create/extend test cases
Create or extend the relevant test cases to verify that the new field and any accompanying validation logic perform as expected. This is especially important for relational fields. NetBox incorporates various test suites, including:

View File

@@ -1,6 +1,8 @@
# Minor Version Bumps
# Release Checklist
## Update Requirements
## Minor Version Bumps
### 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:
@@ -23,7 +25,7 @@ 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.
## Update Static Libraries
### Update Static Libraries
Update the following static libraries to their most recent stable release:
@@ -33,41 +35,37 @@ Update the following static libraries to their most recent stable release:
* jQuery
* jQuery UI
## Squash Schema Migrations
### Create a new Release Notes Page
Database schema migrations should be squashed for each new minor release. See the [squashing guide](squashing-migrations.md) for the detailed process.
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.
## Create a new 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`.
## Manually Perform a New Install
### Manually Perform a New Install
Create a new installation of NetBox by following [the current documentation](http://netbox.readthedocs.io/en/latest/). This should be a manual process, so that issues with the documentation can be identified and corrected.
## Close the Release Milestone
### Close the Release Milestone
Close the release milestone on GitHub. Ensure that there are no remaining open issues associated with it.
---
# All Releases
## All Releases
## Verify CI Build Status
### Verify CI Build Status
Ensure that continuous integration testing on the `develop` branch is completing successfully.
## Update Version and Changelog
### 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.
## Submit a Pull Request
### Submit a Pull Request
Submit a pull request title **"Release vX.Y.X"** 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`. Include a brief change log listing the features, improvements, and/or bugs addressed in the release.
Once CI has completed on the PR, merge it.
## Create a New Release
### Create a New Release
Draft a [new release](https://github.com/netbox-community/netbox/releases/new) with the following parameters.
@@ -77,7 +75,7 @@ Draft a [new release](https://github.com/netbox-community/netbox/releases/new) w
Copy the description from the pull request into the release notes.
## Update the Development Version
### 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:
@@ -85,6 +83,6 @@ On the `develop` branch, update `VERSION` in `settings.py` to point to the next
VERSION = 'v2.3.5-dev'
```
## Announce the Release
### 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

@@ -1,168 +0,0 @@
# Squashing Database Schema Migrations
## What are Squashed Migrations?
The Django framework on which NetBox is built utilizes [migration files](https://docs.djangoproject.com/en/stable/topics/migrations/) to keep track of changes to the PostgreSQL database schema. Each time a model is altered, the resulting schema change is captured in a migration file, which can then be applied to effect the new schema.
As changes are made over time, more and more migration files are created. Although not necessarily problematic, it can be beneficial to merge and compress these files occasionally to reduce the total number of migrations that need to be applied upon installation of NetBox. This merging process is called _squashing_ in Django vernacular, and results in two parallel migration paths: individual and squashed.
Below is an example showing both individual and squashed migration files within an app:
| Individual | Squashed |
|------------|----------|
| 0001_initial | 0001_initial_squashed_0004_add_field |
| 0002_alter_field | . |
| 0003_remove_field | . |
| 0004_add_field | . |
| 0005_another_field | 0005_another_field |
In the example above, a new installation can leverage the squashed migrations to apply only two migrations:
* `0001_initial_squashed_0004_add_field`
* `0005_another_field`
This is because the squash file contains all of the operations performed by files `0001` through `0004`.
However, an existing installation that has already applied some of the individual migrations contained within the squash file must continue applying individual migrations. For instance, an installation which currently has up to `0002_alter_field` applied must apply the following migrations to become current:
* `0003_remove_field`
* `0004_add_field`
* `0005_another_field`
Squashed migrations are opportunistic: They are used only if applicable to the current environment. Django will fall back to using individual migrations if the squashed migrations do not agree with the current database schema at any point.
## Squashing Migrations
During every minor (i.e. 2.x) release, migrations should be squashed to help simplify the migration process for new installations. The process below describes how to squash migrations efficiently and with minimal room for error.
### 1. Create a New Branch
Create a new branch off of the `develop-2.x` branch. (Migrations should be squashed _only_ in preparation for a new minor release.)
```
git checkout -B squash-migrations
```
### 2. Delete Existing Squash Files
Delete the most recent squash file within each NetBox app. This allows us to extend squash files where the opportunity exists. For example, we might be able to replace `0005_to_0008` with `0005_to_0011`.
### 3. Generate the Current Migration Plan
Use Django's `showmigrations` utility to display the order in which all migrations would be applied for a new installation.
```
manage.py showmigrations --plan
```
From the resulting output, delete all lines which reference an external migration. Any migrations imposed by Django itself on an external package are not relevant.
### 4. Create Squash Files
Begin iterating through the migration plan, looking for successive sets of migrations within an app. These are candidates for squashing. For example:
```
[X] extras.0014_configcontexts
[X] extras.0015_remove_useraction
[X] extras.0016_exporttemplate_add_cable
[X] extras.0017_exporttemplate_mime_type_length
[ ] extras.0018_exporttemplate_add_jinja2
[ ] extras.0019_tag_taggeditem
[X] dcim.0062_interface_mtu
[X] dcim.0063_device_local_context_data
[X] dcim.0064_remove_platform_rpc_client
[ ] dcim.0065_front_rear_ports
[X] circuits.0001_initial_squashed_0010_circuit_status
[ ] dcim.0066_cables
...
```
Migrations `0014` through `0019` in `extras` can be squashed, as can migrations `0062` through `0065` in `dcim`. Migration `0066` cannot be included in the same squash file, because the `circuits` migration must be applied before it. (Note that whether or not each migration is currently applied to the database does not matter.)
Squash files are created using Django's `squashmigrations` utility:
```
manage.py squashmigrations <app> <start> <end>
```
For example, our first step in the example would be to run `manage.py squashmigrations extras 0014 0019`.
!!! note
Specifying a migration file's numeric index is enough to uniquely identify it within an app. There is no need to specify the full filename.
This will create a new squash file within the app's `migrations` directory, named as a concatenation of its beginning and ending migration. Some manual editing is necessary for each new squash file for housekeeping purposes:
* Remove the "automatically generated" comment at top (to indicate that a human has reviewed the file).
* Reorder `import` statements as necessary per PEP8.
* It may be necessary to copy over custom functions from the original migration files (this will be indicated by a comment near the top of the squash file). It is safe to remove any functions that exist solely to accomodate reverse migrations (which we no longer support).
Repeat this process for each candidate set of migrations until you reach the end of the migration plan.
### 5. Check for Missing Migrations
If everything went well, at this point we should have a completed squashed path. Perform a dry run to check for any missing migrations:
```
manage.py migrate --dry-run
```
### 5. Run Migrations
Next, we'll apply the entire migration path to an empty database. Begin by dropping and creating your development database.
!!! warning
Obviously, first back up any data you don't want to lose.
```
sudo -u postgres psql -c 'drop database netbox'
sudo -u postgres psql -c 'create database netbox'
```
Apply the migrations with the `migrate` management command. It is not necessary to specify a particular migration path; Django will detect and use the squashed migrations automatically. You can verify the exact migrations being applied by enabling verboes output with `-v 2`.
```
manage.py migrate -v 2
```
### 6. Commit the New Migrations
If everything is successful to this point, commit your changes to the `squash-migrations` branch.
### 7. Validate Resulting Schema
To ensure our new squashed migrations do not result in a deviation from the original schema, we'll compare the two. With the new migration file safely commit, check out the `develop-2.x` branch, which still contains only the individual migrations.
```
git checkout develop-2.x
```
Temporarily install the [django-extensions](https://django-extensions.readthedocs.io/) package, which provides the `sqldiff utility`:
```
pip install django-extensions
```
Also add `django_extensions` to `INSTALLED_APPS` in `netbox/netbox/settings.py`.
At this point, our database schema has been defined by using the squashed migrations. We can run `sqldiff` to see if it differs any from what the current (non-squashed) migrations would generate. `sqldiff` accepts a list of apps against which to run:
```
manage.py sqldiff circuits dcim extras ipam secrets tenancy users virtualization
```
It is safe to ignore errors indicating an "unknown database type" for the following fields:
* `dcim_interface.mac_address`
* `ipam_aggregate.prefix`
* `ipam_prefix.prefix`
It is also safe to ignore the message "Table missing: extras_script".
Resolve any differences by correcting migration files in the `squash-migrations` branch.
!!! warning
Don't forget to remove `django_extension` from `INSTALLED_APPS` before committing your changes.
### 8. Merge the Squashed Migrations
Once all squashed migrations have been validated and all tests run successfully, merge the `squash-migrations` branch into `develop-2.x`. This completes the squashing process.

View File

@@ -32,7 +32,7 @@ pycodestyle --ignore=W504,E501 netbox/
The introduction of a new dependency is best avoided unless it is absolutely necessary. For small features, it's generally preferable to replicate functionality within the NetBox code base rather than to introduce reliance on an external project. This reduces both the burden of tracking new releases and our exposure to outside bugs and attacks.
If there's a strong case for introducing a new depdency, it must meet the following criteria:
If there's a strong case for introducing a new dependency, it must meet the following criteria:
* Its complete source code must be published and freely accessible without registration.
* Its license must be conducive to inclusion in an open source project.
@@ -45,10 +45,18 @@ 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.
* 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.
* Constants (variables which generally do not change) should be declared in `constants.py` within each app. Wildcard imports from the file are acceptable.
* Every model should have a docstring. Every custom method should include an expalantion of its function.
* Every model should have a docstring. Every custom method should include an explanation of its function.
* Nested API serializers generate minimal representations of an object. These are stored separately from the primary serializers to avoid circular dependencies. Always import nested serializers from other apps directly. For example, from within the DCIM app you would write `from ipam.api.nested_serializers import NestedIPAddressSerializer`.
## Branding
* When referring to NetBox in writing, use the proper form "NetBox," with the letters N and B capitalized. The lowercase form "netbox" should be used in code, filenames, etc. But never "Netbox" or any other deviation.
* There is an SVG form of the NetBox logo at [docs/netbox_logo.svg](../netbox_logo.svg). It is preferred to use this logo for all purposes as it scales to arbitrary sizes without loss of resolution. If a raster image is required, the SVG logo should be converted to a PNG image of the prescribed size.

View File

@@ -0,0 +1,11 @@
# User Preferences
The `users.UserConfig` model holds individual preferences for each user in the form of JSON data. This page serves as a manifest of all recognized user preferences in NetBox.
## Available Preferences
| Name | Description |
| ---- | ----------- |
| 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 |

19
docs/extra.css Normal file
View File

@@ -0,0 +1,19 @@
/* Images */
img {
display: block;
margin-left: auto;
margin-right: auto;
}
/* Tables */
table {
margin-bottom: 24px;
width: 100%;
}
th {
background-color: #f0f0f0;
padding: 6px;
}
td {
padding: 6px;
}

View File

@@ -12,7 +12,7 @@ NetBox is an open source web application designed to help manage and document co
* **Data circuits** - Long-haul communications circuits and providers
* **Secrets** - Encrypted storage of sensitive credentials
# What NetBox Is Not
## What NetBox Is Not
While NetBox strives to cover many areas of network management, the scope of its feature set is necessarily limited. This ensures that development focuses on core functionality and that scope creep is reasonably contained. To that end, it might help to provide some examples of functionality that NetBox **does not** provide:
@@ -24,23 +24,23 @@ While NetBox strives to cover many areas of network management, the scope of its
That said, NetBox _can_ be used to great effect in populating external tools with the data they need to perform these functions.
# Design Philosophy
## Design Philosophy
NetBox was designed with the following tenets foremost in mind.
## Replicate the Real World
### Replicate the Real World
Careful consideration has been given to the data model to ensure that it can accurately reflect a real-world network. For instance, IP addresses are assigned not to devices, but to specific interfaces attached to a device, and an interface may have multiple IP addresses assigned to it.
## Serve as a "Source of Truth"
### Serve as a "Source of Truth"
NetBox intends to represent the _desired_ state of a network versus its _operational_ state. As such, automated import of live network state is strongly discouraged. All data created in NetBox should first be vetted by a human to ensure its integrity. NetBox can then be used to populate monitoring and provisioning systems with a high degree of confidence.
## Keep it Simple
### Keep it Simple
When given a choice between a relatively simple [80% solution](https://en.wikipedia.org/wiki/Pareto_principle) and a much more complex complete solution, the former will typically be favored. This ensures a lean codebase with a low learning curve.
# Application Stack
## Application Stack
NetBox is built on the [Django](https://djangoproject.com/) Python framework and utilizes a [PostgreSQL](https://www.postgresql.org/) database. It runs as a WSGI service behind your choice of HTTP server.
@@ -49,10 +49,14 @@ NetBox is built on the [Django](https://djangoproject.com/) Python framework and
| HTTP service | nginx or Apache |
| WSGI service | gunicorn or uWSGI |
| Application | Django/Python |
| Database | PostgreSQL 9.4+ |
| Database | PostgreSQL 9.6+ |
| Task queuing | Redis/django-rq |
| Live device access | NAPALM |
# Getting Started
## Supported Python Versions
NetBox supports Python 3.6 and 3.7 environments currently. (Support for Python 3.5 was removed in NetBox v2.8.)
## Getting Started
See the [installation guide](installation/index.md) for help getting NetBox up and running quickly.

View File

@@ -1,14 +1,15 @@
NetBox requires a PostgreSQL database to store data. This can be hosted locally or on a remote server. (Please note that MySQL is not supported, as NetBox leverages PostgreSQL's built-in [network address types](https://www.postgresql.org/docs/current/static/datatype-net-types.html).)
# PostgreSQL Database Installation
!!! note
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.
This section entails the installation and configuration of a local PostgreSQL database. If you already have a PostgreSQL database service in place, skip to [the next section](2-redis.md).
!!! warning
NetBox requires PostgreSQL 9.4 or higher.
NetBox requires PostgreSQL 9.6 or higher. Please note that MySQL and other relational databases are **not** supported.
# Installation
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.
**Ubuntu**
## Installation
#### 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).
@@ -17,13 +18,13 @@ If a recent enough version of PostgreSQL is not available through your distribut
# apt-get install -y postgresql libpq-dev
```
**CentOS**
#### CentOS
CentOS 7.5 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.
CentOS 7.5 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 https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
# yum install postgresql96 postgresql96-server postgresql96-devel
# 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
```
@@ -41,7 +42,7 @@ Then, start the service and enable it to run at boot:
# systemctl enable postgresql-9.6
```
# Database Creation
## Database Creation
At a minimum, we need to create a database for NetBox and assign it a username and password for authentication. This is done with the following commands.
@@ -50,7 +51,7 @@ At a minimum, we need to create a database for NetBox and assign it a username a
```no-highlight
# sudo -u postgres psql
psql (9.4.5)
psql (10.10)
Type "help" for help.
postgres=# CREATE DATABASE netbox;
@@ -62,6 +63,8 @@ GRANT
postgres=# \q
```
## Verify Service Status
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

View File

@@ -0,0 +1,31 @@
# Redis Installation
## Install Redis
[Redis](https://redis.io/) is an in-memory key-value store which NetBox employs for caching and queuing. This section entails the installation and configuration of a local Redis instance. If you already have a Redis service in place, skip to [the next section](3-netbox.md).
### Ubuntu
```no-highlight
# apt-get install -y redis-server
```
### CentOS
```no-highlight
# yum install -y epel-release
# yum install -y redis
# systemctl start redis
# 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.
## Verify Service Status
Use the `redis-cli` utility to ensure the Redis service is functional:
```no-highlight
$ redis-cli ping
PONG
```

View File

@@ -1,159 +0,0 @@
We'll set up a simple WSGI front end using [gunicorn](http://gunicorn.org/) for the purposes of this guide. For web servers, we provide example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](http://httpd.apache.org/docs/2.4). (You are of course free to use whichever combination of HTTP and WSGI services you'd like.) We'll use systemd to enable service persistence.
!!! info
For the sake of brevity, only Ubuntu 18.04 instructions are provided here, but this sort of web server and WSGI configuration is not unique to NetBox. Please consult your distribution's documentation for assistance if needed.
# Web Server Installation
## Option A: nginx
The following will serve as a minimal nginx configuration. Be sure to modify your server name and installation path appropriately.
```no-highlight
# apt-get install -y nginx
```
Once nginx is installed, save the following configuration 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`.)
```nginx
server {
listen 80;
server_name netbox.example.com;
client_max_body_size 25m;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
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
```
Restart the nginx service to use the new configuration.
```no-highlight
# service nginx restart
```
To enable SSL, consider this guide on [securing nginx with Let's Encrypt](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04).
## Option B: Apache
```no-highlight
# apt-get install -y apache2 libapache2-mod-wsgi-py3
```
Once Apache is installed, proceed with the following configuration (Be sure to modify the `ServerName` appropriately):
```apache
<VirtualHost *:80>
ProxyPreserveHost On
ServerName netbox.example.com
Alias /static /opt/netbox/netbox/static
# Needed to allow token-based API authentication
WSGIPassAuthorization on
<Directory /opt/netbox/netbox/static>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
<Location /static>
ProxyPass !
</Location>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
ProxyPass / http://127.0.0.1:8001/
ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>
```
Save the contents of the above example in `/etc/apache2/sites-available/netbox.conf`, enable the `proxy` and `proxy_http` modules, and reload Apache:
```no-highlight
# a2enmod proxy
# a2enmod proxy_http
# a2enmod headers
# a2ensite netbox
# service apache2 restart
```
To enable SSL, consider this guide on [securing Apache with Let's Encrypt](https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04).
# gunicorn Installation
Install gunicorn:
```no-highlight
# pip3 install gunicorn
```
Copy `contrib/gunicorn.py` to `/opt/netbox/gunicorn.py`. We make a copy of this file to ensure that any changes to it do not get overwritten by a future upgrade.
```no-highlight
# cp contrib/gunicorn.py /opt/netbox/gunicorn.py
```
You may wish to edit this file to change the bound IP address or port number, or to make performance-related adjustments.
# systemd configuration
We'll use systemd to control the daemonization of NetBox services. First, copy `contrib/netbox.service` and `contrib/netbox-rq.service` to the `/etc/systemd/system/` directory:
```no-highlight
# cp contrib/*.service /etc/systemd/system/
```
!!! note
These service files assume that gunicorn is installed at `/usr/local/bin/gunicorn`. If the output of `which gunicorn` indicates a different path, you'll need to correct the `ExecStart` path in both files.
Then, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
```no-highlight
# systemctl daemon-reload
# systemctl start netbox.service
# systemctl start netbox-rq.service
# systemctl enable netbox.service
# systemctl enable netbox-rq.service
```
You can use the command `systemctl status netbox` to verify that the WSGI service is running:
```
# 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/...
...
```
At this point, you should be able to connect to the HTTP service at the server name or IP address you provided. If you are unable to connect, check that the nginx service is running and properly configured. If you receive a 502 (bad gateway) error, this indicates that gunicorn is misconfigured or not running.
!!! 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.

View File

@@ -1,25 +1,29 @@
# Installation
# NetBox Installation
This section of the documentation discusses installing and configuring the NetBox application. Begin by installing all system packages required by NetBox and its dependencies:
This section of the documentation discusses installing and configuring the NetBox application itself.
**Ubuntu**
## Install System Packages
Begin by installing all system packages required by NetBox and its dependencies. Note that beginning with NetBox v2.8, Python 3.6 or later is required.
### Ubuntu
```no-highlight
# apt-get install -y python3 python3-pip python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev redis-server zlib1g-dev
# 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
```
**CentOS**
### CentOS
```no-highlight
# yum install -y epel-release
# yum install -y gcc python36 python36-devel python36-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config redis
# 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
# ln -s /usr/bin/python3.6 /usr/bin/python3
```
## Download NetBox
You may opt to install NetBox either from a numbered release or by cloning the master branch of its repository on GitHub.
## Option A: Download a Release
### Option A: Download a Release
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`.
@@ -31,7 +35,7 @@ Download the [latest stable release](https://github.com/netbox-community/netbox/
# cd /opt/netbox/
```
## Option B: Clone the Git Repository
### Option B: Clone the Git Repository
Create the base directory for the NetBox installation. For this guide, we'll use `/opt/netbox`.
@@ -41,13 +45,13 @@ Create the base directory for the NetBox installation. For this guide, we'll use
If `git` is not already installed, install it:
**Ubuntu**
#### Ubuntu
```no-highlight
# apt-get install -y git
```
**CentOS**
#### CentOS
```no-highlight
# yum install -y git
@@ -66,45 +70,69 @@ Resolving deltas: 100% (1495/1495), done.
Checking connectivity... done.
```
!!! warning
Ensure that the media directory (`/opt/netbox/netbox/media/` in this example) and all its subdirectories are writable by the user account as which NetBox runs. If the NetBox process does not have permission to write to this directory, attempts to upload files (e.g. image attachments) will fail. (The appropriate user account will vary by platform.)
## Create the NetBox User
`# chown -R netbox:netbox /opt/netbox/netbox/media/`
# Install Python Packages
Install the required Python packages using pip. (If you encounter any compilation errors during this step, ensure that you've installed all of the system dependencies listed above.)
```no-highlight
# pip3 install -r requirements.txt
```
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 local files.
!!! note
If you encounter errors while installing the required packages, check that you're running a recent version of pip (v9.0.1 or higher) with the command `pip3 -V`.
CentOS users may need to create the `netbox` group first.
## NAPALM Automation (Optional)
NetBox supports integration with the [NAPALM automation](https://napalm-automation.net/) library. NAPALM allows NetBox to fetch live data from devices and return it to a requester via its REST API. Installation of NAPALM is optional. To enable it, install the `napalm` package using pip or pip3:
```no-highlight
# pip3 install napalm
```
# groupadd --system netbox
# adduser --system --gid netbox netbox
# chown --recursive netbox /opt/netbox/netbox/media/
```
## Remote File Storage (Optional)
## Set Up Python Environment
We'll use a Python [virtual environment](https://docs.python.org/3.6/tutorial/venv.html) to ensure NetBox's required packages don't conflict with anything in the base system. This will create a directory named `venv` in our NetBox root.
```no-highlight
# python3 -m venv /opt/netbox/venv
```
Next, activate the virtual environment and install the required Python packages. You should see your console prompt change to indicate the active environment. (Activating the virtual environment updates your command shell to use the local copy of Python that we just installed for NetBox instead of the system's Python interpreter.)
```no-highlight
# source venv/bin/activate
(venv) # pip3 install -r requirements.txt
```
### NAPALM Automation (Optional)
NetBox supports integration with the [NAPALM automation](https://napalm-automation.net/) library. NAPALM allows NetBox to fetch live data from devices and return it to a requester via its REST API. Installation of NAPALM is optional. To enable it, install the `napalm` package:
```no-highlight
(venv) # pip3 install napalm
```
To ensure NAPALM is automatically re-installed during future upgrades, create a file named `local_requirements.txt` in the NetBox root directory (alongside `requirements.txt`) and list the `napalm` package:
```no-highlight
# echo napalm >> local_requirements.txt
```
### Remote File Storage (Optional)
By default, NetBox will use the local filesystem to storage uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired backend](../../configuration/optional-settings/#storage_backend) in `configuration.py`.
```no-highlight
# pip3 install django-storages
(venv) # pip3 install django-storages
```
# Configuration
Don't forget to add the `django-storages` package to `local_requirements.txt` to ensure it gets re-installed during future upgrades:
```no-highlight
# echo django-storages >> local_requirements.txt
```
## Configuration
Move into the NetBox configuration directory and make a copy of `configuration.example.py` named `configuration.py`.
```no-highlight
# cd netbox/netbox/
# cp configuration.example.py configuration.py
(venv) # cd netbox/netbox/
(venv) # cp configuration.example.py configuration.py
```
Open `configuration.py` with your preferred editor and set the following variables:
@@ -114,7 +142,7 @@ Open `configuration.py` with your preferred editor and set the following variabl
* `REDIS`
* `SECRET_KEY`
## ALLOWED_HOSTS
### ALLOWED_HOSTS
This is a list of the valid hostnames by which this server can be reached. You must specify at least one name or IP address.
@@ -124,7 +152,7 @@ Example:
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
```
## DATABASE
### 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, replace `localhost` with its address. See the [configuration documentation](../../configuration/required-settings/#database) for more detail on individual parameters.
@@ -141,13 +169,13 @@ DATABASE = {
}
```
## REDIS
### REDIS
Redis is a in-memory key-value store required as part of the NetBox installation. It is used for features such as webhooks and caching. 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.
```python
REDIS = {
'webhooks': {
'tasks': {
'HOST': 'redis.example.com',
'PORT': 1234,
'PASSWORD': 'foobar',
@@ -166,7 +194,7 @@ REDIS = {
}
```
## SECRET_KEY
### SECRET_KEY
Generate a random secret key of at least 50 alphanumeric characters. This key must be unique to this installation and must not be shared outside the local system.
@@ -175,13 +203,13 @@ You may use the script located at `netbox/generate_secret_key.py` to generate a
!!! note
In the case of a highly available installation with multiple web servers, `SECRET_KEY` must be identical among all servers in order to maintain a persistent user session state.
# Run Database Migrations
## Run Database Migrations
Before NetBox can run, we need to install the database schema. This is done by running `python3 manage.py migrate` from the `netbox` directory (`/opt/netbox/netbox/` in our example):
```no-highlight
# cd /opt/netbox/netbox/
# python3 manage.py migrate
(venv) # cd /opt/netbox/netbox/
(venv) # python3 manage.py migrate
Operations to perform:
Apply all migrations: dcim, sessions, admin, ipam, utilities, auth, circuits, contenttypes, extras, secrets, users
Running migrations:
@@ -194,12 +222,12 @@ Running migrations:
If this step results in a PostgreSQL authentication error, ensure that the username and password created in the database match what has been specified in `configuration.py`
# Create a Super User
## Create a Super User
NetBox does not come with any predefined user accounts. You'll need to create a super user to be able to log into NetBox:
```no-highlight
# python3 manage.py createsuperuser
(venv) # python3 manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:
@@ -207,20 +235,20 @@ Password (again):
Superuser created successfully.
```
# Collect Static Files
## Collect Static Files
```no-highlight
# python3 manage.py collectstatic --no-input
(venv) # python3 manage.py collectstatic --no-input
959 static files copied to '/opt/netbox/netbox/static'.
```
# Test the Application
## Test the Application
At this point, NetBox should be able to run. We can verify this by starting a development instance:
```no-highlight
# 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).

View File

@@ -0,0 +1,135 @@
# HTTP Server Setup
We'll set up a simple WSGI front end using [gunicorn](http://gunicorn.org/) for the purposes of this guide. For web servers, we provide example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](http://httpd.apache.org/docs/2.4). (You are of course free to use whichever combination of HTTP and WSGI services you'd like.) We'll use systemd to enable service persistence.
!!! info
For the sake of brevity, only Ubuntu 18.04 instructions are provided here, but this sort of web server and WSGI configuration is not unique to NetBox. Please consult your distribution's documentation for assistance if needed.
## Obtain an SSL Certificate
To enable HTTPS access to NetBox, you'll need a valid SSL certificate. You can purchase one from a trusted commercial provider, obtain one for free from [Let's Encrypt](https://letsencrypt.org/getting-started/), or generate your own (although self-signed certificates are generally untrusted). Both the public certificate and private key files need to be installed on your NetBox server in a location that is readable by the `netbox` user.
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 \
-keyout /etc/ssl/private/netbox.key \
-out /etc/ssl/certs/netbox.crt
```
## HTTP Daemon Installation
### Option A: nginx
The following will serve as a minimal nginx configuration. Be sure to modify your server name and installation path appropriately.
```no-highlight
# apt-get install -y nginx
```
Once nginx is installed, copy the default nginx configuration file 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
```
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
```
Finally, restart the `nginx` service to use the new configuration.
```no-highlight
# service nginx restart
```
### Option B: Apache
Begin by installing Apache:
```no-highlight
# apt-get 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
```
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
```
!!! note
Certain components of NetBox (such as the display of rack elevation diagrams) rely on the use of embedded objects. Ensure that your HTTP server configuration does not override the `X-Frame-Options` response header set by NetBox.
## Gunicorn Configuration
Copy `/opt/netbox/contrib/gunicorn.py` to `/opt/netbox/gunicorn.py`. (We make a copy of this file to ensure that any changes to it do not get overwritten by a future upgrade.)
```no-highlight
# cd /opt/netbox
# cp contrib/gunicorn.py /opt/netbox/gunicorn.py
```
You may wish to edit this file to change the bound IP address 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 Configuration
We'll use systemd to control the daemonization of NetBox services. First, copy `contrib/netbox.service` and `contrib/netbox-rq.service` to the `/etc/systemd/system/` directory:
```no-highlight
# cp contrib/*.service /etc/systemd/system/
```
Then, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
```no-highlight
# systemctl daemon-reload
# systemctl start netbox netbox-rq
# systemctl enable netbox netbox-rq
```
You can use the command `systemctl status netbox` to verify that the WSGI service is running:
```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/...
...
```
At this point, you should be able to connect to the HTTP 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.
## Troubleshooting
If you are unable to connect to the HTTP server, check that:
* Nginx/Apache is running and configured to listen on the correct port.
* Access is not being blocked by a firewall. (Try connecting locally from the server itself.)
If you are able to connect but receive a 502 (bad gateway) error, check the following:
* The NetBox system process (gunicorn) is running: `systemctl status netbox`
* 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

@@ -1,32 +1,44 @@
# LDAP Configuration
This guide explains how to implement LDAP authentication using an external server. User authentication will fall back to built-in Django users in the event of a failure.
# Requirements
## Install Requirements
## Install openldap-devel
### Install System Packages
On Ubuntu:
```no-highlight
sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev
# apt-get install -y libldap2-dev libsasl2-dev libssl-dev
```
On CentOS:
```no-highlight
sudo yum install -y openldap-devel
# yum install -y openldap-devel
```
## Install django-auth-ldap
### Install django-auth-ldap
Activate the Python virtual environment and install the `django-auth-ldap` package using pip:
```no-highlight
pip3 install django-auth-ldap
# cd /opt/netbox/
# source venv/bin/activate
(venv) # pip3 install django-auth-ldap
```
# Configuration
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
```
## Configuration
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/).
## General Server Configuration
### General Server Configuration
!!! info
When using Windows Server 2012 you may need to specify a port on `AUTH_LDAP_SERVER_URI`. Use `3269` for secure, or `3268` for non-secure.
@@ -54,7 +66,7 @@ LDAP_IGNORE_CERT_ERRORS = True
STARTTLS can be configured by setting `AUTH_LDAP_START_TLS = True` and using the `ldap://` URI scheme.
## User Authentication
### User Authentication
!!! info
When using Windows Server 2012, `AUTH_LDAP_USER_DN_TEMPLATE` should be set to None.
@@ -79,7 +91,7 @@ AUTH_LDAP_USER_ATTR_MAP = {
}
```
# User Groups for Permissions
### User Groups for Permissions
!!! info
When using Microsoft Active Directory, support for nested groups can be activated by using `NestedGroupOfNamesType()` instead of `GroupOfNamesType()` for `AUTH_LDAP_GROUP_TYPE`. You will also need to modify the import line to use `NestedGroupOfNamesType` instead of `GroupOfNamesType` .
@@ -110,8 +122,8 @@ AUTH_LDAP_USER_FLAGS_BY_GROUP = {
AUTH_LDAP_FIND_GROUP_PERMS = True
# Cache groups for one hour to reduce LDAP traffic
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_CACHE_TIMEOUT = 3600
```
* `is_active` - All users must be mapped to at least this group to enable authentication. Without this, users cannot log in.
@@ -121,9 +133,9 @@ AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
!!! warning
Authentication will fail if the groups (the distinguished names) do not exist in the LDAP directory.
# Troubleshooting LDAP
## Troubleshooting LDAP
`supervisorctl 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/supervisor/`.
`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`.

View File

@@ -3,14 +3,17 @@
The following sections detail how to set up a new instance of NetBox:
1. [PostgreSQL database](1-postgresql.md)
2. [NetBox components](2-netbox.md)
3. [HTTP dameon](3-http-daemon.md)
4. [LDAP authentication](4-ldap.md) (optional)
1. [Redis](2-redis.md)
3. [NetBox components](3-netbox.md)
4. [HTTP daemon](4-http-daemon.md)
5. [LDAP authentication](5-ldap.md) (optional)
# Upgrading
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)
## Upgrading
If you are upgrading from an existing installation, please consult the [upgrading guide](upgrading.md).
NetBox v2.5 and later requires Python 3.5 or higher. Please see the instructions for [migrating to Python 3](migrating-to-python3.md) if you are still using Python 2.
Netbox v2.5.9 and later moved to using systemd instead of supervisord. Please see the instructions for [migrating to systemd](migrating-to-systemd.md) if you are still using supervisord.

View File

@@ -1,38 +0,0 @@
# Migration
!!! warning
As of version 2.5, NetBox no longer supports Python 2. Python 3 is required to run any 2.5 release or later.
## Ubuntu
Remove the Python2 version of gunicorn:
```no-highlight
# pip uninstall -y gunicorn
```
Install Python3 and pip3, Python's package management tool:
```no-highlight
# apt-get update
# apt-get install -y python3 python3-dev python3-setuptools
# easy_install3 pip
```
Install the Python3 packages required by NetBox:
```no-highlight
# pip3 install -r requirements.txt
```
Replace gunicorn with the Python3 version:
```no-highlight
# pip3 install gunicorn
```
If using LDAP authentication, install the `django-auth-ldap` package:
```no-highlight
# pip3 install django-auth-ldap
```

View File

@@ -1,100 +1,55 @@
# Migration
# Migrating to systemd
Migration is not required, as supervisord will still continue to function.
This document contains instructions for migrating from a legacy NetBox deployment using [supervisor](http://supervisord.org/) to a systemd-based approach.
## Ubuntu
### Remove supervisord:
### Uninstall supervisord
```no-highlight
# apt-get remove -y supervisord
# apt-get remove -y supervisor
```
### systemd configuration:
### Configure systemd
Copy or link contrib/netbox.service and contrib/netbox-rq.service to /etc/systemd/system/netbox.service and /etc/systemd/system/netbox-rq.service
!!! note
These instructions assume the presence of a Python virtual environment at `/opt/netbox/venv`. If you have not created this environment, please refer to the [installation instructions](3-netbox.md#set-up-python-environment) for direction.
We'll use systemd to control the daemonization of NetBox services. First, copy `contrib/netbox.service` and `contrib/netbox-rq.service` to the `/etc/systemd/system/` directory:
```no-highlight
# cp contrib/netbox.service /etc/systemd/system/netbox.service
# cp contrib/netbox-rq.service /etc/systemd/system/netbox-rq.service
# cp contrib/*.service /etc/systemd/system/
```
Edit /etc/systemd/system/netbox.service and /etc/systemd/system/netbox-rq.service. Be sure to verify the location of the gunicorn executable on your server (e.g. `which gunicorn`). If using CentOS/RHEL. Change the username from `www-data` to `nginx` or `apache`:
!!! note
You may need to modify the user that the systemd service runs as. Please verify the user for httpd on your specific release and edit both files to match your httpd service under user and group. The username could be "nobody", "nginx", "apache", "www-data", or something else.
```no-highlight
/usr/local/bin/gunicorn --pid ${PidPath} --pythonpath ${WorkingDirectory}/netbox --config ${ConfigPath} netbox.wsgi
```
```no-highlight
User=www-data
Group=www-data
```
Copy contrib/netbox.env to /etc/sysconfig/netbox.env
```no-highlight
# cp contrib/netbox.env /etc/sysconfig/netbox.env
```
Edit /etc/sysconfig/netbox.env and change the settings as required. Update the `WorkingDirectory` variable if needed.
```no-highlight
# Name is the Process Name
#
Name = 'Netbox'
# ConfigPath is the path to the gunicorn config file.
#
ConfigPath=/opt/netbox/gunicorn.conf
# WorkingDirectory is the Working Directory for Netbox.
#
WorkingDirectory=/opt/netbox/
# PidPath is the path to the pid for the netbox WSGI
#
PidPath=/var/run/netbox.pid
```
Copy contrib/gunicorn.conf to gunicorn.conf
```no-highlight
# cp contrib/gunicorn.conf to gunicorn.conf
```
Edit gunicorn.conf and change the settings as required.
```
# Bind is the ip and port that the Netbox WSGI should bind to
#
bind='127.0.0.1:8001'
# Workers is the number of workers that GUnicorn should spawn.
# Workers should be: cores * 2 + 1. So if you have 8 cores, it would be 17.
#
workers=3
# Threads
# The number of threads for handling requests
#
threads=3
# Timeout is the timeout between gunicorn receiving a request and returning a response (or failing with a 500 error)
#
timeout=120
# ErrorLog
# ErrorLog is the logfile for the ErrorLog
#
errorlog='/opt/netbox/netbox.log'
```
Finally, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
Then, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
```no-highlight
# systemctl daemon-reload
# systemctl start netbox.service
# systemctl start netbox-rq.service
# systemctl enable netbox.service
# systemctl enable netbox-rq.service
# systemctl start netbox netbox-rq
# systemctl enable netbox netbox-rq
```
You can use the command `systemctl status netbox` to verify that the WSGI service is running:
```
# 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/...
...
```
At this point, you should be able to connect to the HTTP service at the server name or IP address you provided. If you are unable to connect, check that the nginx service is running and properly configured. If you receive a 502 (bad gateway) error, this indicates that gunicorn is misconfigured or not running. Issue the command `journalctl -xe` to see why the services were unable to start.
!!! 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.

View File

@@ -1,12 +1,17 @@
# Review the Release Notes
# Upgrading to a New NetBox Release
## 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.
# Install the Latest Code
!!! note
Beginning with version 2.8, NetBox requires Python 3.6 or later.
## Install the Latest Code
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.
## Option A: Download a Release
### Option A: Download a Release
Download the [latest stable release](https://github.com/netbox-community/netbox/releases) from GitHub as a tarball or ZIP archive. Extract it to your desired path. In this example, we'll use `/opt/netbox`.
@@ -25,31 +30,32 @@ Copy the 'configuration.py' you created when first installing to the new version
# cp netbox-X.Y.Z/netbox/netbox/configuration.py netbox/netbox/netbox/configuration.py
```
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
```
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/
```
Also make sure to copy over any reports that you've made. Note that if you made them in a separate directory (`/opt/netbox-reports` for example), then you will not need to copy them - the config file that you copied earlier will point to the correct location.
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.)
```no-highlight
# cp -r /opt/netbox-X.Y.X/netbox/reports /opt/netbox/netbox/reports/
# 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/
```
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_config.py netbox/gunicorn_config.py
# cp netbox-X.Y.Z/gunicorn.py netbox/gunicorn.py
```
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
```
## Option B: Clone the Git Repository (latest master release)
### Option B: Clone the Git Repository
This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most recent iteration of the master branch:
@@ -60,9 +66,9 @@ This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most
# git status
```
# Run the Upgrade Script
## Run the Upgrade Script
Once the new code is in place, run the upgrade script (which may need to be run as root depending on how your environment is configured).
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
@@ -70,9 +76,14 @@ Once the new code is in place, run the upgrade script (which may need to be run
This script:
* Installs or upgrades any new required Python packages
* Destroys and rebuilds the Python virtual environment
* Installs all required Python packages (listed in `requirements.txt`)
* Installs any additional packages from `local_requirements.txt`
* Applies any database migrations that were included in the release
* Collects all static files to be served by the HTTP service
* Deletes stale content types from the database
* Deletes all expired user sessions from the database
* 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:
@@ -82,14 +93,16 @@ This script:
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.
# Restart the WSGI Service
## Restart the NetBox Services
Finally, restart the WSGI services to run the new code. If you followed this guide for the initial installation, this is done using `systemctl:
!!! 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.
Finally, restart the gunicorn and RQ services:
```no-highlight
# sudo systemctl restart netbox
# sudo systemctl restart netbox-rqworker
# sudo systemctl restart netbox netbox-rq
```
!!! note
It's possible you are still using supervisord instead of the linux native systemd. If you are still using supervisord you can restart the services by either restarting supervisord or by using supervisorctl to restart netbox.
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).

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 339 KiB

View File

@@ -0,0 +1,3 @@
# Circuits
A circuit represents a single _physical_ link connecting exactly two endpoints. (A circuit with more than two endpoints is a virtual circuit, which is not currently supported by NetBox.) Each circuit belongs to a provider and must be assigned a circuit ID which is unique to that provider.

View File

@@ -0,0 +1,11 @@
# Circuit Terminations
A circuit may have one or two terminations, annotated as the "A" and "Z" sides of the circuit. 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 pass-through port. Each termination can be assigned a separate downstream and upstream speed independent from one another. Fields are also available to track cross-connect and patch panel details.
!!! note
A circuit 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.
!!! note
A circuit may terminate only to a physical interface. Circuits may not terminate to LAG interfaces, which are virtual interfaces: You must define each physical circuit within a service bundle separately and terminate it to its actual physical interface.

View File

@@ -0,0 +1,10 @@
# Circuit Types
Circuits are classified by type. For example, you might define circuit types for:
* Internet transit
* Out-of-band connectivity
* Peering
* Private backhaul
Circuit types are fully customizable.

View File

@@ -0,0 +1,5 @@
# Providers
A provider is any entity which provides some form of connectivity. While this obviously includes carriers which offer Internet and private transit service, it might also include Internet exchange (IX) points and even organizations with whom you peer directly.
Each provider may be assigned an autonomous system number (ASN), an account number, and relevant contact information.

19
docs/models/dcim/cable.md Normal file
View File

@@ -0,0 +1,19 @@
# Cables
A cable represents a physical connection between two termination points, such as between a console port and a patch panel port, or between two network interfaces. Cables can be traced through pass-through ports to form a complete path between two endpoints. In the example below, three individual cables comprise a path between the two connected endpoints.
```
|<------------------------------------------ Cable Path ------------------------------------------->|
Device A Patch Panel A Patch Panel B Device B
+-----------+ +-------------+ +-------------+ +-----------+
| Interface | --- Cable --- | Front Port | | Front Port | --- Cable --- | Interface |
+-----------+ +-------------+ +-------------+ +-----------+
+-------------+ +-------------+
| Rear Port | --- Cable --- | Rear Port |
+-------------+ +-------------+
```
All connections between device components in NetBox are represented using cables. However, defining the actual cable plant is optional: Components can be be directly connected using cables with no type or other attributes assigned.
Cables are also used to associated ports and interfaces with circuit terminations. To do this, first create the circuit termination, then navigate the desired component and connect a cable between the two.

View File

@@ -0,0 +1,5 @@
## Console Ports
A console port provides connectivity to the physical console of a device. Console ports are typically used for temporary access by someone who is physically near the device, or for remote out-of-band access via a console server.
Console ports can be connected to console server ports.

View File

@@ -0,0 +1,3 @@
## Console Port Templates
A template for a console port that will be created on all instantiations of the parent device type.

View File

@@ -0,0 +1,5 @@
## Console Server Ports
A console server is a device which provides remote access to the local consoles of connected devices. This is typically done to provide remote out-of-band access to network devices.
Console server ports can be connected to console ports.

View File

@@ -0,0 +1,3 @@
## Console Server Port Templates
A template for a console server port that will be created on all instantiations of the parent device type.

View File

@@ -0,0 +1,7 @@
# Devices
Every piece of hardware which is installed within a rack exists in NetBox as a device. Devices are measured in rack units (U) and can be half depth or full depth. A device may have a height of 0U: These devices do not consume vertical rack space and cannot be assigned to a particular rack unit. A common example of a 0U device is a vertically-mounted PDU.
When assigning a multi-U device to a rack, it is considered to be mounted in the lowest-numbered rack unit which it occupies. For example, a 3U device which occupies U8 through U10 is said to be mounted in U8. This logic applies to racks with both ascending and descending unit numbering.
A device is said to be full depth if its installation on one rack face prevents the installation of any other device on the opposite face within the same rack unit(s). This could be either because the device is physically too deep to allow a device behind it, or because the installation of an opposing device would impede airflow.

View File

@@ -0,0 +1,7 @@
## Device Bays
Device bays represent the ability of a device to house child devices. For example, you might install four blade servers into a 2U chassis. The chassis would appear in the rack elevation as a 2U device with four device bays. Each server within it would be defined as a 0U device installed in one of the device bays. Child devices do not appear within rack elevations or the "Non-Racked Devices" list within the rack view.
Child devices are first-class Devices in their own right: that is, fully independent managed entities which don't share any control plane with the parent. Just like normal devices, child devices have their own platform (OS), role, tags, and interfaces. You cannot create a LAG between interfaces in different child devices.
Therefore, Device bays are **not** suitable for modeling chassis-based switches and routers. These should instead be modeled as a single Device, with the line cards as Inventory Items.

View File

@@ -0,0 +1,3 @@
## Device Bay Templates
A template for a device bay that will be created on all instantiations of the parent device type.

View File

@@ -0,0 +1,3 @@
# Device Roles
Devices can be organized by functional roles. These roles are fully customizable. For example, you might create roles for core switches, distribution switches, and access switches.

View File

@@ -0,0 +1,18 @@
# Device Types
A device type represents a particular make and model of hardware that exists in the real world. Device types define the physical attributes of a device (rack height and depth) and its individual components (console, power, and network interfaces).
Device types are instantiated as devices installed within racks. For example, you might define a device type to represent a Juniper EX4300-48T network switch with 48 Ethernet interfaces. You can then create multiple devices of this type named "switch1," "switch2," and so on. Each device will inherit the components (such as interfaces) of its device type at the time of creation. (However, changes made to a device type will **not** apply to instances of that device type retroactively.)
Some devices house child devices which share physical resources, like space and power, but which functional independently from one another. A common example of this is blade server chassis. Each device type is designated as one of the following:
* A parent device (which has device bays)
* A child device (which must be installed in a device bay)
* Neither
!!! note
This parent/child relationship is **not** suitable for modeling chassis-based devices, wherein child members share a common control plane.
For that application you should create a single Device for the chassis, and add Interfaces directly to it. Interfaces can be created in bulk using range patterns, e.g. "Gi1/[1-24]".
Add Inventory Items if you want to record the line cards themselves as separate entities. There is no explicit relationship between each interface and its line card, but it may be implied by the naming (e.g. interfaces "Gi1/x" are on line card 1)

View File

@@ -0,0 +1,5 @@
## Front Ports
Front ports are pass-through ports used to represent physical cable connections that comprise part of a longer path. For example, the ports on the front face of a UTP patch panel would be modeled in NetBox as front ports.
Each front port is mapped to a specific rear port on the same device. A single rear port may be mapped to multiple rear ports.

View File

@@ -0,0 +1,3 @@
## Front Port Templates
A template for a front-facing pass-through port that will be created on all instantiations of the parent device type.

View File

@@ -0,0 +1,9 @@
## Interfaces
Interfaces connect to one another in a symmetric manner: If interface A connects to interface B, interface B therefore connects to interface A. Each type of connection can be classified as either *planned* or *connected*.
Each interface is a assigned a type denoting its physical properties. Two special types exist: the "virtual" type can be used to designate logical interfaces (such as SVIs), and the "LAG" type can be used to desinate link aggregation groups to which physical interfaces can be assigned.
Each interface can also be enabled or disabled, and optionally designated as management-only (for out-of-band management). Fields are also provided to store an interface's MTU and MAC address.
VLANs can be assigned to each interface as either tagged or untagged. (An interface may have only one untagged VLAN.)

View File

@@ -0,0 +1,3 @@
## Interface Templates
A template for an interface that will be created on all instantiations of the parent device type.

View File

@@ -0,0 +1,3 @@
# Inventory Items
Inventory items represent hardware components installed within a device, such as a power supply or CPU or line card. Currently, these are used merely for inventory tracking, although future development might see their functionality expand. Like device types, each item can optionally be assigned a manufacturer.

View File

@@ -0,0 +1,3 @@
# Manufacturers
Each device type must be assigned to a manufacturer. The model number of a device type must be unique to its manufacturer.

View File

@@ -0,0 +1,7 @@
# Platforms
A platform defines the type of software running on a device or virtual machine. This can be helpful when it is necessary to distinguish between, for instance, different feature sets. Note that two devices of the same type may be assigned different platforms: for example, one Juniper MX240 running Junos 14 and another running Junos 15.
The platform model is also used to indicate which [NAPALM](https://napalm-automation.net/) driver NetBox should use when connecting to a remote device. The name of the driver along with optional parameters are stored with the platform.
The assignment of platforms to devices is an optional feature, and may be disregarded if not desired.

View File

@@ -0,0 +1,8 @@
# Power Feed
A power feed identifies the power outlet/drop that goes to a rack and is terminated to a power panel. Power feeds have a supply type (AC/DC), voltage, amperage, and phase type (single/three).
Power feeds are optionally assigned to a rack. In addition, a power port and only one can connect to a power feed; in the context of a PDU, the power feed is analogous to the power outlet that a PDU's power port/inlet connects to.
!!! info
The power usage of a rack is calculated when a power feed (or multiple) is assigned to that rack and connected to a power port.

View File

@@ -0,0 +1,3 @@
## Power Outlets
Power outlets represent the ports on a PDU that supply power to other devices. Power outlets are downstream-facing towards power ports. A power outlet can be associated with a power port on the same device and a feed leg (i.e. in a case of a three-phase supply). This indicates which power port supplies power to a power outlet.

View File

@@ -0,0 +1,3 @@
## Power Outlet Templates
A template for a power outlet that will be created on all instantiations of the parent device type.

View File

@@ -0,0 +1,3 @@
# Power Panel
A power panel represents the distribution board where power circuits and their circuit breakers terminate on. If you have multiple power panels in your data center, you should model them as such in NetBox to assist you in determining the redundancy of your power allocation.

View File

@@ -0,0 +1,6 @@
## Power Ports
A power port is the inlet of a device where it draws its power. Power ports are upstream-facing towards power outlets. Alternatively, a power port can connect to a power feed as mentioned in the power feed section to indicate the power source of a PDU's inlet.
!!! info
If the draw of a power port is left empty, it will be dynamically calculated based on the power outlets associated with that power port. This is usually the case on the power ports of devices that supply power, like a PDU.

View File

@@ -0,0 +1,3 @@
## Power Port Templates
A template for a power port that will be created on all instantiations of the parent device type.

15
docs/models/dcim/rack.md Normal file
View File

@@ -0,0 +1,15 @@
# Racks
The rack model represents a physical two- or four-post equipment rack in which equipment is mounted. Each rack must be assigned to a site. 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 or descending order.
Each rack is assigned a name and (optionally) a separate facility ID. This is helpful when leasing space in a data center your organization does not own: The facility will often assign a seemingly arbitrary ID to a rack (for example, "M204.313") whereas internally you refer to is simply as "R113." A unique serial number may also be associated with each rack.
A rack must be designated as one of the following types:
* 2-post frame
* 4-post frame
* 4-post cabinet
* Wall-mounted frame
* Wall-mounted cabinet
Each rack has two faces (front and rear) on which devices can be mounted. Rail-to-rail width may be 19 or 23 inches.

View File

@@ -0,0 +1,7 @@
# Rack Groups
Racks can be arranged into groups. 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 to achieve a multi-level hierarchy.
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

@@ -0,0 +1,3 @@
# Rack Reservations
Users can reserve units within a rack for future use. Multiple non-contiguous rack units can be associated with a single reservation (but reservations cannot span multiple racks). A rack reservation may optionally designate a specific tenant.

View File

@@ -0,0 +1,3 @@
# Rack Roles
Each rack can optionally be assigned a functional role. For example, you might designate a rack for compute or storage resources, or to house colocated customer devices. Rack roles are fully customizable.

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