Ansible, besplatni projekat otvorenog koda baziran na Python-u, razvijen od strane Red Hat-a, predstavlja popularno rešenje za upravljanje konfiguracijom i automatizaciju IT infrastrukture.
Ova multi-platformska alatka funkcioniše na većini savremenih operativnih sistema, uključujući Linux, Windows i macOS. Koristi deklarativni jezik, specificiran u YAML formatu (ili „YAML Ain’t Markup Language“), za opisivanje željene konfiguracije sistema.
Ansible je, zajedno sa drugim modernim platformama za upravljanje konfiguracijom, transformisao IT automatizaciju i uveo nove industrijske standarde. Alati za upravljanje konfiguracijom postali su ključni deo DevOps alata i neizostavni su u životnom ciklusu svakog modernog IT procesa. Ovo važi za svako savremeno infrastrukturno okruženje, bilo da je ono lokalno, hibridno ili zasnovano na oblaku. Osim DevOps-a, Ansible takođe može pojednostaviti mnoge rutinske zadatke koje svakodnevno obavlja administrator sistema.
Jedna od ključnih prednosti Ansible-a je njegova arhitektura bez agenata. Za početak rada nije potrebno mnogo – samo SSH pristup ciljnom sistemu i podržana verzija Python-a, koja je već podrazumevano instalirana na većini modernih operativnih sistema. Pored toga, budući da je lagan alat, može se lako implementirati i koristiti čak i sa starijim sistemima.
Primena Ansible-a
Orkestracija
Ansible je idealan alat za orkestraciju različitih zadataka sistemske administracije i implementacije. Playbook-ovi omogućavaju korišćenje identičnih tokova rada za orkestraciju u različitim projektima, dok YAML konfiguracioni podaci olakšavaju skladištenje i kontrolu verzija vaše infrastrukture putem Git repozitorijuma ili bilo koje druge podržane platforme za kontrolu verzija.
Implementacija aplikacija
Bez obzira da li se radi o jednostavnoj aplikaciji od nekoliko linija koda ili kompleksnoj implementaciji na više nivoa, Ansible omogućava automatizaciju celokupnog životnog ciklusa implementacije aplikacija.
Sigurnost i usklađenost
Ansible takođe doprinosi sigurnosti vaših sistema, osiguravajući usklađenost sa smernicama vaše organizacije i industrijskim standardima. Može se primeniti na hiljade servera, generisati izveštaje o reviziji i popraviti sigurnosne propuste, dajući administratoru potpunu kontrolu nad okruženjem.
Pogledajmo sada neke od uobičajenih zadataka sistemskog administratora koje možete automatizovati pomoću Ansible-a.
Kopiranje datoteka sa lokalnog ili udaljenog sistema
Uobičajen zadatak sistemskog administratora je kopiranje datoteka između različitih direktorijuma. Konfiguracione datoteke često treba kopirati na udaljene servere, ili ponekad datoteke treba premeštati sa jedne udaljene lokacije na drugu.
Ansible-ov `copy` modul vam omogućava da lako izvršavate ove zadatke.
Rutinski zadatak sistemskog administratora je da prati status upravljanih servera i preduzima definisane akcije u skladu sa politikama organizacije. Jedan od takvih zadataka je praćenje vremena rada servera. Uz Ansible, lako možemo dobiti informacije o vremenu rada i prikazati ih. Primer kopiranja NTP konfiguracije sa lokalnog na udaljeni server pomoću `copy` modula prikazan je u nastavku:
--- - hosts: all gather_facts: no become: yes tasks: - name: Kopiranje nove ntp konfiguracione datoteke i pravljenje rezervne kopije originalne, ako se razlikuju copy: src: ./ntp.conf dest: /etc/ntp.conf owner: root group: root mode: '0644' backup: yes
Konfigurisanje dodatnih cron poslova
Postavljanje zakazanih poslova za automatizaciju rutinskih zadataka je sastavni deo upravljanja svakim serverom. Možete automatizovati pravljenje rezervnih kopija, primenu zakrpa, revizije, itd., u određeno doba dana ili meseca, oslobađajući svoje vreme za produktivne zadatke.
Cron je jedan takav alat u Linux-u koji omogućava zakazivanje, a Ansible vam može pomoći da dodate ili modifikujete te poslove. Kao primer, ispod je prikazano kako možete lako postaviti rsync posao kao root na nekim ili svim vašim serverima koristeći Ansible.
--- - hosts: all gather_facts: no become: yes tasks: - name: Postavljanje cron posla cron: name: "Postavljanje rsync posla" user: root minute: "5" hour: "4" job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"
Upravljanje diskovima i sistemima datoteka
Ansible se može koristiti za upravljanje diskovima, particijama, sistemima datoteka i mount tačkama, uključujući `/etc/fstab` na Linux serverima. Različiti Ansible moduli ovo omogućavaju. Evo primera koji kreira particiju od 100 GB na disku, formatira je sa ext4 sistemom datoteka, kreira novi direktorijum za montiranje particije i konačno je montira u dati direktorijum. Unos u `/etc/fstab` se takođe kreira za privremeno ili trajno montiranje, u zavisnosti od opcija modula.
--- - hosts: all gather_facts: no become: yes tasks: - name: Kreiranje particije parted: device: /dev/sdb number: 1 part_end: "100%" state: present - name: Formatiranje nove particije filesystem: fstype: ext4 dev: /dev/sdb1 - name: Kreiranje direktorijuma za montiranje file: path: /data state: directory - name: Montiranje particije mount: path: /data src: /dev/sdb1 fstype: ext4 state: mounted
Prikupljanje logova servera
Čuvanje logova na pogodnom mestu je ponekad od ključnog značaja za sigurnost, reviziju i analizu. Ansible omogućava prikupljanje logova sa različitih servera u vašem okruženju i njihovo lako čuvanje na određenoj lokaciji. Evo kako to možete postići:
--- - hosts: all gather_facts: no become: yes tasks: - name: Pronalaženje logova find: paths: /var/log/ patterns: '*.log' recurse: yes register: _logs - name: Preuzimanje logova fetch: src: "{{ item.path }}" dest: /tmp/logs with_items: "{{ _logs.files }}"
Instaliranje ili uklanjanje paketa i softvera
Često je potrebno instalirati pakete na zahtev korisnika ili kao deo inicijalne konfiguracije servera. Takođe je potrebno ukloniti određene pakete koji više nisu potrebni ili imaju kritične greške. Ansible vam omogućava da lako instalirate ili uklonite pakete bez potrebe za ručnim pristupom svakom serveru i pokretanjem komandi. Evo primera koji prikazuje instalaciju i uklanjanje po jednog paketa za Ubuntu i RHEL/CentOS bazirane Linux servere.
--- - hosts: ubuntu gather_facts: no tasks: - name: Instaliranje lsof utility apt: pkg: lsof state: latest sudo: yes - name: Uklanjanje ARP Scan utility apt: pkg: arp-scan state: absent sudo: yes --- - hosts: centos gather_facts: no tasks: - name: Instaliranje lsof utility yum: pkg: lsof state: latest sudo: yes - name: Uklanjanje ARP Scan utility yum: pkg: arp-scan state: absent sudo: yes
Upravljanje korisnicima
Korisnici i grupe čine osnovnu strukturu oko koje Unix/Linux sistemi upravljaju pristupom i dozvolama. U velikoj organizaciji, upravljanje korisnicima i grupama može biti izazovno, čak i uz automatizaciju okruženja.
Uz Ansible, administrator sistema dobija moćan alat za kreiranje, modifikovanje i brisanje korisnika i grupa, uz sve mogućnosti koje operativni sistem podržava.
Evo jednostavnog primera koji pokazuje kreiranje i brisanje korisnika i grupa pomoću Ansible-a. Nakon pokretanja ovog playbook-a, ciljni serveri će imati kreirane grupe A i B sa datim GID-ovima, dok će korisnik1 biti uklonjen, ako postoji. Novi korisnik bez shell-a će biti kreiran kao korisnik2 sa datim UID-om, dodeljenim grupama i zaključanom lozinkom.
--- - hosts: all gather_facts: no become: yes tasks: - group: gid: 12310 name: groupA state: present - group: gid: 12311 name: groupB state: present - user: name: user1 state: absent - user: name: user2 uid: 12427 shell: /bin/false password_lock: yes groups: groupA, groupB
Upravljanje servisima
Servisi su procesni demoni koji rade u pozadini i pružaju određene funkcionalnosti, kao što je sshd koji omogućava SSH konekcije. Koristeći Ansible, možete upravljati sistemskim i korisničkim servisima, kao što su njihovo pokretanje, zaustavljanje i ponovno pokretanje. Evo primera playbook-a koji to ilustruje:
--- - hosts: all gather_facts: no become: yes tasks: - name: Ponovno pokretanje ssh demona service: name: ssh state: restarted - name: Zaustavljanje sssd demona service: name: sssd state: stopped - name: Pokretanje httpd demona service: name: httpd state: started
U gornjem primeru, SSH servis će biti ponovo pokrenut, dok će se SSSD servis zaustaviti. HTTPD demon se pokreće na kraju. S obzirom da je Ansible idempotentan, bilo koji servis koji je već pokrenut ili zaustavljen neće biti promenjen, dok ponovno pokretanje uvek menja stanje servisa. Obratite pažnju na imena servisa, jer različite Linux distribucije koriste različita imena čak i za iste servise, kao što su ssh i sshd.
Zaključak 👨💻
Ansible olakšava život administratorima sistema omogućavajući im da izvršavaju ponavljajuće i dugotrajne zadatke na automatizovan način, smanjujući ljudske greške i potreban napor. Dodatno, omogućava skladištenje konfiguracionih podataka u centralnom repozitorijumu koda, kao što je Git, omogućavajući višestrukim korisnicima da sarađuju i prate sve aktivnosti.
Da biste saznali više o Ansible-u i njegovom velikom broju modula, pogledajte njegovu dokumentaciju.