петак, 26 априла, 2024
Слободни професионалац

Ансибл – контрола на врховима ваших прстију

Аутор: Марјан Бугариновић

Пре годину дана сам чуо за Ансибл (енг. Ansible) и, као и многе ствари пре тога, прочитао сам нешто овлаш о његовим могућностима и оставио те информације да одстоје. Првенствено зато што нисам знао нити разумео шта је све то што описује Ансибл. Када сам коначно загребао површину онога што представља Ансибл, сачекало ме је обиље могућности. Са мноштвом могућности се долази до разноразних идеја. О некима од њих ће бити речи у овом тексту, а неке ћете сами морати да смислите.

Шта је Ансибл?

Шта је укратко Ансибл? Ансибл је, како га описују – алат за систем администраторе креиран од стране систем администратора! И то је истина. Креирао га је Мајкл Де Хан, особа која је креирала Коблер (енг. Cobbler), алат који се бави удаљеном (енг. remote) инсталацијом оперативних система на виртуелне или физичке машине и све то на Линуксу. Замислите да радите за огромну компанију и да вам је потребно да на 100 машина инсталирате неки Линукс оперативни систем, релативно брзо и лако. То можете урадити уз Коблер.

Све је то супер, али где је ту Ансибл? Замислите да су тих 100 машина којих сте малочас инсталирали и оспособили заправо Линукс сервери и да сваки од њих мора да има одговарајуће пакете и да прође кроз одговарајући безбедносни процес конфигурације (било да је то подешавање СЕЛинукс опције, отварање портова на фајерволу (енг. firewall), или додавање сервера на домен). Све се то може урадити са Ансиблом. Све то и много више. Ансибл можемо поистоветити са, рецимо, бајком “Фрулаш из Хамелна”. Ви сте фрулаш, Ансибл је фрула, а пацови су сервери. На вама је како употребити сву ту моћ коју вам он пружа.

Ансибл је алат отвореног кода и 2015. године је купљен од стране Редхета. Лиценциран је делом ГНУ ГПЛ лиценцом, а делом има и код који је у власништву компаније Редхет. Може се инсталирати на било коју Линукс дистрибуцију, било да је то Федора, Дебијан, Арч Линукс. И можда оно што је најважније код Ансибла – када га инсталирате на своју Линукс машину, можете кренути са управљањем и конифигурисањем удаљених, а и своје локалне машине, без икакве инсталације удаљених агената (алата који ће извршавати команде које му главни сервер пошаље). Ансибл све то ради преко добро нам познатог ССХ протокола, користећи ССХ кључеве!

Како? Једноставно, када извршавате Ансибл команде или књиге игара (енг. Playbook), Ансибл “отрчи” на сервер уз помоћ провере кључева са локалном машином и на тој машини уради оно што сте му ви рекли.

У овом чланку се нећемо бавити тиме како да инсталирате и покренете Ансибл, то је описано у ранијим (чланцима). Овде ћемо се сконцентрисати на предлоге и идеје где све Ансибл може добро доћи.

Шта даље?

Наставимо даље са нашим замислима. Имамо оних 100 сервера које смо инсталирали раније и сад морамо да им нешто урадимо. Шта би то могло да буде? За почетак, пошто сте свесни добрих безбедносних пракси и желите да их примените на своје стадо, уз помоћ Ансибла можете да на сваком од тих сервера ограничите ко све може имати права судоера (енг. sudoers – корисници са апсолутним правима на Линукс машинама) и ограничити приступ по ИП адресама.

Како сад па то урадити?

У помоћ вам пристижу џинџа шеме (енг. jinja templates). Џинџа шеме се понашају попут неких нинџи (како им само име каже) и нечујно мењају статичке фајлове, претварајући их у динамичке. Шта то значи? Рецимо да је потребно да у сваки од ових судоерс фајлова који би сте сместили у /etc/sudoers.d/ директоријум упишете ИП адресу машине на којој се налазите. Нећете ићи од сервера до сервера и ручно мењати фајл и можда негде погрешити, већ ћете у фајлу са екстензијом .ј2 (препоручена пракса у Ансиблу, како би знали да је у питању џинџа) написати коме је све потребно дати права судоера, а у делу који се односи на ИП адресу сервера на коме се примењује судоерс фајл, једноставно навести варијаблу – ansible_default_ipv4.address, познату као чињеницу (енг. fact) коју је Ансибл прикупио онако успут и употребиће је баш онако како је вама потребно!

Пошто смо обезбедили наше стадо, време је да га ажурирамо, илити покренемо добро нам познати јам апдејт (енг. yum update) или apt-get apdejt (енг. apt-get update) и ажурирати све пакете на системима. И то ћемо урадити уз помоћ Ансибла и његових модула за јам (енг. yum) и апт. Шта су сад модули? Па, модули су нешто налик на команде које Ансибл шаље удаљеним машинама. Самих модула је много, од модула за шеме (енг. template) чије смо коришћење већ споменули, преко модула за инсталацију пакета (јам и апт) до модула за манипулисање фајерволом.

Како се снаћи у том мору модула које поседује Ансибл?

Ансибл документација је на завидном нивоу и помоћ можете потражити у командној линији уз помоћ команде

ansible-doc [ime modula]

Или једноставно упишите

ansible-doc --list

Овим добијате листу свих модула који се налазе у Ансиблу.

Такође, ако вам је (још увек) мало теже да се снађете у командној линији, саветујем вам да погледате веб сајт. Тамо можете наћи исто оно што вам се налази и у терминалу, само не толико робусно. Саветујем вам да што више користите терминал и да из њега учите, јер могућности постоје. А тако су и мене саветовали када сам кретао са Ансиблом и свим осталим стварима. Ништа није толико комплексно да мало “минус минус помоћ” (–help) не може изаћи у сусрет.

Шта је шта?

У овом тексту споменуто је неколико израза из Ансибл речника, ово су још неки од њих који ће вам можда помоћи да се у њему снађете, или вам помоћи да неке од ствари боље разумете.

Ансибл модул – скуп команди које Ансибл шаље машини коју смо дефинисали и на њој их извршава, враћајући нама одређене информације.
Ансибл ад-хок – један од начина за покретање Ансибла, из командне линије.
Ансибл задатак (енг. task) – други начин за извршавање Ансибла, дефинисањем задатака у јамл фајлу.
Ансибл књига игара – скуп задатака, варијабли и још много других ствари које се налазе у једном фајлу и извршавају се на онолико сервера колико смо ми дефинисали.
Чињеница (енг. fact) – представља варијабле које Ансибл подразумевано прикупља о машинама које контактира.
Инвентар (енг. inventory) – представља фајл са скупом машина који представљају “мете” за Ансибл, оно што ће он контактирати када му ми то кажемо.
Шема (енг. template) – један од модула Ансибла који нам омогућава да на Ансибл контролној машини (енг. control node) чувамо један динамички фајл који пласирамо удаљеним машинама са варијаблама које смо дефинисали приликом извођења неких од задатака из књиге игара.
Ансибл контролна машина (енг. Ansible Control Node) – машина која је централна и на којој је инсталиран Ансибл. Машина чобанин која брине о свом стаду уз помоћ Ансибла.

Ансибл речник је обиман и ово је само један делић који ће вас можда инспирисати да тражите даље, читате, мислите и проналазите нове могућности за употребу овог премоћног алата. Извињавам се уколико сам негде погрешио са неким од ових израза, тако их ја видим и разумем.

Будите радознали!