Dalam seri ADSM sebelumnya, kami mengembangkan kerangka kerja otomatisasi, menemukan mengapa virtualisasi muncul dan cara kerjanya. Pada bagian
terakhir, kami memilih dan membenarkan desain jaringan, peran perangkat, produsen, memutuskan LLD (pengalamatan, perutean, jumlah Sistem Otonomi).
Sekarang kita siap untuk berpikir tentang bagaimana menyimpan seluruh informasi ini dan untuk mengambilnya dengan mudah di masa depan.
Tidak, tentu saja, ada perusahaan saat ini yang melacak alamat IP yang dialokasikan dalam spreadsheet Excel. Tapi ini bukan cara kita.
Bahkan untuk kantor ukuran terkecil di beberapa cabang, keberadaan sistem manajemen ruang IP terpusat tidak akan merugikan.
Kebutuhan akan sistem inventaris jelas tanpa sepatah kata pun.

Semua masalah ADSM:
0. ADSM. Bagian Nol. Perencanaan1. ADSM. Bagian Satu (yang setelah nol). Virtualisasi jaringan2. ADSM. Bagian Dua. Desain jaringan3. ADSM. Bagian Tiga. Sistem IPAM / DCIMMasalah ini saya akan mencurahkan untuk sistem integral dalam otomatisasi jaringan - sistem manajemen ruang alamat dan sistem persediaan.
Kami akan memilih dan menginstalnya, kami akan berurusan dengan arsitektur, skema basis data, antarmuka interaksi dan mengisinya. Dan di bagian berikut, kita akan mulai menulis skrip sederhana yang mengotomatiskan operasi berulang, seperti menambahkan rak baru.
Selain itu, saya sudah menerbitkan artikel terpisah tentang
RESTful API , di mana saya membuat ulasan singkat tentang prinsip dan kerjanya, kita akan membutuhkannya.
Isi
- Arsitektur sistem
- Skema Data NetBox
- Kesimpulan
- Beberapa nuansa menginstal NetBox
- Sedikit tentang PostgreSQL
- Tautan yang bermanfaat
Saat ini, pasar menawarkan sekitar selusin alat yang mengimplementasikan tugas ini: berbayar dan Open Source.
Untuk tugas-tugas dalam seri artikel ini, saya memilih NetBox karena alasan berikut:
- Ini gratis
- Ini berisi bagian yang diperlukan - inventaris dan manajemen ruang-IP.
- Ini memiliki API yang tenang.
- Ini dikembangkan oleh Digital Ocean (dan lebih khusus lagi, dicintai oleh semua orang Jeremy Stretch) untuk dirinya sendiri, yaitu untuk pusat data. Karena itu, ada hampir semua yang Anda butuhkan, dan hampir tidak lebih.
- Ini didukung secara aktif (Slack, Github, Google Newsletters) dan sedang diperbarui.
- Ini open source
Untuk kebutuhan ADSM, saya menggunakan NetBox di virtualochka di server kami (terima kasih kepada Anton Klochkov dan Miran ): http://netbox.linkmeup.ru:45127
Selain itu, saya mengisi hampir semua data yang kami butuhkan di masa depan.
Oleh karena itu, Anda dapat mencoba hampir semua contoh dan mempelajari skema data dalam mode baca hingga Anda menggunakan instalasi Anda.
Sedikit berguna sebelum Anda mulai:
Arsitektur sistem
- NetBox ditulis dalam Python3. Yang bagus, karena sejumlah solusi lain ditulis dalam php dan mengubahnya jika perlu tidak begitu sederhana.
- Kerangka kerja untuk situs itu sendiri adalah Django.
- PostgreSQL digunakan sebagai basis data.
- WEB-frontend (layanan HTTP) - NGINX - proksi permintaan ke Gunicron.
- WSGI - Gunicorn - antarmuka antara Nginx dan aplikasi itu sendiri.
- Kerangka kerja dokumentasi API - Sombong.
- Untuk menjelekkan NetBox - Systemd.
NetBox adalah proyek muda dan serba cepat. Sebagai contoh, pada 2.7 mereka meninggalkan supervisord dan Python 2.7 meraihnya demi systemd. Belum lama ini, tidak ada caching atau Webhooks.
Oleh karena itu, segala sesuatu berubah dengan cepat dan informasi dalam artikel dapat menjadi usang pada saat membaca.
Dengan kata lain, semua komponen sudah matang dan diuji.
Menurut penulis, NetBox tidak mencerminkan keadaan sebenarnya dari jaringan, tetapi target. Oleh karena itu, tidak ada yang dimuat ke NetBox dari jaringan - jaringan ini dikonfigurasi sesuai dengan isi NetBox.
Dengan demikian, NetBox bertindak sebagai satu-satunya sumber kebenaran (kertas kalkir dengan satu sumber kebenaran).
Dan perubahan pada jaringan harus dipicu oleh perubahan pada NetBox.
Dan itu sangat cocok dengan ideologi yang saya anut dalam seri artikel ini - jika Anda ingin membuat perubahan pada jaringan - pertama-tama buatlah itu dalam sistem.
Skema Data NetBox
Dua tugas utama yang diselesaikan NetBox adalah menangani manajemen ruang dan inventaris.
NetBox tidak mungkin menjadi satu-satunya sistem inventaris di perusahaan, melainkan, itu akan menjadi sistem tambahan khusus untuk inventaris jaringan, mengambil data dari yang utama.
Jelas, dalam kasus kami, hanya akan ada NetBox untuk keperluan ADSM.
Pada titik ini, sebagian besar data awal di NetBox telah dimasukkan.
Pada data ini saya akan menunjukkan berbagai contoh bekerja melalui API.
Anda bisa memanjat dan melihat: netbox.linkmeup.ru : 45127
Dan data yang sama akan dibutuhkan di masa mendatang, ketika kita beralih ke otomatisasi.
Secara umum, skema data dapat dilihat oleh skema database di Postgres.
List of relations Schema | Name | Type | Owner --------+------------------------------------+-------+-------- public | auth_group | table | netbox public | auth_group_permissions | table | netbox public | auth_permission | table | netbox public | auth_user | table | netbox public | auth_user_groups | table | netbox public | auth_user_user_permissions | table | netbox public | circuits_circuit | table | netbox public | circuits_circuittermination | table | netbox public | circuits_circuittype | table | netbox public | circuits_provider | table | netbox public | dcim_cable | table | netbox public | dcim_consoleport | table | netbox public | dcim_consoleporttemplate | table | netbox public | dcim_consoleserverport | table | netbox public | dcim_consoleserverporttemplate | table | netbox public | dcim_device | table | netbox public | dcim_devicebay | table | netbox public | dcim_devicebaytemplate | table | netbox public | dcim_devicerole | table | netbox public | dcim_devicetype | table | netbox public | dcim_frontport | table | netbox public | dcim_frontporttemplate | table | netbox public | dcim_interface | table | netbox public | dcim_interface_tagged_vlans | table | netbox public | dcim_interfacetemplate | table | netbox public | dcim_inventoryitem | table | netbox public | dcim_manufacturer | table | netbox public | dcim_platform | table | netbox public | dcim_powerfeed | table | netbox public | dcim_poweroutlet | table | netbox public | dcim_poweroutlettemplate | table | netbox public | dcim_powerpanel | table | netbox public | dcim_powerport | table | netbox public | dcim_powerporttemplate | table | netbox public | dcim_rack | table | netbox public | dcim_rackgroup | table | netbox public | dcim_rackreservation | table | netbox public | dcim_rackrole | table | netbox public | dcim_rearport | table | netbox public | dcim_rearporttemplate | table | netbox public | dcim_region | table | netbox public | dcim_site | table | netbox public | dcim_virtualchassis | table | netbox public | django_admin_log | table | netbox public | django_content_type | table | netbox public | django_migrations | table | netbox public | django_session | table | netbox public | extras_configcontext | table | netbox public | extras_configcontext_platforms | table | netbox public | extras_configcontext_regions | table | netbox public | extras_configcontext_roles | table | netbox public | extras_configcontext_sites | table | netbox public | extras_configcontext_tags | table | netbox public | extras_configcontext_tenant_groups | table | netbox public | extras_configcontext_tenants | table | netbox public | extras_customfield | table | netbox public | extras_customfield_obj_type | table | netbox public | extras_customfieldchoice | table | netbox public | extras_customfieldvalue | table | netbox public | extras_customlink | table | netbox public | extras_exporttemplate | table | netbox public | extras_graph | table | netbox public | extras_imageattachment | table | netbox public | extras_objectchange | table | netbox public | extras_reportresult | table | netbox public | extras_tag | table | netbox public | extras_taggeditem | table | netbox public | extras_webhook | table | netbox public | extras_webhook_obj_type | table | netbox public | ipam_aggregate | table | netbox public | ipam_ipaddress | table | netbox public | ipam_prefix | table | netbox public | ipam_rir | table | netbox public | ipam_role | table | netbox public | ipam_service | table | netbox public | ipam_service_ipaddresses | table | netbox public | ipam_vlan | table | netbox public | ipam_vlangroup | table | netbox public | ipam_vrf | table | netbox public | secrets_secret | table | netbox public | secrets_secretrole | table | netbox public | secrets_secretrole_groups | table | netbox public | secrets_secretrole_users | table | netbox public | secrets_sessionkey | table | netbox public | secrets_userkey | table | netbox public | taggit_tag | table | netbox public | taggit_taggeditem | table | netbox public | tenancy_tenant | table | netbox public | tenancy_tenantgroup | table | netbox public | users_token | table | netbox public | virtualization_cluster | table | netbox public | virtualization_clustergroup | table | netbox public | virtualization_clustertype | table | netbox public | virtualization_virtualmachine | table | netbox
Fitur NetBox :
- Manajemen alamat IP (IPAM) - Awalan IP, alamat, VRF, dan VLAN
- Rak peralatan - Rak peralatan yang diorganisir berdasarkan lokasi, grup, dan peran
- Perangkat - Perangkat, model, peran, komponen, dan penyebarannya
- Koneksi - Koneksi jaringan, konsol, dan daya antar perangkat
- Virtualisasi - Mesin Virtual dan Cluster Komputer
- Sirkuit data - Koneksi Penyedia
- Rahasia - Penyimpanan Kredensial Pengguna Terenkripsi
Pada artikel ini saya akan menyentuh hal-hal berikut: DCIM - Manajemen Infrastruktur Pusat Data, IPAM - Manajemen Alamat IP, Virtualisasi, Hal-hal baik tambahan.
Hal pertama yang pertama.
DCIM
Bagian yang paling penting tidak diragukan lagi peralatan apa yang kita miliki dan bagaimana itu saling terhubung. Tapi itu semua dimulai dari
tempatnya .
Wilayah dan situs (wilayah / situs)
Dalam paradigma NetBox, perangkat dipasang di situs, situs milik wilayah, wilayah dapat disarangkan. Namun, perangkat tidak dapat diinstal hanya di wilayah tersebut. Jika ada kebutuhan seperti itu, situs terpisah harus didirikan.
Untuk kasus kami, ini mungkin (dan akan) terlihat seperti ini:

Saya mengingatkan Anda di mana dan bagaimana kami merencanakan jaringan kami:
ADSM2. Desain jaringan

Mari kita lihat apa yang diizinkan oleh API.
Berikut adalah daftar semua wilayah:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/regions/" -H "Accept: application/json; indent=4"
nb.dcim.regions.all()
Selanjutnya saya akan memberikan contoh curl dan pynetbox tanpa mengeluarkan hasilnya.
Jangan lupa garis miring di akhir URL - tanpanya tidak akan berfungsi.
Saya berbicara tentang cara menggunakan pynetbox dalam sebuah artikel tentang RESTful API .
Dapatkan daftar situs:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/sites/" -H "Accept: application/json; indent=4"
nb.dcim.sites.all()
Daftar situs di wilayah tertentu:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/sites/?region=ru" -H "Accept: application/json; indent=4"
nb.dcim.sites.filter(region="ru")
Harap dicatat bahwa pencarian bukan dengan nama lengkap, tetapi oleh yang disebut siput .
Slug adalah pengidentifikasi yang hanya berisi karakter aman: [0-9A-Za-z-_], yang dapat digunakan dalam URL. Sudah diatur saat membuat objek, misalnya, "bcn" bukan "Barcelona".

Perangkat
Perangkat itu sendiri memiliki
peran , misalnya, daun, tulang belakang, tepi, tepi.
Jelas, itu adalah semacam
model dari beberapa
vendor .
Misalnya,
Arista .
Jadi, vendor dibuat terlebih dahulu, lalu di dalam model.
Model ini ditandai dengan nama, satu set antarmuka layanan, antarmuka kontrol jarak jauh, port konsol, dan satu set modul daya.
Selain sakelar, router, dan host dengan antarmuka Ethernet, Anda dapat membuat server konsol.


Dapatkan daftar semua perangkat:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/" -H "Accept: application/json; indent=4"
nb.dcim.devices.all()
Semua perangkat untuk situs tertentu:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/?site=mlg" -H "Accept: application/json; indent=4"
nb.dcim.devices.filter(site="mlg")
Semua perangkat model tertentu
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/?model=veos" -H "Accept: application/json; indent=4"
nb.dcim.devices.filter(device_type_id=2)
Semua perangkat dengan peran tertentu:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/?role=leaf" -H "Accept: application/json; indent=4"
nb.dcim.devices.filter(role="leaf")
Perangkat dapat dalam berbagai status: Aktif, Offline, Direncanakan, dll.
Semua perangkat aktif:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/?status=active" -H "Accept: application/json; indent=4"
nb.dcim.devices.filter(status="active")
Antarmuka
NetBox mendukung banyak jenis
antarmuka fisik dan LAG, namun, semua yang virtual seperti Vlan / IRB dan loopback digabungkan dalam satu jenis - Virtual.
Setiap antarmuka terikat ke perangkat.
Antarmuka perangkat dapat dihubungkan satu sama lain. Ini akan ditampilkan baik di antarmuka maupun di respons API (atribut connected_endpoint).

Antarmuka dapat dalam berbagai mode: Ditandai atau Akses.
Dengan demikian, dapat diluncurkan ke tag dengan atau tanpa VLAN - situs ini atau global.
Dapatkan daftar semua antarmuka perangkat:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/interfaces/?device=mlg-leaf-0" -H "Accept: application/json; indent=4"
nb.dcim.interfaces.filter(device="mlg-leaf-0")
Dapatkan daftar VLAN dari antarmuka tertentu.
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/interfaces/?device=mlg-leaf-0&name=Ethernet7" -H "Accept: application/json; indent=4"
nb.dcim.interfaces.get(device="mlg-leaf-0", name="Ethernet7").untagged_vlan.vid
Perhatikan bahwa di sini saya sudah menggunakan metode get alih-alih filter . Filter mengembalikan daftar, bahkan jika hasilnya adalah satu objek tunggal. Dapatkan - mengembalikan satu objek atau gagal jika hasil kueri adalah daftar objek.
Karena itu, gunakan hanya jika Anda benar-benar yakin bahwa hasilnya akan ada dalam satu salinan.
Di sini, tepat setelah permintaan, saya beralih ke atribut objek. Sebenarnya, ini salah: jika tidak ada yang ditemukan oleh permintaan, maka pynetbox akan mengembalikan Tidak ada, dan tidak memiliki atribut "untagged_vlan".
Dan juga perhatikan bahwa tidak di mana-mana pynetbox mengharapkan siput, di suatu tempat, dan nama.
Cari tahu antarmuka perangkat mana yang terhubung dengan antarmuka tertentu:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/interfaces/?device=mlg-leaf-0&name=Ethernet1" -H "Accept: application/json; indent=4"
iface = nb.dcim.interfaces.get(device="mlg-leaf-0", name="Ethernet1") iface.connected_endpoint.device iface.connected_endpoint.name
Cari tahu nama antarmuka manajemen:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/interfaces/?device=mlg-leaf-0&mgmt_only=true" -H "Accept: application/json; indent=4"
nb.dcim.interfaces.get(device="mlg-leaf-0", mgmt_only=True)
Port konsol
Port konsol bukan antarmuka, oleh karena itu port diberikan sebagai titik akhir yang terpisah.
Port perangkat dapat dikaitkan dengan port server konsol.
Cari tahu port mana yang terhubung ke server konsol perangkat tertentu.
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/console-ports/?device=mlg-leaf-0" -H "Accept: application/json; indent=4"
nb.dcim.console_ports.get(device="mlg-leaf-0").serialize()
Metode serialisasi dalam pynetbox memungkinkan Anda untuk mengubah atribut instance kelas menjadi kamus.
Ipam
VLAN dan VRF
Mereka dapat diikat ke lokasi - berguna untuk VLAN.
Saat membuat VRF, Anda dapat menentukan apakah ruang alamat diizinkan untuk berpotongan dengan VRF lain.
Dapatkan daftar semua VLAN:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/vlans/" -H "Accept: application/json; indent=4"
nb.ipam.vlans.all()
Dapatkan daftar semua VRF:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/vrfs/" -H "Accept: application/json; indent=4"
nb.ipam.vrfs.all()
Awalan IP
Mereka memiliki struktur hierarkis. Ini mungkin milik VRF apa pun (jika tidak, maka Global).

NetBox memiliki representasi visual awalan gratis yang sangat nyaman:

Anda dapat memilihnya hanya dengan mengklik garis hijau.
Itu bisa dilampirkan ke suatu lokasi. Anda dapat memilih sub-awalan gratis berikutnya dari ukuran yang diperlukan atau alamat IP gratis berikutnya melalui API.
Tanda centang / parameter "Apakah kolam" menentukan apakah alamat ke-0 dari awalan ini akan disorot selama pemilihan otomatis, atau apakah akan mulai dari tanggal 1.
Dapatkan daftar awalan IP dari situs Malaga dengan peran dan panjang Underlay 19:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/prefixes/?site=mlg&role=underlay&mask_length=19" -H "Accept: application/json; indent=4"
prefix = nb.ipam.prefixes.get(site="mlg", role="underlay", mask_length="19")
Dapatkan daftar awalan gratis di wilayah Rusia dengan peran Underlay:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/prefixes/40/available-prefixes/" -H "Accept: application/json; indent=4"
prefix.available_prefixes.list()
Sorot 24 awalan gratis berikut:
curl -X POST "http://netbox.linkmeup.ru:45127/api/ipam/prefixes/40/available-prefixes/" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: TOKEN a9aae70d65c928a554f9a038b9d4703a1583594f" \ -d "{\"prefix_length\": 24}"
prefix.available_prefixes.create({"prefix_length":24})
Ketika kita perlu memilih beberapa anak di dalam satu objek, metode POST digunakan dan kita perlu menentukan ID objek induk - dalam hal ini - 40 . Kami mengetahuinya dengan menelepon dari contoh sebelumnya.
Dalam kasus kotak sinkronisasi, pertama-tama kita (dalam contoh sebelumnya) menyimpan hasilnya ke variabel awalan , dan kemudian beralih ke atribut available_prefixes dan metode create .
Contoh ini tidak akan berfungsi untuk Anda, karena token dengan hak tulis sudah tidak valid.
Alamat IP
Jika ada awalan termasuk alamat ini, mereka akan menjadi bagian dari itu. Mereka bisa sendirian.
Dapat menjadi bagian dari VRF atau berada di Global.
Mereka dapat dilampirkan ke antarmuka, tetapi dapat menggantung di udara.
Anda dapat memilih alamat IP gratis berikutnya di awalan.

Untuk melakukan ini, cukup klik pada garis hijau.
Dapatkan daftar alamat IP untuk antarmuka tertentu:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/ip-addresses/?interface_id=8" -H "Accept: application/json; indent=4"
nb.ipam.ip_addresses.filter(interface_id=8)
Atau:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/ip-addresses/?device=mlg-leaf-0&interface=Ethernet1" -H "Accept: application/json; indent=4"
nb.ipam.ip_addresses.filter(device="mlg-leaf-0", interface="Ethernet1")
Dapatkan daftar semua alamat IP perangkat:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/ip-addresses/?device=mlg-leaf-0" -H "Accept: application/json; indent=4"
nb.ipam.ip_addresses.filter(device="mlg-leaf-0")
Dapatkan daftar alamat IP awalan yang tersedia:
curl -X GET "http://netbox.linkmeup.ru:45127/api/ipam/prefixes/28/available-ips/" -H "Accept: application/json; indent=4"
prefix = nb.ipam.prefixes.get(site="mlg", role="leaf-loopbacks") prefix.available_ips.list()
Di sini lagi, Anda perlu menentukan ID awalan di URL dari mana kami memilih alamat - kali ini adalah 28.
Sorot alamat IP gratis berikut di awalan:
curl -X POST "http://netbox.linkmeup.ru:45127/api/ipam/prefixes/28/available-ips/" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: TOKEN a9aae70d65c928a554f9a038b9d4703a1583594f"
prefix.available_ips.create()
Virtualisasi
Kami masih berjuang untuk gelar DC modern. Dimana tanpa virtualisasi.
NetBox tidak terlihat dan bukan tempat yang layak menyimpan informasi tentang mesin virtual (Anda bahkan dapat berspekulasi tentang perlunya menyimpan mesin fisik di dalamnya). Namun, ini mungkin berguna bagi kami, misalnya, Anda dapat memasukkan informasi tentang Rute Reflektor, mesin servis, seperti NTP, Syslog, server S-Flow, dan mesin kontrol.
VM memiliki daftar antarmuka sendiri - mereka berbeda dari antarmuka perangkat fisik dan memiliki Endpoint tersendiri.
Jadi, Anda dapat mendaftar semua mesin virtual:
curl -X GET "http://netbox.linkmeup.ru:45127/api/virtualization/virtual-machines/" -H "Accept: application/json; indent=4"
nb.virtualization.virtual_machines.all()
Jadi - dari semua antarmuka semua VM:
curl -X GET "http://netbox.linkmeup.ru:45127/api/virtualization/interfaces/" -H "Accept: application/json; indent=4"
nb.virtualization.interfaces.all()
Untuk VM, Anda tidak bisa menentukan mesin hypervisor / fisik spesifik yang menjalankannya, tetapi Anda bisa menentukan cluster. Meski tidak semuanya begitu putus asa. Baca terus.
Barang-barang ekstra bagus
Fungsi dasar NetBox mencakup sebagian besar tugas banyak pengguna, tetapi tidak semua. Meski begitu, produk ini awalnya ditulis untuk memecahkan masalah perusahaan tertentu. Namun, itu secara aktif berkembang dan rilis baru keluar cukup
sering . Dengan demikian, fungsi-fungsi baru muncul.
Jadi, misalnya, dari instalasi NetBox pertama saya beberapa tahun yang lalu, tag muncul di dalamnya, konfigurasi konteks, webhooks, caching, pengawas diubah menjadi systemd, penyimpanan file eksternal.
Hati-hati
Bidang khusus
Terkadang Anda ingin menambahkan bidang ke entitas mana pun di mana Anda dapat menempatkan data sewenang-wenang.
Misalnya, tunjukkan jumlah perjanjian pasokan dengan mana sakelar dibeli atau nama mesin fisik tempat VM dijalankan.
Di sinilah bidang khusus datang ke penyelamatan - hanya bidang seperti itu dengan nilai teks yang dapat ditambahkan ke hampir semua entitas di NetBox.
Buat bidang khusus di panel admin

Ini adalah tampilannya ketika mengedit perangkat tempat bidang khusus dibuat:

Minta daftar perangkat dengan nilai custom_field
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/?cf_contract_number=0123456789" -H "Accept: application/json; indent=4"
nb.dcim.devices.filter(cf_contract_number="0123456789")
Konteks Konfigurasi
Terkadang Anda menginginkan sesuatu lebih dari teks yang tidak terstruktur. Kemudian
Konteks Config datang untuk menyelamatkan.
Ini adalah kesempatan untuk memperkenalkan sekumpulan data terstruktur dalam format JSON, yang tidak bisa ditaruh di tempat lain.
Ini bisa, misalnya, satu set komunitas BGP atau daftar server Syslog.
Konteks Config dapat lokal - dikonfigurasi untuk objek tertentu - atau global, ketika dikonfigurasi sekali, dan kemudian berlaku untuk semua objek yang memenuhi kondisi tertentu (misalnya, terletak di situs yang sama, atau berjalan di platform yang sama).

Konteks Config secara otomatis ditambahkan ke hasil permintaan. Pada saat yang sama, konteks lokal dan global bergabung menjadi satu.
Misalnya, untuk perangkat yang hanya seorang gadis Rusia, yang memiliki konteks lokal, output akan berisi kunci “config_context”:
curl -X GET "http://netbox.linkmeup.ru:45127/api/dcim/devices/?q=russian" -H "Accept: application/json; indent=4"

Tag
Sulit mengatakan sesuatu yang baru tentang tag. Mereka adalah. Mereka nyaman untuk menambahkan fitur apa pun. Misalnya, Anda dapat menandai "byada" untuk beralih dari kumpulan memori yang gagal.
Situs web
Suatu hal yang tak tergantikan ketika Anda membutuhkan layanan lain untuk mempelajari tentang perubahan di NetBox.
Misalnya, ketika memulai sakelar baru, kait dikirim ke sistem otomasi, yang memulai proses pengaturan perangkat dan mengoperasikannya.
Kesimpulan
Pada artikel ini, saya tidak bermaksud mempertimbangkan semua fitur NetBox, jadi saya akan memberikan segalanya kepada Anda. Pahami, coba.
Selanjutnya, sebagai bagian dari pembangunan sistem otomasi, saya hanya akan menyentuh bagian-bagian yang benar-benar kita butuhkan.
Jadi, di atas, saya secara singkat berbicara tentang apa itu NetBox dan bagaimana data disimpan di dalamnya.
Saya ulangi bahwa saya sudah memasukkan hampir semua data yang diperlukan di sana, dan Anda dapat menyeret
database dump untuk Anda sendiri.
Semuanya siap untuk tahap otomatisasi berikutnya: menulis sistem (ahaha, hanya skrip) untuk menginisialisasi perangkat dan mengelola konfigurasi.
Tapi, sebelum menyelesaikan artikel, saya akan mengatakan beberapa kata tentang pemasangan dan pengoperasian komponen NetBox.
Beberapa nuansa menginstal NetBox
Saya tidak akan menjelaskan proses instalasi secara terperinci - ini lebih dari yang terkenal dijelaskan dalam
dokumentasi resmi .
Anda dapat melihat proses peluncuran gambar buruh pelabuhan NetBox dan bekerja di GUI dalam video Dima Figol (
sekali dan
dua kali ) dan
Emil Garipov .
Secara umum, jika Anda mengikuti langkah-langkah instalasi / start ketat, maka semuanya akan berhasil.
Tapi di sini ada nuansa yang secara tidak sengaja bisa Anda lupakan.
- Dalam file configuration.py, parameter ALLOWED_HOSTS harus diisi:
ALLOWED_HOSTS = ['netbox.linkmeup.ru', 'localhost']
Di sini Anda perlu menentukan semua nama NetBox yang mungkin akan Anda akses, misalnya, mungkin ada alamat IP eksternal atau 127.0.0.1 atau DNS-alias.
Jika ini tidak dilakukan, situs web NetBox tidak akan terbuka dan akan menampilkan 400. - Dalam file yang sama, SECRET_KEY harus ditentukan, yang dapat Anda temukan sendiri atau buat skrip.
- Halaman utama akan menampilkan 502 Bad Gateway jika ada yang salah dengan mengatur database PostgreSQL: periksa host (jika diinstal pada komputer lain), port, nama database, nama pengguna, kata sandi.
- Untuk beberapa waktu sekarang, NetBox tidak secara default memberikan hak baca apa pun tanpa otorisasi.
Ini semua perubahan di configuration.py yang sama:
EXEMPT_VIEW_PERMISSIONS = ['*']
- Dan juga permintaan API akan menghasilkan 200 dan tidak akan berfungsi jika tidak ada garis miring pada URL API di bagian akhir.
curl -X GET -H "Accept: application/json; indent=4" "http://netbox.linkmeup.ru:45127/api/dcim/devices"
Sedikit tentang PostgreSQL
Untuk terhubung ke server:
psql -U <i>username</i> -h <i>hostname</i> <i>db_name</i>
Sebagai contoh:
psql -U netbox -h localhost netbox
Untuk menampilkan semua tabel:
/dt
Untuk keluar:
/q
Untuk dump basis data:
pg_dump -U <i>username</i> -h <i>hostname</i> <i>db_name</i> > netbox.sql
Jika Anda tidak ingin memasukkan kata sandi setiap kali:
echo *:*:*:<i>username</i>:<i>password</i> > ~/.pgpass chmod 600 ~/.pgpass
Jika Anda memiliki instalasi sendiri dan tidak ingin membuat semuanya dengan tangan, Anda dapat melakukannya dengan mengambil dump dari database NetBox saat ini di
sini :
psql -U <i>username</i> -h <i>hostname</i> <i>db_name</i> < netbox_initial_db.sql
Jika Anda pertama-tama harus menghapus semua tabel (dan Anda harus melakukan ini), maka Anda dapat menyiapkan file di muka:
psql -U <i>username</i> -h <i>hostname</i> <i>db_name</i> \o drop_all_tables.sql select 'drop table ' || tablename || ' cascade;' from pg_tables; \q psql -U <i>username</i> -h <i>hostname</i> <i>db_name</i> -f drop_all_tables.sql
Tautan yang bermanfaat