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

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.