7 sarcini zilnice de administrator de sistem de automatizat cu Ansible

Ansible, un proiect cu sursă deschisă și gratuit, dezvoltat de Red Hat, bazat pe limbajul Python, reprezintă o platformă populară pentru automatizarea IT și gestionarea configurațiilor sistemelor.

Funcționând pe diverse platforme, Ansible este compatibil cu majoritatea sistemelor de operare actuale, inclusiv Linux, Windows și macOS. Acesta folosește un limbaj declarativ, YAML (sau YAML Ain’t Markup Language), pentru a defini configurarea sistemului.

Alături de alte platforme moderne de gestionare a configurațiilor, Ansible a transformat radical modul în care este realizată automatizarea IT, stabilind noi standarde în industrie. Instrumentele de management al configurației au devenit o componentă esențială a setului de instrumente DevOps, integrându-se în mod natural în orice ciclu de viață modern al proceselor IT. Acest lucru este valabil pentru orice tip de infrastructură, fie că este on-premise, hibridă sau în cloud. Ansible nu este util doar în cadrul DevOps, ci poate automatiza și diverse sarcini zilnice ale administratorilor de sistem.

Un mare avantaj al Ansible este că nu necesită instalarea de agenți pe sistemele țintă. Pentru a începe, este suficient accesul SSH la mașina țintă și o versiune compatibilă de Python, care este deja instalată pe majoritatea sistemelor moderne. Datorită naturii sale ușoare, Ansible poate fi implementat și utilizat chiar și cu sisteme mai vechi.

Aplicații ale Ansible

Orchestrarea sistemelor

Ansible este un instrument preferat pentru orchestrară sarcinilor de administrare și implementare a sistemelor. Prin intermediul playbook-urilor, se pot folosi aceleași fluxuri de lucru pentru diferite proiecte, iar datele de configurare bazate pe YAML permit stocarea și gestionarea versiunilor infrastructurii în cadrul depozitelor Git sau al altor platforme de control al versiunilor.

Implementarea aplicațiilor

Indiferent dacă este vorba de o aplicație simplă sau de o implementare complexă pe mai multe niveluri, Ansible facilitează automatizarea completă a ciclului de viață al implementării aplicațiilor.

Securitate și conformitate

Ansible contribuie la asigurarea securității sistemelor, conformându-se cu politicile organizaționale și standardele din industrie. Capabil să funcționeze pe mii de servere, Ansible poate realiza audituri și poate remedia vulnerabilitățile de securitate, oferind administratorilor control complet asupra mediului.

Acum, să analizăm câteva dintre sarcinile frecvente ale administratorilor de sistem, care pot fi automatizate cu ajutorul Ansible.

Transferul de fișiere între sisteme locale și la distanță

Un administrator de sistem transferă frecvent fișiere între directoare. Fișierele de configurare sunt adesea copiate pe servere la distanță, sau uneori fișierele sunt mutate de la o locație la distanță la alta.

Modulul de copiere al Ansible facilitează automatizarea acestor sarcini prin playbook-uri.

Este o practică obișnuită ca un administrator să monitorizeze starea serverelor și să efectueze acțiuni în conformitate cu politicile organizației. O astfel de acțiune este verificarea duratei de funcționare a serverului (uptime). Ansible permite preluarea facilă a acestor valori, care pot fi apoi afișate. Un exemplu de copiere a configurației NTP de pe un server local pe unul la distanță, folosind modulul de copiere, este prezentat mai jos:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copiază un nou fișier de configurare NTP și creează o copie de rezervă a originalului, dacă există diferențe
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

Configurarea sarcinilor programate cu cron

Programarea sarcinilor pentru a efectua operațiuni de rutină este o parte importantă a administrării oricărui server. Se pot programa backup-uri automate, patch-uri, audituri etc., în anumite momente, permițând utilizarea eficientă a timpului.

cron este un instrument Linux pentru programarea sarcinilor, iar Ansible permite adăugarea sau modificarea acestor sarcini. Următorul playbook demonstrează cum se poate seta o sarcină rsync ca root pe unul sau mai multe servere folosind Ansible.

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Implementează o sarcină cron
      cron:
        name: "Setează o sarcină rsync"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /cale/catre/folder1 /cale/catre/folder1 2>&1"

Administrarea discurilor și a sistemelor de fișiere

Ansible poate fi utilizat pentru gestionarea discurilor, a partițiilor, a sistemelor de fișiere și a montărilor, inclusiv a fișierului /etc/fstab pe serverele Linux. Diferite module Ansible fac acest lucru posibil. Iată un exemplu care creează o partiție de 100 GB pe un disc, o formatează cu sistemul de fișiere ext4, creează un nou director pentru montarea partiției și, în final, o montează pe un director dat. O intrare în /etc/fstab este, de asemenea, creată, montarea fiind temporară sau permanentă, în funcție de opțiunile modulului.

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Creează o partiție
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Formatează noua partiție
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Creează directorul de montare
      file:
        path: /data
        state: directory
    - name: Montează partiția
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted

Colectarea jurnalelor serverului

Stocarea jurnalelor într-un loc accesibil este uneori crucială pentru securitate, audit și analiză. Ansible permite colectarea jurnalelor de la diverse servere din infrastructura dvs. și stocarea lor într-o locație definită. Următorul playbook exemplifică modul de realizare a acestui lucru:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
  
    - name: Găsește jurnalele
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: Descarcă jurnalele
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"

Instalarea sau dezinstalarea pachetelor și a aplicațiilor

Adesea, este necesar ca pachetele să fie instalate la cererea utilizatorilor sau ca parte a versiunilor inițiale ale serverului. De asemenea, se poate impune eliminarea anumitor pachete care nu mai sunt necesare sau care au anumite erori critice. Ansible permite instalarea sau dezinstalarea facilă a pachetelor, eliminând necesitatea de a merge la fiecare server și de a rula manual comenzi. Următorul exemplu demonstrează instalarea și dezinstalarea câte unui pachet pentru serverele Linux bazate pe Ubuntu și RHEL/CentOS.

- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Instalează utilitarul lsof
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Elimină utilitarul ARP Scan
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Instalează utilitarul lsof
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Elimină utilitarul ARP Scan
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

Gestionarea utilizatorilor

Utilizatorii și grupurile formează structura de bază în jurul căreia sistemele Unix/Linux gestionează accesul și permisiunile. Într-o organizație mare, administrarea utilizatorilor și a grupurilor poate reprezenta o provocare majoră, chiar și cu automatizarea menită să susțină mediul.

Ansible oferă administratorilor de sistem un instrument eficient pentru a crea, modifica și șterge utilizatori și grupuri, cu toate opțiunile posibile suportate de sistemul de operare.

Iată un exemplu simplu care demonstrează crearea și ștergerea utilizatorilor și a grupurilor folosind Ansible. După rularea acestui playbook, serverele țintă vor avea grupul A și grupul B create cu GID-urile specificate, în timp ce user1 va fi eliminat, dacă este prezent. Un nou utilizator fără shell va fi creat ca user2, cu UID-ul indicat, grupurile alocate și parola blocată.

- 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

Administrarea serviciilor

Serviciile sunt procese demon care rulează în fundal și oferă anumite facilități, precum sshd, care asigură conectivitatea SSH. Cu ajutorul Ansible, puteți administra serviciile de sistem și cele ale utilizatorilor, inclusiv pornirea, oprirea și repornirea acestora. Următorul playbook ilustrează modul în care se realizează acest lucru:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Repornește serviciul SSH
      service:
        name: ssh
        state: restarted
    - name: Oprește serviciul SSSD
      service:
        name: sssd
        state: stopped
    - name: Pornește serviciul httpd
      service:
        name: httpd
        state: started

În exemplul de mai sus, serviciul SSH va fi repornit, după care se va opri serviciul SSSD. Demonul httpd este pornit în final. Deoarece Ansible este idempotent, orice serviciu deja pornit sau oprit nu va fi modificat, în timp ce repornirea va schimba starea serviciului. Nu uitați să verificați denumirea serviciului, deoarece diferite distribuții Linux pot folosi alte denumiri chiar și pentru același serviciu, de exemplu ssh și sshd.

Concluzie 👨‍💻

Ansible simplifică activitatea administratorilor de sistem, permițând automatizarea sarcinilor repetitive și consumatoare de timp, reducând erorile umane și efortul depus. În plus, permite stocarea datelor de configurare într-un depozit central de cod precum Git, facilitând colaborarea între mai mulți utilizatori și revizuirea fiecărei activități.

Pentru a afla mai multe despre Ansible și setul său extins de module, consultați documentația.