7 щоденних завдань системного адміністратора для автоматизації за допомогою Ansible

Ansible – це безкоштовний проєкт з відкритим вихідним кодом, розроблений компанією Red Hat на базі Python. Він є популярною платформою для управління конфігураціями та автоматизації ІТ-інфраструктури.

Цей інструмент є кросплатформенним і сумісний з більшістю сучасних операційних систем, таких як Linux, Windows і macOS. Він використовує декларативну мову, YAML (YAML Ain’t Markup Language), для опису конфігурацій систем.

Ansible, разом з іншими платформами управління конфігураціями, зробив революцію в сфері автоматизації ІТ та встановив нові галузеві стандарти. Інструменти управління конфігураціями стали невід’ємною частиною DevOps та є важливими для будь-якого сучасного ІТ-процесу. Ansible застосовується в будь-якому інфраструктурному середовищі, будь то локальна, гібридна або хмарна інфраструктура. Крім того, Ansible може допомогти автоматизувати багато рутинних завдань, які щоденно виконують системні адміністратори.

Однією з ключових переваг Ansible є його без агентська архітектура, яка не вимагає встановлення додаткового програмного забезпечення на цільових машинах. Для початку роботи потрібен лише доступ SSH та наявність підтримуваної версії Python, яка, як правило, вже встановлена в більшості сучасних операційних систем. Завдяки своїй легкості, Ansible можна використовувати навіть із застарілими системами.

Застосування Ansible

Оркестрування

Ansible – це ідеальний інструмент для оркестрування різноманітних завдань системного адміністрування та розгортання. Його плейбуки дозволяють використовувати спільні робочі процеси в різних проєктах, а конфігураційні дані на основі YAML дозволяють зберігати та контролювати версії інфраструктури за допомогою Git або інших систем контролю версій.

Розгортання додатків

Ansible спрощує автоматизацію повного циклу розгортання додатків, незалежно від їх складності, від простих програм до масштабних багаторівневих систем.

Безпека та відповідність

Ansible допомагає забезпечити безпеку систем, дотримуючись вказівок організації та галузевих стандартів. Він здатний працювати з великою кількістю серверів, проводити аудит та виправляти вразливості, надаючи адміністратору повний контроль над середовищем.

Розглянемо декілька поширених завдань системного адміністратора, які можна автоматизувати за допомогою Ansible.

Копіювання файлів між локальними та віддаленими системами

Системним адміністраторам часто доводиться копіювати файли між різними каталогами, наприклад, переносити файли конфігурації на віддалені сервери або між віддаленими розташуваннями.

Модуль копіювання Ansible дозволяє легко виконувати ці завдання за допомогою плейбуків.

Системні адміністратори повинні постійно відслідковувати стан керованих серверів та виконувати дії згідно з політикою організації. Одним з таких завдань є визначення часу роботи сервера. Ansible дозволяє легко отримати значення часу безперебійної роботи та вивести їх. Наприклад, розглянемо плейбук, що копіює конфігурацію NTP з локальної машини на віддалений сервер:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copy a new ntp configuration file and back up the original, if it differs
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

Налаштування завдань cron

Налаштування запланованих завдань для виконання рутинних операцій є важливим аспектом управління сервером. Завдання, такі як автоматичне резервне копіювання, оновлення, аудит, можна автоматично планувати на певний час доби або місяця, звільняючи час для інших задач.

Cron є одним з інструментів для планування завдань у Linux, і Ansible може допомогти вам додавати або змінювати ці завдання. Наприклад, розглянемо плейбук, що встановлює завдання rsync для root на одному або кількох серверах:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Deploy cron job
      cron:
        name: "Set rsync job"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"

Керування дисками та файловими системами

Ansible можна використовувати для управління дисками, розділами, файловими системами та монтуваннями, включаючи /etc/fstab на серверах Linux. Для цього є спеціальний модуль Ansible. Наприклад, розглянемо плейбук, який створює розділ на диску об’ємом 100 ГБ, форматує його за допомогою ext4, створює каталог для монтування та монтує розділ:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Create a partition
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Format new partition
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Create mount directory
      file:
        path: /data
        state: directory
    - name: Mount partition
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted

Збір журналів сервера

Зберігання журналів в одному місці важливо для безпеки, аудиту та аналізу. Ansible дозволяє збирати журнали з різних серверів та зберігати їх у визначеному місці. Ось приклад плейбука для цього:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
  
    - name: Find logs
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

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

Встановлення та видалення пакетів

Часто потрібно встановлювати пакети на запит користувачів або під час початкової збірки сервера, а також видаляти непотрібні пакети. Ansible спрощує ці завдання, дозволяючи встановлювати або видаляти пакети на багатьох серверах без необхідності ручного виконання команд на кожному з них. Ось приклад плейбуків для встановлення та видалення пакетів на Ubuntu та RHEL/CentOS:

- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Install lsof utility
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Install lsof utility
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

Керування користувачами

Користувачі та групи є базовою структурою для керування доступом і дозволами в Unix/Linux. У великих організаціях управління користувачами та групами може бути складним завданням. Завдяки Ansible системний адміністратор отримує потужний інструмент для створення, зміни та видалення користувачів та груп. Розглянемо простий приклад:

- 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

Керування службами

Служби – це фонові процеси, які забезпечують роботу різних сервісів, таких як sshd. Ansible дозволяє керувати службами, запускати, зупиняти та перезапускати їх. Ось приклад плейбука для управління службами:

- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Restart ssh daemon
      service:
        name: ssh
        state: restarted
    - name: Restart sssd daemon
      service:
        name: sssd
        state: stopped
    - name: Restart httpd daemon
      service:
        name: httpd
        state: started

У цьому прикладі служба SSH буде перезапущена, SSSD зупинена, а httpd запущена. Ansible є ідемпотентним, тому служби, які вже запущені або зупинені, не будуть змінені. Важливо перевіряти назви служб, оскільки різні дистрибутиви Linux можуть використовувати різні імена для одних і тих самих служб.

Підсумок

Ansible спрощує роботу системних адміністраторів, дозволяючи автоматизувати рутинні завдання, зменшуючи кількість помилок та заощаджуючи час. Крім того, він дозволяє зберігати конфігураційні дані в централізованому сховищі, такому як Git, що сприяє співпраці та контролю за змінами.

Щоб дізнатися більше про Ansible та його модулі, зверніться до офіційної документації.