Nuk e di me çfarë ta krahasoj provisioning. Mund të jetë si me macen? Mund të jesh pa të, por është pak më mirë me të. Sidomos nëse funksionon ))
Vendosja e problemit:
- Dua të konfiguroj telefonat SIP shpejt, lehtë, në mënyrë të sigurt. Gjatë instalimit të telefonit dhe sidomos gjatë rikonfigurimit të tij.
- Shumë shitës kanë formate të tyre të konfiguarimeve, utilitetet e tyre për të gjeneruar konfiguraime, mënyrat e tyre të mbrojtjes së konfigurave. Dhe nuk është shumë këndshme të merresh me secilin prej tyre.
- Shumë zgjidhje për provisioning, a) janë të orientuara ndaj një shitësi ose një sistemi të telefonisë, b) implementohen mjaft ngatërruar, me një grusht skripta, parametra, brrr...
Për pikën 3 do të jap një koment, se ka sisteme të shkëlqyera provisioning , , , ku në akses të hapur ka shabllone për telefonat e shitësve të ndryshëm. Ka zgjidhje komerciale, ku gjithashtu mund të konfigurohet në modulin e provisioning për të punuar telefonat e prodhuesve të ndryshëm, për shembull, sistemet telefonike Yeastar.
Në Habr gjithashtu ka shumë receta si të konfigurohen pajisjet e shitësve të ndryshëm: , . Por siç thonë, të gjitha sistemet kanë një të meta fatale. Prandaj do të bëjmë biçikletën tonë.
formatin tonë
Siç thotë në xkcd, nëse nuk dëshiron të merresh me 14 formate — . Prandaj ne përdorim cilësimet e zakonshme për çdo telefon dhe do të bëjmë formatin tonë json për konfig.
Për shembull diçka e tillë:
{
"key": "sdgjdeu9443908",
"token": "590sfdsf8u984",
"model": "gxp1620",
"vendor": "grandstream",
"mac": "001565113af8",
"timezone_offset": "GMT+03",
"ntp_server": "pool.ntp.org",
"status": true,
"accounts": [
{
"name": "Mobilon",
"line": 1,
"sip_register": "sip.mobilonsip.ru",
"sip_name": "sip102",
"sip_user": "sip102",
"sip_password": "4321",
"sip_auth": "sip102"
}
]
}Pra, në çdo telefon është e nevojshme të konfigurohet koha lokale, linjat sip. Këtu është shumë e thjeshtë. Mund të shikosh edhe shembuj .
serverin tonë të provisioning
Në manualet e prodhuesit zakonisht ka një pikë, ku thuhet: merrni csv, shkruani aty emrin e përdoruesit, fjalëkalimin, adresën MAC, me skriptin tonë provojeni gjeneroni skedarët, vendosini nën serverin web Apache dhe do të jetë mirë.
Në pikën tjetër të manualit zakonisht flitet se gjithashtu mund të enkriptohet skedari i konfiguruar të gjeneruar.
Por këtë arsye, është klasik. Qasja moderne me smoothie dhe Twitter thotë se duhet të krijosh një server web që nuk është aq i fuqishëm sa Apache, por do të bëjë vetëm një punë të vogël. Të formojë dhe të dorëzojë konfigurime përmes lidhjes.
Të ndalemi këtu dhe të kujtojmë se pothuajse të gjithë telefonët SIP tani mund të marrin konfigurime përmes http/https, prandaj ne nuk shqyrtojmë realizime të tjera (ftp, tftp, ftps). Pas kësaj, çdo telefon e di adresën e tij mac. Prandaj, ne do të bëjmë dy lidhje: një personale — përmes çelësit të pajisjes, dhe e dyta është e përgjithshme, e cila funksionon përmes një tokeni të përbashkët dhe adresës mac.
Po ashtu, nuk do të ndalem në zero-config, dmth. konfigurimi i telefonit "nga e para", dmth. ju e futni atë në rrjet dhe ai fillon të funksionojë. Jo, në skenarin tim, ju e futni në rrjet, bëni një konfigurim paraprak (e konfiguroni të marrë konfigurimin nga serveri i provizionimit), dhe pastaj pini një piña colada dhe e rikonfiguroni telefonin siç duhet përmes provizionimit. Shpërndarja e Opsionit 66 është përgjegjësi e serverit DHCP.
Për herë të parë, po ndjehem i lodhura duke thënë "provisioning", prandaj fjala u shkurtua në "provizion", ju lutem mos më goditni me këmbë.
Dhe gjithashtu: serveri ynë i provizionit nuk ka UI, dmth. ndërfaqe për përdoruesit. Ndoshta, për momentin, por nuk jam i sigurt, pasi nuk më nevojitet. Në vend të kësaj, ka një API për ruajtjen/fshirjen e konfigurimeve, marrjen e listës së ofruesve të mbështetur, modeleve, gjithçka është e përshkruar sipas kanoneve të specifikimit swagger.
Pse API dhe jo UI? Sepse unë tashmë kam sistemin tim telefonik, kështu që kam burimin e kredencialeve, ku mjafton të marr këto të dhëna, të kompozoj json-in e nevojshëm dhe ta publikoj në serverin e provizionit. Dhe, serveri i provizionimit në përputhje me rregullat e caktuara në skedarin json, do të japë pajisjes përkatëse konfigurimin e saj ose nuk do ta japë, nëse pajisja nuk është ajo, ose nuk përputhet me kriteret e përcaktuara gjithashtu në këtë json.

Ja si doli ky mikroshërbim provizion. Quhet , kodi burimor është në dispozicion në GitHub, gjithashtu ka , një shembull i përdorimit të docker-it .
Karakteristikat kryesore:
në çdo rast, qasje e kufizuar në konfigurim përkohësisht, me defolt 10 minuta. Nëse dëshironi ta bëni përsëri konfigurimin të disponueshëm — ribotoni konfigurimin përsëri.
një format për të gjithë ofruesit, gjithë përshtatja është hequr në sonata, dërgon një json të standardizuar, rregullon çdo pajisje të disponueshme.
Të gjitha konfigurimet e dhëna pajisjeve regjistrohen, të gjitha vendet problematike mund të shihen në log dhe të shihen gabimet.
Është e mundur përdorimi i një lidhjeje të përgjithshme me token, çdo telefon merr konfigurimin e vet duke specifikuar adresën mac. Ose një lidhje personale sipas çelësit.
API për menaxhimin dhe dhënien e konfigurimeve për telefonat është ndarë sipas porteve.
Testet. Për mua ishte shumë e rëndësishme të dokumentoja formatin e dhënë të konfigurimit dhe të mbuloja të gjitha situatat e zakonshme të dhënies së konfigurimin me teste. Që të funksionojë gjithçka qartë.
Disavantazhet:
Derimë tani, nuk po përdoret ndonjë enkriptim në kuadër të sonata. Domethënë, sigurisht, mund të filloni të përdorni https duke vendosur, për shembull, nginx para sonata. Por metodat e markës ende nuk janë angazhuar. Pse? Projekti është ende i ri, ka provizionuar sa më pak se njëqind pajisje. Dhe, sigurisht, jam duke mbledhur ide, reagime. Më pas, për të bërë gjithçka të sigurt, që konfigurimet të mos mund të përgjohet në rrjet, ndoshta është e nevojshme të merremi me çelësat e enkriptimit, tls dhe të tjera, por kjo do të jetë një vazhdim.
Mungesa e UI. Mund të jetë një disavantazh i rëndësishëm për përdoruesin final, por për administratorin e sistemit është më e rëndësishme një utilitar konsol që një aplikacion i plotë. Të krijoj një utilitar konsol ishte në planet, por nuk jam i sigurt nëse ajo është e nevojshme.
Çfarë në përfundim?
Një server i vogël dhe i thjeshtë web për provizionimin e disa modeleve të telefonave me API për menaxhim.
Përsëri, si duhet të funksionojë kjo?
- Instalojmë sonata.
- Formojmë json-konfigurimin dhe e publikojmë atë në sonata.
- Pastaj marrim nga sonata lidhjen për provizionimin.
- Më pas e specifikojmë këtë lidhje në aparatin telefonik.
- Aparati tërheq konfigurimin.
Në përdorimin e mëvonshëm vetëm dy hapa:
- Formojmë json-konfigurimin dhe e publikojmë atë në sonata.
- Aparati tërheq konfigurimin.
Cilat telefona provizionohen?
Furnizuesit Grandstream, Fanvil, Yealink. Konfigurimet në kuadër të furnizuesit janë më shumë-më pak të njëjta, por mund të ndryshojnë në varësi të shëmbujve — ndoshta do të jetë e nevojshme të testoni përbashkë.
Cilat rregulla mund të përcaktohen?
Sipër kohe. Ju mund të përcaktoni kohën deri në të cilën konfigurimi do të jetë i aksesueshëm.
Sipër adresës mac. Kur jepet konfigurimi me lidhje personale, adresa mac gjithashtu do të kontrollohet për pajisjet.
Sipër ip. Sipër adresës IP, nga e cila është bërë kërkesa.
Si të ndërveprojmë me sonata?
Përmes API, duke bërë kërkesa http. API do të jetë i disponueshëm në instalimin tuaj. Duke qenë se API mbështet specifikimin swagger, mund të përdorni për kërkesat testuese ndaj API-së.
Ok, shkëlqyeshëm. Si mund ta provoj atë?
Më lehtë është të çelni imazhin docker mbi bazën e depozitës . Në depozitë ndodhet një udhëzues për instalimin.
А если знаю node.js?
Nëse keni përvojë në përdorimin e JavaScript, do të kuptoni shpejt si funksionon gjithçka këtu.
A do të ketë zhvillim të sonata-s?
Pjesërisht kam arritur qëllimet e mia. Zhvillimi në vazhdim është një çështje për detyrat e mia lidhur me automatizimin e konfigurimit të telefonave. Ka gjithashtu mundësi për të zgjeruar konfigurimet për rregullimin e butonave të telefonit, për të shtuar adresat e provizionit të librit të adresave, ndoshta edhe diçka tjetër, shkruani në komentet.
Përmbledhje dhe falënderime
Do të jem i lumtur për propozime / kundërshtime / komente dhe pyetje, sepse mund të ketë diçka që nuk kam përshkruar qartë.
Gjithashtu, shpreh falënderime për të gjithë kolegët që ndihmuan, konsultuan, testuan, ofruan / dhuruan telefonat për testime. Realisht, shumë njerëz me të cilët kam biseduar për punë, në në çatat dhe emailet. Faleminderit për idetë dhe mendimet.
Burimi: habr.com
