Tarmoqni avtomatlashtirish. Bir kishining hayotidan bir voqea

Hey Xabr!

Ushbu maqolada biz tarmoq infratuzilmasini avtomatlashtirish haqida gapirmoqchimiz. Bitta kichik, lekin juda mag'rur kompaniyada ishlaydigan tarmoqning ishchi diagrammasi taqdim etiladi. Haqiqiy tarmoq uskunalari bilan barcha o'yinlar tasodifiy. Biz ushbu tarmoqda uzoq vaqt davomida biznesning to'xtab qolishiga va jiddiy moliyaviy yo'qotishlarga olib kelishi mumkin bo'lgan ishni ko'rib chiqamiz. Ushbu ishning yechimi "Tarmoq infratuzilmasini avtomatlashtirish" kontseptsiyasiga juda mos keladi. Avtomatlashtirish vositalaridan foydalanib, biz qisqa vaqt ichida qanday qilib murakkab muammolarni samarali hal qilishingiz mumkinligini ko'rsatamiz va nima uchun bu muammolarni boshqacha emas (konsol orqali) bu tarzda hal qilish kerakligi haqida fikr yuritamiz.

Masʼuliyatdan voz kechish

Avtomatlashtirish uchun bizning asosiy vositalarimiz Ansible (avtomatlashtirish vositasi sifatida) va Git (Ansible o'yin kitoblari uchun ombor sifatida). Men darhol shuni ta'kidlamoqchimanki, bu kirish maqolasi emas, u erda biz Ansible yoki Git mantig'i haqida gaplashamiz va asosiy narsalarni tushuntiramiz (masalan, rol topshiriq modullari, inventar fayllari, Ansible-da o'zgaruvchilar nima yoki qachon sodir bo'ladi? siz git push yoki git commit buyruqlarini kiritasiz). Bu hikoya siz Ansible-ni qanday mashq qilishingiz va uskunangizda NTP yoki SMTP-ni sozlashingiz haqida emas. Bu tarmoq muammosini xatosiz qanday tez va afzalroq hal qilish haqida hikoya. Shuningdek, tarmoq qanday ishlashini, xususan, TCP/IP, OSPF, BGP protokollari stegi nima ekanligini yaxshi tushunish tavsiya etiladi. Shuningdek, biz tenglamadan Ansible va Git ni tanlaymiz. Agar siz hali ham aniq echimni tanlashingiz kerak bo'lsa, biz "Tarmoqni dasturlash va avtomatlashtirish" kitobini o'qishni tavsiya qilamiz. Jeyson Edelman, Skott S. Lou va Mett Osvalt tomonidan "Keyingi avlod tarmoq muhandisi uchun ko'nikmalar".

Endi nuqtaga.

Muammoni shakllantirish

Keling, bir vaziyatni tasavvur qilaylik: ertalab soat 3 da siz qattiq uxlab yotgansiz va tush ko'rasiz. Telefon qo'ng'irog'i. Texnik direktor qo'ng'iroq qiladi:

- Ha?
— ###, ####, #####, xavfsizlik devori klasteri tushib ketdi va ko'tarilmayapti!!!
Siz ko'zingizni ishqalaysiz, nima bo'layotganini tushunishga harakat qilasiz va bu qanday sodir bo'lishini tasavvur qilasiz. Telefonda siz direktorning boshidagi sochlar yirtilganini eshitishingiz mumkin va u yana qo'ng'iroq qilishni so'raydi, chunki general unga ikkinchi qatorda qo'ng'iroq qilmoqda.

Yarim soat o'tgach, siz navbatchi smenadan birinchi kirish yozuvlarini to'pladingiz, uyg'onishi mumkin bo'lgan barchani uyg'otdingiz. Natijada, texnik direktor yolg'on gapirmadi, hamma narsa avvalgidek, xavfsizlik devorlarining asosiy klasteri qulab tushdi va hech qanday asosiy tana harakati uni o'ziga keltirmaydi. Kompaniya taklif qilayotgan barcha xizmatlar ishlamaydi.

Sizning didingiz uchun muammoni tanlang, har bir kishi boshqacha narsani eslaydi. Misol uchun, og'ir yuk bo'lmasa, bir kecha-kunduzda yangilangandan so'ng, hamma narsa yaxshi ishladi va hamma baxtli yotishga ketdi. Trafik oqimi boshlandi va tarmoq kartasi drayveridagi xato tufayli interfeys buferlari to'lib keta boshladi.

Jeki Chan vaziyatni yaxshi tasvirlay oladi.

Tarmoqni avtomatlashtirish. Bir kishining hayotidan bir voqea

Rahmat, Jeki.

Juda yoqimli holat emas, shunday emasmi?

Keling, birodarimizni uning qayg'uli fikrlari bilan bir muddat tark etaylik.

Keling, voqealar qanday rivojlanishini muhokama qilaylik.

Biz materialni taqdim etishning quyidagi tartibini taklif qilamiz

  1. Keling, tarmoq diagrammasini ko'rib chiqaylik va u qanday ishlashini ko'rib chiqaylik;
  2. Ansible yordamida sozlamalarni bir routerdan boshqasiga qanday o'tkazishimizni tasvirlab beramiz;
  3. Keling, umuman IT infratuzilmasini avtomatlashtirish haqida gapiraylik.

Tarmoq diagrammasi va tavsifi

Sxema

Tarmoqni avtomatlashtirish. Bir kishining hayotidan bir voqea

Keling, tashkilotimizning mantiqiy diagrammasini ko'rib chiqaylik. Biz aniq uskunalar ishlab chiqaruvchilarni nomlamaymiz; ushbu maqolaning maqsadlari uchun bu muhim emas (Diqqatli o'quvchi qanday uskuna ishlatilishini taxmin qiladi). Bu Ansible bilan ishlashning yaxshi afzalliklaridan biri, uni o'rnatishda biz odatda uning qanday uskuna ekanligiga ahamiyat bermaymiz. Faqat tushunish uchun, bu Cisco, Juniper, Check Point, Fortinet, Palo Alto kabi taniqli sotuvchilarning uskunalari ... siz o'zingizning variantingizni almashtirishingiz mumkin.

Trafikni ko'chirish uchun ikkita asosiy vazifamiz bor:

  1. Kompaniya faoliyati bo'lgan xizmatlarimizni nashr etishni ta'minlash;
  2. Filiallar, masofaviy ma'lumotlar markazi va uchinchi tomon tashkilotlari (hamkorlar va mijozlar) bilan aloqani ta'minlash, shuningdek, filiallarning markaziy ofis orqali Internet tarmog'iga kirishini ta'minlash.

Keling, asosiy elementlardan boshlaylik:

  1. Ikki chegara marshrutizatori (BRD-01, BRD-02);
  2. Xavfsizlik devori klasteri (FW-CLUSTER);
  3. Yadro kaliti (L3-CORE);
  4. Qutqaruvchiga aylanadigan yo'riqnoma (muammoni hal qilishda biz tarmoq sozlamalarini FW-CLUSTER-dan FAVQULOVDAga o'tkazamiz) (FAVO'DA);
  5. Tarmoq infratuzilmasini boshqarish uchun kalitlar (L2-MGMT);
  6. Git va Ansible bilan virtual mashina (VM-AUTOMATION);
  7. Ansible (Laptop-Automation) uchun o'yin kitoblarini sinovdan o'tkazish va ishlab chiqish amalga oshiriladigan noutbuk.

Tarmoq quyidagi sohalarga ega dinamik OSPF marshrutlash protokoli bilan tuzilgan:

  • 0-maydon – EXCHANGE zonasida harakatlanish uchun mas'ul marshrutizatorlarni o'z ichiga olgan hudud;
  • 1-maydon - kompaniya xizmatlarining ishlashi uchun mas'ul bo'lgan marshrutizatorlarni o'z ichiga olgan hudud;
  • 2-maydon – marshrutni boshqarish trafigi uchun mas'ul marshrutizatorlarni o'z ichiga olgan hudud;
  • N maydoni - filial tarmoqlari hududlari.

Chegara marshrutizatorlarida virtual yo'riqnoma (VRF-INTERNET) yaratiladi, unga eBGP to'liq ko'rinishi tegishli tayinlangan AS bilan o'rnatiladi. iBGP VRFlar o'rtasida sozlangan. Kompaniyada ushbu VRF-INTERNET-da nashr etilgan oq manzillar to'plami mavjud. Oq manzillarning ba'zilari to'g'ridan-to'g'ri FW-CLUSTER (kompaniya xizmatlari ishlaydigan manzillar), ba'zilari EXCHANGE zonasi (tashqi IP manzillarni talab qiluvchi kompaniyaning ichki xizmatlari va ofislar uchun tashqi NAT manzillari) orqali yo'naltiriladi. Keyinchalik, trafik oq va kulrang manzillar (xavfsizlik zonalari) bilan L3-CORE-da yaratilgan virtual routerlarga o'tadi.

Boshqaruv tarmog'i ajratilgan kalitlardan foydalanadi va jismoniy ajratilgan tarmoqni ifodalaydi. Boshqaruv tarmog'i ham xavfsizlik zonalariga bo'lingan.
EMERGENCY router jismoniy va mantiqiy jihatdan FW-CLUSTERni takrorlaydi. Boshqaruv tarmog'iga qaraydiganlardan tashqari, undagi barcha interfeyslar o'chirilgan.

Avtomatlashtirish va uning tavsifi

Biz tarmoq qanday ishlashini aniqladik. Endi keling, trafikni FW-CLUSTER dan FAVQULODA ga o'tkazish uchun nima qilishimizni bosqichma-bosqich ko'rib chiqamiz:

  1. Biz yadro kalitidagi (L3-CORE) FW-CLUSTER ga ulanadigan interfeyslarni o'chirib qo'yamiz;
  2. Biz uni FW-CLUSTER ga ulaydigan L2-MGMT yadro kalitidagi interfeyslarni o'chirib qo'yamiz;
  3. Biz EMERGENCY routerni sozlaymiz (sukut bo'yicha, undagi barcha interfeyslar o'chirilgan, L2-MGMT bilan bog'langanlardan tashqari):

  • Biz EMERGENCY da interfeyslarni yoqamiz;
  • Biz FW-Clusterda joylashgan tashqi IP-manzilni (NAT uchun) sozlaymiz;
  • Biz gARP so'rovlarini yaratamiz, shunda L3-CORE arp jadvallaridagi ko'knori manzillari FW-Cluster dan FAVQULODDA ga o'zgartiriladi;
  • Biz standart marshrutni BRD-01, BRD-02 ga statik sifatida qayd qilamiz;
  • NAT qoidalarini yaratish;
  • Favqulodda vaziyatdagi OSPF 1 hududiga ko'taring;
  • Favqulodda vaziyatdagi OSPF 2 hududiga ko'taring;
  • Biz 1-hududdagi marshrutlarning narxini 10-ga o'zgartiramiz;
  • Biz 1-hududdagi standart marshrutning narxini 10-ga o'zgartiramiz;
  • Biz L2-MGMT bilan bog'langan IP manzillarini o'zgartiramiz (FW-CLUSTERda bo'lganlarga);
  • Biz gARP so'rovlarini yaratamiz, shunda L2-MGMT arp jadvallaridagi ko'knori manzillari FW-CLUSTER dan FAVQULODDA ga o'zgartiriladi.

Yana muammoning asl formulasiga qaytamiz. Ertalab soat uch, katta stress, har qanday bosqichdagi xato yangi muammolarga olib kelishi mumkin. CLI orqali buyruq yozishga tayyormisiz? Ha? Mayli, borib, yuzingizni yuving, kofe iching va irodangizni yig'ing.
Bryus, iltimos, yigitlarga yordam bering.

Tarmoqni avtomatlashtirish. Bir kishining hayotidan bir voqea

Biz avtomatlashtirishni yaxshilashda davom etamiz.
Quyida o'yin kitobining Ansible shartlarida qanday ishlashi diagrammasi keltirilgan. Ushbu sxema biz yuqorida aytib o'tganimizni aks ettiradi, bu shunchaki Ansible-da o'ziga xos dastur.
Tarmoqni avtomatlashtirish. Bir kishining hayotidan bir voqea

Ushbu bosqichda biz nima qilish kerakligini tushundik, o'yin kitobini ishlab chiqdik, testlarni o'tkazdik va endi uni ishga tushirishga tayyormiz.

Yana bir kichik lirik chekinish. Hikoyaning soddaligi sizni chalg'itmasligi kerak. O'yin kitoblarini yozish jarayoni ko'rinadigan darajada oddiy va tez emas edi. Sinov juda ko'p vaqtni oldi, virtual stend yaratildi, yechim ko'p marta sinovdan o'tkazildi, 100 ga yaqin sinovlar o'tkazildi.

Keling, ishga tushamiz... Hamma narsa juda sekin sodir bo'layotgani, qayerdadir xatolik bor, oxirida nimadir ishlamaydi, degan tuyg'u bor. Parashyut bilan sakrash hissi, lekin parashyut darhol ochilishni istamaydi ... bu normaldir.

Keyinchalik, biz Ansible o'yin kitobining bajarilgan operatsiyalari natijasini o'qiymiz (IP-manzillar maxfiylik maqsadida almashtirilgan):

[xxx@emergency ansible]$ ansible-playbook -i /etc/ansible/inventories/prod_inventory.ini /etc/ansible/playbooks/emergency_on.yml 

PLAY [------->Emergency on VCF] ********************************************************

TASK [vcf_junos_emergency_on : Disable PROD interfaces to FW-CLUSTER] *********************
changed: [vcf]

PLAY [------->Emergency on MGMT-CORE] ************************************************

TASK [mgmt_junos_emergency_on : Disable MGMT interfaces to FW-CLUSTER] ******************
changed: [m9-03-sw-03-mgmt-core]

PLAY [------->Emergency on] ****************************************************

TASK [mk_routeros_emergency_on : Enable EXT-INTERNET interface] **************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Generate gARP for EXT-INTERNET interface] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable static default route to EXT-INTERNET] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change NAT rule to EXT-INTERNET interface] ****************
changed: [m9-04-r-04] => (item=12)
changed: [m9-04-r-04] => (item=14)
changed: [m9-04-r-04] => (item=15)
changed: [m9-04-r-04] => (item=16)
changed: [m9-04-r-04] => (item=17)

TASK [mk_routeros_emergency_on : Enable OSPF Area 1 PROD] ******************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable OSPF Area 2 MGMT] *****************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change OSPF Area 1 interfaces costs to 10] *****************
changed: [m9-04-r-04] => (item=VLAN-1001)
changed: [m9-04-r-04] => (item=VLAN-1002)
changed: [m9-04-r-04] => (item=VLAN-1003)
changed: [m9-04-r-04] => (item=VLAN-1004)
changed: [m9-04-r-04] => (item=VLAN-1005)
changed: [m9-04-r-04] => (item=VLAN-1006)
changed: [m9-04-r-04] => (item=VLAN-1007)
changed: [m9-04-r-04] => (item=VLAN-1008)
changed: [m9-04-r-04] => (item=VLAN-1009)
changed: [m9-04-r-04] => (item=VLAN-1010)
changed: [m9-04-r-04] => (item=VLAN-1011)
changed: [m9-04-r-04] => (item=VLAN-1012)
changed: [m9-04-r-04] => (item=VLAN-1013)
changed: [m9-04-r-04] => (item=VLAN-1100)

TASK [mk_routeros_emergency_on : Change OSPF area1 default cost for to 10] ******************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change MGMT interfaces ip addresses] ********************
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})

TASK [mk_routeros_emergency_on : Generate gARPs for MGMT interfaces] *********************
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})

PLAY RECAP ************************************************************************

Bajar!

Aslida, bu hali tayyor emas, dinamik marshrutlash protokollarining konvergentsiyasi va FIB-ga ko'p sonli marshrutlarni yuklash haqida unutmang. Biz bunga hech qanday ta'sir o'tkaza olmaymiz. kutamiz. Bu amalga oshdi. Endi u tayyor.

Va Vilabajo qishlog'ida (tarmoqni sozlashni avtomatlashtirishni istamaydi) ular idishlarni yuvishda davom etadilar. Bryus (to'g'ri, allaqachon boshqacha, lekin unchalik ajoyib emas) uskunani qo'lda qayta sozlash qanchalik ko'p bo'lishini tushunishga harakat qilmoqda.

Tarmoqni avtomatlashtirish. Bir kishining hayotidan bir voqea

Yana bir muhim jihatga to‘xtalib o‘tmoqchiman. Qanday qilib biz hamma narsani qaytarib olamiz? Biroz vaqt o'tgach, biz FW-CLUSTER-ni hayotga qaytaramiz. Bu asosiy uskuna, zaxira emas, tarmoq unda ishlashi kerak.

Tarmoqchilar qanday yonib keta boshlaganini his qilyapsizmi? Texnik direktor nima uchun buni qilmaslik kerakligi, nima uchun buni keyinroq qilish mumkinligi haqida minglab dalillarni eshitadi. Afsuski, tarmoq eski hashamatining bir qancha yamoqlari, bo'laklari va qoldiqlaridan shunday ishlaydi. Bu patchwork ko'rpa bo'lib chiqadi. Umuman olganda, bizning vazifamiz, bu o'ziga xos vaziyatda emas, balki umuman olganda, IT-mutaxassislari sifatida, tarmoq ishini chiroyli inglizcha "consistency" so'ziga etkazishdir, u juda ko'p qirrali, uni quyidagicha tarjima qilish mumkin: izchillik , izchillik, mantiqiylik, izchillik, tizimlilik, qiyosiylik, izchillik. Hammasi u haqida. Faqat shu holatda tarmoqni boshqarish mumkin, biz nima va qanday ishlashini aniq tushunamiz, nimani o'zgartirish kerakligini aniq tushunamiz, agar kerak bo'lsa, muammolar yuzaga kelsa, qaerga qarash kerakligini aniq bilamiz. Va faqat shunday tarmoqda siz yuqorida aytib o'tganimizdek nayranglarni bajarishingiz mumkin.

Aslida sozlamalarni asl holatiga qaytargan yana bir o'yin kitobi tayyorlandi. Uning ishlash mantig'i bir xil (vazifalar tartibi juda muhim ekanligini unutmaslik kerak), allaqachon uzoq maqolani uzaytirmaslik uchun biz o'yin kitobining bajarilishi ro'yxatini joylashtirmaslikka qaror qildik. Bunday mashqlarni bajarganingizdan so'ng, siz o'zingizni ancha xotirjam his qilasiz va kelajakka ishonchingiz komil bo'ladi, bundan tashqari, u erga yig'ilgan har qanday tayoqchalar darhol o'zini namoyon qiladi.

Har kim bizga yozishi va barcha yozma kod manbalarini va barcha palybooks bilan birga olishi mumkin. Profildagi kontaktlar.

topilmalar

Bizning fikrimizcha, avtomatlashtirish mumkin bo'lgan jarayonlar hali kristallangan emas. Biz duch kelgan narsalarga va g'arblik hamkasblarimiz muhokama qilayotgan narsalarga asoslanib, hozirgacha quyidagi mavzular ko'rinadi:

  • Qurilmani ta'minlash;
  • Ma'lumotlar yig'ish;
  • Hisobot berish;
  • Muammolarni bartaraf qilish; nosozliklarni TUZATISH;
  • Muvofiqlik.

Agar qiziqish bo'lsa, berilgan mavzulardan biri bo'yicha muhokamani davom ettirishimiz mumkin.

Men avtomatlashtirish haqida ham bir oz gaplashmoqchiman. Bizning tushunchamizda nima bo'lishi kerak:

  • Tizim inson tomonidan takomillashtirilgan holda, insonsiz yashashi kerak. Tizim odamlarga bog'liq bo'lmasligi kerak;
  • Operatsiya mutaxassis bo'lishi kerak. Muntazam vazifalarni bajaradigan mutaxassislar toifasi yo'q. Butun tartibni avtomatlashtirgan va faqat murakkab muammolarni hal qiladigan mutaxassislar bor;
  • Muntazam standart vazifalar avtomatik ravishda "tugmani bosish bilan" amalga oshiriladi, hech qanday resurslar isrof qilinmaydi. Bunday vazifalarning natijasi har doim bashorat qilinadigan va tushunarli.

Va bu fikrlar nimaga olib kelishi kerak:

  • IT infratuzilmasining shaffofligi (Foydalanish, modernizatsiya qilish, amalga oshirishning kamroq xatarlari. Yiliga kamroq to'xtab qolish vaqti);
  • AT resurslarini rejalashtirish qobiliyati (Potentsiyalarni rejalashtirish tizimi - siz qancha iste'mol qilinishini ko'rishingiz mumkin, siz bitta tizimda qancha resurslar talab qilinishini ko'rishingiz mumkin, lekin xatlar va yuqori bo'limlarga tashriflar orqali emas);
  • IT xodimlari sonini qisqartirish imkoniyati.

Maqola mualliflari: Aleksandr Chelovekov (CCIE RS, CCIE SP) va Pavel Kirillov. Biz IT infratuzilmasini avtomatlashtirish mavzusini muhokama qilish va yechimlarni taklif qilishdan manfaatdormiz.


Manba: www.habr.com

a Izoh qo'shish