mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Compare commits
708 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ffa9a52667 | ||
![]() |
47320f9958 | ||
![]() |
d08a1bd07d | ||
![]() |
14c4aeca54 | ||
![]() |
26bec1275f | ||
![]() |
fa2d7f6516 | ||
![]() |
d571cb4867 | ||
![]() |
2129355c30 | ||
![]() |
c40bfb1445 | ||
![]() |
b88b5b0b1b | ||
![]() |
6eeb382512 | ||
![]() |
e5d6c71171 | ||
![]() |
f777bfee2e | ||
![]() |
8b63eb64c1 | ||
![]() |
cff29f9551 | ||
![]() |
a5c0cae112 | ||
![]() |
2a27e475e4 | ||
![]() |
44efa037cc | ||
![]() |
6c17629159 | ||
![]() |
f13d028c98 | ||
![]() |
f5d32b1bf1 | ||
![]() |
f05897d61a | ||
![]() |
b5421f1cd6 | ||
![]() |
23cc4f1c41 | ||
![]() |
9c2cd66162 | ||
![]() |
f61a2964c8 | ||
![]() |
ee94fb0b94 | ||
![]() |
8fb8f4c75b | ||
![]() |
e33793dc82 | ||
![]() |
3b8841ee3b | ||
![]() |
ea4c205a37 | ||
![]() |
2a5d3abafb | ||
![]() |
71e6ea5785 | ||
![]() |
0a9887b42f | ||
![]() |
3ecf29d797 | ||
![]() |
c48e4f590e | ||
![]() |
aee83a434a | ||
![]() |
a17699d261 | ||
![]() |
f97d07a11c | ||
![]() |
1fd3d390ae | ||
![]() |
7dab7d730d | ||
![]() |
c660f1c019 | ||
![]() |
334b45f55a | ||
![]() |
e6c1cebd34 | ||
![]() |
a9af541e81 | ||
![]() |
f706572113 | ||
![]() |
6a6286777c | ||
![]() |
afeddee10d | ||
![]() |
a48bee2a2e | ||
![]() |
b9db6ebd63 | ||
![]() |
9e0493c64c | ||
![]() |
e3509c092a | ||
![]() |
762cfc7d10 | ||
![]() |
522f80ed9d | ||
![]() |
fd6062de75 | ||
![]() |
c872cce59f | ||
![]() |
dc8267d890 | ||
![]() |
2bfb9f4ed0 | ||
![]() |
dda0a55e5e | ||
![]() |
2680f855ff | ||
![]() |
6ca791850a | ||
![]() |
43df06f210 | ||
![]() |
7e6b1bbd79 | ||
![]() |
0e68901022 | ||
![]() |
179c06ec20 | ||
![]() |
bd8cf64ded | ||
![]() |
67b42710ef | ||
![]() |
67d62a2089 | ||
![]() |
e24fa2ee4d | ||
![]() |
5fe5b2e7c4 | ||
![]() |
d68f42140f | ||
![]() |
95d0ca56a7 | ||
![]() |
716acaa657 | ||
![]() |
ecb8656723 | ||
![]() |
065511fca2 | ||
![]() |
77f0eeb7bf | ||
![]() |
f45b671fc9 | ||
![]() |
b1cbdbe079 | ||
![]() |
e5e7a66cb9 | ||
![]() |
357ae44cde | ||
![]() |
b62f2347c5 | ||
![]() |
0c6726d40f | ||
![]() |
cc099e86e1 | ||
![]() |
a97b438b7e | ||
![]() |
d7672ab260 | ||
![]() |
b3d318cbe1 | ||
![]() |
2804359cdd | ||
![]() |
e8d08c4d38 | ||
![]() |
98d9e7f8d5 | ||
![]() |
51d046b1f5 | ||
![]() |
88565e8f68 | ||
![]() |
a2a8779ebc | ||
![]() |
03ff535772 | ||
![]() |
e6d364b250 | ||
![]() |
be07f222f6 | ||
![]() |
21f5fe873c | ||
![]() |
83dc65acb5 | ||
![]() |
b6c8502408 | ||
![]() |
4795fab16f | ||
![]() |
de2e2b5c82 | ||
![]() |
cf7ab43f39 | ||
![]() |
1700a9265c | ||
![]() |
39b03abe72 | ||
![]() |
b497b85665 | ||
![]() |
0d29e5776c | ||
![]() |
cbe14b76c0 | ||
![]() |
3d1334a798 | ||
![]() |
408550d3c7 | ||
![]() |
6b9b5c4184 | ||
![]() |
59dce87ba0 | ||
![]() |
f6a85775d7 | ||
![]() |
33887e7c69 | ||
![]() |
b57ceca2fd | ||
![]() |
8e13f2a9ec | ||
![]() |
6af4f5d7ee | ||
![]() |
6054f8197d | ||
![]() |
fc98294812 | ||
![]() |
4b58678823 | ||
![]() |
abeed474f6 | ||
![]() |
d1303f49e6 | ||
![]() |
127452f4d5 | ||
![]() |
2979067b65 | ||
![]() |
6c07aeeded | ||
![]() |
76aa255f07 | ||
![]() |
0c04a8d301 | ||
![]() |
6665810a6d | ||
![]() |
8baf15771a | ||
![]() |
045417c45c | ||
![]() |
aac333a6d4 | ||
![]() |
145ee11a3f | ||
![]() |
94618a9dfb | ||
![]() |
21e813cee2 | ||
![]() |
2c014bade5 | ||
![]() |
b17bfef7e5 | ||
![]() |
88f7b6508c | ||
![]() |
bd4f1e7d2f | ||
![]() |
6e49cee718 | ||
![]() |
4868818576 | ||
![]() |
7cd5dc0c84 | ||
![]() |
aea51df06c | ||
![]() |
c95098c4f0 | ||
![]() |
c32d1e637f | ||
![]() |
29f0ca6e0d | ||
![]() |
64b5867cb3 | ||
![]() |
dd9000919a | ||
![]() |
e5cdd8f2b0 | ||
![]() |
6202ae1236 | ||
![]() |
15c7a19fb7 | ||
![]() |
1141ddb22a | ||
![]() |
68e9da5cd9 | ||
![]() |
22e8de48fc | ||
![]() |
36d71ccdd1 | ||
![]() |
fadc358329 | ||
![]() |
5274b3d727 | ||
![]() |
c0e6168d34 | ||
![]() |
01da6186eb | ||
![]() |
0466c8ef9b | ||
![]() |
964ae56d34 | ||
![]() |
e2e42acf42 | ||
![]() |
32a4d743ee | ||
![]() |
5342552054 | ||
![]() |
732f50d8da | ||
![]() |
48a367c409 | ||
![]() |
ac3c2e2de3 | ||
![]() |
e44ad8af45 | ||
![]() |
81dfaf0d67 | ||
![]() |
584fff90c7 | ||
![]() |
e345ca2659 | ||
![]() |
89fd071f37 | ||
![]() |
a840eaf37d | ||
![]() |
bdef00f3b0 | ||
![]() |
f652dc7bda | ||
![]() |
18ac29fdd0 | ||
![]() |
fdf42860aa | ||
![]() |
b31da39c4a | ||
![]() |
0f4afbca2c | ||
![]() |
a0006632a7 | ||
![]() |
9173a113b7 | ||
![]() |
afc7b35af0 | ||
![]() |
37cfc50202 | ||
![]() |
41f475a316 | ||
![]() |
e8dd486132 | ||
![]() |
8bd8f28cb9 | ||
![]() |
e58815bb1a | ||
![]() |
bee004fc0c | ||
![]() |
0f7789c052 | ||
![]() |
e1b2b4b536 | ||
![]() |
f711e666c5 | ||
![]() |
47da880547 | ||
![]() |
02f51bc11b | ||
![]() |
88dd7a16f8 | ||
![]() |
d0c2e0e52b | ||
![]() |
983e544376 | ||
![]() |
125bce84e4 | ||
![]() |
fbf926204e | ||
![]() |
d005c470c9 | ||
![]() |
0ce307c7fd | ||
![]() |
6c60a4360b | ||
![]() |
a83dfff736 | ||
![]() |
dfd788c643 | ||
![]() |
2c3fe9700f | ||
![]() |
5b86d5d52a | ||
![]() |
deaff2dad8 | ||
![]() |
cd3d91e7c7 | ||
![]() |
6c7a0cf2b2 | ||
![]() |
d2e74e9d50 | ||
![]() |
e31b42d132 | ||
![]() |
02571130b2 | ||
![]() |
46a3ce2559 | ||
![]() |
1850c21714 | ||
![]() |
13ddd5fd20 | ||
![]() |
60cdf89cad | ||
![]() |
77bfc40579 | ||
![]() |
2f8936d493 | ||
![]() |
e0b6a31504 | ||
![]() |
8567aa96e4 | ||
![]() |
cbcd91bf6b | ||
![]() |
b8805c93b1 | ||
![]() |
459c4bfd9d | ||
![]() |
918470a2bb | ||
![]() |
c73cc0a36a | ||
![]() |
6b9b66aecb | ||
![]() |
b6d10ae6d8 | ||
![]() |
79ece657ec | ||
![]() |
717b9d5232 | ||
![]() |
0fa98d3aef | ||
![]() |
7420c25687 | ||
![]() |
5121122350 | ||
![]() |
66064be9a5 | ||
![]() |
4455c2c7dc | ||
![]() |
24d4847dc5 | ||
![]() |
248c94bd35 | ||
![]() |
96cf8d14dc | ||
![]() |
2356a3c125 | ||
![]() |
0d81007fdf | ||
![]() |
c108c738ae | ||
![]() |
cac41cd093 | ||
![]() |
27b26ec49c | ||
![]() |
7c2776d721 | ||
![]() |
1f93471659 | ||
![]() |
d3768feb31 | ||
![]() |
70cc7c7563 | ||
![]() |
8b091fb219 | ||
![]() |
44cb1a9139 | ||
![]() |
bb9b0b8f8a | ||
![]() |
785ad505ba | ||
![]() |
8aacef60a3 | ||
![]() |
d8fc052bbe | ||
![]() |
1f79411878 | ||
![]() |
7375042f9e | ||
![]() |
186545e45f | ||
![]() |
31565de93f | ||
![]() |
7abce9031b | ||
![]() |
94d19e8f15 | ||
![]() |
13c6602ea8 | ||
![]() |
3444dc503d | ||
![]() |
b7740b947a | ||
![]() |
f337ef1134 | ||
![]() |
d55f02b25f | ||
![]() |
978b5b0ed6 | ||
![]() |
021114071c | ||
![]() |
693543f0b2 | ||
![]() |
811dd949a3 | ||
![]() |
5d7ed871f2 | ||
![]() |
f96df73093 | ||
![]() |
6ed41f6680 | ||
![]() |
28e62d21a9 | ||
![]() |
fc0acb020f | ||
![]() |
bb5057c063 | ||
![]() |
03f3f5c957 | ||
![]() |
fe7fb94e44 | ||
![]() |
82b9e4ca26 | ||
![]() |
457fb977a7 | ||
![]() |
13c20957a6 | ||
![]() |
30208549ba | ||
![]() |
f8f2ad1d14 | ||
![]() |
076d16ca6b | ||
![]() |
bf286df670 | ||
![]() |
2be257db48 | ||
![]() |
fbd6d8c7fc | ||
![]() |
3902cab925 | ||
![]() |
2207ea1a32 | ||
![]() |
10e1ae8292 | ||
![]() |
f8f5ab8d61 | ||
![]() |
eee932a6a5 | ||
![]() |
ff26f4302c | ||
![]() |
92317248a3 | ||
![]() |
426e6439e3 | ||
![]() |
621b29cd71 | ||
![]() |
5e44e49a8a | ||
![]() |
e252cc3ce1 | ||
![]() |
092769da7e | ||
![]() |
67480dcf4f | ||
![]() |
d44012963f | ||
![]() |
d93d398afa | ||
![]() |
8f5d273f08 | ||
![]() |
45779a24a4 | ||
![]() |
f17bbe610e | ||
![]() |
6a966ee6c1 | ||
![]() |
a00144026b | ||
![]() |
8d7889e2c0 | ||
![]() |
bad820001d | ||
![]() |
864db469ba | ||
![]() |
a5106b858d | ||
![]() |
bbd5e9cab9 | ||
![]() |
12231ad71a | ||
![]() |
88ef9ecfa3 | ||
![]() |
6f78b3d0cd | ||
![]() |
1508e3a770 | ||
![]() |
d3f42deb32 | ||
![]() |
db4fb8f406 | ||
![]() |
5b8eaced1a | ||
![]() |
ada0c7f687 | ||
![]() |
b750d0dff2 | ||
![]() |
e1e514251e | ||
![]() |
7d80a45bf8 | ||
![]() |
09854a3d54 | ||
![]() |
39a96ddf3a | ||
![]() |
be26f86b62 | ||
![]() |
fd2bcda8b8 | ||
![]() |
7a71c7b8f8 | ||
![]() |
817d7efee3 | ||
![]() |
9a1d9365cd | ||
![]() |
ada4a4b93c | ||
![]() |
64a98fd87f | ||
![]() |
bd8e00a935 | ||
![]() |
af5a600583 | ||
![]() |
8ab73501d1 | ||
![]() |
447e108d97 | ||
![]() |
e186113cb3 | ||
![]() |
40452ead62 | ||
![]() |
34d80beaa2 | ||
![]() |
b1d014b520 | ||
![]() |
7db0765ed2 | ||
![]() |
b8cc2d7116 | ||
![]() |
fe7cc8cae9 | ||
![]() |
d332a0c0d7 | ||
![]() |
80440fd025 | ||
![]() |
f07e2dd4e2 | ||
![]() |
d7b9b09d56 | ||
![]() |
9da4cf31ab | ||
![]() |
6b7d23d684 | ||
![]() |
d25605c261 | ||
![]() |
958dcca8d6 | ||
![]() |
bf1a9a6e2d | ||
![]() |
c50b1c989d | ||
![]() |
cd10087b2b | ||
![]() |
79b0c0f5d6 | ||
![]() |
43840e6a72 | ||
![]() |
7c152e9234 | ||
![]() |
af5ec19430 | ||
![]() |
d7709a2a55 | ||
![]() |
dce694afa9 | ||
![]() |
c5801f9881 | ||
![]() |
d4f8cb72aa | ||
![]() |
f69de12c6d | ||
![]() |
f86647dc28 | ||
![]() |
0094703609 | ||
![]() |
1b4e00aeda | ||
![]() |
ffe035567a | ||
![]() |
f286449284 | ||
![]() |
b45e256f27 | ||
![]() |
4f45328c77 | ||
![]() |
06a206ee33 | ||
![]() |
994e7eb9f4 | ||
![]() |
2df68e29c9 | ||
![]() |
1ea6f6e2ce | ||
![]() |
c0b019b735 | ||
![]() |
157df20ad4 | ||
![]() |
b8352260ee | ||
![]() |
ed98756f3e | ||
![]() |
9a9d6cdedb | ||
![]() |
2e2c815c91 | ||
![]() |
44efd5e833 | ||
![]() |
ae7a47ca60 | ||
![]() |
ed135102be | ||
![]() |
26e02ada30 | ||
![]() |
19703f7d69 | ||
![]() |
3dda4716e7 | ||
![]() |
962d660c2c | ||
![]() |
78332d44c7 | ||
![]() |
80926cda8f | ||
![]() |
d924d4eb33 | ||
![]() |
b1e7d7c76b | ||
![]() |
092f7549ca | ||
![]() |
2f51dfc07a | ||
![]() |
906654d807 | ||
![]() |
749a83d742 | ||
![]() |
cdd25368e7 | ||
![]() |
7d64d3b5ed | ||
![]() |
5e22ef59c5 | ||
![]() |
19d1282683 | ||
![]() |
2266a8af67 | ||
![]() |
5d81f911d6 | ||
![]() |
89e3f3d3e9 | ||
![]() |
292463c0de | ||
![]() |
a9fd191086 | ||
![]() |
1a60cb9884 | ||
![]() |
76c3c613a9 | ||
![]() |
528248b560 | ||
![]() |
b5d970f7bb | ||
![]() |
8823b07745 | ||
![]() |
c35f5f829a | ||
![]() |
29c25e39fc | ||
![]() |
bbf4eea76c | ||
![]() |
d103e13732 | ||
![]() |
6d69c76b83 | ||
![]() |
6bc9302ce5 | ||
![]() |
f9c8d12a51 | ||
![]() |
3ef7ab4416 | ||
![]() |
2d35cc56ed | ||
![]() |
741645c9f7 | ||
![]() |
d226af420b | ||
![]() |
5c88317745 | ||
![]() |
dffa380e5c | ||
![]() |
6d2426843b | ||
![]() |
e72b0606ba | ||
![]() |
c933cbf11e | ||
![]() |
9f1ffb54f5 | ||
![]() |
29b8827128 | ||
![]() |
6efc5682cd | ||
![]() |
033a960cab | ||
![]() |
9f69c46a99 | ||
![]() |
631ff3e702 | ||
![]() |
ed6ccfb723 | ||
![]() |
d3a9a6827f | ||
![]() |
057653d362 | ||
![]() |
4ab58f2da9 | ||
![]() |
d83c2f45bc | ||
![]() |
4e65117e7c | ||
![]() |
d208ddde9a | ||
![]() |
7c52698c08 | ||
![]() |
913405a3ae | ||
![]() |
0fbfc4f38c | ||
![]() |
e86dba8fc8 | ||
![]() |
77b9820577 | ||
![]() |
3e1d4369ba | ||
![]() |
06b5ff2e4a | ||
![]() |
3b1daaaad6 | ||
![]() |
63a167f130 | ||
![]() |
09d867adc3 | ||
![]() |
2ae84ce9fb | ||
![]() |
cf7e2c8dc9 | ||
![]() |
2dcf2d203c | ||
![]() |
8efcbddb37 | ||
![]() |
f2a09333d7 | ||
![]() |
1d5c67a0a8 | ||
![]() |
9556b0c480 | ||
![]() |
d9d7955c19 | ||
![]() |
dbac09349b | ||
![]() |
7aba6500dd | ||
![]() |
b9b42cd3b4 | ||
![]() |
787a2dd7c2 | ||
![]() |
c81f4da780 | ||
![]() |
cffb99cec5 | ||
![]() |
8dc2154cc3 | ||
![]() |
3b894f9ccb | ||
![]() |
effc23f5bb | ||
![]() |
ae5314ffa7 | ||
![]() |
26c7c8f08d | ||
![]() |
f7fdf07949 | ||
![]() |
bf836c9bc2 | ||
![]() |
4a4596d5e8 | ||
![]() |
d1712c45bb | ||
![]() |
48b825c64a | ||
![]() |
7e669d1a14 | ||
![]() |
4fb42ac7b3 | ||
![]() |
a8b4024016 | ||
![]() |
08b2fc424a | ||
![]() |
a6c07e6a35 | ||
![]() |
59cd5bc653 | ||
![]() |
bda4f314a4 | ||
![]() |
2eaee8bf45 | ||
![]() |
2a56c08bc8 | ||
![]() |
beb0aff656 | ||
![]() |
64270d6a4e | ||
![]() |
fba4141ce3 | ||
![]() |
a4ecb82330 | ||
![]() |
5a3e213fb4 | ||
![]() |
83ca0ef955 | ||
![]() |
9c3e7f2c5d | ||
![]() |
7794c6cfcb | ||
![]() |
8dc1d68aee | ||
![]() |
ca6b686b88 | ||
![]() |
c4304d059c | ||
![]() |
fee66438f3 | ||
![]() |
0f52712468 | ||
![]() |
fbaa82df7b | ||
![]() |
9c1358e6e7 | ||
![]() |
63b7145baa | ||
![]() |
ef89fc1264 | ||
![]() |
bcd974210d | ||
![]() |
ed79e3bbf4 | ||
![]() |
b5bc0bad38 | ||
![]() |
2a44affd03 | ||
![]() |
d9066d6cff | ||
![]() |
57ef44706a | ||
![]() |
72adda1197 | ||
![]() |
d5316de9c8 | ||
![]() |
70dddb673b | ||
![]() |
6c6cb321bf | ||
![]() |
11514bfb21 | ||
![]() |
701f40e2a8 | ||
![]() |
c324d23634 | ||
![]() |
f9431f1c29 | ||
![]() |
b1ac20ac19 | ||
![]() |
f8022040b2 | ||
![]() |
8114492673 | ||
![]() |
154b3a7abb | ||
![]() |
015ef25ca0 | ||
![]() |
3e1cc0d7f3 | ||
![]() |
e1d1aab4bd | ||
![]() |
299bde9653 | ||
![]() |
4b98f74943 | ||
![]() |
a33fb2a0a9 | ||
![]() |
13dc6854c2 | ||
![]() |
e475386936 | ||
![]() |
0b194e363e | ||
![]() |
72e93b04da | ||
![]() |
7794b6718a | ||
![]() |
efa939d0c2 | ||
![]() |
697610db94 | ||
![]() |
8e91db0394 | ||
![]() |
d202b3529d | ||
![]() |
260adfc9e7 | ||
![]() |
9391f48d62 | ||
![]() |
6e165435e2 | ||
![]() |
75417c9cd5 | ||
![]() |
43841939a0 | ||
![]() |
29f405d27e | ||
![]() |
f829f34b43 | ||
![]() |
0b794de40e | ||
![]() |
b2bc842f1c | ||
![]() |
c8decf4c21 | ||
![]() |
e12a5d2edc | ||
![]() |
4c5fbb7326 | ||
![]() |
8aecf53d0e | ||
![]() |
7d6089775e | ||
![]() |
f5bdf7b593 | ||
![]() |
2a8728544c | ||
![]() |
62148bb83c | ||
![]() |
22af6dd05f | ||
![]() |
5514df9dee | ||
![]() |
5cd7c6d167 | ||
![]() |
9ac79ebbdf | ||
![]() |
e6c0519ada | ||
![]() |
07403f690a | ||
![]() |
80e466dab7 | ||
![]() |
34fa3835be | ||
![]() |
7a6bb34d21 | ||
![]() |
968214b64a | ||
![]() |
cf64f3cc43 | ||
![]() |
ee5d7cfe31 | ||
![]() |
f83e55e1db | ||
![]() |
57fa1dd18d | ||
![]() |
b2b47ac740 | ||
![]() |
313f44646b | ||
![]() |
c2daa70099 | ||
![]() |
5fce4eef8e | ||
![]() |
b1e7530295 | ||
![]() |
da9b452327 | ||
![]() |
31efd1fe57 | ||
![]() |
a8168899b8 | ||
![]() |
e02ae72f0c | ||
![]() |
3219609253 | ||
![]() |
adcb6bebd2 | ||
![]() |
ad4e4e89a7 | ||
![]() |
c56a39a168 | ||
![]() |
d1914595f6 | ||
![]() |
b913661297 | ||
![]() |
bec97df242 | ||
![]() |
22e320084a | ||
![]() |
277acd3a31 | ||
![]() |
51a79505fe | ||
![]() |
d11deb6678 | ||
![]() |
f845b2cf07 | ||
![]() |
2ed4a2b005 | ||
![]() |
5b9210dfa5 | ||
![]() |
4a13664e0f | ||
![]() |
a9f3c74b0c | ||
![]() |
50b7f46fc0 | ||
![]() |
07ad4c1321 | ||
![]() |
4a1fea3504 | ||
![]() |
993d8f1480 | ||
![]() |
c3efa2149c | ||
![]() |
a75fa53d4d | ||
![]() |
e75d327f38 | ||
![]() |
a79d869bd8 | ||
![]() |
32422d1683 | ||
![]() |
571f604ce8 | ||
![]() |
b12c8c880f | ||
![]() |
b11f179527 | ||
![]() |
80e1fd02bb | ||
![]() |
4090afbf24 | ||
![]() |
d04fc11c61 | ||
![]() |
f6b8c1966d | ||
![]() |
4456c488f1 | ||
![]() |
53aa2c8624 | ||
![]() |
ffac0974dd | ||
![]() |
e518f08604 | ||
![]() |
4ae5529362 | ||
![]() |
ef6c89ee5d | ||
![]() |
9c960c2387 | ||
![]() |
ed541220e8 | ||
![]() |
14cec518f5 | ||
![]() |
9d82a668a4 | ||
![]() |
b7610971c0 | ||
![]() |
ab0a1f0bbc | ||
![]() |
5d1070796d | ||
![]() |
83d62315cc | ||
![]() |
ab8fc3de5e | ||
![]() |
67657efe1c | ||
![]() |
c9ee699633 | ||
![]() |
89d7487197 | ||
![]() |
40f22533d1 | ||
![]() |
c3b0de3ebd | ||
![]() |
e8e3981da5 | ||
![]() |
b9abb3200c | ||
![]() |
10748edc3a | ||
![]() |
6f4bec7644 | ||
![]() |
0cda10a204 | ||
![]() |
685264c757 | ||
![]() |
f03489f58e | ||
![]() |
c6452b33d8 | ||
![]() |
16917133b2 | ||
![]() |
28eada13d3 | ||
![]() |
6ddd3cc779 | ||
![]() |
1a631dd7cc | ||
![]() |
8c07978042 | ||
![]() |
7e3d8e9c3b | ||
![]() |
e396097f3c | ||
![]() |
8d6cec408c | ||
![]() |
e7fcbffaf3 | ||
![]() |
0b9ead3e8b | ||
![]() |
13c26ccb0c | ||
![]() |
aa56b99566 | ||
![]() |
c0fec28b2a | ||
![]() |
382e246b2c | ||
![]() |
fff4ec78ad | ||
![]() |
8951aa815f | ||
![]() |
39ca3ce571 | ||
![]() |
0219dd7a70 | ||
![]() |
edc9852229 | ||
![]() |
ce365dab0a | ||
![]() |
a998893f7e | ||
![]() |
27d970df41 | ||
![]() |
678d89d406 | ||
![]() |
99339501cd | ||
![]() |
d511ba487d | ||
![]() |
3ee951b0d0 | ||
![]() |
64e56cd7c8 | ||
![]() |
a24576f126 | ||
![]() |
9b4b56febc | ||
![]() |
d093b21bc0 | ||
![]() |
b841875f63 | ||
![]() |
f17545788f | ||
![]() |
17189456c9 | ||
![]() |
b45b8f3a4d | ||
![]() |
dd29c0ede5 | ||
![]() |
02cbdc10f2 | ||
![]() |
6d65d92c38 | ||
![]() |
5afa6d7964 | ||
![]() |
0946a536f3 | ||
![]() |
14d769a501 | ||
![]() |
ff7a59db2e | ||
![]() |
343a4af591 | ||
![]() |
f08e36e538 | ||
![]() |
a0b4b0afe0 | ||
![]() |
d2168b107f | ||
![]() |
7376314821 | ||
![]() |
353214098b | ||
![]() |
b4f15092db | ||
![]() |
9fe6685562 | ||
![]() |
6ab0792f02 | ||
![]() |
75aeaab8ee | ||
![]() |
113c8d1d85 | ||
![]() |
03d413565f | ||
![]() |
a183048891 | ||
![]() |
812ce8471a | ||
![]() |
4bba92617d | ||
![]() |
6dc75d8db1 | ||
![]() |
8767fd8186 | ||
![]() |
a8eb455f3e | ||
![]() |
f74a9a1c76 | ||
![]() |
19c5c32965 | ||
![]() |
572aad0e20 | ||
![]() |
99904c1518 | ||
![]() |
ef1fdf0a01 | ||
![]() |
75270c1aef | ||
![]() |
c78da79ce6 | ||
![]() |
538f3255a7 | ||
![]() |
b9c6def8ab | ||
![]() |
a8ec06687a | ||
![]() |
6aeb553391 | ||
![]() |
5b8ef2eb44 | ||
![]() |
e370cadcef | ||
![]() |
727de0fb59 | ||
![]() |
b99c356d1d | ||
![]() |
256b5dc676 | ||
![]() |
65687851fe | ||
![]() |
bc597c3c5d | ||
![]() |
ed1327eeb7 | ||
![]() |
5b2241aaaf | ||
![]() |
3f469b0b0a | ||
![]() |
1969f0dc71 | ||
![]() |
2c68aca344 | ||
![]() |
8cd0a3215c | ||
![]() |
c60a0f4f56 |
16
.github/ISSUE_TEMPLATE/01-feature_request.yaml
vendored
16
.github/ISSUE_TEMPLATE/01-feature_request.yaml
vendored
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: ✨ Feature Request
|
name: ✨ Feature Request
|
||||||
|
type: Feature
|
||||||
description: Propose a new NetBox feature or enhancement
|
description: Propose a new NetBox feature or enhancement
|
||||||
labels: ["type: feature", "status: needs triage"]
|
labels: ["type: feature", "status: needs triage"]
|
||||||
body:
|
body:
|
||||||
@ -14,7 +15,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: NetBox version
|
label: NetBox version
|
||||||
description: What version of NetBox are you currently running?
|
description: What version of NetBox are you currently running?
|
||||||
placeholder: v4.1.8
|
placeholder: v4.3.4
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@ -27,19 +28,6 @@ body:
|
|||||||
- Other
|
- Other
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Triage priority
|
|
||||||
description: >
|
|
||||||
Issue triage may be prioritized in some cases. Select whichever of the following
|
|
||||||
conditions applies, if any.
|
|
||||||
options:
|
|
||||||
- I volunteer to perform this work (if approved)
|
|
||||||
- I'm a NetBox Labs customer
|
|
||||||
- N/A
|
|
||||||
default: 2
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Proposed functionality
|
label: Proposed functionality
|
||||||
|
16
.github/ISSUE_TEMPLATE/02-bug_report.yaml
vendored
16
.github/ISSUE_TEMPLATE/02-bug_report.yaml
vendored
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: 🐛 Bug Report
|
name: 🐛 Bug Report
|
||||||
|
type: Bug
|
||||||
description: Report a reproducible bug in the current release of NetBox
|
description: Report a reproducible bug in the current release of NetBox
|
||||||
labels: ["type: bug", "status: needs triage"]
|
labels: ["type: bug", "status: needs triage"]
|
||||||
body:
|
body:
|
||||||
@ -22,24 +23,11 @@ body:
|
|||||||
- Self-hosted
|
- Self-hosted
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Triage priority
|
|
||||||
description: >
|
|
||||||
Issue triage may be prioritized in some cases. Select whichever of the following
|
|
||||||
conditions applies, if any.
|
|
||||||
options:
|
|
||||||
- I volunteer to perform this work (if approved)
|
|
||||||
- I'm a NetBox Labs customer
|
|
||||||
- N/A
|
|
||||||
default: 2
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
- type: input
|
||||||
attributes:
|
attributes:
|
||||||
label: NetBox Version
|
label: NetBox Version
|
||||||
description: What version of NetBox are you currently running?
|
description: What version of NetBox are you currently running?
|
||||||
placeholder: v4.1.8
|
placeholder: v4.3.4
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: 📖 Documentation Change
|
name: 📖 Documentation Change
|
||||||
|
type: Documentation
|
||||||
description: Suggest an addition or modification to the NetBox documentation
|
description: Suggest an addition or modification to the NetBox documentation
|
||||||
labels: ["type: documentation", "status: needs triage"]
|
labels: ["type: documentation", "status: needs triage"]
|
||||||
body:
|
body:
|
||||||
|
1
.github/ISSUE_TEMPLATE/04-translation.yaml
vendored
1
.github/ISSUE_TEMPLATE/04-translation.yaml
vendored
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: 🌍 Translation
|
name: 🌍 Translation
|
||||||
|
type: Translation
|
||||||
description: Request support for a new language in the user interface
|
description: Request support for a new language in the user interface
|
||||||
labels: ["type: translation"]
|
labels: ["type: translation"]
|
||||||
body:
|
body:
|
||||||
|
1
.github/ISSUE_TEMPLATE/05-housekeeping.yaml
vendored
1
.github/ISSUE_TEMPLATE/05-housekeeping.yaml
vendored
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: 🏡 Housekeeping
|
name: 🏡 Housekeeping
|
||||||
|
type: Housekeeping
|
||||||
description: A change pertaining to the codebase itself (developers only)
|
description: A change pertaining to the codebase itself (developers only)
|
||||||
labels: ["type: housekeeping"]
|
labels: ["type: housekeeping"]
|
||||||
body:
|
body:
|
||||||
|
1
.github/ISSUE_TEMPLATE/06-deprecation.yaml
vendored
1
.github/ISSUE_TEMPLATE/06-deprecation.yaml
vendored
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: 🗑️ Deprecation
|
name: 🗑️ Deprecation
|
||||||
|
type: Deprecation
|
||||||
description: The removal of an existing feature or resource
|
description: The removal of an existing feature or resource
|
||||||
labels: ["type: deprecation"]
|
labels: ["type: deprecation"]
|
||||||
body:
|
body:
|
||||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -2,7 +2,7 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: 📖 Contributing Policy
|
- name: 📖 Contributing Policy
|
||||||
url: https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md
|
url: https://github.com/netbox-community/netbox/blob/main/CONTRIBUTING.md
|
||||||
about: "Please read through our contributing policy before opening an issue or pull request."
|
about: "Please read through our contributing policy before opening an issue or pull request."
|
||||||
- name: ❓ Discussion
|
- name: ❓ Discussion
|
||||||
url: https://github.com/netbox-community/netbox/discussions
|
url: https://github.com/netbox-community/netbox/discussions
|
||||||
|
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@ -3,11 +3,15 @@ name: CI
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
|
- '.github/ISSUE_TEMPLATE/**'
|
||||||
|
- '.github/PULL_REQUEST_TEMPLATE.md'
|
||||||
- 'contrib/**'
|
- 'contrib/**'
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'netbox/translations/**'
|
- 'netbox/translations/**'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
|
- '.github/ISSUE_TEMPLATE/**'
|
||||||
|
- '.github/PULL_REQUEST_TEMPLATE.md'
|
||||||
- 'contrib/**'
|
- 'contrib/**'
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'netbox/translations/**'
|
- 'netbox/translations/**'
|
||||||
@ -28,7 +32,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ['3.10', '3.11', '3.12']
|
python-version: ['3.10', '3.11', '3.12']
|
||||||
node-version: ['18.x']
|
node-version: ['20.x']
|
||||||
services:
|
services:
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
|
@ -12,6 +12,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
stale:
|
stale:
|
||||||
|
if: github.repository == 'netbox-community/netbox'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v9
|
- uses: actions/stale@v9
|
||||||
|
3
.github/workflows/close-stale-issues.yml
vendored
3
.github/workflows/close-stale-issues.yml
vendored
@ -13,6 +13,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
stale:
|
stale:
|
||||||
|
if: github.repository == 'netbox-community/netbox'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v9
|
- uses: actions/stale@v9
|
||||||
@ -38,7 +39,7 @@ jobs:
|
|||||||
issues may receive direct feedback. **Do not** attempt to circumvent this
|
issues may receive direct feedback. **Do not** attempt to circumvent this
|
||||||
process by "bumping" the issue; doing so will result in its immediate closure
|
process by "bumping" the issue; doing so will result in its immediate closure
|
||||||
and you may be barred from participating in any future discussions. Please see
|
and you may be barred from participating in any future discussions. Please see
|
||||||
our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
|
our [contributing guide](https://github.com/netbox-community/netbox/blob/main/CONTRIBUTING.md).
|
||||||
|
|
||||||
# Pull request parameters
|
# Pull request parameters
|
||||||
close-pr-message: >
|
close-pr-message: >
|
||||||
|
3
.github/workflows/lock-threads.yml
vendored
3
.github/workflows/lock-threads.yml
vendored
@ -13,9 +13,10 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lock:
|
lock:
|
||||||
|
if: github.repository == 'netbox-community/netbox'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: dessant/lock-threads@v5
|
- uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
|
||||||
with:
|
with:
|
||||||
issue-inactive-days: 90
|
issue-inactive-days: 90
|
||||||
pr-inactive-days: 30
|
pr-inactive-days: 30
|
||||||
|
@ -13,6 +13,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
makemessages:
|
makemessages:
|
||||||
|
if: github.repository == 'netbox-community/netbox'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
NETBOX_CONFIGURATION: netbox.configuration_testing
|
NETBOX_CONFIGURATION: netbox.configuration_testing
|
||||||
@ -47,7 +48,7 @@ jobs:
|
|||||||
run: python netbox/manage.py makemessages -l ${{ env.LOCALE }}
|
run: python netbox/manage.py makemessages -l ${{ env.LOCALE }}
|
||||||
|
|
||||||
- name: Commit changes
|
- name: Commit changes
|
||||||
uses: EndBug/add-and-commit@v9
|
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
|
||||||
with:
|
with:
|
||||||
add: 'netbox/translations/'
|
add: 'netbox/translations/'
|
||||||
default_author: github_actions
|
default_author: github_actions
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[main]
|
[main]
|
||||||
host = https://app.transifex.com
|
host = https://app.transifex.com
|
||||||
|
|
||||||
[o:netbox-community:p:netbox:r:9cbf4fcf95b3d92e4ebbf1a5e5d1caee]
|
[o:netbox-community:p:netbox:r:034999968a7366ba27a8bdf1ab63bf42]
|
||||||
file_filter = netbox/translations/<lang>/LC_MESSAGES/django.po
|
file_filter = netbox/translations/<lang>/LC_MESSAGES/django.po
|
||||||
source_file = netbox/translations/en/LC_MESSAGES/django.po
|
source_file = netbox/translations/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
</h3>
|
</h3>
|
||||||
<h3>
|
<h3>
|
||||||
:jigsaw: <a href="#jigsaw-creating-plugins">Create a plugin</a> ·
|
:jigsaw: <a href="#jigsaw-creating-plugins">Create a plugin</a> ·
|
||||||
:rescue_worker_helmet: <a href="#rescue_worker_helmet-become-a-maintainer">Become a maintainer</a> ·
|
:briefcase: <a href="#briefcase-looking-for-a-job">Work with us!</a> ·
|
||||||
:heart: <a href="#heart-other-ways-to-contribute">Other ideas</a>
|
:heart: <a href="#heart-other-ways-to-contribute">Other ideas</a>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
@ -84,7 +84,7 @@ intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Poli
|
|||||||
|
|
||||||
* It's very important that you not submit a pull request until a relevant issue has been opened **and** assigned to you. Otherwise, you risk wasting time on work that may ultimately not be needed.
|
* It's very important that you not submit a pull request until a relevant issue has been opened **and** assigned to you. Otherwise, you risk wasting time on work that may ultimately not be needed.
|
||||||
|
|
||||||
* New pull requests should generally be based off of the `develop` branch, rather than `master`. The `develop` branch is used for ongoing development, while `master` is used for tracking stable releases. (If you're developing for an upcoming minor release, use `feature` instead.)
|
* New pull requests should generally be based off of the `main` branch. This branch, in keeping with the [trunk-based development](https://trunkbaseddevelopment.com/) approach, is used for ongoing development and bug fixes and always represents the newest stable code, from which releases are periodically branched. (If you're developing for an upcoming minor release, use `feature` instead.)
|
||||||
|
|
||||||
* In most cases, it is not necessary to add a changelog entry: A maintainer will take care of this when the PR is merged. (This helps avoid merge conflicts resulting from multiple PRs being submitted simultaneously.)
|
* In most cases, it is not necessary to add a changelog entry: A maintainer will take care of this when the PR is merged. (This helps avoid merge conflicts resulting from multiple PRs being submitted simultaneously.)
|
||||||
|
|
||||||
@ -109,21 +109,9 @@ Do you have an idea for something you'd like to build in NetBox, but might not b
|
|||||||
|
|
||||||
Check out our [plugin development tutorial](https://github.com/netbox-community/netbox-plugin-tutorial) to get started!
|
Check out our [plugin development tutorial](https://github.com/netbox-community/netbox-plugin-tutorial) to get started!
|
||||||
|
|
||||||
## :rescue_worker_helmet: Become a Maintainer
|
## :briefcase: Looking for a Job?
|
||||||
|
|
||||||
We're always looking for motivated individuals to join the maintainers team and help drive NetBox's long-term development. Some of our most sought-after skills include:
|
At [NetBox Labs](https://netboxlabs.com/), we're always looking for highly skilled and motivated people to join our team. While NetBox is a core part of our product lineup, we have an ever-expanding suite of solutions serving the network automation space. Check out our [current openings](https://netboxlabs.com/careers/) to see if you might be a fit!
|
||||||
|
|
||||||
* Python development with a strong focus on the [Django](https://www.djangoproject.com/) framework
|
|
||||||
* Expertise working with PostgreSQL databases
|
|
||||||
* Javascript & TypeScript proficiency
|
|
||||||
* A knack for web application design (HTML & CSS)
|
|
||||||
* Familiarity with git and software development best practices
|
|
||||||
* Excellent attention to detail
|
|
||||||
* Working experience in the field of network operations & engineering
|
|
||||||
|
|
||||||
We generally ask that maintainers dedicate around four hours of work to the project each week on average, which includes both hands-on development and project management tasks such as issue triage. Maintainers are also encouraged (but not required) to attend our bi-weekly Zoom call to catch up on recent items.
|
|
||||||
|
|
||||||
Interested? You can contact our lead maintainer, Jeremy Stretch, at jeremy@netbox.dev or on the [NetDev Community Slack](https://netdev.chat/). We'd love to have you on the team!
|
|
||||||
|
|
||||||
## :heart: Other Ways to Contribute
|
## :heart: Other Ways to Contribute
|
||||||
|
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo_light.svg" width="400" alt="NetBox logo" />
|
<img src="https://raw.githubusercontent.com/netbox-community/netbox/main/docs/netbox_logo_light.svg" width="400" alt="NetBox logo" />
|
||||||
<p><strong>The cornerstone of every automated network</strong></p>
|
<p><strong>The cornerstone of every automated network</strong></p>
|
||||||
<a href="https://github.com/netbox-community/netbox/releases"><img src="https://img.shields.io/github/v/release/netbox-community/netbox" alt="Latest release" /></a>
|
<a href="https://github.com/netbox-community/netbox/releases"><img src="https://img.shields.io/github/v/release/netbox-community/netbox" alt="Latest release" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/blob/master/LICENSE.txt"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg" alt="License" /></a>
|
<a href="https://github.com/netbox-community/netbox/blob/main/LICENSE.txt"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg" alt="License" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/graphs/contributors"><img src="https://img.shields.io/github/contributors/netbox-community/netbox?color=blue" alt="Contributors" /></a>
|
<a href="https://github.com/netbox-community/netbox/graphs/contributors"><img src="https://img.shields.io/github/contributors/netbox-community/netbox?color=blue" alt="Contributors" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/stargazers"><img src="https://img.shields.io/github/stars/netbox-community/netbox?style=flat" alt="GitHub stars" /></a>
|
<a href="https://github.com/netbox-community/netbox/stargazers"><img src="https://img.shields.io/github/stars/netbox-community/netbox?style=flat" alt="GitHub stars" /></a>
|
||||||
<a href="https://explore.transifex.com/netbox-community/netbox/"><img src="https://img.shields.io/badge/languages-15-blue" alt="Languages supported" /></a>
|
<a href="https://explore.transifex.com/netbox-community/netbox/"><img src="https://img.shields.io/badge/languages-15-blue" alt="Languages supported" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/actions/workflows/ci.yml"><img src="https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master" alt="CI status" /></a>
|
<a href="https://github.com/netbox-community/netbox/actions/workflows/ci.yml"><img src="https://github.com/netbox-community/netbox/actions/workflows/ci.yml/badge.svg" alt="CI status" /></a>
|
||||||
<p>
|
<p>
|
||||||
<strong><a href="https://github.com/netbox-community/netbox/">NetBox Community</a></strong> |
|
<strong><a href="https://netboxlabs.com/community/">NetBox Community</a></strong> |
|
||||||
<strong><a href="https://netboxlabs.com/netbox-cloud/">NetBox Cloud</a></strong> |
|
<strong><a href="https://netboxlabs.com/netbox-cloud/">NetBox Cloud</a></strong> |
|
||||||
<strong><a href="https://netboxlabs.com/netbox-enterprise/">NetBox Enterprise</a></strong>
|
<strong><a href="https://netboxlabs.com/netbox-enterprise/">NetBox Enterprise</a></strong>
|
||||||
</p>
|
</p>
|
||||||
|
@ -14,6 +14,12 @@ Administrators are encouraged to adhere to industry best practices concerning th
|
|||||||
* Prohibit access to your database from clients other than the NetBox application
|
* Prohibit access to your database from clients other than the NetBox application
|
||||||
* Keep your deployment updated to the most recent stable release
|
* Keep your deployment updated to the most recent stable release
|
||||||
|
|
||||||
|
## Compliance Reporting
|
||||||
|
|
||||||
|
Please note that security compliance reports (e.g. SOC 2) are provided by NetBox Labs only to customers using NetBox Cloud or NetBox Enterprise. They are not available to users of self-hosted NetBox Community Edition.
|
||||||
|
|
||||||
|
If you would like to consider upgrading to NetBox Cloud or Enterprise, please contact `sales@netboxlabs.com`.
|
||||||
|
|
||||||
## Reporting a Suspected Vulnerability
|
## Reporting a Suspected Vulnerability
|
||||||
|
|
||||||
If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so by emailing `security@netboxlabs.com`. Please ensure that your report meets all the following conditions:
|
If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so by emailing `security@netboxlabs.com`. Please ensure that your report meets all the following conditions:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# The Python web framework on which NetBox is built
|
# The Python web framework on which NetBox is built
|
||||||
# https://docs.djangoproject.com/en/stable/releases/
|
# https://docs.djangoproject.com/en/stable/releases/
|
||||||
Django<5.1
|
Django==5.2.*
|
||||||
|
|
||||||
# Django middleware which permits cross-domain API requests
|
# Django middleware which permits cross-domain API requests
|
||||||
# https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst
|
# https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst
|
||||||
@ -8,14 +8,16 @@ django-cors-headers
|
|||||||
|
|
||||||
# Runtime UI tool for debugging Django
|
# Runtime UI tool for debugging Django
|
||||||
# https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst
|
# https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst
|
||||||
# Pinned for DNS looukp bug; see https://github.com/netbox-community/netbox/issues/16454
|
|
||||||
# and https://github.com/jazzband/django-debug-toolbar/issues/1927
|
|
||||||
django-debug-toolbar
|
django-debug-toolbar
|
||||||
|
|
||||||
# Library for writing reusable URL query filters
|
# Library for writing reusable URL query filters
|
||||||
# https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst
|
# https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst
|
||||||
django-filter
|
django-filter
|
||||||
|
|
||||||
|
# Django Debug Toolbar extension for GraphiQL
|
||||||
|
# https://github.com/flavors/django-graphiql-debug-toolbar/blob/main/CHANGES.rst
|
||||||
|
django-graphiql-debug-toolbar
|
||||||
|
|
||||||
# HTMX utilities for Django
|
# HTMX utilities for Django
|
||||||
# https://django-htmx.readthedocs.io/en/latest/changelog.html
|
# https://django-htmx.readthedocs.io/en/latest/changelog.html
|
||||||
django-htmx
|
django-htmx
|
||||||
@ -44,6 +46,10 @@ django-rich
|
|||||||
# https://github.com/rq/django-rq/blob/master/CHANGELOG.md
|
# https://github.com/rq/django-rq/blob/master/CHANGELOG.md
|
||||||
django-rq
|
django-rq
|
||||||
|
|
||||||
|
# Provides a variety of storage backends
|
||||||
|
# https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst
|
||||||
|
django-storages
|
||||||
|
|
||||||
# Abstraction models for rendering and paginating HTML tables
|
# Abstraction models for rendering and paginating HTML tables
|
||||||
# https://github.com/jieter/django-tables2/blob/master/CHANGELOG.md
|
# https://github.com/jieter/django-tables2/blob/master/CHANGELOG.md
|
||||||
django-tables2
|
django-tables2
|
||||||
@ -80,6 +86,10 @@ gunicorn
|
|||||||
# https://jinja.palletsprojects.com/changes/
|
# https://jinja.palletsprojects.com/changes/
|
||||||
Jinja2
|
Jinja2
|
||||||
|
|
||||||
|
# JSON schema validation
|
||||||
|
# https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst
|
||||||
|
jsonschema
|
||||||
|
|
||||||
# Simple markup language for rendering HTML
|
# Simple markup language for rendering HTML
|
||||||
# https://python-markdown.github.io/changelog/
|
# https://python-markdown.github.io/changelog/
|
||||||
Markdown
|
Markdown
|
||||||
@ -90,7 +100,7 @@ mkdocs-material
|
|||||||
|
|
||||||
# Introspection for embedded code
|
# Introspection for embedded code
|
||||||
# https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md
|
# https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md
|
||||||
mkdocstrings[python-legacy]
|
mkdocstrings[python]
|
||||||
|
|
||||||
# Library for manipulating IP prefixes and addresses
|
# Library for manipulating IP prefixes and addresses
|
||||||
# https://github.com/netaddr/netaddr/blob/master/CHANGELOG.rst
|
# https://github.com/netaddr/netaddr/blob/master/CHANGELOG.rst
|
||||||
@ -101,7 +111,8 @@ netaddr
|
|||||||
nh3
|
nh3
|
||||||
|
|
||||||
# Fork of PIL (Python Imaging Library) for image processing
|
# Fork of PIL (Python Imaging Library) for image processing
|
||||||
# https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst
|
# https://github.com/python-pillow/Pillow/releases
|
||||||
|
# https://pillow.readthedocs.io/en/stable/releasenotes/
|
||||||
Pillow
|
Pillow
|
||||||
|
|
||||||
# PostgreSQL database adapter for Python
|
# PostgreSQL database adapter for Python
|
||||||
@ -120,21 +131,22 @@ requests
|
|||||||
# https://github.com/rq/rq/blob/master/CHANGES.md
|
# https://github.com/rq/rq/blob/master/CHANGES.md
|
||||||
rq
|
rq
|
||||||
|
|
||||||
# Social authentication framework
|
|
||||||
# https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md
|
|
||||||
social-auth-core
|
|
||||||
|
|
||||||
# Django app for social-auth-core
|
# Django app for social-auth-core
|
||||||
# https://github.com/python-social-auth/social-app-django/blob/master/CHANGELOG.md
|
# https://github.com/python-social-auth/social-app-django/blob/master/CHANGELOG.md
|
||||||
social-auth-app-django
|
social-auth-app-django
|
||||||
|
|
||||||
|
# Social authentication framework
|
||||||
|
# https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md
|
||||||
|
social-auth-core
|
||||||
|
|
||||||
# Strawberry GraphQL
|
# Strawberry GraphQL
|
||||||
# https://github.com/strawberry-graphql/strawberry/blob/main/CHANGELOG.md
|
# https://github.com/strawberry-graphql/strawberry/blob/main/CHANGELOG.md
|
||||||
strawberry-graphql
|
strawberry-graphql
|
||||||
|
|
||||||
# Strawberry GraphQL Django extension
|
# Strawberry GraphQL Django extension
|
||||||
# https://github.com/strawberry-graphql/strawberry-django/releases
|
# https://github.com/strawberry-graphql/strawberry-django/releases
|
||||||
strawberry-graphql-django
|
# See #19771
|
||||||
|
strawberry-graphql-django==0.60.0
|
||||||
|
|
||||||
# SVG image rendering (used for rack elevations)
|
# SVG image rendering (used for rack elevations)
|
||||||
# https://github.com/mozman/svgwrite/blob/master/NEWS.rst
|
# https://github.com/mozman/svgwrite/blob/master/NEWS.rst
|
||||||
|
@ -329,6 +329,7 @@
|
|||||||
"100base-tx",
|
"100base-tx",
|
||||||
"100base-t1",
|
"100base-t1",
|
||||||
"1000base-t",
|
"1000base-t",
|
||||||
|
"1000base-sx",
|
||||||
"1000base-lx",
|
"1000base-lx",
|
||||||
"1000base-tx",
|
"1000base-tx",
|
||||||
"2.5gbase-t",
|
"2.5gbase-t",
|
||||||
@ -427,6 +428,7 @@
|
|||||||
"e3",
|
"e3",
|
||||||
"xdsl",
|
"xdsl",
|
||||||
"docsis",
|
"docsis",
|
||||||
|
"moca",
|
||||||
"bpon",
|
"bpon",
|
||||||
"epon",
|
"epon",
|
||||||
"10g-epon",
|
"10g-epon",
|
||||||
@ -500,6 +502,9 @@
|
|||||||
"n",
|
"n",
|
||||||
"mrj21",
|
"mrj21",
|
||||||
"fc",
|
"fc",
|
||||||
|
"fc-pc",
|
||||||
|
"fc-upc",
|
||||||
|
"fc-apc",
|
||||||
"lc",
|
"lc",
|
||||||
"lc-pc",
|
"lc-pc",
|
||||||
"lc-upc",
|
"lc-upc",
|
||||||
@ -565,6 +570,9 @@
|
|||||||
"n",
|
"n",
|
||||||
"mrj21",
|
"mrj21",
|
||||||
"fc",
|
"fc",
|
||||||
|
"fc-pc",
|
||||||
|
"fc-upc",
|
||||||
|
"fc-apc",
|
||||||
"lc",
|
"lc",
|
||||||
"lc-pc",
|
"lc-pc",
|
||||||
"lc-upc",
|
"lc-upc",
|
||||||
|
@ -54,6 +54,7 @@ Icons](https://github.com/google/material-design-icons) icon's name; or be
|
|||||||
`None` for no icon.
|
`None` for no icon.
|
||||||
|
|
||||||
For instance, the OIDC backend may be customized with
|
For instance, the OIDC backend may be customized with
|
||||||
|
|
||||||
```python
|
```python
|
||||||
SOCIAL_AUTH_BACKEND_ATTRS = {
|
SOCIAL_AUTH_BACKEND_ATTRS = {
|
||||||
'oidc': ("My awesome SSO", "login"),
|
'oidc': ("My awesome SSO", "login"),
|
||||||
|
@ -54,7 +54,7 @@ pg_dump --username netbox --password --host localhost -s netbox > netbox_schema.
|
|||||||
By default, NetBox stores 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.
|
By default, NetBox stores 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.
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
These operations are not necessary if your installation is utilizing a [remote storage backend](../configuration/system.md#storage_backend).
|
These operations are not necessary if your installation is utilizing a [remote storage backend](../configuration/system.md#storages).
|
||||||
|
|
||||||
### Archive the Media Directory
|
### Archive the Media Directory
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ For a complete list of available preferences, log into NetBox and navigate to `/
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 50
|
Default: `50`
|
||||||
|
|
||||||
The default maximum number of objects to display per page within each list of objects.
|
The default maximum number of objects to display per page within each list of objects.
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ The default maximum number of objects to display per page within each list of ob
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 15
|
Default: `15`
|
||||||
|
|
||||||
The default value for the `amperage` field when creating new power feeds.
|
The default value for the `amperage` field when creating new power feeds.
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ The default value for the `amperage` field when creating new power feeds.
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 80
|
Default: `80`
|
||||||
|
|
||||||
The default value (percentage) for the `max_utilization` field when creating new power feeds.
|
The default value (percentage) for the `max_utilization` field when creating new power feeds.
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ The default value (percentage) for the `max_utilization` field when creating new
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 120
|
Default: `120`
|
||||||
|
|
||||||
The default value for the `voltage` field when creating new power feeds.
|
The default value for the `voltage` field when creating new power feeds.
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ The default value for the `voltage` field when creating new power feeds.
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 22
|
Default: `22`
|
||||||
|
|
||||||
Default height (in pixels) of a unit within a rack elevation. For best results, this should be approximately one tenth of `RACK_ELEVATION_DEFAULT_UNIT_WIDTH`.
|
Default height (in pixels) of a unit within a rack elevation. For best results, this should be approximately one tenth of `RACK_ELEVATION_DEFAULT_UNIT_WIDTH`.
|
||||||
|
|
||||||
@ -119,6 +119,6 @@ Default height (in pixels) of a unit within a rack elevation. For best results,
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 220
|
Default: `220`
|
||||||
|
|
||||||
Default width (in pixels) of a unit within a rack elevation.
|
Default width (in pixels) of a unit within a rack elevation.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## DEBUG
|
## DEBUG
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
This setting enables debugging. Debugging should be enabled only during development or troubleshooting. Note that only
|
This setting enables debugging. Debugging should be enabled only during development or troubleshooting. Note that only
|
||||||
clients which access NetBox from a recognized [internal IP address](./system.md#internal_ips) will see debugging tools in the user
|
clients which access NetBox from a recognized [internal IP address](./system.md#internal_ips) will see debugging tools in the user
|
||||||
@ -16,6 +16,6 @@ interface.
|
|||||||
|
|
||||||
## DEVELOPER
|
## DEVELOPER
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
This parameter serves as a safeguard to prevent some potentially dangerous behavior, such as generating new database schema migrations. Additionally, enabling this setting disables the debug warning banner in the UI. Set this to `True` **only** if you are actively developing the NetBox code base.
|
This parameter serves as a safeguard to prevent some potentially dangerous behavior, such as generating new database schema migrations. Additionally, enabling this setting disables the debug warning banner in the UI. Set this to `True` **only** if you are actively developing the NetBox code base.
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
## SENTRY_DSN
|
## SENTRY_DSN
|
||||||
|
|
||||||
Default: None
|
Default: `None`
|
||||||
|
|
||||||
Defines a Sentry data source name (DSN) for automated error reporting. `SENTRY_ENABLED` must be True for this parameter to take effect. For example:
|
Defines a Sentry data source name (DSN) for automated error reporting. `SENTRY_ENABLED` must be `True` for this parameter to take effect. For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
SENTRY_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"
|
SENTRY_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"
|
||||||
@ -14,9 +14,9 @@ SENTRY_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"
|
|||||||
|
|
||||||
## SENTRY_ENABLED
|
## SENTRY_ENABLED
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
Set to True to enable automatic error reporting via [Sentry](https://sentry.io/).
|
Set to `True` to enable automatic error reporting via [Sentry](https://sentry.io/).
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
The `sentry-sdk` Python package is required to enable Sentry integration.
|
The `sentry-sdk` Python package is required to enable Sentry integration.
|
||||||
@ -25,7 +25,7 @@ Set to True to enable automatic error reporting via [Sentry](https://sentry.io/)
|
|||||||
|
|
||||||
## SENTRY_SAMPLE_RATE
|
## SENTRY_SAMPLE_RATE
|
||||||
|
|
||||||
Default: 1.0 (all)
|
Default: `1.0` (all)
|
||||||
|
|
||||||
The sampling rate for errors. Must be a value between 0 (disabled) and 1.0 (report on all errors).
|
The sampling rate for errors. Must be a value between 0 (disabled) and 1.0 (report on all errors).
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ The sampling rate for errors. Must be a value between 0 (disabled) and 1.0 (repo
|
|||||||
|
|
||||||
## SENTRY_SEND_DEFAULT_PII
|
## SENTRY_SEND_DEFAULT_PII
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
Maps to the Sentry SDK's [`send_default_pii`](https://docs.sentry.io/platforms/python/configuration/options/#send-default-pii) parameter. If enabled, certain personally identifiable information (PII) is added.
|
Maps to the Sentry SDK's [`send_default_pii`](https://docs.sentry.io/platforms/python/configuration/options/#send-default-pii) parameter. If enabled, certain personally identifiable information (PII) is added.
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ SENTRY_TAGS = {
|
|||||||
|
|
||||||
## SENTRY_TRACES_SAMPLE_RATE
|
## SENTRY_TRACES_SAMPLE_RATE
|
||||||
|
|
||||||
Default: 0 (disabled)
|
Default: `0` (disabled)
|
||||||
|
|
||||||
The sampling rate for transactions. Must be a value between 0 (disabled) and 1.0 (report on all transactions).
|
The sampling rate for transactions. Must be a value between 0 (disabled) and 1.0 (report on all transactions).
|
||||||
|
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: True
|
Default: `True`
|
||||||
|
|
||||||
Setting this to False will disable the GraphQL API.
|
Setting this to `False` will disable the GraphQL API.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## GRAPHQL_MAX_ALIASES
|
## GRAPHQL_MAX_ALIASES
|
||||||
|
|
||||||
Default: 10
|
Default: `10`
|
||||||
|
|
||||||
The maximum number of queries that a GraphQL API request may contain.
|
The maximum number of queries that a GraphQL API request may contain.
|
||||||
|
@ -55,9 +55,9 @@ Sets content for the top banner in the user interface.
|
|||||||
|
|
||||||
## CENSUS_REPORTING_ENABLED
|
## CENSUS_REPORTING_ENABLED
|
||||||
|
|
||||||
Default: True
|
Default: `True`
|
||||||
|
|
||||||
Enables anonymous census reporting. To opt out of census reporting, set this to False.
|
Enables anonymous census reporting. To opt out of census reporting, set this to `False`.
|
||||||
|
|
||||||
This data enables the project maintainers to estimate how many NetBox deployments exist and track the adoption of new versions over time. Census reporting effects a single HTTP request each time a worker starts. The only data reported by this function are the NetBox version, Python version, and a pseudorandom unique identifier.
|
This data enables the project maintainers to estimate how many NetBox deployments exist and track the adoption of new versions over time. Census reporting effects a single HTTP request each time a worker starts. The only data reported by this function are the NetBox version, Python version, and a pseudorandom unique identifier.
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ This data enables the project maintainers to estimate how many NetBox deployment
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 90
|
Default: `90`
|
||||||
|
|
||||||
The number of days to retain logged changes (object creations, updates, and deletions). Set this to `0` to retain
|
The number of days to retain logged changes (object creations, updates, and deletions). Set this to `0` to retain
|
||||||
changes in the database indefinitely.
|
changes in the database indefinitely.
|
||||||
@ -79,7 +79,7 @@ changes in the database indefinitely.
|
|||||||
|
|
||||||
## CHANGELOG_SKIP_EMPTY_CHANGES
|
## CHANGELOG_SKIP_EMPTY_CHANGES
|
||||||
|
|
||||||
Default: True
|
Default: `True`
|
||||||
|
|
||||||
If enabled, a change log record will not be created when an object is updated without any changes to its existing field values.
|
If enabled, a change log record will not be created when an object is updated without any changes to its existing field values.
|
||||||
|
|
||||||
@ -96,21 +96,23 @@ The maximum size (in bytes) of an incoming HTTP request (i.e. `GET` or `POST` da
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DJANGO_ADMIN_ENABLED
|
|
||||||
|
|
||||||
Default: False
|
|
||||||
|
|
||||||
Setting this to True installs the `django.contrib.admin` app and enables the [Django admin UI](https://docs.djangoproject.com/en/5.0/ref/contrib/admin/). This may be necessary to support older plugins which do not integrate with the native NetBox interface.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ENFORCE_GLOBAL_UNIQUE
|
## ENFORCE_GLOBAL_UNIQUE
|
||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: True
|
Default: `True`
|
||||||
|
|
||||||
By default, NetBox will prevent the creation of duplicate prefixes and IP addresses in the global table (that is, those which are not assigned to any VRF). This validation can be disabled by setting `ENFORCE_GLOBAL_UNIQUE` to False.
|
By default, NetBox will prevent the creation of duplicate prefixes and IP addresses in the global table (that is, those which are not assigned to any VRF). This validation can be disabled by setting `ENFORCE_GLOBAL_UNIQUE` to `False`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## EVENTS_PIPELINE
|
||||||
|
|
||||||
|
!!! info "This parameter was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
Default: `['extras.events.process_event_queue',]`
|
||||||
|
|
||||||
|
NetBox will call dotted paths to the functions listed here for events (create, update, delete) on models as well as when custom EventRules are fired.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -126,7 +128,7 @@ The maximum amount (in bytes) of uploaded data that will be held in memory befor
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 90
|
Default: `90`
|
||||||
|
|
||||||
The number of days to retain job results (scripts and reports). Set this to `0` to retain job results in the database indefinitely.
|
The number of days to retain job results (scripts and reports). Set this to `0` to retain job results in the database indefinitely.
|
||||||
|
|
||||||
@ -139,9 +141,9 @@ The number of days to retain job results (scripts and reports). Set this to `0`
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
Setting this to True will display a "maintenance mode" banner at the top of every page. Additionally, NetBox will no longer update a user's "last active" time upon login. This is to allow new logins when the database is in a read-only state. Recording of login times will resume when maintenance mode is disabled.
|
Setting this to `True` will display a "maintenance mode" banner at the top of every page. Additionally, NetBox will no longer update a user's "last active" time upon login. This is to allow new logins when the database is in a read-only state. Recording of login times will resume when maintenance mode is disabled.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -159,7 +161,7 @@ This specifies the URL to use when presenting a map of a physical location by st
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: 1000
|
Default: `1000`
|
||||||
|
|
||||||
A web user or API consumer can request an arbitrary number of objects by appending the "limit" parameter to the URL (e.g. `?limit=1000`). This parameter defines the maximum acceptable limit. Setting this to `0` or `None` will allow a client to retrieve _all_ matching objects at once with no limit by specifying `?limit=0`.
|
A web user or API consumer can request an arbitrary number of objects by appending the "limit" parameter to the URL (e.g. `?limit=1000`). This parameter defines the maximum acceptable limit. Setting this to `0` or `None` will allow a client to retrieve _all_ matching objects at once with no limit by specifying `?limit=0`.
|
||||||
|
|
||||||
@ -167,7 +169,7 @@ A web user or API consumer can request an arbitrary number of objects by appendi
|
|||||||
|
|
||||||
## METRICS_ENABLED
|
## METRICS_ENABLED
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
Toggle the availability Prometheus-compatible metrics at `/metrics`. See the [Prometheus Metrics](../integrations/prometheus-metrics.md) documentation for more details.
|
Toggle the availability Prometheus-compatible metrics at `/metrics`. See the [Prometheus Metrics](../integrations/prometheus-metrics.md) documentation for more details.
|
||||||
|
|
||||||
@ -177,9 +179,9 @@ Toggle the availability Prometheus-compatible metrics at `/metrics`. See the [Pr
|
|||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
When determining the primary IP address for a device, IPv6 is preferred over IPv4 by default. Set this to True to prefer IPv4 instead.
|
When determining the primary IP address for a device, IPv6 is preferred over IPv4 by default. Set this to `True` to prefer IPv4 instead.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -201,7 +203,7 @@ If no queue is defined the queue named `default` will be used.
|
|||||||
|
|
||||||
## RELEASE_CHECK_URL
|
## RELEASE_CHECK_URL
|
||||||
|
|
||||||
Default: None (disabled)
|
Default: `None` (disabled)
|
||||||
|
|
||||||
This parameter defines the URL of the repository that will be checked for new NetBox releases. When a new release is detected, a message will be displayed to administrative users on the home page. This can be set to the official repository (`'https://api.github.com/repos/netbox-community/netbox/releases'`) or a custom fork. Set this to `None` to disable automatic update checks.
|
This parameter defines the URL of the repository that will be checked for new NetBox releases. When a new release is detected, a message will be displayed to administrative users on the home page. This can be set to the official repository (`'https://api.github.com/repos/netbox-community/netbox/releases'`) or a custom fork. Set this to `None` to disable automatic update checks.
|
||||||
|
|
||||||
@ -231,3 +233,15 @@ This parameter controls how frequently a failed job is retried, up to the maximu
|
|||||||
Default: `0` (retries disabled)
|
Default: `0` (retries disabled)
|
||||||
|
|
||||||
The maximum number of times a background task will be retried before being marked as failed.
|
The maximum number of times a background task will be retried before being marked as failed.
|
||||||
|
|
||||||
|
## DISK_BASE_UNIT
|
||||||
|
|
||||||
|
Default: `1000`
|
||||||
|
|
||||||
|
The base unit for disk sizes. Set this to `1024` to use binary prefixes (MiB, GiB, etc.) instead of decimal prefixes (MB, GB, etc.).
|
||||||
|
|
||||||
|
## RAM_BASE_UNIT
|
||||||
|
|
||||||
|
Default: `1000`
|
||||||
|
|
||||||
|
The base unit for RAM sizes. Set this to `1024` to use binary prefixes (MiB, GiB, etc.) instead of decimal prefixes (MB, GB, etc.).
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## PLUGINS
|
## PLUGINS
|
||||||
|
|
||||||
Default: Empty
|
Default: `[]`
|
||||||
|
|
||||||
A list of installed [NetBox plugins](../plugins/index.md) to enable. Plugins will not take effect unless they are listed here.
|
A list of installed [NetBox plugins](../plugins/index.md) to enable. Plugins will not take effect unless they are listed here.
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ A list of installed [NetBox plugins](../plugins/index.md) to enable. Plugins wil
|
|||||||
|
|
||||||
## PLUGINS_CONFIG
|
## PLUGINS_CONFIG
|
||||||
|
|
||||||
Default: Empty
|
Default: `[]`
|
||||||
|
|
||||||
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:
|
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:
|
||||||
|
|
||||||
@ -33,3 +33,21 @@ Note that a plugin must be listed in `PLUGINS` for its configuration to take eff
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## PLUGINS_CATALOG_CONFIG
|
||||||
|
|
||||||
|
Default: `{}` (Empty)
|
||||||
|
|
||||||
|
This parameter controls how individual plugins are displayed in the plugins catalog under Admin > System > Plugins. Adding a plugin to the `hidden` list will omit that plugin from the catalog. Adding a plugin to the `static` list will display the plugin, but not link to the plugin details or upgrade instructions.
|
||||||
|
|
||||||
|
An example configuration is shown below:
|
||||||
|
|
||||||
|
```python
|
||||||
|
PLUGINS_CATALOG_CONFIG = {
|
||||||
|
'hidden': [
|
||||||
|
'plugin1',
|
||||||
|
],
|
||||||
|
'static': [
|
||||||
|
'plugin2',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
```
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Remote Authentication Settings
|
# Remote Authentication Settings
|
||||||
|
|
||||||
The configuration parameters listed here control remote authentication for NetBox. Note that `REMOTE_AUTH_ENABLED` must be true in order for these settings to take effect.
|
The configuration parameters listed here control remote authentication for NetBox. Note that `REMOTE_AUTH_ENABLED` must be `True` in order for these settings to take effect.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ The configuration parameters listed here control remote authentication for NetBo
|
|||||||
|
|
||||||
Default: `False`
|
Default: `False`
|
||||||
|
|
||||||
If true, NetBox will automatically create groups specified in the `REMOTE_AUTH_GROUP_HEADER` header if they don't already exist. (Requires `REMOTE_AUTH_ENABLED`.)
|
If `True`, NetBox will automatically create groups specified in the `REMOTE_AUTH_GROUP_HEADER` header if they don't already exist. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ If true, NetBox will automatically create groups specified in the `REMOTE_AUTH_G
|
|||||||
|
|
||||||
Default: `False`
|
Default: `False`
|
||||||
|
|
||||||
If true, NetBox will automatically create local accounts for users authenticated via a remote service. (Requires `REMOTE_AUTH_ENABLED`.)
|
If `True`, NetBox will automatically create local accounts for users authenticated via a remote service. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ The list of groups to assign a new user account when created using remote authen
|
|||||||
|
|
||||||
Default: `{}` (Empty dictionary)
|
Default: `{}` (Empty dictionary)
|
||||||
|
|
||||||
A mapping of permissions to assign a new user account when created using remote authentication. Each key in the dictionary should be set to a dictionary of the attributes to be applied to the permission, or `None` to allow all objects. (Requires `REMOTE_AUTH_ENABLED` as True and `REMOTE_AUTH_GROUP_SYNC_ENABLED` as False.)
|
A mapping of permissions to assign a new user account when created using remote authentication. Each key in the dictionary should be set to a dictionary of the attributes to be applied to the permission, or `None` to allow all objects. (Requires `REMOTE_AUTH_ENABLED` as `True` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` as `False`.)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
## ALLOWED_HOSTS
|
## ALLOWED_HOSTS
|
||||||
|
|
||||||
This is a list of valid fully-qualified domain names (FQDNs) and/or IP addresses that can be used to reach the NetBox service. Usually this is the same as the hostname for the NetBox server, but can also be different; for example, when using a reverse proxy serving the NetBox website under a different FQDN than the hostname of the NetBox server. To help guard against [HTTP Host header attackes](https://docs.djangoproject.com/en/3.0/topics/security/#host-headers-virtual-hosting), NetBox will not permit access to the server via any other hostnames (or IPs).
|
This is a list of valid fully-qualified domain names (FQDNs) and/or IP addresses that can be used to reach the NetBox service. Usually this is the same as the hostname for the NetBox server, but can also be different; for example, when using a reverse proxy serving the NetBox website under a different FQDN than the hostname of the NetBox server. To help guard against [HTTP Host header attacks](https://docs.djangoproject.com/en/stable/topics/security/#host-headers-virtual-hosting), NetBox will not permit access to the server via any other hostnames (or IPs).
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
This parameter must always be defined as a list or tuple, even if only a single value is provided.
|
This parameter must always be defined as a list or tuple, even if only a single value is provided.
|
||||||
|
|
||||||
The value of this option is also used to set `CSRF_TRUSTED_ORIGINS`, which restricts POST requests to the same set of hosts (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-CSRF_TRUSTED_ORIGINS)). Keep in mind that NetBox, by default, sets `USE_X_FORWARDED_HOST` to true, which means that if you're using a reverse proxy, it's the FQDN used to reach that reverse proxy which needs to be in this list (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#allowed-hosts)).
|
The value of this option is also used to set `CSRF_TRUSTED_ORIGINS`, which restricts POST requests to the same set of hosts (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-CSRF_TRUSTED_ORIGINS)). Keep in mind that NetBox, by default, sets `USE_X_FORWARDED_HOST` to `True`, which means that if you're using a reverse proxy, it's the FQDN used to reach that reverse proxy which needs to be in this list (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#allowed-hosts)).
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -25,7 +25,30 @@ ALLOWED_HOSTS = ['*']
|
|||||||
|
|
||||||
## DATABASE
|
## DATABASE
|
||||||
|
|
||||||
NetBox requires access to a PostgreSQL 12 or later database service to store data. This service can run locally on the NetBox server or on a remote system. The following parameters must be defined within the `DATABASE` dictionary:
|
!!! warning "Legacy Configuration Parameter"
|
||||||
|
The `DATABASE` configuration parameter is deprecated and will be removed in a future release. Users are advised to adopt the new `DATABASES` (plural) parameter, which allows for the configuration of multiple databases.
|
||||||
|
|
||||||
|
See the [`DATABASES`](#databases) configuration below for usage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DATABASES
|
||||||
|
|
||||||
|
!!! info "This parameter was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
NetBox requires access to a PostgreSQL 14 or later database service to store data. This service can run locally on the NetBox server or on a remote system. Databases are defined as named dictionaries:
|
||||||
|
|
||||||
|
```python
|
||||||
|
DATABASES = {
|
||||||
|
'default': {...},
|
||||||
|
'external1': {...},
|
||||||
|
'external2': {...},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
NetBox itself requires only that a `default` database is defined. However, certain plugins may require the configuration of additional databases. (Consider also configuring the [`DATABASE_ROUTERS`](./system.md#database_routers) parameter when multiple databases are in use.)
|
||||||
|
|
||||||
|
The following parameters must be defined for each database:
|
||||||
|
|
||||||
* `NAME` - Database name
|
* `NAME` - Database name
|
||||||
* `USER` - PostgreSQL username
|
* `USER` - PostgreSQL username
|
||||||
@ -38,14 +61,16 @@ NetBox requires access to a PostgreSQL 12 or later database service to store dat
|
|||||||
Example:
|
Example:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
DATABASE = {
|
DATABASES = {
|
||||||
'ENGINE': 'django.db.backends.postgresql',
|
'default': {
|
||||||
'NAME': 'netbox', # Database name
|
'ENGINE': 'django.db.backends.postgresql',
|
||||||
'USER': 'netbox', # PostgreSQL username
|
'NAME': 'netbox', # Database name
|
||||||
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
'USER': 'netbox', # PostgreSQL username
|
||||||
'HOST': 'localhost', # Database server
|
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
||||||
'PORT': '', # Database port (leave blank for default)
|
'HOST': 'localhost', # Database server
|
||||||
'CONN_MAX_AGE': 300, # Max database connection age
|
'PORT': '', # Database port (leave blank for default)
|
||||||
|
'CONN_MAX_AGE': 300, # Max database connection age
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -53,7 +78,7 @@ DATABASE = {
|
|||||||
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).
|
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).
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
Make sure to use a PostgreSQL-compatible backend for the ENGINE setting. If you don't specify an ENGINE, the default will be django.db.backends.postgresql.
|
The `ENGINE` parameter must specify a PostgreSQL-compatible database backend. If not defined, the default engine `django.db.backends.postgresql` will be used.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
## ALLOW_TOKEN_RETRIEVAL
|
## ALLOW_TOKEN_RETRIEVAL
|
||||||
|
|
||||||
Default: True
|
Default: `False`
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
The default value of this parameter changed from `True` to `False` in NetBox v4.3.0.
|
||||||
|
|
||||||
If disabled, the values of API tokens will not be displayed after each token's initial creation. A user **must** record the value of a token prior to its creation, or it will be lost. Note that this affects _all_ users, regardless of assigned permissions.
|
If disabled, the values of API tokens will not be displayed after each token's initial creation. A user **must** record the value of a token prior to its creation, or it will be lost. Note that this affects _all_ users, regardless of assigned permissions.
|
||||||
|
|
||||||
@ -47,9 +50,9 @@ Although it is not recommended, the default validation rules can be disabled by
|
|||||||
|
|
||||||
## CORS_ORIGIN_ALLOW_ALL
|
## CORS_ORIGIN_ALLOW_ALL
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If True, cross-origin resource sharing (CORS) requests will be accepted from all origins. If False, a whitelist will be used (see below).
|
If `True`, cross-origin resource sharing (CORS) requests will be accepted from all origins. If False, a whitelist will be used (see below).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -59,7 +62,7 @@ If True, cross-origin resource sharing (CORS) requests will be accepted from all
|
|||||||
|
|
||||||
These settings specify a list of origins that are authorized to make cross-site API requests. Use
|
These settings specify a list of origins that are authorized to make cross-site API requests. Use
|
||||||
`CORS_ORIGIN_WHITELIST` to define a list of exact hostnames, or `CORS_ORIGIN_REGEX_WHITELIST` to define a set of regular
|
`CORS_ORIGIN_WHITELIST` to define a list of exact hostnames, or `CORS_ORIGIN_REGEX_WHITELIST` to define a set of regular
|
||||||
expressions. (These settings have no effect if `CORS_ORIGIN_ALLOW_ALL` is True.) For example:
|
expressions. (These settings have no effect if `CORS_ORIGIN_ALLOW_ALL` is `True`.) For example:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
CORS_ORIGIN_WHITELIST = [
|
CORS_ORIGIN_WHITELIST = [
|
||||||
@ -79,9 +82,9 @@ The name of the cookie to use for the cross-site request forgery (CSRF) authenti
|
|||||||
|
|
||||||
## CSRF_COOKIE_SECURE
|
## CSRF_COOKIE_SECURE
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If true, the cookie employed for cross-site request forgery (CSRF) protection will be marked as secure, meaning that it can only be sent across an HTTPS connection.
|
If `True`, the cookie employed for cross-site request forgery (CSRF) protection will be marked as secure, meaning that it can only be sent across an HTTPS connection.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -89,7 +92,7 @@ If true, the cookie employed for cross-site request forgery (CSRF) protection wi
|
|||||||
|
|
||||||
Default: `[]`
|
Default: `[]`
|
||||||
|
|
||||||
Defines a list of trusted origins for unsafe (e.g. `POST`) requests. This is a pass-through to Django's [`CSRF_TRUSTED_ORIGINS`](https://docs.djangoproject.com/en/4.0/ref/settings/#std:setting-CSRF_TRUSTED_ORIGINS) setting. Note that each host listed must specify a scheme (e.g. `http://` or `https://).
|
Defines a list of trusted origins for unsafe (e.g. `POST`) requests. This is a pass-through to Django's [`CSRF_TRUSTED_ORIGINS`](https://docs.djangoproject.com/en/stable/ref/settings/#csrf-trusted-origins) setting. Note that each host listed must specify a scheme (e.g. `http://` or `https://).
|
||||||
|
|
||||||
```python
|
```python
|
||||||
CSRF_TRUSTED_ORIGINS = (
|
CSRF_TRUSTED_ORIGINS = (
|
||||||
@ -132,7 +135,7 @@ DEFAULT_PERMISSIONS = {
|
|||||||
|
|
||||||
## EXEMPT_VIEW_PERMISSIONS
|
## EXEMPT_VIEW_PERMISSIONS
|
||||||
|
|
||||||
Default: Empty list
|
Default: `[]` (Empty list)
|
||||||
|
|
||||||
A list of NetBox models to exempt from the enforcement of view permissions. Models listed here will be viewable by all users, both authenticated and anonymous.
|
A list of NetBox models to exempt from the enforcement of view permissions. Models listed here will be viewable by all users, both authenticated and anonymous.
|
||||||
|
|
||||||
@ -159,9 +162,9 @@ EXEMPT_VIEW_PERMISSIONS = ['*']
|
|||||||
|
|
||||||
## LOGIN_PERSISTENCE
|
## LOGIN_PERSISTENCE
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If true, the lifetime of a user's authentication session will be automatically reset upon each valid request. For example, if [`LOGIN_TIMEOUT`](#login_timeout) is configured to 14 days (the default), and a user whose session is due to expire in five days makes a NetBox request (with a valid session cookie), the session's lifetime will be reset to 14 days.
|
If `True`, the lifetime of a user's authentication session will be automatically reset upon each valid request. For example, if [`LOGIN_TIMEOUT`](#login_timeout) is configured to 14 days (the default), and a user whose session is due to expire in five days makes a NetBox request (with a valid session cookie), the session's lifetime will be reset to 14 days.
|
||||||
|
|
||||||
Note that enabling this setting causes NetBox to update a user's session in the database (or file, as configured per [`SESSION_FILE_PATH`](#session_file_path)) with each request, which may introduce significant overhead in very active environments. It also permits an active user to remain authenticated to NetBox indefinitely.
|
Note that enabling this setting causes NetBox to update a user's session in the database (or file, as configured per [`SESSION_FILE_PATH`](#session_file_path)) with each request, which may introduce significant overhead in very active environments. It also permits an active user to remain authenticated to NetBox indefinitely.
|
||||||
|
|
||||||
@ -169,7 +172,7 @@ Note that enabling this setting causes NetBox to update a user's session in the
|
|||||||
|
|
||||||
## LOGIN_REQUIRED
|
## LOGIN_REQUIRED
|
||||||
|
|
||||||
Default: True
|
Default: `True`
|
||||||
|
|
||||||
When enabled, only authenticated users are permitted to access any part of NetBox. Disabling this will allow unauthenticated users to access most areas of NetBox (but not make any changes).
|
When enabled, only authenticated users are permitted to access any part of NetBox. Disabling this will allow unauthenticated users to access most areas of NetBox (but not make any changes).
|
||||||
|
|
||||||
@ -180,12 +183,23 @@ When enabled, only authenticated users are permitted to access any part of NetBo
|
|||||||
|
|
||||||
## LOGIN_TIMEOUT
|
## LOGIN_TIMEOUT
|
||||||
|
|
||||||
Default: 1209600 seconds (14 days)
|
Default: `1209600` seconds (14 days)
|
||||||
|
|
||||||
The lifetime (in seconds) of the authentication cookie issued to a NetBox user upon login.
|
The lifetime (in seconds) of the authentication cookie issued to a NetBox user upon login.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## LOGIN_FORM_HIDDEN
|
||||||
|
|
||||||
|
Default: `False`
|
||||||
|
|
||||||
|
Option to hide the login form when only SSO authentication is in use.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
If the SSO provider is unreachable, login to NetBox will be impossible if this option is enabled. The only recourse is to disable it in the local configuration and restart the NetBox service.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## LOGOUT_REDIRECT_URL
|
## LOGOUT_REDIRECT_URL
|
||||||
|
|
||||||
Default: `'home'`
|
Default: `'home'`
|
||||||
@ -196,23 +210,23 @@ The view name or URL to which a user is redirected after logging out.
|
|||||||
|
|
||||||
## SECURE_HSTS_INCLUDE_SUBDOMAINS
|
## SECURE_HSTS_INCLUDE_SUBDOMAINS
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If true, the `includeSubDomains` directive will be included in the HTTP Strict Transport Security (HSTS) header. This directive instructs the browser to apply the HSTS policy to all subdomains of the current domain.
|
If `True`, the `includeSubDomains` directive will be included in the HTTP Strict Transport Security (HSTS) header. This directive instructs the browser to apply the HSTS policy to all subdomains of the current domain.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## SECURE_HSTS_PRELOAD
|
## SECURE_HSTS_PRELOAD
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If true, the `preload` directive will be included in the HTTP Strict Transport Security (HSTS) header. This directive instructs the browser to preload the site in HTTPS. Browsers that use the HSTS preload list will force the site to be accessed via HTTPS even if the user types HTTP in the address bar.
|
If `True`, the `preload` directive will be included in the HTTP Strict Transport Security (HSTS) header. This directive instructs the browser to preload the site in HTTPS. Browsers that use the HSTS preload list will force the site to be accessed via HTTPS even if the user types HTTP in the address bar.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## SECURE_HSTS_SECONDS
|
## SECURE_HSTS_SECONDS
|
||||||
|
|
||||||
Default: 0
|
Default: `0`
|
||||||
|
|
||||||
If set to a non-zero integer value, the SecurityMiddleware sets the HTTP Strict Transport Security (HSTS) header on all responses that do not already have it. This will instruct the browser that the website must be accessed via HTTPS, blocking any HTTP request.
|
If set to a non-zero integer value, the SecurityMiddleware sets the HTTP Strict Transport Security (HSTS) header on all responses that do not already have it. This will instruct the browser that the website must be accessed via HTTPS, blocking any HTTP request.
|
||||||
|
|
||||||
@ -220,9 +234,9 @@ If set to a non-zero integer value, the SecurityMiddleware sets the HTTP Strict
|
|||||||
|
|
||||||
## SECURE_SSL_REDIRECT
|
## SECURE_SSL_REDIRECT
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If true, all non-HTTPS requests will be automatically redirected to use HTTPS.
|
If `True`, all non-HTTPS requests will be automatically redirected to use HTTPS.
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
Ensure that your frontend HTTP daemon has been configured to forward the HTTP scheme correctly before enabling this option. An incorrectly configured frontend may result in a looping redirect.
|
Ensure that your frontend HTTP daemon has been configured to forward the HTTP scheme correctly before enabling this option. An incorrectly configured frontend may result in a looping redirect.
|
||||||
@ -239,14 +253,14 @@ The name used for the session cookie. See the [Django documentation](https://doc
|
|||||||
|
|
||||||
## SESSION_COOKIE_SECURE
|
## SESSION_COOKIE_SECURE
|
||||||
|
|
||||||
Default: False
|
Default: `False`
|
||||||
|
|
||||||
If true, the cookie employed for session authentication will be marked as secure, meaning that it can only be sent across an HTTPS connection.
|
If `True`, the cookie employed for session authentication will be marked as secure, meaning that it can only be sent across an HTTPS connection.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## SESSION_FILE_PATH
|
## SESSION_FILE_PATH
|
||||||
|
|
||||||
Default: None
|
Default: `None`
|
||||||
|
|
||||||
HTTP session data is used to track authenticated users when they access NetBox. By default, NetBox stores session data in its PostgreSQL database. However, this inhibits authentication to a standby instance of NetBox without write access to the database. Alternatively, a local file path may be specified here and NetBox will store session data as files instead of using the database. Note that the NetBox system user must have read and write permissions to this path.
|
HTTP session data is used to track authenticated users when they access NetBox. By default, NetBox stores session data in its PostgreSQL database. However, this inhibits authentication to a standby instance of NetBox without write access to the database. Alternatively, a local file path may be specified here and NetBox will store session data as files instead of using the database. Note that the NetBox system user must have read and write permissions to this path.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## BASE_PATH
|
## BASE_PATH
|
||||||
|
|
||||||
Default: None
|
Default: `None`
|
||||||
|
|
||||||
The base URL path to use when accessing NetBox. Do not include the scheme or domain name. For example, if installed at https://example.com/netbox/, set:
|
The base URL path to use when accessing NetBox. Do not include the scheme or domain name. For example, if installed at https://example.com/netbox/, set:
|
||||||
|
|
||||||
@ -12,6 +12,16 @@ BASE_PATH = 'netbox/'
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## DATABASE_ROUTERS
|
||||||
|
|
||||||
|
!!! info "This parameter was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
Default: `[]` (empty list)
|
||||||
|
|
||||||
|
An iterable of [database routers](https://docs.djangoproject.com/en/stable/topics/db/multi-db/) to use for automatically selecting the appropriate database(s) for a query. This is useful only when [multiple databases](./required-parameters.md#databases) have been configured.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## DEFAULT_LANGUAGE
|
## DEFAULT_LANGUAGE
|
||||||
|
|
||||||
Default: `en-us` (US English)
|
Default: `en-us` (US English)
|
||||||
@ -64,7 +74,7 @@ Email is sent from NetBox only for critical events or if configured for [logging
|
|||||||
|
|
||||||
## HTTP_PROXIES
|
## HTTP_PROXIES
|
||||||
|
|
||||||
Default: None
|
Default: `None`
|
||||||
|
|
||||||
A dictionary of HTTP proxies to use for outbound requests originating from NetBox (e.g. when sending webhook requests). Proxies should be specified by schema (HTTP and HTTPS) as per the [Python requests library documentation](https://requests.readthedocs.io/en/latest/user/advanced/#proxies). For example:
|
A dictionary of HTTP proxies to use for outbound requests originating from NetBox (e.g. when sending webhook requests). Proxies should be specified by schema (HTTP and HTTPS) as per the [Python requests library documentation](https://requests.readthedocs.io/en/latest/user/advanced/#proxies). For example:
|
||||||
|
|
||||||
@ -75,6 +85,8 @@ HTTP_PROXIES = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If more flexibility is needed in determining which proxy to use for a given request, consider implementing one or more custom proxy routers via the [`PROXY_ROUTERS`](#proxy_routers) parameter.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## INTERNAL_IPS
|
## INTERNAL_IPS
|
||||||
@ -83,17 +95,15 @@ 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
|
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
|
example, the debugging toolbar will be viewable only when a client is accessing NetBox from one of the listed IP
|
||||||
addresses (and [`DEBUG`](./development.md#debug) is true).
|
addresses (and [`DEBUG`](./development.md#debug) is `True`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ISOLATED_DEPLOYMENT
|
## ISOLATED_DEPLOYMENT
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
Default: `False`
|
||||||
|
|
||||||
Default: False
|
Set this configuration parameter to `True` for NetBox deployments which do not have Internet access. This will disable miscellaneous functionality which depends on access to the Internet.
|
||||||
|
|
||||||
Set this configuration parameter to True for NetBox deployments which do not have Internet access. This will disable miscellaneous functionality which depends on access to the Internet.
|
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
If Internet access is available via a proxy, set [`HTTP_PROXIES`](#http_proxies) instead.
|
If Internet access is available via a proxy, set [`HTTP_PROXIES`](#http_proxies) instead.
|
||||||
@ -104,7 +114,7 @@ Set this configuration parameter to True for NetBox deployments which do not hav
|
|||||||
|
|
||||||
Default: `{}`
|
Default: `{}`
|
||||||
|
|
||||||
A dictionary of custom jinja2 filters with the key being the filter name and the value being a callable. For more information see the [Jinja2 documentation](https://jinja.palletsprojects.com/en/3.1.x/api/#custom-filters). For example:
|
A dictionary of custom Jinja2 filters with the key being the filter name and the value being a callable. For more information see the [Jinja2 documentation](https://jinja.palletsprojects.com/en/3.1.x/api/#custom-filters). For example:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def uppercase(x):
|
def uppercase(x):
|
||||||
@ -148,6 +158,7 @@ LOGGING = {
|
|||||||
* `netbox.<app>.<model>` - Generic form for model-specific log messages
|
* `netbox.<app>.<model>` - Generic form for model-specific log messages
|
||||||
* `netbox.auth.*` - Authentication events
|
* `netbox.auth.*` - Authentication events
|
||||||
* `netbox.api.views.*` - Views which handle business logic for the REST API
|
* `netbox.api.views.*` - Views which handle business logic for the REST API
|
||||||
|
* `netbox.event_rules` - Event rules
|
||||||
* `netbox.reports.*` - Report execution (`module.name`)
|
* `netbox.reports.*` - Report execution (`module.name`)
|
||||||
* `netbox.scripts.*` - Custom script execution (`module.name`)
|
* `netbox.scripts.*` - Custom script execution (`module.name`)
|
||||||
* `netbox.views.*` - Views which handle business logic for the web UI
|
* `netbox.views.*` - Views which handle business logic for the web UI
|
||||||
@ -162,6 +173,18 @@ The file path to the location where media files (such as image attachments) are
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## PROXY_ROUTERS
|
||||||
|
|
||||||
|
!!! info "This parameter was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
Default: `["utilities.proxy.DefaultProxyRouter"]`
|
||||||
|
|
||||||
|
A list of Python classes responsible for determining which proxy server(s) to use for outbound HTTP requests. Each item in the list can be the class itself or the dotted path to the class.
|
||||||
|
|
||||||
|
The `route()` method on each class must return a dictionary of candidate proxies arranged by protocol (e.g. `http` and/or `https`), or None if no viable proxy can be determined. The default class, `DefaultProxyRouter`, simply returns the content of [`HTTP_PROXIES`](#http_proxies).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## REPORTS_ROOT
|
## REPORTS_ROOT
|
||||||
|
|
||||||
Default: `$INSTALL_ROOT/netbox/reports/`
|
Default: `$INSTALL_ROOT/netbox/reports/`
|
||||||
@ -186,29 +209,52 @@ The dotted path to the desired search backend class. `CachedValueSearchBackend`
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## STORAGE_BACKEND
|
## STORAGES
|
||||||
|
|
||||||
Default: None (local storage)
|
The backend storage engine for handling uploaded files such as [image attachments](../models/extras/imageattachment.md) and [custom scripts](../customization/custom-scripts.md). NetBox integrates with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) and [`django-storage-swift`](https://github.com/dennisv/django-storage-swift) libraries, which provide backends for several popular file storage services. If not configured, local filesystem storage will be used.
|
||||||
|
|
||||||
The backend storage engine for handling uploaded files (e.g. image attachments). NetBox supports integration with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) and [`django-storage-swift`](https://github.com/dennisv/django-storage-swift) packages, which provide backends for several popular file storage services. If not configured, local filesystem storage will be used.
|
By default, the following configuration is used:
|
||||||
|
|
||||||
The configuration parameters for the specified storage backend are defined under the `STORAGE_CONFIG` setting.
|
```python
|
||||||
|
STORAGES = {
|
||||||
|
"default": {
|
||||||
|
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
||||||
|
},
|
||||||
|
"staticfiles": {
|
||||||
|
"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"BACKEND": "extras.storage.ScriptFileSystemStorage",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
---
|
Within the `STORAGES` dictionary, `"default"` is used for image uploads, "staticfiles" is for static files and `"scripts"` is used for custom scripts.
|
||||||
|
|
||||||
## STORAGE_CONFIG
|
If using a remote storage like S3, define the config as `STORAGES[key]["OPTIONS"]` for each storage item as needed. For example:
|
||||||
|
|
||||||
Default: Empty
|
```python
|
||||||
|
STORAGES = {
|
||||||
|
"scripts": {
|
||||||
|
"BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
|
||||||
|
"OPTIONS": {
|
||||||
|
'access_key': 'access key',
|
||||||
|
'secret_key': 'secret key',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
A dictionary of configuration parameters for the storage backend configured as `STORAGE_BACKEND`. The specific parameters to be used here are specific to each backend; see the documentation for your selected backend ([`django-storages`](https://django-storages.readthedocs.io/en/stable/) or [`django-storage-swift`](https://github.com/dennisv/django-storage-swift)) for more detail.
|
The specific configuration settings for each storage backend can be found in the [django-storages documentation](https://django-storages.readthedocs.io/en/latest/index.html).
|
||||||
|
|
||||||
If `STORAGE_BACKEND` is not defined, this setting will be ignored.
|
!!! note
|
||||||
|
Any keys defined in the `STORAGES` configuration parameter replace those in the default configuration. It is only necessary to define keys within the `STORAGES` for the specific backend(s) you wish to configure.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## TIME_ZONE
|
## TIME_ZONE
|
||||||
|
|
||||||
Default: UTC
|
Default: `"UTC"`
|
||||||
|
|
||||||
The time zone NetBox will use when dealing with dates and times. It is recommended to use UTC time unless you have a specific need to use a local time zone. Please see the [list of available time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
The time zone NetBox will use when dealing with dates and times. It is recommended to use UTC time unless you have a specific need to use a local time zone. Please see the [list of available time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
||||||
|
|
||||||
@ -216,6 +262,6 @@ The time zone NetBox will use when dealing with dates and times. It is recommend
|
|||||||
|
|
||||||
## TRANSLATION_ENABLED
|
## TRANSLATION_ENABLED
|
||||||
|
|
||||||
Default: True
|
Default: `True`
|
||||||
|
|
||||||
Enables language translation for the user interface. (This parameter maps to Django's [USE_I18N](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-USE_I18N) setting.)
|
Enables language translation for the user interface. (This parameter maps to Django's [USE_I18N](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-USE_I18N) setting.)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Custom links allow users to display arbitrary hyperlinks to external content within NetBox object views. These are helpful for cross-referencing related records in systems outside NetBox. For example, you might create a custom link on the device view which links to the current device in a Network Monitoring System (NMS).
|
Custom links allow users to display arbitrary hyperlinks to external content within NetBox object views. These are helpful for cross-referencing related records in systems outside NetBox. For example, you might create a custom link on the device view which links to the current device in a Network Monitoring System (NMS).
|
||||||
|
|
||||||
Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the NetBox item being viewed can be included in the link using [Jinja2 template code](https://jinja2docs.readthedocs.io/en/stable/) through the variable `object`, and custom fields through `object.cf`.
|
Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the NetBox item being viewed can be included in the link using [Jinja template code](https://jinja.palletsprojects.com/en/stable/) through the variable `object`, and custom fields through `object.cf`.
|
||||||
|
|
||||||
For example, you might define a link like this:
|
For example, you might define a link like this:
|
||||||
|
|
||||||
|
@ -140,6 +140,8 @@ The Script class provides two convenience methods for reading data from files:
|
|||||||
|
|
||||||
These two methods will load data in YAML or JSON format, respectively, from files within the local path (i.e. `SCRIPTS_ROOT`).
|
These two methods will load data in YAML or JSON format, respectively, from files within the local path (i.e. `SCRIPTS_ROOT`).
|
||||||
|
|
||||||
|
**Note:** These convenience methods are deprecated and will be removed in NetBox v4.4. These only work if running scripts within the local path, they will not work if using a storage other than ScriptFileSystemStorage.
|
||||||
|
|
||||||
## Logging
|
## Logging
|
||||||
|
|
||||||
The Script object provides a set of convenient functions for recording messages at different severity levels:
|
The Script object provides a set of convenient functions for recording messages at different severity levels:
|
||||||
@ -308,6 +310,7 @@ A particular object within NetBox. Each ObjectVar must specify a particular mode
|
|||||||
* `query_params` - A dictionary of query parameters to use when retrieving available options (optional)
|
* `query_params` - A dictionary of query parameters to use when retrieving available options (optional)
|
||||||
* `context` - A custom dictionary mapping template context variables to fields, used when rendering `<option>` elements within the dropdown menu (optional; see below)
|
* `context` - A custom dictionary mapping template context variables to fields, used when rendering `<option>` elements within the dropdown menu (optional; see below)
|
||||||
* `null_option` - A label representing a "null" or empty choice (optional)
|
* `null_option` - A label representing a "null" or empty choice (optional)
|
||||||
|
* `selector` - A boolean that, when True, includes an advanced object selection widget to assist the user in identifying the desired object (optional; False by default)
|
||||||
|
|
||||||
To limit the selections available within the list, additional query parameters can be passed as the `query_params` dictionary. For example, to show only devices with an "active" status:
|
To limit the selections available within the list, additional query parameters can be passed as the `query_params` dictionary. For example, to show only devices with an "active" status:
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ Height: {{ rack.u_height }}U
|
|||||||
To access custom fields of an object within a template, use the `cf` attribute. For example, `{{ obj.cf.color }}` will return the value (if any) for a custom field named `color` on `obj`.
|
To access custom fields of an object within a template, use the `cf` attribute. For example, `{{ obj.cf.color }}` will return the value (if any) for a custom field named `color` on `obj`.
|
||||||
|
|
||||||
If you need to use the config context data in an export template, you'll should use the function `get_config_context` to get all the config context data. For example:
|
If you need to use the config context data in an export template, you'll should use the function `get_config_context` to get all the config context data. For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
{% for server in queryset %}
|
{% for server in queryset %}
|
||||||
{% set data = server.get_config_context() %}
|
{% set data = server.get_config_context() %}
|
||||||
|
@ -8,7 +8,7 @@ Each model should define, at a minimum:
|
|||||||
|
|
||||||
* A `Meta` class specifying a deterministic ordering (if ordered by fields other than the primary ID)
|
* A `Meta` class specifying a deterministic ordering (if ordered by fields other than the primary ID)
|
||||||
* A `__str__()` method returning a user-friendly string representation of the instance
|
* A `__str__()` method returning a user-friendly string representation of the instance
|
||||||
* A `get_absolute_url()` method returning an instance's direct URL (using `reverse()`)
|
* A `get_absolute_url()` method if necessary; a standard version of the method is defined in the `NetBoxFeatureSet` base class, but you will need to provide your own (returning an instance's direct URL using `reverse()`) if not subclassing that base class
|
||||||
|
|
||||||
## 2. Define field choices
|
## 2. Define field choices
|
||||||
|
|
||||||
@ -76,9 +76,13 @@ Create the following for each model:
|
|||||||
|
|
||||||
## 13. GraphQL API components
|
## 13. GraphQL API components
|
||||||
|
|
||||||
Create a GraphQL object type for the model in `graphql/types.py` by subclassing the appropriate class from `netbox.graphql.types`.
|
Create the following for each model:
|
||||||
|
|
||||||
Also extend the schema class defined in `graphql/schema.py` with the individual object and object list fields per the established convention.
|
* GraphQL object type for the model in `graphql/types.py` (subclass the appropriate class from `netbox.graphql.types`)
|
||||||
|
* Add a GraphQL filter for the model in `graphql/filters.py`
|
||||||
|
* Extend the query class for the app in `graphql/schema.py` with the individual object and object list fields
|
||||||
|
|
||||||
|
**Note:** GraphQL unit tests may fail citing null values on a non-nullable field if related objects are prefetched. You may need to fix this by setting the type annotation to be `= strawberry_django.field(select_related=["foo"])` or similar.
|
||||||
|
|
||||||
## 14. Add tests
|
## 14. Add tests
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ Below is a list of tasks to consider when adding a new field to a core model.
|
|||||||
|
|
||||||
Add the field to the model, taking care to address any of the following conditions.
|
Add the field to the model, taking care to address any of the following conditions.
|
||||||
|
|
||||||
* When adding a GenericForeignKey field, also add an index under `Meta` for its two concrete fields. For example:
|
* When adding a GenericForeignKey field, you may need add an index under `Meta` for its two concrete fields. (This is required only for non-unique GFK relationships, as the unique constraint introduces its own index.) For example:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -37,16 +37,12 @@ CHANGELOG.md CONTRIBUTING.md LICENSE.txt netbox README.md scri
|
|||||||
|
|
||||||
### 2. Create a New Branch
|
### 2. Create a New Branch
|
||||||
|
|
||||||
The NetBox project utilizes three persistent git branches to track work:
|
The NetBox project utilizes two persistent git branches to track work:
|
||||||
|
|
||||||
* `master` - Serves as a snapshot of the current stable release
|
* `main` - All development on the upcoming stable (patch) release occurs here. Releases are published from this branch.
|
||||||
* `develop` - All development on the upcoming stable (patch) release occurs here
|
* `feature` - All work planned for the upcoming minor release is done here.
|
||||||
* `feature` - Tracks work on an upcoming minor release
|
|
||||||
|
|
||||||
Typically, you'll base pull requests off of the `develop` branch, or off of `feature` if you're working on a new major release. For example, assume that the current NetBox release is v3.3.5. Work applied to the `develop` branch will appear in v3.3.6, and work done under the `feature` branch will be included in the next minor release (v3.4.0).
|
Typically, you'll base pull requests off of the `main` branch, or off of `feature` if you're working on the upcoming minor or major release. For example, assume that the current NetBox release is v4.2.3. Work applied to the `main` branch will appear in v4.2.4, and work done under the `feature` branch will be included in the next minor release (v4.3.0).
|
||||||
|
|
||||||
!!! warning
|
|
||||||
**Never** merge pull requests into the `master` branch: This branch only ever merges pull requests from the `develop` branch, to effect a new release.
|
|
||||||
|
|
||||||
To create a new branch, first ensure that you've checked out the desired base branch, then run:
|
To create a new branch, first ensure that you've checked out the desired base branch, then run:
|
||||||
|
|
||||||
@ -119,7 +115,7 @@ You may also need to set up the yarn packages as shown in the [Web UI Developmen
|
|||||||
Within the `netbox/netbox/` directory, copy `configuration_example.py` to `configuration.py` and update the following parameters:
|
Within the `netbox/netbox/` directory, copy `configuration_example.py` to `configuration.py` and update the following parameters:
|
||||||
|
|
||||||
* `ALLOWED_HOSTS`: This can be set to `['*']` for development purposes
|
* `ALLOWED_HOSTS`: This can be set to `['*']` for development purposes
|
||||||
* `DATABASE`: PostgreSQL database connection parameters
|
* `DATABASES`: PostgreSQL database connection parameters
|
||||||
* `REDIS`: Redis configuration (if different from the defaults)
|
* `REDIS`: Redis configuration (if different from the defaults)
|
||||||
* `SECRET_KEY`: Set to a random string (use `generate_secret_key.py` in the parent directory to generate a suitable key)
|
* `SECRET_KEY`: Set to a random string (use `generate_secret_key.py` in the parent directory to generate a suitable key)
|
||||||
* `DEBUG`: Set to `True`
|
* `DEBUG`: Set to `True`
|
||||||
@ -151,7 +147,7 @@ For UI development you will need to review the [Web UI Development Guide](web-ui
|
|||||||
|
|
||||||
## Populating Demo Data
|
## Populating Demo Data
|
||||||
|
|
||||||
Once you have your development environment up and running, it might be helpful to populate some "dummy" data to make interacting with the UI and APIs more convenient. Check out the [netbox-demo-data](https://github.com/netbox-community/netbox-demo-data) repo on GitHub, which houses a collection of sample data that can be easily imported to any new NetBox deployment. (This sample data is used to populate the public demo instance at <https://demo.netbox.dev>.)
|
Once you have your development environment up and running, it might be helpful to populate some "dummy" data to make interacting with the UI and APIs more convenient. Check out the [netbox-demo-data](https://github.com/netbox-community/netbox-demo-data) repo on GitHub, which houses a collection of sample data that can be easily imported to any new NetBox deployment. This sample data is used to populate the [public demo instance](https://demo.netbox.dev).
|
||||||
|
|
||||||
The demo data is provided in JSON format and loaded into an empty database using Django's `loaddata` management command. Consult the demo data repo's `README` file for complete instructions on populating the data.
|
The demo data is provided in JSON format and loaded into an empty database using Django's `loaddata` management command. Consult the demo data repo's `README` file for complete instructions on populating the data.
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ Fast-forward
|
|||||||
```
|
```
|
||||||
|
|
||||||
!!! warning "Avoid Merging Remote Branches"
|
!!! warning "Avoid Merging Remote Branches"
|
||||||
You generally want to avoid merging branches that exist on the remote (upstream) repository, such as `develop` and `feature`: Merges into these branches should be done via a pull request on GitHub. Only merge branches when it is necessary to consolidate work you've done locally.
|
You generally want to avoid merging branches that exist on the remote (upstream) repository, namely `main` and `feature`: Merges into these branches should be done via a pull request on GitHub. Only merge branches when it is necessary to consolidate work you've done locally.
|
||||||
|
|
||||||
### Show Pending Changes
|
### Show Pending Changes
|
||||||
|
|
||||||
@ -196,7 +196,7 @@ index 93e125079..4344fb514 100644
|
|||||||
+and here too
|
+and here too
|
||||||
+
|
+
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
|
<img src="https://raw.githubusercontent.com/netbox-community/netbox/main/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
|
||||||
</div>
|
</div>
|
||||||
diff --git a/foo.py b/foo.py
|
diff --git a/foo.py b/foo.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
|
@ -8,11 +8,10 @@ NetBox and many of its related projects are maintained on [GitHub](https://githu
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
There are three permanent branches in the repository:
|
There are two permanent branches in the repository:
|
||||||
|
|
||||||
* `master` - The current stable release. Individual changes should never be pushed directly to this branch, but rather merged from `develop`.
|
* `main` - Active development for the upcoming patch release. Pull requests will typically be based on this branch unless they introduce breaking changes that must be deferred until the next minor release.
|
||||||
* `develop` - Active development for the upcoming patch release. Pull requests will typically be based on this branch unless they introduce breaking changes that must be deferred until the next minor release.
|
* `feature` - New feature work to be introduced in the next minor release (e.g. from v4.2 to v4.3).
|
||||||
* `feature` - New feature work to be introduced in the next minor release (e.g. from v3.3 to v3.4).
|
|
||||||
|
|
||||||
NetBox components are arranged into Django apps. Each app holds the models, views, and other resources relevant to a particular function:
|
NetBox components are arranged into Django apps. Each app holds the models, views, and other resources relevant to a particular function:
|
||||||
|
|
||||||
@ -57,4 +56,4 @@ NetBox follows the [benevolent dictator](http://oss-watch.ac.uk/resources/benevo
|
|||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
|
|
||||||
The entire NetBox project is licensed as open source under the [Apache 2.0 license](https://github.com/netbox-community/netbox/blob/master/LICENSE.txt). This is a very permissive license which allows unlimited redistribution of all code within the project. Note that all submissions to the project are subject to the same license.
|
The entire NetBox project is licensed as open source under the [Apache 2.0 license](https://github.com/netbox-community/netbox/blob/main/LICENSE.txt). This is a very permissive license which allows unlimited redistribution of all code within the project. Note that all submissions to the project are subject to the same license.
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
# Release Checklist
|
# Release Checklist
|
||||||
|
|
||||||
This documentation describes the process of packaging and publishing a new NetBox release. There are three types of release:
|
This documentation describes the process of packaging and publishing a new NetBox release. There are three types of releases:
|
||||||
|
|
||||||
* Major release (e.g. v3.7.8 to v4.0.0)
|
* Major release (e.g. v3.7.8 to v4.0.0)
|
||||||
* Minor release (e.g. v4.0.10 to v4.1.0)
|
* Minor release (e.g. v4.0.10 to v4.1.0)
|
||||||
* Patch release (e.g. v4.1.0 to v4.1.1)
|
* Patch release (e.g. v4.1.0 to v4.1.1)
|
||||||
|
|
||||||
While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
While major releases generally introduce some very substantial changes to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
||||||
|
|
||||||
|
For patch releases (e.g. upgrading from v4.2.2 to v4.2.3), begin at the [patch releases](#patch-releases) heading below. For minor or major releases, complete the entire checklist.
|
||||||
|
|
||||||
## Minor Version Releases
|
## Minor Version Releases
|
||||||
|
|
||||||
@ -29,6 +31,31 @@ Close the [release milestone](https://github.com/netbox-community/netbox/milesto
|
|||||||
|
|
||||||
Check that a link to the release notes for the new version is present in the navigation menu (defined in `mkdocs.yml`), and that a summary of all major new features has been added to `docs/index.md`.
|
Check that a link to the release notes for the new version is present in the navigation menu (defined in `mkdocs.yml`), and that a summary of all major new features has been added to `docs/index.md`.
|
||||||
|
|
||||||
|
### Update the Dependency Requirements Matrix
|
||||||
|
|
||||||
|
For every minor release, update the dependency requirements matrix in `docs/installation/upgrading.md` ("All versions") to reflect the supported versions of Python, PostgreSQL, and Redis:
|
||||||
|
|
||||||
|
1. Add a new row with the supported dependency versions.
|
||||||
|
2. Include a documentation link using the release tag format: `https://github.com/netbox-community/netbox/blob/v4.2.0/docs/installation/index.md`
|
||||||
|
3. Bold any version changes for clarity.
|
||||||
|
|
||||||
|
**Example Update:**
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
| NetBox Version | Python min | Python max | PostgreSQL min | Redis min | Documentation |
|
||||||
|
|:--------------:|:----------:|:----------:|:--------------:|:---------:|:-------------------------------------------------------------------------------------------------:|
|
||||||
|
| 4.2 | 3.10 | 3.12 | **13** | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v4.2.0/docs/installation/index.md) |
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update System Requirements
|
||||||
|
|
||||||
|
If a new Django release is adopted or other major dependencies (Python, PostgreSQL, Redis) change:
|
||||||
|
|
||||||
|
* Update the installation guide (`docs/installation/index.md`) with the new minimum versions.
|
||||||
|
* Update the upgrade guide (`docs/installation/upgrading.md`) for the current version accordingly.
|
||||||
|
* Update the minimum PostgreSQL version in the programming error template (`netbox/templates/exceptions/programming_error.html`).
|
||||||
|
* Update the minimum and supported Python versions in the project metadata file (`pyproject.toml`)
|
||||||
|
|
||||||
### Manually Perform a New Install
|
### Manually Perform a New Install
|
||||||
|
|
||||||
Start the documentation server and navigate to the current version of the installation docs:
|
Start the documentation server and navigate to the current version of the installation docs:
|
||||||
@ -37,15 +64,25 @@ Start the documentation server and navigate to the current version of the instal
|
|||||||
mkdocs serve
|
mkdocs serve
|
||||||
```
|
```
|
||||||
|
|
||||||
Follow these instructions to perform a new installation of NetBox in a temporary environment. This process must not be automated: The goal of this step is to catch any errors or omissions in the documentation, and ensure that it is kept up-to-date for each release. Make any necessary changes to the documentation before proceeding with the release.
|
Follow these instructions to perform a new installation of NetBox in a temporary environment. This process must not be automated: The goal of this step is to catch any errors or omissions in the documentation and ensure that it is kept up to date for each release. Make any necessary changes to the documentation before proceeding with the release.
|
||||||
|
|
||||||
### Test Upgrade Paths
|
### Test Upgrade Paths
|
||||||
|
|
||||||
Upgrading from a previous version typically involves database migrations, which must work without errors. Supported upgrade paths include from one minor version to another within the same major version (i.e. 4.0 to 4.1), as well as from the latest patch version of the previous minor version (i.e. 3.7 to 4.0 or to 4.1). Prior to release, test all these supported paths by loading demo data from the source version and performing a `./manage.py migrate`.
|
Upgrading from a previous version typically involves database migrations, which must work without errors.
|
||||||
|
Test the following supported upgrade paths:
|
||||||
|
|
||||||
### Merge the Release Branch
|
- From one minor version to another within the same major version (e.g. 4.0 to 4.1).
|
||||||
|
- From the latest patch version of the previous minor version (e.g. 3.7 to 4.0 or 4.1).
|
||||||
|
|
||||||
Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below.
|
Prior to release, test all these supported paths by loading demo data from the source version and performing:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
./manage.py migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Merge the `feature` Branch
|
||||||
|
|
||||||
|
Submit a pull request to merge the `feature` branch into the `main` branch in preparation for its release. Once it has been merged, continue with the section for the patch releases below.
|
||||||
|
|
||||||
### Rebuild Demo Data (After Release)
|
### Rebuild Demo Data (After Release)
|
||||||
|
|
||||||
@ -55,6 +92,15 @@ After the release of a new minor version, generate a new demo data snapshot comp
|
|||||||
|
|
||||||
## Patch Releases
|
## Patch Releases
|
||||||
|
|
||||||
|
### Create a Release Branch
|
||||||
|
|
||||||
|
Begin by creating a new branch (based on `main`) to effect the release. This will comprise the changes listed below.
|
||||||
|
|
||||||
|
```
|
||||||
|
git checkout main
|
||||||
|
git checkout -B release-vX.Y.Z
|
||||||
|
```
|
||||||
|
|
||||||
### Notify netbox-docker Project of Any Relevant Changes
|
### Notify netbox-docker Project of Any Relevant Changes
|
||||||
|
|
||||||
Notify the [`netbox-docker`](https://github.com/netbox-community/netbox-docker) maintainers (in **#netbox-docker**) of any changes that may be relevant to their build process, including:
|
Notify the [`netbox-docker`](https://github.com/netbox-community/netbox-docker) maintainers (in **#netbox-docker**) of any changes that may be relevant to their build process, including:
|
||||||
@ -76,7 +122,20 @@ In cases where upgrading a dependency to its most recent release is breaking, it
|
|||||||
|
|
||||||
### Update UI Dependencies
|
### Update UI Dependencies
|
||||||
|
|
||||||
Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution.
|
Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn bundle
|
||||||
|
yarn run v1.22.19
|
||||||
|
$ node bundle.js
|
||||||
|
✅ Bundled source file 'styles/external.scss' to 'netbox-external.css'
|
||||||
|
✅ Bundled source file 'styles/netbox.scss' to 'netbox.css'
|
||||||
|
✅ Bundled source file 'styles/svg/rack_elevation.scss' to 'rack_elevation.css'
|
||||||
|
✅ Bundled source file 'styles/svg/cable_trace.scss' to 'cable_trace.css'
|
||||||
|
✅ Bundled source file 'index.ts' to 'netbox.js'
|
||||||
|
✅ Copied graphiql files
|
||||||
|
Done in 1.00s.
|
||||||
|
```
|
||||||
|
|
||||||
### Rebuild the Device Type Definition Schema
|
### Rebuild the Device Type Definition Schema
|
||||||
|
|
||||||
@ -93,7 +152,7 @@ This will automatically update the schema file at `contrib/generated_schema.json
|
|||||||
Updated language translations should be pulled from [Transifex](https://app.transifex.com/netbox-community/netbox/dashboard/) and re-compiled for each new release. First, retrieve any updated translation files using the Transifex CLI client:
|
Updated language translations should be pulled from [Transifex](https://app.transifex.com/netbox-community/netbox/dashboard/) and re-compiled for each new release. First, retrieve any updated translation files using the Transifex CLI client:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
tx pull
|
tx pull --force
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, compile these portable (`.po`) files for use in the application:
|
Then, compile these portable (`.po`) files for use in the application:
|
||||||
@ -107,41 +166,30 @@ Then, compile these portable (`.po`) files for use in the application:
|
|||||||
|
|
||||||
### Update Version and Changelog
|
### Update Version and Changelog
|
||||||
|
|
||||||
* Update the version and published date in `release.yaml` with the current version & date. Add a designation (e.g.g `beta1`) if applicable.
|
* Update the version number and published date in `netbox/release.yaml`. Add or remove the designation (e.g. `beta1`) if applicable.
|
||||||
|
* Copy the version number from `release.yaml` to `pyproject.toml` in the project root.
|
||||||
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
||||||
* Replace the "FUTURE" placeholder in the release notes with the current date.
|
* Add a section for this release at the top of the changelog page for the minor version (e.g. `docs/release-notes/version-4.2.md`) listing all relevant changes made in this release.
|
||||||
|
|
||||||
Commit these changes to the `develop` branch and push upstream.
|
!!! tip
|
||||||
|
Put yourself in the shoes of the user when recording change notes. Focus on the effect that each change has for the end user, rather than the specific bits of code that were modified in a PR. Ensure that each message conveys meaning absent context of the initial feature request or bug report. Remember to include keywords or phrases (such as exception names) that can be easily searched.
|
||||||
### Verify CI Build Status
|
|
||||||
|
|
||||||
Ensure that continuous integration testing on the `develop` branch is completing successfully. If it fails, take action to correct the failure before proceeding with the release.
|
|
||||||
|
|
||||||
### Submit a Pull Request
|
### Submit a Pull Request
|
||||||
|
|
||||||
Submit a pull request titled **"Release vX.Y.Z"** to merge the `develop` branch into `master`. Copy the documented release notes into the pull request's body.
|
Commit the above changes and submit a pull request titled **"Release vX.Y.Z"** to merge the current release branch (e.g. `release-vX.Y.Z`) into `main`. Copy the documented release notes into the pull request's body.
|
||||||
|
|
||||||
Once CI has completed on the PR, merge it. This effects a new release in the `master` branch.
|
Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
To ensure a streamlined review process, the pull request for a release **must** be limited to the changes outlined in this document. A release PR must never include functional changes to the application: Any unrelated "cleanup" needs to be captured in a separate PR prior to the release being shipped.
|
||||||
|
|
||||||
### Create a New Release
|
### Create a New Release
|
||||||
|
|
||||||
Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters.
|
Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters.
|
||||||
|
|
||||||
* **Tag:** Current version (e.g. `v3.3.1`)
|
* **Tag:** Current version (e.g. `v4.2.1`)
|
||||||
* **Target:** `master`
|
* **Target:** `main`
|
||||||
* **Title:** Version and date (e.g. `v3.3.1 - 2022-08-25`)
|
* **Title:** Version and date (e.g. `v4.2.1 - 2025-01-17`)
|
||||||
* **Description:** Copy from the pull request body, then promote the `###` headers to `##` ones
|
* **Description:** Copy from the pull request body, then promote the `###` headers to `##` ones
|
||||||
|
|
||||||
Once created, the release will become available for users to install.
|
Once created, the release will become available for users to install.
|
||||||
|
|
||||||
### Update the Public Documentation
|
|
||||||
|
|
||||||
After a release has been published, the public NetBox documentation needs to be updated. This is accomplished by running two actions on the [netboxlabs-docs](https://github.com/netboxlabs/netboxlabs-docs) repository.
|
|
||||||
|
|
||||||
First, run the `build-site` action, by navigating to Actions > build-site > Run workflow. This process compiles the documentation along with an overlay for integration with the documentation portal at <https://netboxlabs.com/docs>. The job should take about two minutes.
|
|
||||||
|
|
||||||
Once the documentation files have been compiled, they must be published by running the `deploy-kinsta` action. Select the desired deployment environment (staging or production) and specify `latest` as the deploy tag.
|
|
||||||
|
|
||||||
Clear the CDN cache from the [Kinsta](https://my.kinsta.com/) portal. Navigate to _Sites_ / _NetBox Labs_ / _Live_, select _Cache_ in the left-nav, click the _Clear Cache_ button, and confirm the clear operation.
|
|
||||||
|
|
||||||
Finally, verify that the documentation at <https://netboxlabs.com/docs/netbox/en/stable/> has been updated.
|
|
||||||
|
@ -22,7 +22,7 @@ NetBox generally follows the [Django style guide](https://docs.djangoproject.com
|
|||||||
|
|
||||||
### Linting
|
### Linting
|
||||||
|
|
||||||
The [ruff](https://docs.astral.sh/ruff/) linter is used to enforce code style. A [pre-commit hook](./getting-started.md#3-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `ruff` manually, run:
|
The [ruff](https://docs.astral.sh/ruff/) linter is used to enforce code style, and is run automatically by [pre-commit](./getting-started.md#5-install-pre-commit). To invoke `ruff` manually, run:
|
||||||
|
|
||||||
```
|
```
|
||||||
ruff check netbox/
|
ruff check netbox/
|
||||||
|
@ -14,10 +14,10 @@ To update the English `.po` file from which all translations are derived, use th
|
|||||||
./manage.py makemessages -l en -i "project-static/*"
|
./manage.py makemessages -l en -i "project-static/*"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, commit the change and push to the `develop` branch on GitHub. Any new strings will appear for translation on Transifex automatically.
|
Then, commit the change and push to the `main` branch on GitHub. Any new strings will appear for translation on Transifex automatically.
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
It is typically not necessary to update source strings manually, as this is done nightly by a [GitHub action](https://github.com/netbox-community/netbox/blob/develop/.github/workflows/update-translation-strings.yml).
|
It is typically not necessary to update source strings manually, as this is done nightly by a [GitHub action](https://github.com/netbox-community/netbox/blob/main/.github/workflows/update-translation-strings.yml).
|
||||||
|
|
||||||
## Updating Translated Strings
|
## Updating Translated Strings
|
||||||
|
|
||||||
@ -30,13 +30,13 @@ To download translated strings automatically, you'll need to:
|
|||||||
1. Install the [Transifex CLI client](https://github.com/transifex/cli)
|
1. Install the [Transifex CLI client](https://github.com/transifex/cli)
|
||||||
2. Generate a [Transifex API token](https://app.transifex.com/user/settings/api/)
|
2. Generate a [Transifex API token](https://app.transifex.com/user/settings/api/)
|
||||||
|
|
||||||
Once you have the client set up, run the following command:
|
Once you have the client set up, run the following command from the project root (e.g. `/opt/netbox/`):
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
TX_TOKEN=$TOKEN tx pull
|
TX_TOKEN=$TOKEN tx pull --force
|
||||||
```
|
```
|
||||||
|
|
||||||
This will download all portable (`.po`) translation files from Transifex, updating them locally as needed.
|
This will download all portable (`.po`) translation files from Transifex, updating them locally as needed. (The `--force` argument instructs the client to disregard the timestamps of local translation files.)
|
||||||
|
|
||||||
Once retrieved, the updated strings need to be compiled into new `.mo` files so they can be used by the application. Run Django's [`compilemessages`](https://docs.djangoproject.com/en/stable/ref/django-admin/#django-admin-compilemessages) management command to compile them:
|
Once retrieved, the updated strings need to be compiled into new `.mo` files so they can be used by the application. Run Django's [`compilemessages`](https://docs.djangoproject.com/en/stable/ref/django-admin/#django-admin-compilemessages) management command to compile them:
|
||||||
|
|
||||||
@ -46,6 +46,9 @@ Once retrieved, the updated strings need to be compiled into new `.mo` files so
|
|||||||
|
|
||||||
Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.)
|
Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.)
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Run `git status` to check that both `*.mo` & `*.po` files have been updated as expected.
|
||||||
|
|
||||||
## Proposing New Languages
|
## Proposing New Languages
|
||||||
|
|
||||||
If you'd like to add support for a new language to NetBox, the first step is to [submit a GitHub issue](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+translation&projects=&template=translation.yaml) to capture the proposal. While we'd like to add as many languages as possible, we do need to limit the rate at which new languages are added. New languages will be selected according to community interest and the number of volunteers who sign up as translators.
|
If you'd like to add support for a new language to NetBox, the first step is to [submit a GitHub issue](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+translation&projects=&template=translation.yaml) to capture the proposal. While we'd like to add as many languages as possible, we do need to limit the rate at which new languages are added. New languages will be selected according to community interest and the number of volunteers who sign up as translators.
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
NetBox includes the ability to execute certain functions as background tasks. These include:
|
NetBox includes the ability to execute certain functions as background tasks. These include:
|
||||||
|
|
||||||
* [Report](../customization/reports.md) execution
|
|
||||||
* [Custom script](../customization/custom-scripts.md) execution
|
* [Custom script](../customization/custom-scripts.md) execution
|
||||||
* Synchronization of [remote data sources](../integrations/synchronized-data.md)
|
* Synchronization of [remote data sources](../integrations/synchronized-data.md)
|
||||||
|
* Housekeeping tasks
|
||||||
|
|
||||||
Additionally, NetBox plugins can enqueue their own background tasks. This is accomplished using the [Job model](../models/core/job.md). Background tasks are executed by the `rqworker` process(es).
|
Additionally, NetBox plugins can enqueue their own background tasks. This is accomplished using the [Job model](../models/core/job.md). Background tasks are executed by the `rqworker` process(es).
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ Regions will always be listed alphabetically by name within each parent, and the
|
|||||||
|
|
||||||
Like regions, site groups can be arranged in a recursive hierarchy for grouping sites. However, whereas regions are intended for geographic organization, site groups may be used for functional grouping. For example, you might classify sites as corporate, branch, or customer sites in addition to where they are physically located.
|
Like regions, site groups can be arranged in a recursive hierarchy for grouping sites. However, whereas regions are intended for geographic organization, site groups may be used for functional grouping. For example, you might classify sites as corporate, branch, or customer sites in addition to where they are physically located.
|
||||||
|
|
||||||
The use of both regions and site groups affords to independent but complementary dimensions across which sites can be organized.
|
The use of both regions and site groups affords two independent but complementary dimensions across which sites can be organized.
|
||||||
|
|
||||||
## Sites
|
## Sites
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Notifications
|
# Notifications
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
NetBox includes a system for generating user notifications, which can be marked as read or deleted by individual users. There are two built-in mechanisms for generating a notification:
|
NetBox includes a system for generating user notifications, which can be marked as read or deleted by individual users. There are two built-in mechanisms for generating a notification:
|
||||||
|
|
||||||
* A user can subscribe to an object. When that object is modified, a notification is created to inform the user of the change.
|
* A user can subscribe to an object. When that object is modified, a notification is created to inform the user of the change.
|
||||||
|
@ -9,7 +9,7 @@ NetBox is the leading solution for modeling and documenting modern networks. By
|
|||||||
|
|
||||||
## :material-server-network: Built for Networks
|
## :material-server-network: Built for Networks
|
||||||
|
|
||||||
Unlike general-purpose CMDBs, NetBox has curated a data model which caters specifically to the needs of network engineers and operators. It delivers a wide assortment of object types carefully crafted to best serve the needs of infrastructure design and documentation. These cover all facets of network technology, from IP address managements to cabling to overlays and more:
|
Unlike general-purpose configuration management databases (CMDBs), NetBox has curated a data model which caters specifically to the needs of network engineers and operators. It delivers a wide assortment of object types carefully crafted to best serve the needs of infrastructure design and documentation. These cover all facets of network technology, from IP address managements to cabling to overlays and more:
|
||||||
|
|
||||||
* Hierarchical regions, sites, and locations
|
* Hierarchical regions, sites, and locations
|
||||||
* Racks, devices, and device components
|
* Racks, devices, and device components
|
||||||
|
@ -2,39 +2,17 @@
|
|||||||
|
|
||||||
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).
|
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 "PostgreSQL 12 or later required"
|
!!! warning "PostgreSQL 14 or later required"
|
||||||
NetBox requires PostgreSQL 12 or later. Please note that MySQL and other relational databases are **not** supported.
|
NetBox requires PostgreSQL 14 or later. Please note that MySQL and other relational databases are **not** supported.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
=== "Ubuntu"
|
```no-highlight
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y postgresql
|
||||||
|
```
|
||||||
|
|
||||||
```no-highlight
|
Before continuing, verify that you have installed PostgreSQL 14 or later:
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y postgresql
|
|
||||||
```
|
|
||||||
|
|
||||||
=== "CentOS"
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo yum install -y postgresql-server
|
|
||||||
sudo postgresql-setup --initdb
|
|
||||||
```
|
|
||||||
|
|
||||||
CentOS configures ident host-based authentication for PostgreSQL by default. Because NetBox will need to authenticate using a username and password, modify `/var/lib/pgsql/data/pg_hba.conf` to support MD5 authentication by changing `ident` to `md5` for the lines below:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
host all all 127.0.0.1/32 md5
|
|
||||||
host all all ::1/128 md5
|
|
||||||
```
|
|
||||||
|
|
||||||
Once PostgreSQL has been installed, start the service and enable it to run at boot:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo systemctl enable --now postgresql
|
|
||||||
```
|
|
||||||
|
|
||||||
Before continuing, verify that you have installed PostgreSQL 12 or later:
|
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
psql -V
|
psql -V
|
||||||
@ -62,6 +40,9 @@ GRANT CREATE ON SCHEMA public TO netbox;
|
|||||||
!!! danger "Use a strong password"
|
!!! danger "Use a strong password"
|
||||||
**Do not use the password from the example.** Choose a strong, random password to ensure secure database authentication for your NetBox installation.
|
**Do not use the password from the example.** Choose a strong, random password to ensure secure database authentication for your NetBox installation.
|
||||||
|
|
||||||
|
!!! danger "Use UTF8 encoding"
|
||||||
|
Make sure that your database uses `UTF8` encoding (the default for new installations). Especially do not use `SQL_ASCII` encoding, as it can lead to unpredictable and unrecoverable errors. Enter `\l` to check your encoding.
|
||||||
|
|
||||||
Once complete, enter `\q` to exit the PostgreSQL shell.
|
Once complete, enter `\q` to exit the PostgreSQL shell.
|
||||||
|
|
||||||
## Verify Service Status
|
## Verify Service Status
|
||||||
|
@ -4,18 +4,9 @@
|
|||||||
|
|
||||||
[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).
|
[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
|
||||||
|
sudo apt install -y redis-server
|
||||||
```no-highlight
|
```
|
||||||
sudo apt install -y redis-server
|
|
||||||
```
|
|
||||||
|
|
||||||
=== "CentOS"
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo yum install -y redis
|
|
||||||
sudo systemctl enable --now redis
|
|
||||||
```
|
|
||||||
|
|
||||||
Before continuing, verify that your installed version of Redis is at least v4.0:
|
Before continuing, verify that your installed version of Redis is at least v4.0:
|
||||||
|
|
||||||
|
@ -9,17 +9,11 @@ Begin by installing all system packages required by NetBox and its dependencies.
|
|||||||
!!! warning "Python 3.10 or later required"
|
!!! warning "Python 3.10 or later required"
|
||||||
NetBox supports Python 3.10, 3.11, and 3.12.
|
NetBox supports Python 3.10, 3.11, and 3.12.
|
||||||
|
|
||||||
=== "Ubuntu"
|
```no-highlight
|
||||||
|
sudo apt install -y python3 python3-pip python3-venv python3-dev \
|
||||||
```no-highlight
|
build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev \
|
||||||
sudo apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
|
libssl-dev zlib1g-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "CentOS"
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo yum install -y gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config
|
|
||||||
```
|
|
||||||
|
|
||||||
Before continuing, check that your installed Python version is at least 3.10:
|
Before continuing, check that your installed Python version is at least 3.10:
|
||||||
|
|
||||||
@ -29,7 +23,7 @@ python3 -V
|
|||||||
|
|
||||||
## Download NetBox
|
## Download NetBox
|
||||||
|
|
||||||
This documentation provides two options for installing NetBox: from a downloadable archive, or from the git repository. Installing from a package (option A below) requires manually fetching and extracting the archive for every future update, whereas installation via git (option B) allows for seamless upgrades by re-pulling the `master` branch.
|
This documentation provides two options for installing NetBox: from a downloadable archive, or from the git repository. Installing from a package (option A below) requires manually fetching and extracting the archive for every future update, whereas installation via git (option B) allows for seamless upgrades by checking out the latest release tag.
|
||||||
|
|
||||||
### Option A: Download a Release Archive
|
### Option A: Download a Release Archive
|
||||||
|
|
||||||
@ -55,28 +49,17 @@ cd /opt/netbox/
|
|||||||
|
|
||||||
If `git` is not already installed, install it:
|
If `git` is not already installed, install it:
|
||||||
|
|
||||||
=== "Ubuntu"
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo apt install -y git
|
|
||||||
```
|
|
||||||
|
|
||||||
=== "CentOS"
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo yum install -y git
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, clone the **master** branch of the NetBox GitHub repository into the current directory. (This branch always holds the current stable release.)
|
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
|
sudo apt install -y git
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! note
|
Next, clone the git repository:
|
||||||
The `git clone` command above utilizes a "shallow clone" to retrieve only the most recent commit. If you need to download the entire history, omit the `--depth 1` argument.
|
|
||||||
|
|
||||||
The `git clone` command should generate output similar to the following:
|
```no-highlight
|
||||||
|
sudo git clone https://github.com/netbox-community/netbox.git .
|
||||||
|
```
|
||||||
|
|
||||||
|
This command should generate output similar to the following:
|
||||||
|
|
||||||
```
|
```
|
||||||
Cloning into '.'...
|
Cloning into '.'...
|
||||||
@ -88,31 +71,24 @@ Receiving objects: 100% (996/996), 4.26 MiB | 9.81 MiB/s, done.
|
|||||||
Resolving deltas: 100% (148/148), done.
|
Resolving deltas: 100% (148/148), done.
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! note
|
Finally, check out the tag for the desired release. You can find these on our [releases page](https://github.com/netbox-community/netbox/releases). Replace `vX.Y.Z` with your selected release tag below.
|
||||||
Installation via git also allows you to easily try out different versions of NetBox. To check out a [specific NetBox release](https://github.com/netbox-community/netbox/releases), use the `git checkout` command with the desired release tag. For example, `git checkout v3.0.8`.
|
|
||||||
|
```
|
||||||
|
sudo git checkout vX.Y.Z
|
||||||
|
```
|
||||||
|
|
||||||
|
Using this installation method enables easy upgrades in the future by simply checking out the latest release tag.
|
||||||
|
|
||||||
## Create the NetBox System User
|
## Create the NetBox System User
|
||||||
|
|
||||||
Create a system user account named `netbox`. We'll configure the WSGI and HTTP services to run under this account. We'll also assign this user ownership of the media directory. This ensures that NetBox will be able to save uploaded files.
|
Create a system user account named `netbox`. We'll configure the WSGI and HTTP services to run under this account. We'll also assign this user ownership of the media directory. This ensures that NetBox will be able to save uploaded files.
|
||||||
|
|
||||||
=== "Ubuntu"
|
```
|
||||||
|
sudo adduser --system --group netbox
|
||||||
```
|
sudo chown --recursive netbox /opt/netbox/netbox/media/
|
||||||
sudo adduser --system --group netbox
|
sudo chown --recursive netbox /opt/netbox/netbox/reports/
|
||||||
sudo chown --recursive netbox /opt/netbox/netbox/media/
|
sudo chown --recursive netbox /opt/netbox/netbox/scripts/
|
||||||
sudo chown --recursive netbox /opt/netbox/netbox/reports/
|
```
|
||||||
sudo chown --recursive netbox /opt/netbox/netbox/scripts/
|
|
||||||
```
|
|
||||||
|
|
||||||
=== "CentOS"
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo groupadd --system netbox
|
|
||||||
sudo adduser --system -g netbox netbox
|
|
||||||
sudo chown --recursive netbox /opt/netbox/netbox/media/
|
|
||||||
sudo chown --recursive netbox /opt/netbox/netbox/reports/
|
|
||||||
sudo chown --recursive netbox /opt/netbox/netbox/scripts/
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
@ -126,13 +102,13 @@ sudo cp configuration_example.py configuration.py
|
|||||||
Open `configuration.py` with your preferred editor to begin configuring NetBox. NetBox offers [many configuration parameters](../configuration/index.md), but only the following four are required for new installations:
|
Open `configuration.py` with your preferred editor to begin configuring NetBox. NetBox offers [many configuration parameters](../configuration/index.md), but only the following four are required for new installations:
|
||||||
|
|
||||||
* `ALLOWED_HOSTS`
|
* `ALLOWED_HOSTS`
|
||||||
* `DATABASE`
|
* `DATABASES` (or `DATABASE`)
|
||||||
* `REDIS`
|
* `REDIS`
|
||||||
* `SECRET_KEY`
|
* `SECRET_KEY`
|
||||||
|
|
||||||
### ALLOWED_HOSTS
|
### ALLOWED_HOSTS
|
||||||
|
|
||||||
This is a list of the valid hostnames and IP addresses by which this server can be reached. You must specify at least one name or IP address. (Note that this does not restrict the locations from which NetBox may be accessed: It is merely for [HTTP host header validation](https://docs.djangoproject.com/en/3.0/topics/security/#host-headers-virtual-hosting).)
|
This is a list of the valid hostnames and IP addresses by which this server can be reached. You must specify at least one name or IP address. (Note that this does not restrict the locations from which NetBox may be accessed: It is merely for [HTTP host header validation](https://docs.djangoproject.com/en/stable/topics/security/#host-headers-virtual-hosting).)
|
||||||
|
|
||||||
```python
|
```python
|
||||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||||
@ -144,18 +120,22 @@ If you are not yet sure what the domain name and/or IP address of the NetBox ins
|
|||||||
ALLOWED_HOSTS = ['*']
|
ALLOWED_HOSTS = ['*']
|
||||||
```
|
```
|
||||||
|
|
||||||
### DATABASE
|
### DATABASES
|
||||||
|
|
||||||
This parameter holds the database configuration details. You must define the username and password used when you configured PostgreSQL. If the service is running on a remote host, update the `HOST` and `PORT` parameters accordingly. See the [configuration documentation](../configuration/required-parameters.md#database) for more detail on individual parameters.
|
This parameter holds the PostgreSQL database configuration details. The default database must be defined; additional databases may be defined as needed e.g. by plugins.
|
||||||
|
|
||||||
|
A username and password must be defined for the default database. If the service is running on a remote host, update the `HOST` and `PORT` parameters accordingly. See the [configuration documentation](../configuration/required-parameters.md#databases) for more detail on individual parameters.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
DATABASE = {
|
DATABASES = {
|
||||||
'NAME': 'netbox', # Database name
|
'default': {
|
||||||
'USER': 'netbox', # PostgreSQL username
|
'NAME': 'netbox', # Database name
|
||||||
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
'USER': 'netbox', # PostgreSQL username
|
||||||
'HOST': 'localhost', # Database server
|
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
||||||
'PORT': '', # Database port (leave blank for default)
|
'HOST': 'localhost', # Database server
|
||||||
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
|
'PORT': '', # Database port (leave blank for default)
|
||||||
|
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -205,7 +185,7 @@ All Python packages required by NetBox are listed in `requirements.txt` and will
|
|||||||
|
|
||||||
### Remote File Storage
|
### Remote File Storage
|
||||||
|
|
||||||
By default, NetBox will use the local filesystem to store uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired storage backend](../configuration/system.md#storage_backend) in `configuration.py`.
|
By default, NetBox will use the local filesystem to store uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired storage backend](../configuration/system.md#storages) in `configuration.py`.
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
sudo sh -c "echo 'django-storages' >> /opt/netbox/local_requirements.txt"
|
sudo sh -c "echo 'django-storages' >> /opt/netbox/local_requirements.txt"
|
||||||
@ -244,7 +224,7 @@ Once NetBox has been configured, we're ready to proceed with the actual installa
|
|||||||
|
|
||||||
* Create a Python virtual environment
|
* Create a Python virtual environment
|
||||||
* Installs all required Python packages
|
* Installs all required Python packages
|
||||||
* Run database schema migrations
|
* Run database schema migrations (skip with `--readonly`)
|
||||||
* Builds the documentation locally (for offline use)
|
* Builds the documentation locally (for offline use)
|
||||||
* Aggregate static resource files on disk
|
* Aggregate static resource files on disk
|
||||||
|
|
||||||
@ -264,6 +244,9 @@ sudo PYTHON=/usr/bin/python3.10 /opt/netbox/upgrade.sh
|
|||||||
!!! note
|
!!! note
|
||||||
Upon completion, the upgrade script may warn that no existing virtual environment was detected. As this is a new installation, this warning can be safely ignored.
|
Upon completion, the upgrade script may warn that no existing virtual environment was detected. As this is a new installation, this warning can be safely ignored.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
To run the script on a node connected to a database in read-only mode, include the `--readonly` parameter. This will skip the application of any database migrations.
|
||||||
|
|
||||||
## 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 (administrative account) to be able to log into NetBox. First, enter the Python virtual environment created by the upgrade script:
|
NetBox does not come with any predefined user accounts. You'll need to create a super user (administrative account) to be able to log into NetBox. First, enter the Python virtual environment created by the upgrade script:
|
||||||
@ -319,13 +302,6 @@ Quit the server with CONTROL-C.
|
|||||||
|
|
||||||
Next, connect to the name or IP of the server (as defined in `ALLOWED_HOSTS`) on port 8000; for example, <http://127.0.0.1:8000/>. You should be greeted with the NetBox home page. Try logging in using the username and password specified when creating a superuser.
|
Next, connect to the name or IP of the server (as defined in `ALLOWED_HOSTS`) on port 8000; for example, <http://127.0.0.1:8000/>. You should be greeted with the NetBox home page. Try logging in using the username and password specified when creating a superuser.
|
||||||
|
|
||||||
!!! note
|
|
||||||
By default RHEL based distros will likely block your testing attempts with firewalld. The development server port can be opened with `firewall-cmd` (add `--permanent` if you want the rule to survive server restarts):
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
firewall-cmd --zone=public --add-port=8000/tcp
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! danger "Not for production use"
|
!!! danger "Not for production use"
|
||||||
The development server is for development and testing purposes only. It is neither performant nor secure enough for production use. **Do not use it in production.**
|
The development server is for development and testing purposes only. It is neither performant nor secure enough for production use. **Do not use it in production.**
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ NetBox ships with a default configuration file for uWSGI. To use it, copy `/opt/
|
|||||||
sudo cp /opt/netbox/contrib/uwsgi.ini /opt/netbox/uwsgi.ini
|
sudo cp /opt/netbox/contrib/uwsgi.ini /opt/netbox/uwsgi.ini
|
||||||
```
|
```
|
||||||
|
|
||||||
While the provided configuration should suffice for most initial installations, you may wish to edit this file to change the bound IP address and/or port number, or to make performance-related adjustments. See [the uWSGI documentation](https://uwsgi-docs-additions.readthedocs.io/en/latest/Options.html) for the available configuration parameters and take a minute to review the [Things to know](https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html) page. Django also provides [additional documentation](https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/uwsgi/) on configuring uWSGI with a Django app.
|
While the provided configuration should suffice for most initial installations, you may wish to edit this file to change the bound IP address and/or port number, or to make performance-related adjustments. See [the uWSGI documentation](https://uwsgi-docs-additions.readthedocs.io/en/latest/Options.html) for the available configuration parameters and take a minute to review the [Things to know](https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html) page. Django also provides [additional documentation](https://docs.djangoproject.com/en/stable/howto/deployment/wsgi/uwsgi/) on configuring uWSGI with a Django app.
|
||||||
|
|
||||||
## systemd Setup
|
## systemd Setup
|
||||||
|
|
||||||
|
@ -6,18 +6,10 @@ This guide explains how to implement LDAP authentication using an external serve
|
|||||||
|
|
||||||
### Install System Packages
|
### Install System Packages
|
||||||
|
|
||||||
On Ubuntu:
|
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
sudo apt install -y libldap2-dev libsasl2-dev libssl-dev
|
sudo apt install -y libldap2-dev libsasl2-dev libssl-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
On CentOS:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
sudo yum install -y openldap-devel python3-devel
|
|
||||||
```
|
|
||||||
|
|
||||||
### Install django-auth-ldap
|
### Install django-auth-ldap
|
||||||
|
|
||||||
Activate the Python virtual environment and install the `django-auth-ldap` package using pip:
|
Activate the Python virtual environment and install the `django-auth-ldap` package using pip:
|
||||||
|
@ -1,11 +1,18 @@
|
|||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
!!! info "NetBox Cloud"
|
<div class="grid cards" markdown>
|
||||||
The instructions below are for installing NetBox as a standalone, self-hosted application. For a Cloud-delivered solution, check out [NetBox Cloud](https://netboxlabs.com/netbox-cloud/) by NetBox Labs.
|
|
||||||
|
|
||||||
The installation instructions provided here have been tested to work on Ubuntu 22.04 and CentOS 8.3. The particular commands needed to install dependencies on other distributions may vary significantly. Unfortunately, this is outside the control of the NetBox maintainers. Please consult your distribution's documentation for assistance with any errors.
|
- :material-clock-fast:{ .lg .middle } __Eager to Get Started?__
|
||||||
|
|
||||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/_y5JRiW_PLM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
---
|
||||||
|
|
||||||
|
Check out the [NetBox Cloud Free Plan](https://netboxlabs.com/free-netbox-cloud/)! Skip the installation process and grab your own NetBox Cloud instance, preconfigured and ready to go in minutes. Completely free!
|
||||||
|
|
||||||
|
[:octicons-arrow-right-24: Sign Up](https://signup.netboxlabs.com/)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
The installation instructions provided here have been tested to work on Ubuntu 22.04. The particular commands needed to install dependencies on other distributions may vary significantly. Unfortunately, this is outside the control of the NetBox maintainers. Please consult your distribution's documentation for assistance with any errors.
|
||||||
|
|
||||||
The following sections detail how to set up a new instance of NetBox:
|
The following sections detail how to set up a new instance of NetBox:
|
||||||
|
|
||||||
@ -21,7 +28,7 @@ The following sections detail how to set up a new instance of NetBox:
|
|||||||
| Dependency | Supported Versions |
|
| Dependency | Supported Versions |
|
||||||
|------------|--------------------|
|
|------------|--------------------|
|
||||||
| Python | 3.10, 3.11, 3.12 |
|
| Python | 3.10, 3.11, 3.12 |
|
||||||
| PostgreSQL | 12+ |
|
| PostgreSQL | 14+ |
|
||||||
| Redis | 4.0+ |
|
| Redis | 4.0+ |
|
||||||
|
|
||||||
Below is a simplified overview of the NetBox application stack for reference:
|
Below is a simplified overview of the NetBox application stack for reference:
|
||||||
|
@ -20,15 +20,54 @@ NetBox requires the following dependencies:
|
|||||||
| Dependency | Supported Versions |
|
| Dependency | Supported Versions |
|
||||||
|------------|--------------------|
|
|------------|--------------------|
|
||||||
| Python | 3.10, 3.11, 3.12 |
|
| Python | 3.10, 3.11, 3.12 |
|
||||||
| PostgreSQL | 12+ |
|
| PostgreSQL | 14+ |
|
||||||
| Redis | 4.0+ |
|
| Redis | 4.0+ |
|
||||||
|
|
||||||
|
### Version History
|
||||||
|
|
||||||
|
| NetBox Version | Python min | Python max | PostgreSQL min | Redis min | Documentation |
|
||||||
|
|:--------------:|:----------:|:----------:|:--------------:|:---------:|:-------------------------------------------------------------------------------------------------:|
|
||||||
|
| 4.3 | 3.10 | 3.12 | 14 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v4.3.0/docs/installation/index.md) |
|
||||||
|
| 4.2 | 3.10 | 3.12 | 13 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v4.2.0/docs/installation/index.md) |
|
||||||
|
| 4.1 | 3.10 | 3.12 | 12 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v4.1.0/docs/installation/index.md) |
|
||||||
|
| 4.0 | 3.10 | 3.12 | 12 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v4.0.0/docs/installation/index.md) |
|
||||||
|
| 3.7 | 3.8 | 3.11 | 12 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.7.0/docs/installation/index.md) |
|
||||||
|
| 3.6 | 3.8 | 3.11 | 12 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.6.0/docs/installation/index.md) |
|
||||||
|
| 3.5 | 3.8 | 3.10 | 11 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.5.0/docs/installation/index.md) |
|
||||||
|
| 3.4 | 3.8 | 3.10 | 11 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.4.0/docs/installation/index.md) |
|
||||||
|
| 3.3 | 3.8 | 3.10 | 10 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.3.0/docs/installation/index.md) |
|
||||||
|
| 3.2 | 3.8 | 3.10 | 10 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.2.0/docs/installation/index.md) |
|
||||||
|
| 3.1 | 3.7 | 3.9 | 10 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.1.0/docs/installation/index.md) |
|
||||||
|
| 3.0 | 3.7 | 3.9 | 9.6 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v3.0.0/docs/installation/index.md) |
|
||||||
|
| 2.11 | 3.6 | 3.9 | 9.6 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v2.11.0/docs/installation/index.md) |
|
||||||
|
| 2.10 | 3.6 | 3.8 | 9.6 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v2.10.0/docs/installation/index.md) |
|
||||||
|
| 2.9 | 3.6 | 3.8 | 9.5 | 4.0 | [Link](https://github.com/netbox-community/netbox/blob/v2.9.0/docs/installation/index.md) |
|
||||||
|
| 2.8 | 3.6 | 3.8 | 9.5 | 3.4 | [Link](https://github.com/netbox-community/netbox/blob/v2.8.0/docs/installation/index.md) |
|
||||||
|
| 2.7 | 3.5 | 3.7 | 9.4 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.7.0/docs/installation/index.md) |
|
||||||
|
| 2.6 | 3.5 | 3.7 | 9.4 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.6.0/docs/installation/index.md) |
|
||||||
|
| 2.5 | 3.5 | 3.7 | 9.4 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.5.0/docs/installation/index.md) |
|
||||||
|
| 2.4 | 3.4 | 3.7 | 9.4 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.4.0/docs/installation/index.md) |
|
||||||
|
| 2.3 | 2.7 | 3.6 | 9.4 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.3.0/docs/installation/postgresql.md) |
|
||||||
|
| 2.2 | 2.7 | 3.6 | 9.4 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.2.0/docs/installation/postgresql.md) |
|
||||||
|
| 2.1 | 2.7 | 3.6 | 9.3 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.1.0/docs/installation/postgresql.md) |
|
||||||
|
| 2.0 | 2.7 | 3.6 | 9.3 | - | [Link](https://github.com/netbox-community/netbox/blob/v2.0.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.9 | 2.7 | 3.5 | 9.2 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.9.0-r1/docs/installation/postgresql.md) |
|
||||||
|
| 1.8 | 2.7 | 3.5 | 9.2 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.8.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.7 | 2.7 | 3.5 | 9.2 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.7.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.6 | 2.7 | 3.5 | 9.2 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.6.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.5 | 2.7 | 3.5 | 9.2 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.5.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.4 | 2.7 | 3.5 | 9.1 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.4.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.3 | 2.7 | 3.5 | 9.1 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.3.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.2 | 2.7 | 3.5 | 9.1 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.2.0/docs/installation/postgresql.md) |
|
||||||
|
| 1.1 | 2.7 | 3.5 | 9.1 | - | [Link](https://github.com/netbox-community/netbox/blob/v1.1.0/docs/getting-started.md) |
|
||||||
|
| 1.0 | 2.7 | 3.5 | 9.1 | - | [Link](https://github.com/netbox-community/netbox/blob/1.0.0/docs/getting-started.md) |
|
||||||
|
|
||||||
## 3. Install the Latest Release
|
## 3. Install the Latest Release
|
||||||
|
|
||||||
As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by cloning the `master` branch of the git repository.
|
As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by checking out the latest production release from the git repository.
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
Use the same method as you used to install NetBox originally
|
Use the same method as you used to install NetBox originally.
|
||||||
|
|
||||||
If you are not sure how NetBox was installed originally, check with this command:
|
If you are not sure how NetBox was installed originally, check with this command:
|
||||||
|
|
||||||
@ -36,10 +75,7 @@ If you are not sure how NetBox was installed originally, check with this command
|
|||||||
ls -ld /opt/netbox /opt/netbox/.git
|
ls -ld /opt/netbox /opt/netbox/.git
|
||||||
```
|
```
|
||||||
|
|
||||||
If NetBox was installed from a release package, then `/opt/netbox` will be a
|
If NetBox was installed from a release package, then `/opt/netbox` will be a symlink pointing to the current version, and `/opt/netbox/.git` will not exist. If it was installed from git, then `/opt/netbox` and `/opt/netbox/.git` will both exist as normal directories.
|
||||||
symlink pointing to the current version, and `/opt/netbox/.git` will not
|
|
||||||
exist. If it was installed from git, then `/opt/netbox` and
|
|
||||||
`/opt/netbox/.git` will both exist as normal directories.
|
|
||||||
|
|
||||||
### Option A: Download a Release
|
### Option A: Download a Release
|
||||||
|
|
||||||
@ -84,20 +120,24 @@ If you followed the original installation guide to set up gunicorn, be sure to c
|
|||||||
sudo cp /opt/netbox-$OLDVER/gunicorn.py /opt/netbox/
|
sudo cp /opt/netbox-$OLDVER/gunicorn.py /opt/netbox/
|
||||||
```
|
```
|
||||||
|
|
||||||
### Option B: Clone the Git Repository
|
### Option B: Check Out a Git Release
|
||||||
|
|
||||||
This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most recent iteration of the master branch:
|
This guide assumes that NetBox is installed in `/opt/netbox`. First, determine the latest release either by visiting our [releases page](https://github.com/netbox-community/netbox/releases) or by running the following command:
|
||||||
|
|
||||||
```no-highlight
|
```
|
||||||
cd /opt/netbox
|
git ls-remote --tags https://github.com/netbox-community/netbox.git \
|
||||||
sudo git checkout master
|
| grep -o 'refs/tags/v[0-9]*\.[0-9]*\.[0-9]*$' \
|
||||||
sudo git pull origin master
|
| tail -n 1 \
|
||||||
|
| sed 's|refs/tags/||'
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! info "Checking out an older release"
|
Check out the desired release by specifying its tag. For example:
|
||||||
If you need to upgrade to an older version rather than the current stable release, you can check out any valid [git tag](https://github.com/netbox-community/netbox/tags), each of which represents a release. For example, to checkout the code for NetBox v2.11.11, do:
|
|
||||||
|
|
||||||
sudo git checkout v2.11.11
|
```
|
||||||
|
cd /opt/netbox && \
|
||||||
|
sudo git fetch --tags && \
|
||||||
|
sudo git checkout v4.2.7
|
||||||
|
```
|
||||||
|
|
||||||
## 4. Run the Upgrade Script
|
## 4. Run the Upgrade Script
|
||||||
|
|
||||||
@ -114,6 +154,9 @@ sudo ./upgrade.sh
|
|||||||
sudo PYTHON=/usr/bin/python3.10 ./upgrade.sh
|
sudo PYTHON=/usr/bin/python3.10 ./upgrade.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
To run the script on a node connected to a database in read-only mode, include the `--readonly` parameter. This will skip the application of any database migrations.
|
||||||
|
|
||||||
This script performs the following actions:
|
This script performs the following actions:
|
||||||
|
|
||||||
* Destroys and rebuilds the Python virtual environment
|
* Destroys and rebuilds the Python virtual environment
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# GraphQL API Overview
|
# GraphQL API Overview
|
||||||
|
|
||||||
NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by [Strawberry Django](https://strawberry-graphql.github.io/strawberry-django/).
|
NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by [Strawberry Django](https://strawberry.rocks/).
|
||||||
|
|
||||||
## Queries
|
## Queries
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ curl -H "Authorization: Token $TOKEN" \
|
|||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-H "Accept: application/json" \
|
-H "Accept: application/json" \
|
||||||
http://netbox/graphql/ \
|
http://netbox/graphql/ \
|
||||||
--data '{"query": "query {circuit_list(status:\"active\") {cid provider {name}}}"}'
|
--data '{"query": "query {circuit_list(filters:{status: STATUS_ACTIVE}) {cid provider {name}}}"}'
|
||||||
```
|
```
|
||||||
|
|
||||||
The response will include the requested data formatted as JSON:
|
The response will include the requested data formatted as JSON:
|
||||||
@ -47,23 +47,52 @@ NetBox provides both a singular and plural query field for each object type:
|
|||||||
|
|
||||||
For example, query `device(id:123)` to fetch a specific device (identified by its unique ID), and query `device_list` (with an optional set of filters) to fetch all devices.
|
For example, query `device(id:123)` to fetch a specific device (identified by its unique ID), and query `device_list` (with an optional set of filters) to fetch all devices.
|
||||||
|
|
||||||
For more detail on constructing GraphQL queries, see the [GraphQL queries documentation](https://graphql.org/learn/queries/). For filtering and lookup syntax, please refer to the [Strawberry Django documentation](https://strawberry-graphql.github.io/strawberry-django/guide/filters/).
|
For more detail on constructing GraphQL queries, see the [GraphQL queries documentation](https://graphql.org/learn/queries/). For filtering and lookup syntax, please refer to the [Strawberry Django documentation](https://strawberry.rocks/docs/django/guide/filters).
|
||||||
|
|
||||||
## Filtering
|
## Filtering
|
||||||
|
|
||||||
The GraphQL API employs the same filtering logic as the UI and REST API. Filters can be specified as key-value pairs within parentheses immediately following the query name. For example, the following will return only sites within the North Carolina region with a status of active:
|
!!! note "Changed in NetBox v4.3"
|
||||||
|
The filtering syntax fo the GraphQL API has changed substantially in NetBox v4.3.
|
||||||
|
|
||||||
|
Filters can be specified as key-value pairs within parentheses immediately following the query name. For example, the following will return only active sites:
|
||||||
|
|
||||||
```
|
```
|
||||||
query {
|
query {
|
||||||
site_list(filters: {region: "us-nc", status: "active"}) {
|
site_list(
|
||||||
|
filters: {
|
||||||
|
status: STATUS_ACTIVE
|
||||||
|
}
|
||||||
|
) {
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
In addition, filtering can be done on list of related objects as shown in the following query:
|
|
||||||
|
Filters can be combined with logical operators, such as `OR` and `NOT`. For example, the following will return every site that is planned _or_ assigned to a tenant named Foo:
|
||||||
|
|
||||||
```
|
```
|
||||||
{
|
query {
|
||||||
|
site_list(
|
||||||
|
filters: {
|
||||||
|
status: STATUS_PLANNED,
|
||||||
|
OR: {
|
||||||
|
tenant: {
|
||||||
|
name: {
|
||||||
|
exact: "Foo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Filtering can also be applied to related objects. For example, the following query will return only enabled interfaces for each device:
|
||||||
|
|
||||||
|
```
|
||||||
|
query {
|
||||||
device_list {
|
device_list {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
@ -98,9 +127,21 @@ Certain queries can return multiple types of objects, for example cable terminat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The field "class_type" is an easy way to distinguish what type of object it is when viewing the returned data, or when filtering. It contains the class name, for example "CircuitTermination" or "ConsoleServerPort".
|
||||||
|
|
||||||
|
## Pagination
|
||||||
|
|
||||||
|
Queries can be paginated by specifying pagination in the query and supplying an offset and optionaly a limit in the query. If no limit is given, a default of 100 is used. Queries are not paginated unless requested in the query. An example paginated query is shown below:
|
||||||
|
|
||||||
```
|
```
|
||||||
The field "class_type" is an easy way to distinguish what type of object it is when viewing the returned data, or when filtering. It contains the class name, for example "CircuitTermination" or "ConsoleServerPort".
|
query {
|
||||||
|
device_list(pagination: { offset: 0, limit: 20 }) {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## What is a 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 requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb:
|
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/REST). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb:
|
||||||
|
|
||||||
* `GET`: Retrieve an object or list of objects
|
* `GET`: Retrieve an object or list of objects
|
||||||
* `POST`: Create an object
|
* `POST`: Create an object
|
||||||
@ -217,26 +217,34 @@ If we wanted to assign this IP address to a virtual machine interface instead, w
|
|||||||
|
|
||||||
### 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 available objects without any related data, such as when populating a drop-down list in a form. As an example, the default (complete) format of an IP address looks like this:
|
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 available objects without any related data, such as when populating a drop-down list in a form. As an example, the default (complete) format of a prefix looks like this:
|
||||||
|
|
||||||
```
|
```no-highlight
|
||||||
GET /api/ipam/prefixes/13980/
|
GET /api/ipam/prefixes/13980/
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
{
|
{
|
||||||
"id": 13980,
|
"id": 13980,
|
||||||
"url": "http://netbox/api/ipam/prefixes/13980/",
|
"url": "http://netbox/api/ipam/prefixes/13980/",
|
||||||
|
"display_url": "http://netbox/api/ipam/prefixes/13980/",
|
||||||
|
"display": "192.0.2.0/24",
|
||||||
"family": {
|
"family": {
|
||||||
"value": 4,
|
"value": 4,
|
||||||
"label": "IPv4"
|
"label": "IPv4"
|
||||||
},
|
},
|
||||||
"prefix": "192.0.2.0/24",
|
"prefix": "192.0.2.0/24",
|
||||||
"site": {
|
|
||||||
"id": 3,
|
|
||||||
"url": "http://netbox/api/dcim/sites/17/",
|
|
||||||
"name": "Site 23A",
|
|
||||||
"slug": "site-23a"
|
|
||||||
},
|
|
||||||
"vrf": null,
|
"vrf": null,
|
||||||
|
"scope_type": "dcim.site",
|
||||||
|
"scope_id": 3,
|
||||||
|
"scope": {
|
||||||
|
"id": 3,
|
||||||
|
"url": "http://netbox/api/dcim/sites/3/",
|
||||||
|
"display": "Site 23A",
|
||||||
|
"name": "Site 23A",
|
||||||
|
"slug": "site-23a",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"tenant": null,
|
"tenant": null,
|
||||||
"vlan": null,
|
"vlan": null,
|
||||||
"status": {
|
"status": {
|
||||||
@ -250,24 +258,36 @@ GET /api/ipam/prefixes/13980/
|
|||||||
"slug": "staging"
|
"slug": "staging"
|
||||||
},
|
},
|
||||||
"is_pool": false,
|
"is_pool": false,
|
||||||
|
"mark_utilized": false,
|
||||||
"description": "Example prefix",
|
"description": "Example prefix",
|
||||||
|
"comments": "",
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"custom_fields": {},
|
"custom_fields": {},
|
||||||
"created": "2018-12-10",
|
"created": "2025-03-01T20:01:23.458302Z",
|
||||||
"last_updated": "2019-03-01T20:02:46.173540Z"
|
"last_updated": "2025-03-01T20:02:46.173540Z",
|
||||||
|
"children": 0,
|
||||||
|
"_depth": 0
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The brief format is much more terse:
|
The brief format is much more terse:
|
||||||
|
|
||||||
```
|
```no-highlight
|
||||||
GET /api/ipam/prefixes/13980/?brief=1
|
GET /api/ipam/prefixes/13980/?brief=1
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
{
|
{
|
||||||
"id": 13980,
|
"id": 13980,
|
||||||
"url": "http://netbox/api/ipam/prefixes/13980/",
|
"url": "http://netbox/api/ipam/prefixes/13980/",
|
||||||
"family": 4,
|
"display": "192.0.2.0/24",
|
||||||
"prefix": "10.40.3.0/24"
|
"family": {
|
||||||
|
"value": 4,
|
||||||
|
"label": "IPv4"
|
||||||
|
},
|
||||||
|
"prefix": "192.0.2.0/24",
|
||||||
|
"description": "Example prefix",
|
||||||
|
"_depth": 0
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -400,25 +420,31 @@ curl -s -X POST \
|
|||||||
-H "Authorization: Token $TOKEN" \
|
-H "Authorization: Token $TOKEN" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
http://netbox/api/ipam/prefixes/ \
|
http://netbox/api/ipam/prefixes/ \
|
||||||
--data '{"prefix": "192.0.2.0/24", "site": 6}' | jq '.'
|
--data '{"prefix": "192.0.2.0/24", "scope_type": "dcim.site", "scope_id": 6}' | jq '.'
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"id": 18691,
|
"id": 18691,
|
||||||
"url": "http://netbox/api/ipam/prefixes/18691/",
|
"url": "http://netbox/api/ipam/prefixes/18691/",
|
||||||
|
"display_url": "http://netbox/api/ipam/prefixes/18691/",
|
||||||
|
"display": "192.0.2.0/24",
|
||||||
"family": {
|
"family": {
|
||||||
"value": 4,
|
"value": 4,
|
||||||
"label": "IPv4"
|
"label": "IPv4"
|
||||||
},
|
},
|
||||||
"prefix": "192.0.2.0/24",
|
"prefix": "192.0.2.0/24",
|
||||||
"site": {
|
"vrf": null,
|
||||||
|
"scope_type": "dcim.site",
|
||||||
|
"scope_id": 6,
|
||||||
|
"scope": {
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"url": "http://netbox/api/dcim/sites/6/",
|
"url": "http://netbox/api/dcim/sites/6/",
|
||||||
|
"display": "US-East 4",
|
||||||
"name": "US-East 4",
|
"name": "US-East 4",
|
||||||
"slug": "us-east-4"
|
"slug": "us-east-4",
|
||||||
|
"description": ""
|
||||||
},
|
},
|
||||||
"vrf": null,
|
|
||||||
"tenant": null,
|
"tenant": null,
|
||||||
"vlan": null,
|
"vlan": null,
|
||||||
"status": {
|
"status": {
|
||||||
@ -427,11 +453,15 @@ http://netbox/api/ipam/prefixes/ \
|
|||||||
},
|
},
|
||||||
"role": null,
|
"role": null,
|
||||||
"is_pool": false,
|
"is_pool": false,
|
||||||
|
"mark_utilized": false,
|
||||||
"description": "",
|
"description": "",
|
||||||
|
"comments": "",
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"custom_fields": {},
|
"custom_fields": {},
|
||||||
"created": "2020-08-04",
|
"created": "2025-04-29T15:44:47.597092Z",
|
||||||
"last_updated": "2020-08-04T20:08:39.007125Z"
|
"last_updated": "2025-04-29T15:44:47.597092Z",
|
||||||
|
"children": 0,
|
||||||
|
"_depth": 0
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -490,18 +520,24 @@ http://netbox/api/ipam/prefixes/18691/ \
|
|||||||
{
|
{
|
||||||
"id": 18691,
|
"id": 18691,
|
||||||
"url": "http://netbox/api/ipam/prefixes/18691/",
|
"url": "http://netbox/api/ipam/prefixes/18691/",
|
||||||
|
"display_url": "http://netbox/api/ipam/prefixes/18691/",
|
||||||
|
"display": "192.0.2.0/24",
|
||||||
"family": {
|
"family": {
|
||||||
"value": 4,
|
"value": 4,
|
||||||
"label": "IPv4"
|
"label": "IPv4"
|
||||||
},
|
},
|
||||||
"prefix": "192.0.2.0/24",
|
"prefix": "192.0.2.0/24",
|
||||||
"site": {
|
"vrf": null,
|
||||||
|
"scope_type": "dcim.site",
|
||||||
|
"scope_id": 6,
|
||||||
|
"scope": {
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"url": "http://netbox/api/dcim/sites/6/",
|
"url": "http://netbox/api/dcim/sites/6/",
|
||||||
|
"display": "US-East 4",
|
||||||
"name": "US-East 4",
|
"name": "US-East 4",
|
||||||
"slug": "us-east-4"
|
"slug": "us-east-4",
|
||||||
|
"description": ""
|
||||||
},
|
},
|
||||||
"vrf": null,
|
|
||||||
"tenant": null,
|
"tenant": null,
|
||||||
"vlan": null,
|
"vlan": null,
|
||||||
"status": {
|
"status": {
|
||||||
@ -510,11 +546,15 @@ http://netbox/api/ipam/prefixes/18691/ \
|
|||||||
},
|
},
|
||||||
"role": null,
|
"role": null,
|
||||||
"is_pool": false,
|
"is_pool": false,
|
||||||
|
"mark_utilized": false,
|
||||||
"description": "",
|
"description": "",
|
||||||
|
"comments": "",
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"custom_fields": {},
|
"custom_fields": {},
|
||||||
"created": "2020-08-04",
|
"created": "2025-04-29T15:44:47.597092Z",
|
||||||
"last_updated": "2020-08-04T20:14:55.709430Z"
|
"last_updated": "2025-04-29T15:49:40.689109Z",
|
||||||
|
"children": 0,
|
||||||
|
"_depth": 0
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -568,6 +608,23 @@ http://netbox/api/dcim/sites/ \
|
|||||||
!!! note
|
!!! note
|
||||||
The bulk deletion of objects is an all-or-none operation, meaning that if NetBox fails to delete any of the specified objects (e.g. due a dependency by a related object), the entire operation will be aborted and none of the objects will be deleted.
|
The bulk deletion of objects is an all-or-none operation, meaning that if NetBox fails to delete any of the specified objects (e.g. due a dependency by a related object), the entire operation will be aborted and none of the objects will be deleted.
|
||||||
|
|
||||||
|
## Uploading Files
|
||||||
|
|
||||||
|
As JSON does not support the inclusion of binary data, files cannot be uploaded using JSON-formatted API requests. Instead, we can use form data encoding to attach a local file.
|
||||||
|
|
||||||
|
For example, we can upload an image attachment using the `curl` command shown below. Note that the `@` signifies a local file on disk to be uploaded.
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: Token $TOKEN" \
|
||||||
|
-H "Accept: application/json; indent=4" \
|
||||||
|
-F "object_type=dcim.site" \
|
||||||
|
-F "object_id=2" \
|
||||||
|
-F "name=attachment1.png" \
|
||||||
|
-F "image=@local_file.png" \
|
||||||
|
http://netbox/api/extras/image-attachments/
|
||||||
|
```
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
The NetBox REST API primarily employs token-based authentication. For convenience, cookie-based authentication can also be used when navigating the browsable API.
|
The NetBox REST API primarily employs token-based authentication. For convenience, cookie-based authentication can also be used when navigating the browsable API.
|
||||||
@ -653,6 +710,7 @@ Note that we are _not_ passing an existing REST API token with this request. If
|
|||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"url": "https://netbox/api/users/tokens/6/",
|
"url": "https://netbox/api/users/tokens/6/",
|
||||||
|
"display_url": "https://netbox/api/users/tokens/6/",
|
||||||
"display": "**********************************3c9cb9",
|
"display": "**********************************3c9cb9",
|
||||||
"user": {
|
"user": {
|
||||||
"id": 2,
|
"id": 2,
|
||||||
|
@ -79,5 +79,5 @@ NetBox is built on the [Django](https://djangoproject.com/) Python framework and
|
|||||||
| HTTP service | nginx or Apache |
|
| HTTP service | nginx or Apache |
|
||||||
| WSGI service | gunicorn or uWSGI |
|
| WSGI service | gunicorn or uWSGI |
|
||||||
| Application | Django/Python |
|
| Application | Django/Python |
|
||||||
| Database | PostgreSQL 12+ |
|
| Database | PostgreSQL 14+ |
|
||||||
| Task queuing | Redis/django-rq |
|
| Task queuing | Redis/django-rq |
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 24 KiB |
@ -36,6 +36,12 @@ The operational status of the circuit. By default, the following statuses are av
|
|||||||
!!! tip "Custom circuit statuses"
|
!!! tip "Custom circuit statuses"
|
||||||
Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
|
### Distance
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The distance between the circuit's two endpoints, including a unit designation (e.g. 100 meters or 25 feet).
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
|
|
||||||
A brief description of the circuit.
|
A brief description of the circuit.
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Circuit Groups
|
# Circuit Groups
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
[Circuits](./circuit.md) can be arranged into administrative groups for organization. The assignment of a circuit to a group is optional.
|
[Circuits](./circuit.md) can be arranged into administrative groups for organization. The assignment of a circuit to a group is optional.
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
@ -8,9 +8,9 @@ Circuits can be assigned to [circuit groups](./circuitgroup.md) for correlation
|
|||||||
|
|
||||||
The [circuit group](./circuitgroup.md) being assigned.
|
The [circuit group](./circuitgroup.md) being assigned.
|
||||||
|
|
||||||
### Circuit
|
### Member
|
||||||
|
|
||||||
The [circuit](./circuit.md) that is being assigned to the group.
|
The [circuit](./circuit.md) or [virtual circuit](./virtualcircuit.md) assigned to the group.
|
||||||
|
|
||||||
### Priority
|
### Priority
|
||||||
|
|
||||||
|
@ -21,13 +21,11 @@ Designates the termination as forming either the A or Z end of the circuit.
|
|||||||
|
|
||||||
If selected, the circuit termination will be considered "connected" even if no cable has been connected to it in NetBox.
|
If selected, the circuit termination will be considered "connected" even if no cable has been connected to it in NetBox.
|
||||||
|
|
||||||
### Site
|
### Termination
|
||||||
|
|
||||||
The [site](../dcim/site.md) with which this circuit termination is associated. Once created, a cable can be connected between the circuit termination and a device interface (or similar component).
|
!!! info "This field replaced the `site` and `provider_network` fields in NetBox v4.2."
|
||||||
|
|
||||||
### Provider Network
|
The [region](../dcim/region.md), [site group](../dcim/sitegroup.md), [site](../dcim/site.md), [location](../dcim/location.md) or [provider network](./providernetwork.md) with which this circuit termination is associated. Once created, a cable can be connected between the circuit termination and a device interface (or similar component).
|
||||||
|
|
||||||
Circuits which do not connect to a site modeled by NetBox can instead be terminated to a [provider network](./providernetwork.md) representing an unknown network operated by a [provider](./provider.md).
|
|
||||||
|
|
||||||
### Port Speed
|
### Port Speed
|
||||||
|
|
||||||
|
39
docs/models/circuits/virtualcircuit.md
Normal file
39
docs/models/circuits/virtualcircuit.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Virtual Circuits
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
A virtual circuit can connect two or more interfaces atop a set of decoupled physical connections. For example, it's very common to form a virtual connection between two virtual interfaces, each of which is bound to a physical interface on its respective device and physically connected to a [provider network](./providernetwork.md) via an independent [physical circuit](./circuit.md).
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Provider Network
|
||||||
|
|
||||||
|
The [provider network](./providernetwork.md) across which the virtual circuit is formed.
|
||||||
|
|
||||||
|
### Provider Account
|
||||||
|
|
||||||
|
The [provider account](./provideraccount.md) with which the virtual circuit is associated (if any).
|
||||||
|
|
||||||
|
### Circuit ID
|
||||||
|
|
||||||
|
The unique identifier assigned to the virtual circuit by its [provider](./provider.md).
|
||||||
|
|
||||||
|
### Type
|
||||||
|
|
||||||
|
The assigned [virtual circuit type](./virtualcircuittype.md).
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
The operational status of the virtual circuit. By default, the following statuses are available:
|
||||||
|
|
||||||
|
| Name |
|
||||||
|
|----------------|
|
||||||
|
| Planned |
|
||||||
|
| Provisioning |
|
||||||
|
| Active |
|
||||||
|
| Offline |
|
||||||
|
| Deprovisioning |
|
||||||
|
| Decommissioned |
|
||||||
|
|
||||||
|
!!! tip "Custom circuit statuses"
|
||||||
|
Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
23
docs/models/circuits/virtualcircuittermination.md
Normal file
23
docs/models/circuits/virtualcircuittermination.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Virtual Circuit Terminations
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
This model represents the connection of a virtual [interface](../dcim/interface.md) to a [virtual circuit](./virtualcircuit.md).
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Virtual Circuit
|
||||||
|
|
||||||
|
The [virtual circuit](./virtualcircuit.md) to which the interface is connected.
|
||||||
|
|
||||||
|
### Interface
|
||||||
|
|
||||||
|
The [interface](../dcim/interface.md) connected to the virtual circuit.
|
||||||
|
|
||||||
|
### Role
|
||||||
|
|
||||||
|
The functional role of the termination. This depends on the virtual circuit's topology, which is typically either peer-to-peer or hub-and-spoke (multipoint). Valid choices include:
|
||||||
|
|
||||||
|
* Peer
|
||||||
|
* Hub
|
||||||
|
* Spoke
|
13
docs/models/circuits/virtualcircuittype.md
Normal file
13
docs/models/circuits/virtualcircuittype.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Virtual Circuit Types
|
||||||
|
|
||||||
|
Like physical [circuits](./circuit.md), [virtual circuits](./virtualcircuit.md) are classified by functional type. These types are completely customizable, and can help categorize circuits by function or technology.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
A unique human-friendly name.
|
||||||
|
|
||||||
|
### Slug
|
||||||
|
|
||||||
|
A unique URL-friendly identifier. (This value can be used for filtering.)
|
@ -44,6 +44,12 @@ A set of rules (one per line) identifying filenames to ignore during synchroniza
|
|||||||
| `*.txt` | Ignore any files with a `.txt` extension |
|
| `*.txt` | Ignore any files with a `.txt` extension |
|
||||||
| `data???.json` | Ignore e.g. `data123.json` |
|
| `data???.json` | Ignore e.g. `data123.json` |
|
||||||
|
|
||||||
|
### Sync Interval
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
The interval at which the data source should automatically synchronize. If not set, the data source must be synchronized manually.
|
||||||
|
|
||||||
### Last Synced
|
### Last Synced
|
||||||
|
|
||||||
The date and time at which the source was most recently synchronized successfully.
|
The date and time at which the source was most recently synchronized successfully.
|
||||||
|
@ -4,6 +4,12 @@ Devices can be organized by functional roles, which are fully customizable by th
|
|||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
|
### Parent
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
The parent role of which this role is a child (optional).
|
||||||
|
|
||||||
### Name
|
### Name
|
||||||
|
|
||||||
A unique human-friendly name.
|
A unique human-friendly name.
|
||||||
|
@ -45,9 +45,12 @@ The operation duplex (full, half, or auto).
|
|||||||
|
|
||||||
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
||||||
|
|
||||||
### MAC Address
|
### Primary MAC Address
|
||||||
|
|
||||||
The 48-bit MAC address (for Ethernet interfaces).
|
The [MAC address](./macaddress.md) assigned to this interface which is designated as its primary.
|
||||||
|
|
||||||
|
!!! note "Changed in NetBox v4.2"
|
||||||
|
The MAC address of an interface (formerly a concrete database field) is available as a property, `mac_address`, which reflects the value of the primary linked [MAC address](./macaddress.md) object.
|
||||||
|
|
||||||
### WWN
|
### WWN
|
||||||
|
|
||||||
@ -109,6 +112,7 @@ For switched Ethernet interfaces, this identifies the 802.1Q encapsulation strat
|
|||||||
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
||||||
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
||||||
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
||||||
|
* **Q-in-Q:** Q-in-Q (IEEE 802.1ad) encapsulation is performed using the assigned SVLAN.
|
||||||
|
|
||||||
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
||||||
|
|
||||||
@ -120,6 +124,12 @@ The "native" (untagged) VLAN for the interface. Valid only when one of the above
|
|||||||
|
|
||||||
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
||||||
|
|
||||||
|
### Q-in-Q SVLAN
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The assigned service VLAN (for Q-in-Q/802.1ad interfaces).
|
||||||
|
|
||||||
### Wireless Role
|
### Wireless Role
|
||||||
|
|
||||||
Indicates the configured role for wireless interfaces (access point or station).
|
Indicates the configured role for wireless interfaces (access point or station).
|
||||||
@ -142,3 +152,9 @@ The configured channel width of a wireless interface, in MHz. This is typically
|
|||||||
### Wireless LANs
|
### Wireless LANs
|
||||||
|
|
||||||
The [wireless LANs](../wireless/wirelesslan.md) for which this interface carries traffic. (Valid for wireless interfaces only.)
|
The [wireless LANs](../wireless/wirelesslan.md) for which this interface carries traffic. (Valid for wireless interfaces only.)
|
||||||
|
|
||||||
|
### VLAN Translation Policy
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The [VLAN translation policy](../ipam/vlantranslationpolicy.md) that applies to this interface (optional).
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
# Inventory Items
|
# Inventory Items
|
||||||
|
|
||||||
|
!!! warning "Deprecation Warning"
|
||||||
|
Beginning in NetBox v4.3, the use of inventory items has been deprecated. They are planned for removal in a future NetBox release. Users are strongly encouraged to begin using [modules](./module.md) and [module types](./moduletype.md) in place of inventory items. Modules provide enhanced functionality and can be configured with user-defined attributes.
|
||||||
|
|
||||||
Inventory items represent hardware components installed within a device, such as a power supply or CPU or line card. They are intended to be used primarily for inventory purposes.
|
Inventory items represent hardware components installed within a device, such as a power supply or CPU or line card. They are intended to be used primarily for inventory purposes.
|
||||||
|
|
||||||
Inventory items are hierarchical in nature, such that any individual item may be designated as the parent for other items. For example, an inventory item might be created to represent a line card which houses several SFP optics, each of which exists as a child item within the device. An inventory item may also be associated with a specific component within the same device. For example, you may wish to associate a transceiver with an interface.
|
Inventory items are hierarchical in nature, such that any individual item may be designated as the parent for other items. For example, an inventory item might be created to represent a line card which houses several SFP optics, each of which exists as a child item within the device. An inventory item may also be associated with a specific component within the same device. For example, you may wish to associate a transceiver with an interface.
|
||||||
@ -25,6 +28,12 @@ The inventory item's name. If the inventory item is assigned to a parent item, i
|
|||||||
|
|
||||||
An alternative physical label identifying the inventory item.
|
An alternative physical label identifying the inventory item.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The inventory item's operational status.
|
||||||
|
|
||||||
### Role
|
### Role
|
||||||
|
|
||||||
The functional [role](./inventoryitemrole.md) assigned to this inventory item.
|
The functional [role](./inventoryitemrole.md) assigned to this inventory item.
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
# Inventory Item Roles
|
# Inventory Item Roles
|
||||||
|
|
||||||
|
!!! warning "Deprecation Warning"
|
||||||
|
Beginning in NetBox v4.3, the use of inventory items has been deprecated. They are planned for removal in a future NetBox release. Users are strongly encouraged to begin using [modules](./module.md) and [module types](./moduletype.md) in place of inventory items. Modules provide enhanced functionality and can be configured with user-defined attributes.
|
||||||
|
|
||||||
Inventory items can be organized by functional roles, which are fully customizable by the user. For example, you might create roles for power supplies, fans, interface optics, etc.
|
Inventory items can be organized by functional roles, which are fully customizable by the user. For example, you might create roles for power supplies, fans, interface optics, etc.
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
# Inventory Item Templates
|
# Inventory Item Templates
|
||||||
|
|
||||||
|
!!! warning "Deprecation Warning"
|
||||||
|
Beginning in NetBox v4.3, the use of inventory items has been deprecated. They are planned for removal in a future NetBox release. Users are strongly encouraged to begin using [modules](./module.md) and [module types](./moduletype.md) in place of inventory items. Modules provide enhanced functionality and can be configured with user-defined attributes.
|
||||||
|
|
||||||
A template for an inventory item that will be automatically created when instantiating a new device. All attributes of this object will be copied to the new inventory item, including the associations with a parent item and assigned component, if any. See the [inventory item](./inventoryitem.md) documentation for more detail.
|
A template for an inventory item that will be automatically created when instantiating a new device. All attributes of this object will be copied to the new inventory item, including the associations with a parent item and assigned component, if any. See the [inventory item](./inventoryitem.md) documentation for more detail.
|
||||||
|
13
docs/models/dcim/macaddress.md
Normal file
13
docs/models/dcim/macaddress.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# MAC Addresses
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
A MAC address object in NetBox comprises a single Ethernet link layer address, and represents a MAC address as reported by or assigned to a network interface. MAC addresses can be assigned to [device](../dcim/device.md) and [virtual machine](../virtualization/virtualmachine.md) interfaces. A MAC address can be specified as the primary MAC address for a given device or VM interface.
|
||||||
|
|
||||||
|
Most interfaces have only a single MAC address, hard-coded at the factory. However, on some devices (particularly virtual interfaces) it is possible to assign additional MAC addresses or change existing ones. For this reason NetBox allows multiple MACAddress objects to be assigned to a single interface.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### MAC Address
|
||||||
|
|
||||||
|
The 48-bit MAC address, in colon-hexadecimal notation (e.g. `aa:bb:cc:11:22:33`).
|
@ -16,8 +16,6 @@ The device to which this module bay belongs.
|
|||||||
|
|
||||||
### Module
|
### Module
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
The module to which this bay belongs (optional).
|
The module to which this bay belongs (optional).
|
||||||
|
|
||||||
### Name
|
### Name
|
||||||
|
@ -42,6 +42,12 @@ The numeric weight of the module, including a unit designation (e.g. 3 kilograms
|
|||||||
|
|
||||||
### Airflow
|
### Airflow
|
||||||
|
|
||||||
!!! info "The `airflow` field was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
The direction in which air circulates through the device chassis for cooling.
|
The direction in which air circulates through the device chassis for cooling.
|
||||||
|
|
||||||
|
### Profile
|
||||||
|
|
||||||
|
The assigned [profile](./moduletypeprofile.md) for the type of module. Profiles can be used to classify module types by function (e.g. power supply, hard disk, etc.), and they support the addition of user-configurable attributes on module types. The assignment of a module type to a profile is optional.
|
||||||
|
|
||||||
|
### Attributes
|
||||||
|
|
||||||
|
Depending on the module type's assigned [profile](./moduletypeprofile.md) (if any), one or more user-defined attributes may be available to configure.
|
||||||
|
40
docs/models/dcim/moduletypeprofile.md
Normal file
40
docs/models/dcim/moduletypeprofile.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Module Type Profiles
|
||||||
|
|
||||||
|
!!! info "This model was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
Each [module type](./moduletype.md) may optionally be assigned a profile according to its classification. A profile can extend module types with user-configured attributes. For example, you might want to specify the input current and voltage of a power supply, or the clock speed and number of cores for a processor.
|
||||||
|
|
||||||
|
Module type attributes are managed via the configuration of a [JSON schema](https://json-schema.org/) on the profile. For example, the following schema introduces three module type attributes, two of which are designated as required attributes.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Disk type",
|
||||||
|
"enum": ["HD", "SSD", "NVME"],
|
||||||
|
"default": "HD"
|
||||||
|
},
|
||||||
|
"capacity": {
|
||||||
|
"type": "integer",
|
||||||
|
"title": "Capacity (GB)",
|
||||||
|
"description": "Gross disk size"
|
||||||
|
},
|
||||||
|
"speed": {
|
||||||
|
"type": "integer",
|
||||||
|
"title": "Speed (RPM)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"type", "capacity"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The assignment of module types to a profile is optional. The designation of a schema for a profile is also optional: A profile can be used simply as a mechanism for classifying module types if the addition of custom attributes is not needed.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Schema
|
||||||
|
|
||||||
|
This field holds the [JSON schema](https://json-schema.org/) for the profile. The configured JSON schema must be valid (or the field must be null).
|
@ -29,6 +29,25 @@ An alternative physical label identifying the power outlet.
|
|||||||
|
|
||||||
The type of power outlet.
|
The type of power outlet.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
The operational status of the power outlet. By default, the following statuses are available:
|
||||||
|
|
||||||
|
* Enabled
|
||||||
|
* Disabled
|
||||||
|
* Faulty
|
||||||
|
|
||||||
|
!!! tip "Custom power outlet statuses"
|
||||||
|
Additional power outlet statuses may be defined by setting `PowerOutlet.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
### Color
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The power outlet's color (optional).
|
||||||
|
|
||||||
### Power Port
|
### Power Port
|
||||||
|
|
||||||
When modeling a device which redistributes power from an upstream supply, such as a power distribution unit (PDU), each power outlet should be mapped to the respective [power port](./powerport.md) on the device which supplies power. For example, a 24-outlet PDU may two power ports, each distributing power to 12 of its outlets.
|
When modeling a device which redistributes power from an upstream supply, such as a power distribution unit (PDU), each power outlet should be mapped to the respective [power port](./powerport.md) on the device which supplies power. For example, a 24-outlet PDU may two power ports, each distributing power to 12 of its outlets.
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Rack Types
|
# Rack Types
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
A rack type defines the physical characteristics of a particular model of [rack](./rack.md).
|
A rack type defines the physical characteristics of a particular model of [rack](./rack.md).
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
@ -42,7 +40,9 @@ The number of the numerically lowest unit in the rack. This value defaults to on
|
|||||||
|
|
||||||
### Outer Dimensions
|
### Outer Dimensions
|
||||||
|
|
||||||
The external width and depth of the rack can be tracked to aid in floorplan calculations. These measurements must be designated in either millimeters or inches.
|
The external width, height and depth of the rack can be tracked to aid in floorplan calculations. These measurements must be designated in either millimeters or inches.
|
||||||
|
|
||||||
|
!!! info "The `outer_height` field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
### Mounting Depth
|
### Mounting Depth
|
||||||
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
# Branches
|
|
||||||
|
|
||||||
A branch is a collection of related [staged changes](./stagedchange.md) that have been prepared for merging into the active database. A branch can be merged by executing its `commit()` method. Deleting a branch will delete all its related changes.
|
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
### Name
|
|
||||||
|
|
||||||
The branch's name.
|
|
||||||
|
|
||||||
### User
|
|
||||||
|
|
||||||
The user to which the branch belongs (optional).
|
|
@ -12,10 +12,6 @@ See the [configuration rendering documentation](../../features/configuration-ren
|
|||||||
|
|
||||||
A unique human-friendly name.
|
A unique human-friendly name.
|
||||||
|
|
||||||
### Weight
|
|
||||||
|
|
||||||
A numeric value which influences the order in which context data is merged. Contexts with a lower weight are merged before those with a higher weight.
|
|
||||||
|
|
||||||
### Data File
|
### Data File
|
||||||
|
|
||||||
Template code may optionally be sourced from a remote [data file](../core/datafile.md), which is synchronized from a remote data source. When designating a data file, there is no need to specify template code: It will be populated automatically from the data file.
|
Template code may optionally be sourced from a remote [data file](../core/datafile.md), which is synchronized from a remote data source. When designating a data file, there is no need to specify template code: It will be populated automatically from the data file.
|
||||||
@ -27,3 +23,27 @@ Jinja2 template code, if being defined locally rather than replicated from a dat
|
|||||||
### Environment Parameters
|
### Environment Parameters
|
||||||
|
|
||||||
A dictionary of any additional parameters to pass when instantiating the [Jinja2 environment](https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment). Jinja2 supports various optional parameters which can be used to modify its default behavior.
|
A dictionary of any additional parameters to pass when instantiating the [Jinja2 environment](https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment). Jinja2 supports various optional parameters which can be used to modify its default behavior.
|
||||||
|
|
||||||
|
### MIME Type
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
The MIME type to indicate in the response when rendering the configuration template (optional). Defaults to `text/plain`.
|
||||||
|
|
||||||
|
### File Name
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
The file name to give to the rendered export file (optional).
|
||||||
|
|
||||||
|
### File Extension
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
The file extension to append to the file name in the response (optional).
|
||||||
|
|
||||||
|
### As Attachment
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
If selected, the rendered content will be returned as a file attachment, rather than displayed directly in-browser (where supported).
|
@ -44,8 +44,6 @@ For object and multiple-object fields only. Designates the type of NetBox object
|
|||||||
|
|
||||||
### Related Object Filter
|
### Related Object Filter
|
||||||
|
|
||||||
!!! info "This field was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
For object and multi-object custom fields, a filter may be defined to limit the available objects when populating a field value. This filter maps object attributes to values. For example, `{"status": "active"}` will include only objects with a status of "active."
|
For object and multi-object custom fields, a filter may be defined to limit the available objects when populating a field value. This filter maps object attributes to values. For example, `{"status": "active"}` will include only objects with a status of "active."
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
|
@ -10,7 +10,7 @@ See the [event rules documentation](../../features/event-rules.md) for more inf
|
|||||||
|
|
||||||
A unique human-friendly name.
|
A unique human-friendly name.
|
||||||
|
|
||||||
### Content Types
|
### Object Types
|
||||||
|
|
||||||
The type(s) of object in NetBox that will trigger the rule.
|
The type(s) of object in NetBox that will trigger the rule.
|
||||||
|
|
||||||
@ -38,3 +38,15 @@ The event types which will trigger the rule. At least one event type must be sel
|
|||||||
### Conditions
|
### Conditions
|
||||||
|
|
||||||
A set of [prescribed conditions](../../reference/conditions.md) against which the triggering object will be evaluated. If the conditions are defined but not met by the object, no action will be taken. An event rule that does not define any conditions will _always_ trigger.
|
A set of [prescribed conditions](../../reference/conditions.md) against which the triggering object will be evaluated. If the conditions are defined but not met by the object, no action will be taken. An event rule that does not define any conditions will _always_ trigger.
|
||||||
|
|
||||||
|
### Action Type
|
||||||
|
|
||||||
|
The type of action to take when the rule triggers. This must be one of the following choices:
|
||||||
|
|
||||||
|
* Webhook
|
||||||
|
* Custom script
|
||||||
|
* Notification
|
||||||
|
|
||||||
|
### Action Data
|
||||||
|
|
||||||
|
An optional dictionary of JSON data to pass when executing the rule. This can be useful to include additional context data, e.g. when transmitting a webhook.
|
||||||
|
@ -20,10 +20,20 @@ Template code may optionally be sourced from a remote [data file](../core/datafi
|
|||||||
|
|
||||||
Jinja2 template code for rendering the exported data.
|
Jinja2 template code for rendering the exported data.
|
||||||
|
|
||||||
|
### Environment Parameters
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
|
A dictionary of any additional parameters to pass when instantiating the [Jinja2 environment](https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment). Jinja2 supports various optional parameters which can be used to modify its default behavior.
|
||||||
|
|
||||||
### MIME Type
|
### MIME Type
|
||||||
|
|
||||||
The MIME type to indicate in the response when rendering the export template (optional). Defaults to `text/plain`.
|
The MIME type to indicate in the response when rendering the export template (optional). Defaults to `text/plain`.
|
||||||
|
|
||||||
|
### File Name
|
||||||
|
|
||||||
|
The file name to give to the rendered export file (optional).
|
||||||
|
|
||||||
### File Extension
|
### File Extension
|
||||||
|
|
||||||
The file extension to append to the file name in the response (optional).
|
The file extension to append to the file name in the response (optional).
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
# Staged Changes
|
|
||||||
|
|
||||||
A staged change represents the creation of a new object or the modification or deletion of an existing object to be performed at some future point. Each change must be assigned to a [branch](./branch.md).
|
|
||||||
|
|
||||||
Changes can be applied individually via the `apply()` method, however it is recommended to apply changes in bulk using the parent branch's `commit()` method.
|
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
!!! warning
|
|
||||||
Staged changes are not typically created or manipulated directly, but rather effected through the use of the [`checkout()`](../../plugins/development/staged-changes.md) context manager.
|
|
||||||
|
|
||||||
### Branch
|
|
||||||
|
|
||||||
The [branch](./branch.md) to which this change belongs.
|
|
||||||
|
|
||||||
### Action
|
|
||||||
|
|
||||||
The type of action this change represents: `create`, `update`, or `delete`.
|
|
||||||
|
|
||||||
### Object
|
|
||||||
|
|
||||||
A generic foreign key referencing the existing object to which this change applies.
|
|
||||||
|
|
||||||
### Data
|
|
||||||
|
|
||||||
JSON representation of the changes being made to the object (not applicable for deletions).
|
|
43
docs/models/extras/tableconfig.md
Normal file
43
docs/models/extras/tableconfig.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Table Configs
|
||||||
|
|
||||||
|
This object represents the saved configuration of an object table in NetBox. Table configs can be crafted, saved, and shared among users to apply specific views within object lists. Each table config can specify which table columns to display, the order in which to display them, and which columns are used for sorting.
|
||||||
|
|
||||||
|
For example, you might wish to create a table config for the devices list to assist in inventory tasks. This view might show the device name, location, serial number, and asset tag, but omit operational details like IP addresses. Once applied, this table config can be saved for reuse in future audits.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
A human-friendly name for the table config.
|
||||||
|
|
||||||
|
### User
|
||||||
|
|
||||||
|
The user to which this filter belongs. The current user will be assigned automatically when saving a table config via the UI, and cannot be changed.
|
||||||
|
|
||||||
|
### Object Type
|
||||||
|
|
||||||
|
The type of NetBox object to which the table config pertains.
|
||||||
|
|
||||||
|
### Table
|
||||||
|
|
||||||
|
The name of the specific table to which the table config pertains. (Some NetBox object use multiple tables.)
|
||||||
|
|
||||||
|
### Weight
|
||||||
|
|
||||||
|
A numeric weight used to influence the order in which table configs are listed. Table configs with a lower weight will be listed before those with a higher weight. Table configs having the same weight will be ordered alphabetically.
|
||||||
|
|
||||||
|
### Enabled
|
||||||
|
|
||||||
|
Determines whether this table config can be used. Disabled table configs will not appear as options in the UI, however they will be included in API results.
|
||||||
|
|
||||||
|
### Shared
|
||||||
|
|
||||||
|
Determines whether this table config is intended for use by all users or only its owner. Note that deselecting this option does **not** hide the table config from other users; it is merely excluded from the list of available table configs in UI object list views.
|
||||||
|
|
||||||
|
### Ordering
|
||||||
|
|
||||||
|
A list of column names by which the table is to be ordered. If left blank, the table's default ordering will be used.
|
||||||
|
|
||||||
|
### Columns
|
||||||
|
|
||||||
|
A list of columns to be displayed in the table. The table will render these columns in the order they appear in the list. At least one column must be selected.
|
@ -16,6 +16,12 @@ A unique URL-friendly identifier. (This value will be used for filtering.) This
|
|||||||
|
|
||||||
The color to use when displaying the tag in the NetBox UI.
|
The color to use when displaying the tag in the NetBox UI.
|
||||||
|
|
||||||
|
### Weight
|
||||||
|
|
||||||
|
A numeric weight employed to influence the ordering of tags. Tags with a lower weight will be listed before those with higher weights. Values must be within the range **0** to **32767**.
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
### Object Types
|
### Object Types
|
||||||
|
|
||||||
The assignment of a tag may be limited to a prescribed set of objects. For example, it may be desirable to limit the application of a specific tag to only devices and virtual machines.
|
The assignment of a tag may be limited to a prescribed set of objects. For example, it may be desirable to limit the application of a specific tag to only devices and virtual machines.
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
This model represents an arbitrary range of individual IPv4 or IPv6 addresses, inclusive of its starting and ending addresses. For instance, the range 192.0.2.10 to 192.0.2.20 has eleven members. (The total member count is available as the `size` property on an IPRange instance.) Like [prefixes](./prefix.md) and [IP addresses](./ipaddress.md), each IP range may optionally be assigned to a [VRF](./vrf.md).
|
This model represents an arbitrary range of individual IPv4 or IPv6 addresses, inclusive of its starting and ending addresses. For instance, the range 192.0.2.10 to 192.0.2.20 has eleven members. (The total member count is available as the `size` property on an IPRange instance.) Like [prefixes](./prefix.md) and [IP addresses](./ipaddress.md), each IP range may optionally be assigned to a [VRF](./vrf.md).
|
||||||
|
|
||||||
|
Each IP range can be marked as populated, which instructs NetBox to treat the range as though every IP address within it has been created (even though these individual IP addresses don't actually exist in the database). This can be helpful in scenarios where the management of a subset of IP addresses has been deferred to an external system of record, such as a DHCP server. NetBox will prohibit the creation of individual IP addresses within a range that has been marked as populated.
|
||||||
|
|
||||||
|
An IP range can also be marked as utilized. This will cause its utilization to always be reported as 100% when viewing the range or when calculating the utilization of a parent prefix. (If not enabled, a range's utilization is calculated based on the number of IP addresses which have been created within it.)
|
||||||
|
|
||||||
|
Typically, IP ranges marked as populated should also be marked as utilized, although there may be scenarios where this is undesirable (e.g. when reclaiming old IP space). An IP range which has been marked as populated but _not_ marked as utilized will always report a utilization of 0%, as it cannot contain child IP addresses.
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
### VRF
|
### VRF
|
||||||
@ -29,6 +35,12 @@ The IP range's operational status. Note that the status of a range does _not_ ha
|
|||||||
!!! tip
|
!!! tip
|
||||||
Additional statuses may be defined by setting `IPRange.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
Additional statuses may be defined by setting `IPRange.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
|
### Mark Populated
|
||||||
|
|
||||||
|
!!! note "This field was added in NetBox v4.3."
|
||||||
|
|
||||||
|
If enabled, NetBox will treat this IP range as being fully populated when calculating available IP space. It will also prevent the creation of IP addresses which fall within the declared range (and assigned VRF, if any).
|
||||||
|
|
||||||
### Mark Utilized
|
### Mark Utilized
|
||||||
|
|
||||||
If enabled, the IP range will be considered 100% utilized regardless of how many IP addresses are defined within it. This is useful for documenting DHCP ranges, for example.
|
If enabled, the IP range will be considered 100% utilized regardless of how many IP addresses are defined within it. This is useful for documenting DHCP ranges, for example.
|
||||||
|
@ -34,9 +34,11 @@ Designates whether the prefix should be treated as a pool. If selected, the firs
|
|||||||
|
|
||||||
If selected, this prefix will report 100% utilization regardless of how many child objects have been defined within it.
|
If selected, this prefix will report 100% utilization regardless of how many child objects have been defined within it.
|
||||||
|
|
||||||
### Site
|
### Scope
|
||||||
|
|
||||||
The [site](../dcim/site.md) to which this prefix is assigned (optional).
|
!!! info "This field replaced the `site` field in NetBox v4.2."
|
||||||
|
|
||||||
|
The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) to which the prefix is assigned (optional).
|
||||||
|
|
||||||
### VLAN
|
### VLAN
|
||||||
|
|
||||||
|
@ -6,6 +6,15 @@ To aid in the efficient creation of services, users may opt to first create a [s
|
|||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
|
### Parent
|
||||||
|
|
||||||
|
The parent object to which the service is assigned. This must be one of [Device](../dcim/device.md),
|
||||||
|
[VirtualMachine](../virtualization/virtualmachine.md), or [FHRP Group](./fhrpgroup.md).
|
||||||
|
|
||||||
|
!!! note "Changed in NetBox v4.3"
|
||||||
|
|
||||||
|
Previously, `parent` was a property that pointed to either a Device or Virtual Machine. With the capability to assign services to FHRP groups, this is a unified in a concrete field.
|
||||||
|
|
||||||
### Name
|
### Name
|
||||||
|
|
||||||
A service or protocol name.
|
A service or protocol name.
|
||||||
|
@ -26,3 +26,15 @@ The user-defined functional [role](./role.md) assigned to the VLAN.
|
|||||||
### VLAN Group or Site
|
### VLAN Group or Site
|
||||||
|
|
||||||
The [VLAN group](./vlangroup.md) or [site](../dcim/site.md) to which the VLAN is assigned.
|
The [VLAN group](./vlangroup.md) or [site](../dcim/site.md) to which the VLAN is assigned.
|
||||||
|
|
||||||
|
### Q-in-Q Role
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
For VLANs which comprise a Q-in-Q/IEEE 802.1ad topology, this field indicates whether the VLAN is treated as a service or customer VLAN.
|
||||||
|
|
||||||
|
### Q-in-Q Service VLAN
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The designated parent service VLAN for a Q-in-Q customer VLAN. This may be set only for Q-in-Q custom VLANs.
|
||||||
|
@ -16,8 +16,6 @@ A unique URL-friendly identifier. (This value can be used for filtering.)
|
|||||||
|
|
||||||
### VLAN ID Ranges
|
### VLAN ID Ranges
|
||||||
|
|
||||||
!!! info "This field replaced the legacy `min_vid` and `max_vid` fields in NetBox v4.1."
|
|
||||||
|
|
||||||
The set of VLAN IDs which are encompassed by the group. By default, this will be the entire range of valid IEEE 802.1Q VLAN IDs (1 to 4094, inclusive). VLANs created within a group must have a VID that falls within one of these ranges. Ranges may not overlap.
|
The set of VLAN IDs which are encompassed by the group. By default, this will be the entire range of valid IEEE 802.1Q VLAN IDs (1 to 4094, inclusive). VLANs created within a group must have a VID that falls within one of these ranges. Ranges may not overlap.
|
||||||
|
|
||||||
### Scope
|
### Scope
|
||||||
|
28
docs/models/ipam/vlantranslationpolicy.md
Normal file
28
docs/models/ipam/vlantranslationpolicy.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# VLAN Translation Policies
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
VLAN translation is a feature that consists of VLAN translation policies and [VLAN translation rules](./vlantranslationrule.md). Many rules can belong to a policy, and each rule defines a mapping of a local to remote VLAN ID (VID). A policy can then be assigned to an [Interface](../dcim/interface.md) or [VMInterface](../virtualization/vminterface.md), and all VLAN translation rules associated with that policy will be visible in the interface details.
|
||||||
|
|
||||||
|
There are uniqueness constraints on `(policy, local_vid)` and on `(policy, remote_vid)` in the `VLANTranslationRule` model. Thus, you cannot have multiple rules linked to the same policy that have the same local VID or the same remote VID. A set of policies and rules might look like this:
|
||||||
|
|
||||||
|
Policy 1:
|
||||||
|
- Rule: 100 -> 200
|
||||||
|
- Rule: 101 -> 201
|
||||||
|
|
||||||
|
Policy 2:
|
||||||
|
- Rule: 100 -> 300
|
||||||
|
- Rule: 101 -> 301
|
||||||
|
|
||||||
|
However this is not allowed:
|
||||||
|
|
||||||
|
Policy 3:
|
||||||
|
- Rule: 100 -> 200
|
||||||
|
- Rule: 100 -> 300
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
A unique human-friendly name.
|
21
docs/models/ipam/vlantranslationrule.md
Normal file
21
docs/models/ipam/vlantranslationrule.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# VLAN Translation Rules
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
A VLAN translation rule represents a one-to-one mapping of a local VLAN ID (VID) to a remote VID. Many rules can belong to a single policy.
|
||||||
|
|
||||||
|
See [VLAN translation policies](./vlantranslationpolicy.md) for an overview of the VLAN Translation feature.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Policy
|
||||||
|
|
||||||
|
The [VLAN Translation Policy](./vlantranslationpolicy.md) to which this rule belongs.
|
||||||
|
|
||||||
|
### Local VID
|
||||||
|
|
||||||
|
VLAN ID (1-4094) in the local network which is to be translated to a remote VID.
|
||||||
|
|
||||||
|
### Remote VID
|
||||||
|
|
||||||
|
VLAN ID (1-4094) in the remote network to which the local VID will be translated.
|
@ -4,9 +4,11 @@ A contact represents an individual or group that has been associated with an obj
|
|||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
### Group
|
### Groups
|
||||||
|
|
||||||
The [contact group](./contactgroup.md) to which this contact is assigned (if any).
|
The [contact groups](./contactgroup.md) to which this contact is assigned (if any).
|
||||||
|
|
||||||
|
!!! info "This field was renamed from `group` to `groups` in NetBox v4.3, and now supports the assignment of a contact to more than one group."
|
||||||
|
|
||||||
### Name
|
### Name
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@ The cluster's operational status.
|
|||||||
!!! tip
|
!!! tip
|
||||||
Additional statuses may be defined by setting `Cluster.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
Additional statuses may be defined by setting `Cluster.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
### Site
|
### Scope
|
||||||
|
|
||||||
The [site](../dcim/site.md) with which the cluster is associated.
|
!!! info "This field replaced the `site` field in NetBox v4.2."
|
||||||
|
|
||||||
|
The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) with which this cluster is associated.
|
||||||
|
@ -57,6 +57,4 @@ The amount of disk storage provisioned, in megabytes.
|
|||||||
|
|
||||||
### Serial Number
|
### Serial Number
|
||||||
|
|
||||||
!!! info "This field was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
Optional serial number assigned to this virtual machine. Unlike devices, uniqueness is not enforced for virtual machine serial numbers.
|
Optional serial number assigned to this virtual machine. Unlike devices, uniqueness is not enforced for virtual machine serial numbers.
|
||||||
|
@ -27,9 +27,12 @@ An interface on the same VM with which this interface is bridged.
|
|||||||
|
|
||||||
If not selected, this interface will be treated as disabled/inoperative.
|
If not selected, this interface will be treated as disabled/inoperative.
|
||||||
|
|
||||||
### MAC Address
|
### Primary MAC Address
|
||||||
|
|
||||||
The 48-bit MAC address (for Ethernet interfaces).
|
The [MAC address](../dcim/macaddress.md) assigned to this interface which is designated as its primary.
|
||||||
|
|
||||||
|
!!! note "Changed in NetBox v4.2"
|
||||||
|
The MAC address of an interface (formerly a concrete database field) is available as a property, `mac_address`, which reflects the value of the primary linked [MAC address](../dcim/macaddress.md) object.
|
||||||
|
|
||||||
### MTU
|
### MTU
|
||||||
|
|
||||||
@ -42,6 +45,7 @@ For switched Ethernet interfaces, this identifies the 802.1Q encapsulation strat
|
|||||||
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
||||||
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
||||||
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
||||||
|
* **Q-in-Q:** Q-in-Q (IEEE 802.1ad) encapsulation is performed using the assigned SVLAN.
|
||||||
|
|
||||||
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
||||||
|
|
||||||
@ -53,6 +57,18 @@ The "native" (untagged) VLAN for the interface. Valid only when one of the above
|
|||||||
|
|
||||||
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
||||||
|
|
||||||
|
### Q-in-Q SVLAN
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The assigned service VLAN (for Q-in-Q/802.1ad interfaces).
|
||||||
|
|
||||||
### VRF
|
### VRF
|
||||||
|
|
||||||
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
||||||
|
|
||||||
|
### VLAN Translation Policy
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The [VLAN translation policy](../ipam/vlantranslationpolicy.md) that applies to this interface (optional).
|
||||||
|
@ -33,6 +33,19 @@ The technology employed in forming and operating the L2VPN. Choices include:
|
|||||||
!!! note
|
!!! note
|
||||||
Designating the type as VPWS, EPL, EP-LAN, EP-TREE will limit the L2VPN instance to two terminations.
|
Designating the type as VPWS, EPL, EP-LAN, EP-TREE will limit the L2VPN instance to two terminations.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
The operational status of the L2VPN. By default, the following statuses are available:
|
||||||
|
|
||||||
|
* Active (default)
|
||||||
|
* Planned
|
||||||
|
* Faulty
|
||||||
|
|
||||||
|
!!! tip "Custom L2VPN statuses"
|
||||||
|
Additional L2VPN statuses may be defined by setting `L2VPN.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.3."
|
||||||
|
|
||||||
### Identifier
|
### Identifier
|
||||||
|
|
||||||
An optional numeric identifier. This can be used to track a pseudowire ID, for example.
|
An optional numeric identifier. This can be used to track a pseudowire ID, for example.
|
||||||
|
@ -43,3 +43,9 @@ The security cipher used to apply wireless authentication. Options include:
|
|||||||
### Pre-Shared Key
|
### Pre-Shared Key
|
||||||
|
|
||||||
The security key configured on each client to grant access to the secured wireless LAN. This applies only to certain authentication types.
|
The security key configured on each client to grant access to the secured wireless LAN. This applies only to certain authentication types.
|
||||||
|
|
||||||
|
### Scope
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) with which this wireless LAN is associated.
|
||||||
|
@ -22,8 +22,6 @@ The service set identifier (SSID) for the wireless link (optional).
|
|||||||
|
|
||||||
### Distance
|
### Distance
|
||||||
|
|
||||||
!!! info "This field was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
The distance between the link's two endpoints, including a unit designation (e.g. 100 meters or 25 feet).
|
The distance between the link's two endpoints, including a unit designation (e.g. 100 meters or 25 feet).
|
||||||
|
|
||||||
### Authentication Type
|
### Authentication Type
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Background Jobs
|
# Background Jobs
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
NetBox plugins can defer certain operations by enqueuing [background jobs](../../features/background-jobs.md), which are executed asynchronously by background workers. This is helpful for decoupling long-running processes from the user-facing request-response cycle.
|
NetBox plugins can defer certain operations by enqueuing [background jobs](../../features/background-jobs.md), which are executed asynchronously by background workers. This is helpful for decoupling long-running processes from the user-facing request-response cycle.
|
||||||
|
|
||||||
For example, your plugin might need to fetch data from a remote system. Depending on the amount of data and the responsiveness of the remote server, this could take a few minutes. Deferring this task to a queued job ensures that it can be completed in the background, without interrupting the user. The data it fetches can be made available once the job has completed.
|
For example, your plugin might need to fetch data from a remote system. Depending on the amount of data and the responsiveness of the remote server, this could take a few minutes. Deferring this task to a queued job ensures that it can be completed in the background, without interrupting the user. The data it fetches can be made available once the job has completed.
|
||||||
@ -17,7 +15,6 @@ A background job implements a basic [Job](../../models/core/job.md) executor for
|
|||||||
```python title="jobs.py"
|
```python title="jobs.py"
|
||||||
from netbox.jobs import JobRunner
|
from netbox.jobs import JobRunner
|
||||||
|
|
||||||
|
|
||||||
class MyTestJob(JobRunner):
|
class MyTestJob(JobRunner):
|
||||||
class Meta:
|
class Meta:
|
||||||
name = "My Test Job"
|
name = "My Test Job"
|
||||||
@ -27,8 +24,13 @@ class MyTestJob(JobRunner):
|
|||||||
# your logic goes here
|
# your logic goes here
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Completed jobs will have their status updated to "completed" by default, or "errored" if an unhandled exception was raised by the `run()` method. To intentionally mark a job as failed, raise the `core.exceptions.JobFailed` exception. (Note that "failed" differs from "errored" in that a failure may be expected under certain conditions, whereas an error is not.)
|
||||||
|
|
||||||
You can schedule the background job from within your code (e.g. from a model's `save()` method or a view) by calling `MyTestJob.enqueue()`. This method passes through all arguments to `Job.enqueue()`. However, no `name` argument must be passed, as the background job name will be used instead.
|
You can schedule the background job from within your code (e.g. from a model's `save()` method or a view) by calling `MyTestJob.enqueue()`. This method passes through all arguments to `Job.enqueue()`. However, no `name` argument must be passed, as the background job name will be used instead.
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
A set of predefined intervals is available at `core.choices.JobIntervalChoices` for convenience.
|
||||||
|
|
||||||
### Attributes
|
### Attributes
|
||||||
|
|
||||||
`JobRunner` attributes are defined under a class named `Meta` within the job. These are optional, but encouraged.
|
`JobRunner` attributes are defined under a class named `Meta` within the job. These are optional, but encouraged.
|
||||||
@ -46,26 +48,57 @@ As described above, jobs can be scheduled for immediate execution or at any late
|
|||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
|
|
||||||
|
```python title="models.py"
|
||||||
|
from django.db import models
|
||||||
|
from core.choices import JobIntervalChoices
|
||||||
|
from netbox.models import NetBoxModel
|
||||||
|
from .jobs import MyTestJob
|
||||||
|
|
||||||
|
class MyModel(NetBoxModel):
|
||||||
|
foo = models.CharField()
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
MyTestJob.enqueue_once(instance=self, interval=JobIntervalChoices.INTERVAL_HOURLY)
|
||||||
|
return super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
def sync(self):
|
||||||
|
MyTestJob.enqueue(instance=self)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### System Jobs
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
Some plugins may implement background jobs that are decoupled from the request/response cycle. Typical use cases would be housekeeping tasks or synchronization jobs. These can be registered as _system jobs_ using the `system_job()` decorator. The job interval must be passed as an integer (in minutes) when registering a system job. System jobs are scheduled automatically when the RQ worker (`manage.py rqworker`) is run.
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
```python title="jobs.py"
|
```python title="jobs.py"
|
||||||
from netbox.jobs import JobRunner
|
from core.choices import JobIntervalChoices
|
||||||
|
from netbox.jobs import JobRunner, system_job
|
||||||
|
from .models import MyModel
|
||||||
|
|
||||||
|
# Specify a predefined choice or an integer indicating
|
||||||
|
# the number of minutes between job executions
|
||||||
|
@system_job(interval=JobIntervalChoices.INTERVAL_HOURLY)
|
||||||
class MyHousekeepingJob(JobRunner):
|
class MyHousekeepingJob(JobRunner):
|
||||||
class Meta:
|
class Meta:
|
||||||
name = "Housekeeping"
|
name = "My Housekeeping Job"
|
||||||
|
|
||||||
def run(self, *args, **kwargs):
|
def run(self, *args, **kwargs):
|
||||||
# your logic goes here
|
MyModel.objects.filter(foo='bar').delete()
|
||||||
```
|
```
|
||||||
|
|
||||||
```python title="__init__.py"
|
!!! note
|
||||||
from netbox.plugins import PluginConfig
|
Ensure that any system jobs are imported on initialization. Otherwise, they won't be registered. This can be achieved by extending the PluginConfig's `ready()` method. For example:
|
||||||
|
|
||||||
class MyPluginConfig(PluginConfig):
|
```python
|
||||||
def ready(self):
|
def ready(self):
|
||||||
|
super().ready()
|
||||||
|
|
||||||
from .jobs import MyHousekeepingJob
|
from .jobs import MyHousekeepingJob
|
||||||
MyHousekeepingJob.setup(interval=60)
|
```
|
||||||
```
|
|
||||||
|
|
||||||
## Task queues
|
## Task queues
|
||||||
|
|
||||||
|
@ -18,6 +18,6 @@ backends = [MyDataBackend]
|
|||||||
```
|
```
|
||||||
|
|
||||||
!!! tip
|
!!! tip
|
||||||
The path to the list of search indexes can be modified by setting `data_backends` in the PluginConfig instance.
|
The path to the list of data backends can be modified by setting `data_backends` in the PluginConfig instance.
|
||||||
|
|
||||||
::: netbox.data_backends.DataBackend
|
::: netbox.data_backends.DataBackend
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Event Types
|
# Event Types
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.1."
|
|
||||||
|
|
||||||
Plugins can register their own custom event types for use with NetBox [event rules](../../models/extras/eventrule.md). This is accomplished by calling the `register()` method on an instance of the `EventType` class. This can be done anywhere within the plugin. An example is provided below.
|
Plugins can register their own custom event types for use with NetBox [event rules](../../models/extras/eventrule.md). This is accomplished by calling the `register()` method on an instance of the `EventType` class. This can be done anywhere within the plugin. An example is provided below.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user