{"id":392077,"date":"2024-06-29T10:12:23","date_gmt":"2024-06-29T10:12:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=392077"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=392077","title":{"rendered":"<span>\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f IPAM \u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0441 phpIPAM \u0432 NetBox: \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/company\/rosbank\/blog\/654987\/\"><u>\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u043b\u0430\u0434\u0438\u0442\u044c \u043a\u0430\u0431\u0435\u043b\u044c-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u0432 NetBox \u2014 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435 \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043a \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0438, \u043f\u043e \u0437\u0430\u044f\u0432\u043a\u0430\u043c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u0437\u0430\u0442\u0440\u043e\u043d\u0443 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 NetBox \u0438\u0437 phpIPAM. \u0412\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430\u043c\u0438 NetBox \u0432\u0435\u0440\u0441\u0438\u0438 3.2, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7cd\/bac\/054\/7cdbac054715dd6523083da1a8268cfb.jpg\" width=\"1280\" height=\"722\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7cd\/bac\/054\/7cdbac054715dd6523083da1a8268cfb.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<h3>IPAM (IP-\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f) \u0432 NetBox<\/h3>\n<p>\u0412\u0435\u0434\u0435\u043d\u0438\u0435 IPAM \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f NetBox. DCIM, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043d\u0443\u0436\u0435\u043d \u0438 \u043d\u0435 \u0432\u0441\u0435\u043c, \u043d\u043e \u0431\u0435\u0437 IPAM \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0425\u043e\u0442\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0432 NetBox \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430 IPAM. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0432\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5dc\/d52\/ce4\/5dcd52ce41e8abd43c5c7d7793278db1.png\" width=\"265\" height=\"751\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5dc\/d52\/ce4\/5dcd52ce41e8abd43c5c7d7793278db1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0443\u0447\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 Excel, \u043d\u043e \u043f\u043e \u043c\u0435\u0440\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c. NetBox \u0436\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u0447\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432, IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 VLAN, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 VRF \u0438 \u0434\u0430\u0436\u0435 RT. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c DCIM \u0438 IPAM, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h3>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f IPAM \u0432 NetBox<\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/97b\/ff4\/2c1\/97bff42c142c243f7879e908a5056bf2.png\" width=\"1581\" height=\"778\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/97b\/ff4\/2c1\/97bff42c142c243f7879e908a5056bf2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 NetBox IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u0442 aggregates, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043b\u0438\u0431\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u0414\u0430\u043b\u0435\u0435 aggregates \u0440\u0430\u0441\u043f\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0412\u0441\u0451 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e: \u0432 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/638\/4e4\/bca\/6384e4bca9146b92f807673faaba4611.png\" width=\"1593\" height=\"507\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/638\/4e4\/bca\/6384e4bca9146b92f807673faaba4611.png\"\/><figcaption><\/figcaption><\/figure>\n<p>RIR \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u041a\u043e\u0433\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435, \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f RFC-\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5d4\/99e\/e0e\/5d499ee0e080d9a3016effc95048e1f6.png\" width=\"1594\" height=\"664\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d4\/99e\/e0e\/5d499ee0e080d9a3016effc95048e1f6.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0435\u0442\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u0430\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043b\u0438 \u043e\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 NetBox. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 Container, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0443 \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Active).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f2b\/e34\/c26\/f2be34c26f284eb83d3d4371c4eebfb6.png\" width=\"726\" height=\"417\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2b\/e34\/c26\/f2be34c26f284eb83d3d4371c4eebfb6.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u0435\u0442\u044c, \u0432\u0430\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, pool \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c, \u0440\u0430\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/872\/b51\/589\/872b5158960919745e348de08f20eacf.png\" width=\"691\" height=\"136\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/872\/b51\/589\/872b5158960919745e348de08f20eacf.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0436\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u0434\u0443\u0431\u043b\u044f\u043c\u0438. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u0445 NetBox \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a8a\/c16\/15a\/a8ac1615a6acbfe9723fa44f8290e450.png\" width=\"971\" height=\"57\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a8a\/c16\/15a\/a8ac1615a6acbfe9723fa44f8290e450.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430. \u0421\u0442\u043e\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 IP-\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 NetBox \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0430\u0437\u044b, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0435 \u0432\u0441\u0451 \u0442\u043e\u0447\u043d\u043e, \u0430 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0432\u043e\u0435\u0432\u0430\u0442\u044c \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0434\u0443\u0431\u043b\u0435\u043c \u043d\u0435\u0442. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044c \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432\u0441\u0451 \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<p>\u0412 GUI NetBox \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 IP \u0438 \u0441\u0435\u0442\u0435\u0439.<\/p>\n<h3>VLAN \u0433\u0440\u0443\u043f\u043f\u044b<\/h3>\n<p>\u042d\u0442\u043e \u043d\u0430\u0448\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 VLAN, \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 VLAN \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u0438 \u0432 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c VLAN \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 NAME, \u0438 ID \u2014 NetBox \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u043c\u043e\u0439\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043a\u0430\u043a \u043f\u043e ID, \u0442\u0430\u043a \u0438 \u043f\u043e NAME.<\/p>\n<p>\u0412 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u043e \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c. VLAN-\u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 L2-\u0434\u043e\u043c\u0435\u043d\u043e\u0432.<\/p>\n<h3>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 VRF\u00a0<\/h3>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u0434\u0435\u0442 \u0432 global table. \u041d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e VRF, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0440\u0435\u0434\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432 NetBox \u0432\u0435\u0434\u0435\u0442\u0435 \u0443\u0447\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b Services, \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0418\u043b\u0438 SSH \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<h3>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/h3>\n<p>\u0412 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0435\u0442\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430. \u0412 IPAM \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043b\u044e\u0434\u0438. \u0421\u0435\u0442\u0435\u0432\u044b\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0438\u043a\u0443 \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u0443\u0434\u0430 \u043e\u043d \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u0448\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 API \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u0421\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <em>\u0440\u043e\u043b\u0438<\/em>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0430\u0448\u0438 DEV-, TEST- \u0438 PROD-\u0441\u0440\u0435\u0434\u044b. \u0418\u043b\u0438 mgmnt-, data- \u0438 voice. \u0414\u043b\u044f \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0440\u043e\u043b\u044c. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 Sites \u0438\u043b\u0438 Tenants. Sites \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u044e, Tenants \u2014 \u043f\u0440\u043e \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\/\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u043d\u0430\u0439\u0442\u0438 mgmnt-\u0430\u0434\u0440\u0435\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u0435\u0439 DC. \u0417\u0434\u0435\u0441\u044c \u043b\u043e\u0433\u0438\u043a\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e \u0441\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u043e\u043b\u0438 tenants, sites \u0438 tags. \u0422\u0435\u0433\u0438 (\u043c\u0435\u0442\u043a\u0438) \u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438, \u044d\u0442\u043e \u043c\u0435\u0436\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c: \u043e\u0434\u0438\u043d \u0442\u0435\u0433 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0445, \u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u0422\u0435\u0433\u0438 \u0432 NetBox \u0446\u0432\u0435\u0442\u043d\u044b\u0435 \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435, \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>Tenants \u2014 \u044d\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0430\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043c\u0438. \u0423\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0441\u043b\u0443\u0433 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c, \u043d\u043e \u043c\u044b \u044d\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u041c\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u043e\u043b\u0438 DEV, TEST \u0438 PROD, \u0430 \u0434\u0430\u043b\u0435\u0435 \u0434\u0435\u043b\u0438\u043c \u0442\u0435\u0433\u0430\u043c\u0438 \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u0442\u0435\u0433\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e: \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u0430\u043a \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u043f\u043e NetBox \u0432 \u0446\u0435\u043b\u043e\u043c.<\/p>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u043e sites\/locations, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/p>\n<h3>\u0420\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 IP<\/h3>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u043c \u0437\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u043f\u043e\u0440\u0442\u0430\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f. \u0417\u0430\u0442\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0447\u0435\u0440\u0435\u0437 API NetBox \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0438 \u0432\u0437\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 IP-\u0430\u0434\u0440\u0435\u0441. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0434\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, VM), \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0430\u043a \u0436\u0435 \u0447\u0435\u0440\u0435\u0437 API \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0447\u0430\u0441\u0442\u0438 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u0423\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445. \u0422\u0430\u043a, \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0430\u0439\u0442\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u044d\u0442\u0430 \u0441\u0435\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430\u0448\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0427\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0437 NetBox \u0447\u0435\u0440\u0435\u0437 Napalm, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 NetBox \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0436\u0435\u043b\u0435\u0437\u043e\u043a.<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 phpIPAM<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 phpIPAM \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e PHP, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043d\u0435\u0442 \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e. API, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0438 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c. \u0415\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0443\u043f\u0430\u044e\u0442 NetBox \u0432 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0438 endpoints \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0442\u043e\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e.<\/p>\n<p>NetBox \u0436\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0432\u0441\u0435\u043c Python \u0438 \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u0443. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0430 \u0435\u0441\u043b\u0438 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439. \u0421 \u0432\u0435\u0440\u0441\u0438\u0438 3.2 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u0440\u043e\u0441\u043b\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c NetBox \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f. \u041d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 <a href=\"https:\/\/netdev.chat\/\"><u>Slack<\/u><\/a>.<\/p>\n<p>\u041d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 NetBox \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u0433\u0430\u043b\u043e\u0447\u043a\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 NetBox \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043a\u0430\u043a DCIM, \u0438 \u0443\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0436\u0438\u043b\u0441\u044f, \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043e\u0434\u043d\u0443.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u0438\u0437 phpIPAM \u0432 NetBox: \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043b\u0438\u0448\u043d\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u043c. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u043c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e, \u0438 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0438\u0431\u0440\u0430\u0442\u044c\u0441\u044f. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0434\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u043d. \u0412\u0430\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u2014 \u0440\u0430\u0437\u043e\u043c \u0438\u043b\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0445\u043e\u0440\u043e\u0448\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b).<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438\u0437 phpIPAM, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e \u043b\u043e\u0433\u0430\u043c, \u043a\u0442\u043e \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438 \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0441\u0440\u0430\u0437\u0443, \u0442\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0435\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u0431\u0435\u0437 \u043b\u043e\u0433\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u043e\u0434 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u0441 \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430 \u0434\u0435\u043d\u044c. \u041c\u044b \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435; \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0430 \u0441\u0440\u0430\u0437\u0443 \u0433\u043e\u0442\u043e\u0432\u044b \u0436\u0438\u0442\u044c \u043f\u043e-\u043d\u043e\u0432\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u044c phpIPAM \u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u00ab\u0412\u043e\u0448\u043b\u0438 \u0438 \u0432\u044b\u0448\u043b\u0438, \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 20 \u043c\u0438\u043d\u0443\u0442\u00bb.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0430\u0434\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441 NetBox, \u0438 \u0441 phpIPAM, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 ETL, \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448 \u0440\u0430\u0437\u043c\u0430\u0445, \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043f\u0440\u043e\u0433\u043d\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u043f\u043e\u0448\u043b\u0438 \u043f\u0438\u0442\u044c \u043a\u043e\u0444\u0435.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432 NetBox \u043f\u0440\u0438\u0434\u0443\u0442 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044e IPAM \u0432 NetBox. \u041d\u0430\u0432\u0435\u0440\u043d\u043e, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0415\u0441\u043b\u0438 \u0441 phpIPAM \u0431\u044b\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438\u0445 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u043e\u043c\u043e\u0447\u044c \u0441 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0435\u043c API NetBox. \u041e\u043d \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c API phpIPAM, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u0438\u0437 phpIPAM \u0432 NetBox: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0443 \u043d\u0430\u0441. \u041f\u043e\u043e\u0431\u0449\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0442\u0438, IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 VLAN \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0448\u043b\u044e\u0437\u0430\u0445 \u0438 DNS. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.<\/p>\n<p>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 phpIPAM \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u0438. \u0412 NetBox \u043e\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0440\u043e\u043b\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u2014 DEV, TEST, CERT, PROD. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u043e\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430, \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0433\u0438. \u041e\u043d\u0438 \u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a, \u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c tenants \u0438 sites, \u043d\u043e \u044d\u0442\u043e \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>\u0421 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0432 NetBox \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c ip-range, \u043d\u043e \u043c\u044b \u0438\u0445 \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043e\u043d\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u043f\u0440\u043e\u0444\u0438\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043e\u0431\u0432\u0435\u0441\u043e\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434 API \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0441\u043b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c aggregate<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c RIR<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c role<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c tag<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u0435\u0442\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 VLAN \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0435\u0442\u0438 \u0438 VLAN<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0438\u0434\u0430\u0442\u044c \u0440\u043e\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0438\u0434\u0430\u0442\u044c \u0442\u0435\u0433\u0438<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430 github \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/Callum027\/ipam-migrator\"><u>\u0440\u0435\u043f<\/u><\/a> \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043a\u043e\u0439 \u0432\u0441\u0435\u0433\u043e \u0438 \u0432\u0441\u044f \u0438\u0437 phpIPAM \u0432 NetBox. \u041d\u043e \u0441\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u043c, \u0442\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0435 \u0442\u0430\u043a (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438\u0437-\u0437\u0430 \u0441\u043c\u0435\u043d\u044b API), \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e. \u0414\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 API \u043a\u0430\u043a \u0432 NetBox, \u0442\u0430\u043a \u0438 phpIPAM \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c token. \u0414\u043b\u044f phpIPAM \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u0430\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0430 \u043a NetBox \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0435\u0442\u0435\u0439 \u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"python\">from typing import List, Dict, Optional from datetime import datetime from collections import Counter from json.decoder import JSONDecodeError from progress.bar import IncrementalBar import ipaddress import requests import backoff # \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430\u0434\u0440\u0435\u0441 \u0430\u043f\u0438 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b from credential import NETBOX_API_TOKEN, NETBOX_API, PHP_IPAM_API, PHP_IPAM_API_TOKEN # \u0445\u0435\u0434\u0435\u0440\u044b \u0434\u043b\u044f \u0430\u043f\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HEADERS_NETBOX = {     'Authorization': f'Token {NETBOX_API_TOKEN}',     'Content-Type': 'application\/json',     'Accept': 'application\/json', } HEADERS_PHPIPAM = {     'Content-Type': 'application\/json',     'token': PHP_IPAM_API_TOKEN } # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0434\u0440\u0435\u0441\u043e\u0432 # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432 counter = Counter(ipaddr=0, pref=0) requests.packages.urllib3.disable_warnings() # \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 5 \u0440\u0430\u0437 @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def pref_post_nb(     pref: str,     descr: Optional[str],     default_gateway: Optional[str],     gateway_from_id: Optional[str],     dns_name: Optional[str],     dns_servers: Optional[str] ) -> str:     # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0432 NetBox     netbox_api_endpoint = '\/ipam\/prefixes\/'     # \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043a \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435     if descr is None: descr = ''     if default_gateway is None: default_gateway = ''     if dns_name is None: dns_name = ''     if dns_servers is None: dns_servers = ''     # \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0448\u043b\u044e\u0437, \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0434\u0438\u043d     # \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 phpIPAM     # \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u0448\u043b\u044e\u0437\u0430     if default_gateway == gateway_from_id:         payload = {             'prefix': f'{pref}',             'description': f'{descr}',             'custom_fields':{                 'default_gateway': f'{default_gateway}',                 'dns_name': f'{dns_name}',                 'dns_servers': f'{dns_servers}'             }         }     else:         # \u0435\u0441\u043b\u0438 \u0448\u043b\u044e\u0437\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u043b\u0438 \u043d\u0435\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e, \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u043e\u0431\u0430         payload = {             'prefix': f'{pref}',             'description': f'{descr}',             'custom_fields':{                 'default_gateway': f'Default gateway: {default_gateway}, Gateway: {gateway_from_id}',                 'dns_name': f'{dns_name}',                 'dns_servers': f'{dns_servers}'             }         }     pref_post_resp = requests.post(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         ).json()     return f'SEND: {payload}, RECIVE: {pref_post_resp}'   @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def ipaddr_post_nb(ipaddr: str, descr: Optional[str], host: Optional[str]) -> str:     # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0432 NetBox     netbox_api_endpoint = '\/ipam\/ip-addresses\/'     # \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u043c\u0435\u043d\u0438 \u0445\u043e\u0441\u0442\u0430, \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043a \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435     if descr is None: descr = ''     if host is None: host = ''     payload = {         'address': f'{ipaddr}',         'description': f'{descr}, hostname: {host}'     }     ipaddr_post_resp = requests.post(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         ).json()     return f'SEND: {payload}, RECIVE: {ipaddr_post_resp}'   @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def sec_get_from_phpipam() -> List[Dict[str, Optional[str]]]:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0435\u043a\u0446\u0438\u0438 \u0438\u0437 phpIPAM     php_ipam_api_endpoint = '\/autoNB\/sections\/'     sections_phpipam_resp = requests.get(         PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False         ).json()['data']     return sections_phpipam_resp   @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def pref_get_from_sec(sec_id: str) -> List[Dict[str, Optional[str]]]:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438     php_ipam_api_endpoint = f'\/autoNB\/sections\/{int(sec_id)}\/subnets\/'     pref_phpipam_resp = requests.get(         PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False         ).json()['data']     return pref_phpipam_resp @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def ipaddr_get_from_pref(pref_id: str) -> Optional[List[Dict[str, Optional[str]]]]:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438     php_ipam_api_endpoint = f'\/autoNB\/subnets\/{int(pref_id)}\/addresses\/'     try:         ipaddr_phpipam_resp = requests.get(             PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False             ).json()['data']         return ipaddr_phpipam_resp     # \u0435\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043d\u0435\u0442 \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435     except KeyError:         return None def pref_checker(pref: str) -> bool:     # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u0430 \u043d\u0435 \u0430\u0434\u0440\u0435\u0441     try:         ipaddress.ip_network(pref)         return True     except ValueError:         return False @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def ipaddr_by_id(id: Optional[str]) -> str:     # \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0448\u043b\u044e\u0437\u0430 \u043f\u043e \u0435\u0433\u043e ID     # \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0435\u0440\u043d\u0435\u043c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443     if id is None: return ''     php_ipam_api_endpoint = f'\/autoNB\/addresses\/{id}\/'     ipaddr_phpipam_resp = requests.get(         PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False         ).json()['data']['ip']     # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441     return ipaddr_phpipam_resp   @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_aggregate_from_netbox() -> List[str]:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0438\u0437 NetBox     aggregates = []     netbox_api_endpoint = '\/ipam\/aggregates\/'     aggregates_get_resp = requests.get(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, verify=False         ).json()['results']     for aggregate in aggregates_get_resp:         aggregates.append(aggregate['prefix'])     return aggregates def main() -> None:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443     # \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430     start_time = datetime.now()     # \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043b\u043e\u0433 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u043f\u043e \u043f\u043b\u0430\u043d\u0443     with open('data\/transfer_prefixes_from_phpipam_to_netbox.txt', 'a') as f:         aggregates = get_aggregate_from_netbox()         sections_phpipam_resp = sec_get_from_phpipam()         # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u043a\u0446\u0438\u0439 \u0438\u0437 phpIPAM         bar = IncrementalBar('section : ' + '\\t', max=len(sections_phpipam_resp))         # \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0441\u0435\u043a\u0446\u0438\u044f\u043c         for sec in sections_phpipam_resp:             bar.next()             # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438             pref_phpipam_resp = pref_get_from_sec(sec['id'])             # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b             if len(pref_phpipam_resp) != 0:                 # \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u043c \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438                 for pref in pref_phpipam_resp:                     # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e \u043a\u043b\u044e\u0447\u0443, \u0447\u0442\u043e \u0441\u0435\u0442\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435                     # \u0432 phpIPAM \u0431\u044b\u0432\u0430\u044e\u0442 \u0441\u0435\u0442\u0438 \u043f\u0430\u043f\u043a\u0438, \u043d\u0430\u043c \u0442\u0430\u043a\u0438\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b                     if pref['subnet'] is not None:                         # \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441 \u043c\u0430\u0441\u043a\u043e\u0439                         pref_with_mask = f'{pref[\"subnet\"]}\/{pref[\"mask\"]}'                         # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0435 \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 NetBox                         # \u0435\u0441\u043b\u0438 \u0438\u0437 \u043d\u0438\u0445, \u0442\u043e \u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0435\u0444\u0438\u043a\u0441                         if pref_with_mask not in aggregates:                             # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0435\u0442\u044c, \u0430 \u043d\u0435 \u0430\u0434\u0440\u0435\u0441                             if pref_checker(pref_with_mask):                                 # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u0448\u043b\u044e\u0437 \u043f\u043e ID \u0430\u0434\u0440\u0435\u0441\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e None                                 gateway_from_id = ipaddr_by_id(pref.get('gatewayId'))                                 # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c, DNS \u0438 Gateway                                 added_pref = pref_post_nb(                                     pref_with_mask,                                     pref['description'],                                     pref['Default Gateway'],                                     gateway_from_id,                                     # \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043d\u0435\u043f\u043b\u043e\u0441\u043a\u0438\u0445 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439,                                     # \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 phpIPAM \u043d\u0435\u0442, \u0442\u043e \u0438 \u043f\u043e\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e                                     # \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442                                     # \u0442\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 get \u0432\u0435\u0440\u043d\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432\u0442\u043e\u0440\u043e\u043c\u0443 get                                     pref.get('nameservers', {}).get('name'),                                     pref.get('nameservers', {}).get('namesrv1')                                 )                                 # \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a                                 counter.update({'pref': 1})                                 # \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043b\u043e\u0433                                 f.write(f'{datetime.now()} {added_pref}\\n')                                 # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0432 phpIPAM                                 ipaddr_phpipam_resp = ipaddr_get_from_pref(pref['id'])                                 # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435                                 if ipaddr_phpipam_resp is not None:                                     # \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435                                     for ipaddr in ipaddr_phpipam_resp:                                         # \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0441 \u043c\u0430\u0441\u043a\u043e\u0439                                         ipaddr_with_mask = f'{ipaddr[\"ip\"]}\/{pref[\"mask\"]}'                                         # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 NetBox \u0430\u0434\u0440\u0435\u0441\u0441, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0438\u043c\u044f \u0445\u043e\u0441\u0442\u0430                                         added_addr = ipaddr_post_nb(                                             ipaddr_with_mask,                                             ipaddr['description'],                                             ipaddr['hostname']                                         )                                         counter.update({'ipaddr': 1})                                         f.write(f'{datetime.now()}: {added_addr}\\n')                             else:                                 # \u0435\u0441\u043b\u0438 \u0441\u0435\u0442\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0430\u0434\u0440\u0435\u0441\u043e\u043c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441                                 added_addr = ipaddr_post_nb(pref_with_mask, pref['description'], '')                                 counter.update({'ipaddr': 1})                                 f.write(f'{datetime.now()}: {added_addr} not a prefix\\n')         bar.finish()     # \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0438 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438     print(f'{counter[\"ipaddr\"]} ip addreses added')     print(f'{counter[\"pref\"]} prefixes added')     print(f'Script took {datetime.now() - start_time} to run') if __name__ == '__main__':     main()<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 VLAN.<\/p>\n<pre><code class=\"python\">from typing import List, Dict, Any, Optional, Union from datetime import datetime from collections import Counter from json.decoder import JSONDecodeError from progress.bar import IncrementalBar import requests import backoff # \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430\u0434\u0440\u0435\u0441 \u0430\u043f\u0438 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b from credential import NETBOX_API_TOKEN, NETBOX_API, PHP_IPAM_API, PHP_IPAM_API_TOKEN # \u0445\u0435\u0434\u0435\u0440\u044b \u0434\u043b\u044f \u0430\u043f\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HEADERS_NETBOX = {     'Authorization': f'Token {NETBOX_API_TOKEN}',     'Content-Type': 'application\/json',     'Accept': 'application\/json', } HEADERS_PHPIPAM = {     'Content-Type': 'application\/json',     'token': PHP_IPAM_API_TOKEN } # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0440\u0443\u043f\u043f - \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0440\u0435\u043c L2 \u0434\u043e\u043c\u0435\u043d\u044b \u0438\u0437 IPAM \u043a\u0430\u043a \u0435\u0441\u0442\u044c # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e VLAN # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a VLAN counter = Counter(groups_to_nb=0, vlan=0, vlan_to_pref=0) requests.packages.urllib3.disable_warnings() # \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 5 \u0440\u0430\u0437 @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_all_l2_domain_phpipam() -> List[Dict[str, Any]]:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c l2 \u0434\u043e\u043c\u0435\u043d\u044b \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c     l2_domains = []     php_ipam_api_endpoint = '\/autoNB\/l2domains\/'     l2_domains_phpipam_resp = requests.get(         PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False         ).json()['data']     for l2_domain in l2_domains_phpipam_resp:         l2_domains.append({             'id': l2_domain['id'],             'name': l2_domain['name'],             'description': l2_domain['description'],         })     return l2_domains @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_l2_domain_by_id_phpipam(id:str) -> Dict[str, Any]:     # \u0431\u0435\u0440\u0435\u043c l2 \u0434\u043e\u043c\u0435\u043d \u043f\u043e \u0435\u0433\u043e ID     php_ipam_api_endpoint = f'\/autoNB\/l2domains\/{id}\/'     l2_domain_phpipam_resp = requests.get(         PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False         ).json()['data']     l2_domain_group = {         'id': l2_domain_phpipam_resp['id'],         'name': l2_domain_phpipam_resp['name'],         'description': l2_domain_phpipam_resp['description'],     }     return l2_domain_group @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_vlans_phpipam() -> List[Dict[str, Any]]:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c VLAN \u0438 phpIPAM     vlans = []     php_ipam_api_endpoint = '\/autoNB\/vlan\/'     vlans_phpipam_resp = requests.get(         PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False         ).json()['data']     for vlan in vlans_phpipam_resp:         vlans.append({             'idphp': vlan['vlanId'],             'name': vlan['name'],             'vid': vlan['number'],             'description': vlan['description'],             'l2_domain': vlan['domainId'],         })     return vlans @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_pref_for_vlans_phpipam(idphp) -> Union[List[str], bool]:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 VLAN, \u0432 \u0441\u043f\u0438\u0441\u043e\u043a     ips = []     php_ipam_api_endpoint = f'\/autoNB\/vlan\/{idphp}\/subnets\/'     try:         pref_from_vlan_phpipam_resp = requests.get(             PHP_IPAM_API + php_ipam_api_endpoint, headers=HEADERS_PHPIPAM, verify=False             ).json()['data']         for ip in pref_from_vlan_phpipam_resp:             ips.append(f'{ip[\"subnet\"]}\/{ip[\"mask\"]}')         return ips     except KeyError:         ips = False         return ips @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def post_group_nb(name: str, description: Optional[str]) -> str:     # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c l2 \u0434\u043e\u043c\u0435\u043d\u044b \u0438\u0437 phpIPAM \u043a\u0430\u043a \u0433\u0440\u0443\u043f\u043f\u044b \u0432 NetBox     netbox_api_endpoint = '\/ipam\/vlan-groups\/'     if description is None: description = ''     # \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 slug \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432     payload = {         'name': name,         'description': description,         'slug': f'{name.replace(\" \", \"\").lower()}',     }     group_post_resp = requests.post(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         ).json()     return f'SEND: {payload}, RECIVE: {group_post_resp}' @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def post_vlan_on_group_nb(vid : int, name: str, description: Optional[str], group_id: int) -> str:     # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c VLAN \u0432 \u0433\u0440\u0443\u043f\u043f\u044b     netbox_api_endpoint = '\/ipam\/vlans\/'     if description is None: description = ''     # \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f ID \u0433\u0440\u0443\u043f\u043f\u044b     payload = {         'name': name,         'description': description,         'vid': vid,         'group': group_id,     }     pref_post_resp = requests.post(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         ).json()     return f'SEND: {payload}, RECIVE: {pref_post_resp}' @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def patch_vlan_to_pref_nb(pref_id: int, vlan_id: int) -> str:     # \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c VLAN \u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441     netbox_api_endpoint = '\/ipam\/prefixes\/'     # \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f ID VLAN \u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432     payload = [{         'id': pref_id,         'vlan': vlan_id,     }]     pref_patch_resp = requests.patch(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         ).json()     return f'SEND: {payload}, RECIVE: {pref_patch_resp}' @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_vlan_id_from_nb(vlan: str, group_id: int) -> int:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c ID VLAN \u0438\u0437 NetBox     netbox_api_endpoint = '\/ipam\/vlans\/'     # \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 VLAN \u0438 ID \u0435\u0433\u043e \u0433\u0440\u0443\u043f\u043f\u044b     params = {         'vid': vlan,         'group_id': group_id,     }     vlan_get_id_resp = requests.get(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, params=params, verify=False         ).json()[\"results\"][0][\"id\"]     return vlan_get_id_resp @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_pref_id_from_nb(prefix: str) -> int:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c ID \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430     netbox_api_endpoint = '\/ipam\/prefixes\/'     params = {         'prefix': prefix     }     pref_get_id_resp = requests.get(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, params=params, verify=False         ).json()['results'][0]['id']     return pref_get_id_resp @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_group_id_from_nd() -> Dict[str, int]:     # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c ID \u0433\u0440\u0443\u043f\u043f \u0438\u0437 NetBox,     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0438\u043c\u044f \u0438 ID     # \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0433\u0440\u0443\u043f\u043f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c     group_name_id = {}     netbox_api_endpoint = '\/ipam\/vlan-groups\/'     groups_get_resp = requests.get(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, verify=False         ).json()['results']     if groups_get_resp:         for group in groups_get_resp:             group_name_id[group['name']] = group['id']         return group_name_id     else: return group_name_id def main():     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443     # \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430     start_time = datetime.now()     # \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043b\u043e\u0433 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u043f\u043e \u043f\u043b\u0430\u043d\u0443     with open('data\/transfer_vlan_from_phpipam_to_netbox.txt', 'a') as f:         # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c VLANS         vlans = get_vlans_phpipam()         # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e VLAN         bar = IncrementalBar('Vlans : ' + '\\t', max=len(vlans))         # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u043c\u0435\u043d\u044b         l2_domains = get_all_l2_domain_phpipam()         # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 NetBox         group_name_id_pre = get_group_id_from_nd()         for l2_domain in l2_domains:             # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u043c \u043d\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442             if not group_name_id_pre.get(l2_domain['name']):                 # \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u0434\u043e\u043c\u0435\u043d\u0430\u043c, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0432 NetBox                 post_groups_nb_results = post_group_nb(l2_domain['name'], l2_domain['description'])                 # \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043b\u043e\u0433 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u043e\u0439                 f.write(f'{datetime.now()} {post_groups_nb_results}\\n')                 # \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 1                 counter.update({'groups_to_nb': 1})         # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c ID \u0433\u0440\u0443\u043f\u043f \u0438\u0437 NetBox         group_name_id = get_group_id_from_nd()         # \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c VLAN         for vlan in vlans:             # \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 1             bar.next()             # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e VLAN, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f             # \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0433\u0440\u0443\u043f\u043f\u0435 \u0438 \u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u0445             vlan['group'] = get_l2_domain_by_id_phpipam(vlan['l2_domain'])             vlan['prefixes'] = get_pref_for_vlans_phpipam(vlan['idphp'])             # \u0431\u0435\u0440\u0435\u043c ID \u0433\u0440\u0443\u043f\u043f\u044b \u044d\u0442\u043e\u0433\u043e VLAN \u0438\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044f             group_id = group_name_id[vlan['group']['name']]             # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c VLAN \u0432 NetBox             post_vlan_result = post_vlan_on_group_nb(                 vlan['vid'],                 vlan['name'],                 vlan['description'],                 group_id,             )             f.write(f'{datetime.now()} {post_vlan_result}\\n')             counter.update({'vlan': 1})             # \u0435\u0441\u043b\u0438 \u0443 VLAN \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u0445             if vlan['prefixes']:                 # \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e VLAN ID \u0435\u0441\u0442\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 NetBox                 try:                     vlan_id_nb = get_vlan_id_from_nb(vlan['vid'], group_id)                     for prefix in vlan['prefixes']:                         # \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0435\u0441\u0442\u044c \u0432 NetBox                         try:                             pref_id_nb = get_pref_id_from_nb(prefix)                         except IndexError:                             # \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u043d\u0435\u0442, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043b\u043e\u0433                             f.write(f'Pref not exist {datetime.now()} {prefix}\\n')                             continue                         # \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c VLAN \u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441                         patch_vlan_to_pref_result = patch_vlan_to_pref_nb(pref_id_nb, vlan_id_nb)                         f.write(f'{datetime.now()} {patch_vlan_to_pref_result}\\n')                         counter.update({'vlan_to_pref': 1})                 except IndexError:                     # \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d, \u0442\u0430\u043a\u043e\u0433\u043e VLAN ID \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435                     f.write(f'Duplicate vlan name {datetime.now()} {vlan}\\n')                     continue         bar.finish()     # \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c     print(f'{counter[\"groups_to_nb\"]} groups added to NetBox')     print(f'{counter[\"vlan\"]} vlanes added to NetBox')     print(f'{counter[\"vlan_to_pref\"]} prefixes matched with vlans')     print(f'Script took {datetime.now() - start_time} to run') if __name__ == '__main__':     main() <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u2014 \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e \u043a\u043e\u0444\u0435 \u0441 \u0431\u0443\u043b\u043e\u0447\u043a\u043e\u0439 \ud83d\ude42<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c, NetBox \u043d\u0435 \u0434\u0430\u0441\u0442 \u043b\u0435\u0433\u043a\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 VLAN, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a \u043d\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f:<\/p>\n<ol>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 VLAN<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u043d\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u0435\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 API, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u0432\u0434\u0440\u0443\u0433 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0443\u0447\u0435\u043b \u0438 \u0432 \u0431\u0430\u0437\u0435, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438 IPAM NetBox:<\/p>\n<pre><code class=\"python\">from typing import List, Dict, Optional from datetime import datetime from json.decoder import JSONDecodeError import requests import backoff from credential import NETBOX_API_TOKEN, NETBOX_API requests.packages.urllib3.disable_warnings() HEADERS_NETBOX = {     'Authorization': f'Token {NETBOX_API_TOKEN}',     'Content-Type': 'application\/json',     'Accept': 'application\/json', } @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_vlans(limit_per_page: int = 50) -> Optional[List[Dict[str, int]]]:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c ID VLAN \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 50     vlan_ids = []     netbox_api_endpoint = '\/ipam\/vlans\/'     params = {         'limit': f'{limit_per_page}'     }     vlans_get_resp = requests.get(         NETBOX_API + netbox_api_endpoint, params=params, headers=HEADERS_NETBOX, verify=False         ).json()['results']     # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0435\u0449\u0435 \u0435\u0441\u0442\u044c VLAN     if vlans_get_resp:         for vlan in vlans_get_resp:             vlan_ids.append({'id': vlan['id']})         return vlan_ids     # \u0435\u0441\u043b\u0438 VLAN \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c None     else: return @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def delete_vlans(vlans: List[Dict[str, int]]):     # \u0443\u0434\u0430\u043b\u044f\u0435\u043c VLAN \u043f\u0430\u0447\u043a\u043e\u0439 \u043f\u043e 50     netbox_api_endpoint = '\/ipam\/vlans\/'     # \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u0441 ID     payload = vlans     vlans_delete_resp = requests.delete(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         )     # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430     print(vlans_delete_resp.status_code) @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_prefixes(limit_per_page: int = 50) -> Optional[List[Dict[str, int]]]:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c ID \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 50     prefixes_ids = []     netbox_api_endpoint = '\/ipam\/prefixes\/'     params = {         'limit': f'{limit_per_page}'     }     prefixes_get_resp = requests.get(         NETBOX_API + netbox_api_endpoint, params=params, headers=HEADERS_NETBOX, verify=False         ).json()['results']     # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b     if prefixes_get_resp:         for prefix in prefixes_get_resp:             prefixes_ids.append({'id': prefix['id']})         return prefixes_ids     # \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c None     else: return @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def delete_prefix(prefixes: List[Dict[str, int]]):     # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 50     netbox_api_endpoint = '\/ipam\/prefixes\/'     # \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c ID     payload = prefixes     prefixes_delete_resp = requests.delete(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         )     # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u0442\u0430\u0442\u0443\u0441-\u043a\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430     print(prefixes_delete_resp.status_code) @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def get_ipaddresses(limit_per_page: int = 50) -> Optional[List[Dict[str, int]]]:     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c ID \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 50     ipaddresses_ids = []     netbox_api_endpoint = '\/ipam\/ip-addresses\/'     params = {         'limit': f'{limit_per_page}'     }     ipaddresses_get_resp = requests.get(         NETBOX_API + netbox_api_endpoint, params=params, headers=HEADERS_NETBOX, verify=False         ).json()['results']     # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430     if ipaddresses_get_resp:         for ipaddres in ipaddresses_get_resp:             ipaddresses_ids.append({'id': ipaddres['id']})         return ipaddresses_ids     # \u0435\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c None     else: return @backoff.on_exception(     backoff.expo,     (requests.exceptions.RequestException, JSONDecodeError),     max_tries=5     ) def delete_ipaddr(ipaddresses: List[Dict[str, int]]):     # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 50     netbox_api_endpoint = '\/ipam\/ip-addresses\/'     # \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 ID     payload = ipaddresses     ipaddresses_delete_resp = requests.delete(         NETBOX_API + netbox_api_endpoint, headers=HEADERS_NETBOX, json=payload, verify=False         )     # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430     print(ipaddresses_delete_resp.status_code) def main():     # \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443     # \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c     start_time = datetime.now()     # \u043a\u0440\u0443\u0442\u0438\u043c\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f None     while get_prefixes():         # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0430\u0447\u043a\u0430 ID 50 \u0448\u0442\u0443\u043a         prefixes_ids = get_prefixes()         # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u0430\u0447\u043a\u0443         delete_prefix(prefixes_ids)     while get_vlans():         vlan_ids = get_vlans()         delete_vlans(vlan_ids)     while get_ipaddresses():         ipaddresses_ids = get_ipaddresses()         delete_ipaddr(ipaddresses_ids)     print(f'Script took {datetime.now() - start_time} to run') if __name__ == '__main__':     main() \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 credential.py \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432: NETBOX_API_TOKEN = '\u0422\u041e\u041a\u0415\u041d' NETBOX_API = 'https:\/\/netbox\/api\/'   PHP_IPAM_API = 'https:\/\/ipam\/api\/' PHP_IPAM_API_TOKEN = '\u0422\u041e\u041a\u0415\u041d' <\/code><\/pre>\n<p>\u041b\u0443\u0447\u0448\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c NetBox \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u044d\u0442\u0430\u043f\u0443. \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442 \u0434\u0435\u043d\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430, \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u043d\u0430 PROD NetBox, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c phpIPAM \u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u0430\u0437\u044b \u043d\u0435 \u0440\u0430\u0437\u044a\u0435\u0437\u0436\u0430\u043b\u0438\u0441\u044c, \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c. \u041f\u043e\u043c\u043e\u0433\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0440\u0435\u0448\u0430\u0435\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. PhpIPAM \u043d\u0435 \u0442\u0443\u0448\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 (\u0432\u0434\u0440\u0443\u0433 \u043c\u044b \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0431\u044b\u043b\u0438). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0435\u0440\u0436\u0438\u043c \u043d\u0430\u0433\u043e\u0442\u043e\u0432\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 phpIPAM, \u0435\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0434\u0440\u0443\u0433 \u0441\u043b\u0435\u0442\u0438\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f, \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0433\u043e \u043e\u043d \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>\u041c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0432 \u043c\u043e\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 JSON \u0438\u0437 phpIPAM \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c Mongo \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u044f \u0432\u0441\u0451 \u043d\u0430 \u043b\u0435\u0442\u0443. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0435 \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e ID \u0443 NetBox. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c ETL, \u0432\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f webhook \u0438\u0437 NetBox. \u0422\u0430\u043a\u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0431\u0430\u0437\u044b, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 100%, \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c.<\/p>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 <a href=\"https:\/\/demo.netbox.dev\/\"><u>\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b NetBox<\/u><\/a>. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u043e\u0441\u0432\u043e\u0438\u043b\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 custom fields \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 conditional webhooks \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 NetBox \u0438 Cisco ACI.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/678124\/\"> https:\/\/habr.com\/ru\/articles\/678124\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/company\/rosbank\/blog\/654987\/\"><u>\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u043b\u0430\u0434\u0438\u0442\u044c \u043a\u0430\u0431\u0435\u043b\u044c-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u0432 NetBox \u2014 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435 \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043a \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0438, \u043f\u043e \u0437\u0430\u044f\u0432\u043a\u0430\u043c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u0437\u0430\u0442\u0440\u043e\u043d\u0443 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 NetBox \u0438\u0437 phpIPAM. \u0412\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430\u043c\u0438 NetBox \u0432\u0435\u0440\u0441\u0438\u0438 3.2, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>IPAM (IP-\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f) \u0432 NetBox<\/h3>\n<p>\u0412\u0435\u0434\u0435\u043d\u0438\u0435 IPAM \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f NetBox. DCIM, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043d\u0443\u0436\u0435\u043d \u0438 \u043d\u0435 \u0432\u0441\u0435\u043c, \u043d\u043e \u0431\u0435\u0437 IPAM \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0425\u043e\u0442\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0432 NetBox \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430 IPAM. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0432\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0443\u0447\u0435\u0442 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 Excel, \u043d\u043e \u043f\u043e \u043c\u0435\u0440\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c. NetBox \u0436\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u0447\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432, IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 VLAN, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 VRF \u0438 \u0434\u0430\u0436\u0435 RT. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c DCIM \u0438 IPAM, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h3>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f IPAM \u0432 NetBox<\/h3>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 NetBox IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u0442 aggregates, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043b\u0438\u0431\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u0414\u0430\u043b\u0435\u0435 aggregates \u0440\u0430\u0441\u043f\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0412\u0441\u0451 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e: \u0432 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>RIR \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u041a\u043e\u0433\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435, \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f RFC-\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0435\u0442\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u0430\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043b\u0438 \u043e\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 NetBox. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 Container, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0443 \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Active).<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u0435\u0442\u044c, \u0432\u0430\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, pool \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c, \u0440\u0430\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0436\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u0434\u0443\u0431\u043b\u044f\u043c\u0438. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u0445 NetBox \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430. \u0421\u0442\u043e\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 IP-\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432 NetBox \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0430\u0437\u044b, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0435 \u0432\u0441\u0451 \u0442\u043e\u0447\u043d\u043e, \u0430 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0432\u043e\u0435\u0432\u0430\u0442\u044c \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0434\u0443\u0431\u043b\u0435\u043c \u043d\u0435\u0442. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044c \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432\u0441\u0451 \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<p>\u0412 GUI NetBox \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 IP \u0438 \u0441\u0435\u0442\u0435\u0439.<\/p>\n<h3>VLAN \u0433\u0440\u0443\u043f\u043f\u044b<\/h3>\n<p>\u042d\u0442\u043e \u043d\u0430\u0448\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 VLAN, \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 VLAN \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u0438 \u0432 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c VLAN \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 NAME, \u0438 ID \u2014 NetBox \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u043c\u043e\u0439\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043a\u0430\u043a \u043f\u043e ID, \u0442\u0430\u043a \u0438 \u043f\u043e NAME.<\/p>\n<p>\u0412 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u043e \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c. VLAN-\u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 L2-\u0434\u043e\u043c\u0435\u043d\u043e\u0432.<\/p>\n<h3>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 VRF\u00a0<\/h3>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u0434\u0435\u0442 \u0432 global table. \u041d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e VRF, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0440\u0435\u0434\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432 NetBox \u0432\u0435\u0434\u0435\u0442\u0435 \u0443\u0447\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b Services, \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0418\u043b\u0438 SSH \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<h3>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e<\/h3>\n<p>\u0412 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0435\u0442\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430. \u0412 IPAM \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043b\u044e\u0434\u0438. \u0421\u0435\u0442\u0435\u0432\u044b\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0438\u043a\u0443 \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u0443\u0434\u0430 \u043e\u043d \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u0448\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 API \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u0421\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <em>\u0440\u043e\u043b\u0438<\/em>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0430\u0448\u0438 DEV-, TEST- \u0438 PROD-\u0441\u0440\u0435\u0434\u044b. \u0418\u043b\u0438 mgmnt-, data- \u0438 voice. \u0414\u043b\u044f \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0440\u043e\u043b\u044c. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 Sites \u0438\u043b\u0438 Tenants. Sites \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u044e, Tenants \u2014 \u043f\u0440\u043e \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\/\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u043d\u0430\u0439\u0442\u0438 mgmnt-\u0430\u0434\u0440\u0435\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u0435\u0439 DC. \u0417\u0434\u0435\u0441\u044c \u043b\u043e\u0433\u0438\u043a\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e \u0441\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u043e\u043b\u0438 tenants, sites \u0438 tags. \u0422\u0435\u0433\u0438 (\u043c\u0435\u0442\u043a\u0438) \u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438, \u044d\u0442\u043e \u043c\u0435\u0436\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c: \u043e\u0434\u0438\u043d \u0442\u0435\u0433 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0445, \u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u0422\u0435\u0433\u0438 \u0432 NetBox \u0446\u0432\u0435\u0442\u043d\u044b\u0435 \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435, \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>Tenants \u2014 \u044d\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0430\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043c\u0438. \u0423\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0441\u043b\u0443\u0433 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c, \u043d\u043e \u043c\u044b \u044d\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u041c\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u043e\u043b\u0438 DEV, TEST \u0438 PROD, \u0430 \u0434\u0430\u043b\u0435\u0435 \u0434\u0435\u043b\u0438\u043c \u0442\u0435\u0433\u0430\u043c\u0438 \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u0442\u0435\u0433\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e: \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u0430\u043a \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u043f\u043e NetBox \u0432 \u0446\u0435\u043b\u043e\u043c.<\/p>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u043e sites\/locations, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/p>\n<h3>\u0420\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 IP<\/h3>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u043c \u0437\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u043f\u043e\u0440\u0442\u0430\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f. \u0417\u0430\u0442\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0447\u0435\u0440\u0435\u0437 API NetBox \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0438 \u0432\u0437\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 IP-\u0430\u0434\u0440\u0435\u0441. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0434\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, VM), \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u0430\u043a \u0436\u0435 \u0447\u0435\u0440\u0435\u0437 API \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0447\u0430\u0441\u0442\u0438 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u0423\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445. \u0422\u0430\u043a, \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0430\u0439\u0442\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u044d\u0442\u0430 \u0441\u0435\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430\u0448\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0427\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0437 NetBox \u0447\u0435\u0440\u0435\u0437 Napalm, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 NetBox \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0436\u0435\u043b\u0435\u0437\u043e\u043a.<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 phpIPAM<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 phpIPAM \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e PHP, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043d\u0435\u0442 \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e. API, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0438 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c. \u0415\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0443\u043f\u0430\u044e\u0442 NetBox \u0432 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0438 endpoints \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0442\u043e\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e.<\/p>\n<p>NetBox \u0436\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0432\u0441\u0435\u043c Python \u0438 \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u0443. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0430 \u0435\u0441\u043b\u0438 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439. \u0421 \u0432\u0435\u0440\u0441\u0438\u0438 3.2 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u0440\u043e\u0441\u043b\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c NetBox \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f. \u041d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 <a href=\"https:\/\/netdev.chat\/\"><u>Slack<\/u><\/a>.<\/p>\n<p>\u041d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 NetBox \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u0433\u0430\u043b\u043e\u0447\u043a\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 NetBox \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043a\u0430\u043a DCIM, \u0438 \u0443\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0436\u0438\u043b\u0441\u044f, \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043e\u0434\u043d\u0443.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u0438\u0437 phpIPAM \u0432 NetBox: \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043b\u0438\u0448\u043d\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u043c. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u043c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e, \u0438 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0438\u0431\u0440\u0430\u0442\u044c\u0441\u044f. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0434\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u043d. \u0412\u0430\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u2014 \u0440\u0430\u0437\u043e\u043c \u0438\u043b\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0445\u043e\u0440\u043e\u0448\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b).<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438\u0437 phpIPAM, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e \u043b\u043e\u0433\u0430\u043c, \u043a\u0442\u043e \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438 \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0441\u0440\u0430\u0437\u0443, \u0442\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0435\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u0431\u0435\u0437 \u043b\u043e\u0433\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u043e\u0434 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u0441 \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430 \u0434\u0435\u043d\u044c. \u041c\u044b \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435; \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0430 \u0441\u0440\u0430\u0437\u0443 \u0433\u043e\u0442\u043e\u0432\u044b \u0436\u0438\u0442\u044c \u043f\u043e-\u043d\u043e\u0432\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u044c phpIPAM \u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u00ab\u0412\u043e\u0448\u043b\u0438 \u0438 \u0432\u044b\u0448\u043b\u0438, \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 20 \u043c\u0438\u043d\u0443\u0442\u00bb.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0430\u0434\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441 NetBox, \u0438 \u0441 phpIPAM, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 ETL, \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448 \u0440\u0430\u0437\u043c\u0430\u0445, \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043f\u0440\u043e\u0433\u043d\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u043f\u043e\u0448\u043b\u0438 \u043f\u0438\u0442\u044c \u043a\u043e\u0444\u0435.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432 NetBox \u043f\u0440\u0438\u0434\u0443\u0442 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044e IPAM \u0432 NetBox. \u041d\u0430\u0432\u0435\u0440\u043d\u043e, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0415\u0441\u043b\u0438 \u0441 phpIPAM \u0431\u044b\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438\u0445 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u043e\u043c\u043e\u0447\u044c \u0441 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0435\u043c API NetBox. \u041e\u043d \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c API phpIPAM, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u0438\u0437 phpIPAM \u0432 NetBox: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0443 \u043d\u0430\u0441. \u041f\u043e\u043e\u0431\u0449\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0442\u0438, IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438 VLAN \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0448\u043b\u044e\u0437\u0430\u0445 \u0438 DNS. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.<\/p>\n<p>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 phpIPAM \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u0438. \u0412 NetBox \u043e\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0440\u043e\u043b\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u2014 DEV, TEST, CERT, PROD. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u043e\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430, \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0433\u0438. \u041e\u043d\u0438 \u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a, \u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c tenants \u0438 sites, \u043d\u043e \u044d\u0442\u043e \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>\u0421 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0432 NetBox \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c ip-range, \u043d\u043e \u043c\u044b \u0438\u0445 \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043e\u043d\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u043f\u0440\u043e\u0444\u0438\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043e\u0431\u0432\u0435\u0441\u043e\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434 API \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0441\u043b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c aggregate<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c RIR<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c role<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c tag<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u0435\u0442\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 VLAN \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0435\u0442\u0438 \u0438 VLAN<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0438\u0434\u0430\u0442\u044c \u0440\u043e\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0438\u0434<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-392077","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/392077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=392077"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/392077\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=392077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=392077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=392077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}