7 codziennych zadań Sysadmin do automatyzacji za pomocą Ansible

Ansible, będący otwartym projektem Red Hata opartym na języku Python, jest szeroko wykorzystywaną platformą do zarządzania ustawieniami i automatyzacji w IT.

Jego wszechstronność przejawia się w kompatybilności z większością współczesnych systemów operacyjnych, w tym Linux, Windows i macOS. Do definiowania konfiguracji systemów wykorzystuje deklaratywny język YAML (YAML Ain’t Markup Language).

Ansible, obok innych nowoczesnych platform do zarządzania konfiguracją, wywołał rewolucję w automatyzacji IT i wpłynął na standardy branżowe. Narzędzia do zarządzania konfiguracją stały się nieodłącznym elementem zestawu narzędzi DevOps i są kluczowe dla każdego nowoczesnego cyklu życia procesów IT. Ma to zastosowanie do każdego środowiska infrastruktury, niezależnie od tego, czy jest ono oparte na lokalnej infrastrukturze, hybrydzie, czy w chmurze. Ansible to nie tylko narzędzie dla DevOps, ale również wsparcie w automatyzacji wielu codziennych zadań administratora systemu.

Jedną z zalet Ansible jest brak konieczności stosowania agentów i niewielka bariera wejścia. Wystarczy dostęp SSH do docelowej maszyny oraz obsługa Pythona, która jest już standardowo zainstalowana w większości współczesnych systemów operacyjnych. Ponadto, jako lekkie narzędzie, może być wdrażane i wykorzystywane zarówno w nowatorskich, jak i starszych systemach.

Zastosowania Ansible

Orkiestracja

Ansible jest preferowanym narzędziem do organizowania różnorodnych zadań związanych z administracją systemem i wdrożeniami. Playbooki umożliwiają stosowanie tych samych schematów orkiestracji w różnych projektach, a dane konfiguracyjne oparte na YAML pozwalają na przechowywanie i wersjonowanie infrastruktury w repozytorium Git lub innej platformie kontroli wersji.

Wdrażanie aplikacji

Niezależnie od tego, czy jest to aplikacja o prostej strukturze, czy rozbudowane, wielowarstwowe wdrożenie, Ansible pozwala na zautomatyzowanie całego cyklu wdrażania aplikacji.

Bezpieczeństwo i zgodność

Ansible może także wspierać w zapewnieniu bezpieczeństwa systemów zgodnie z wytycznymi organizacji i standardami branżowymi. Umożliwia działanie na tysiącach serwerów, tworzenie audytów oraz naprawę luk w zabezpieczeniach, dając administratorowi pełną kontrolę nad środowiskiem.

Przyjrzyjmy się teraz kilku typowym zadaniom administratora systemu, które można zautomatyzować za pomocą Ansible.

Kopiowanie plików z systemu lokalnego lub zdalnego

Administratorzy systemów często kopiują pliki między katalogami. Pliki konfiguracyjne często muszą być kopiowane na serwery zdalne, a niekiedy konieczne jest przeniesienie plików z jednej lokalizacji zdalnej do innej.

Moduł kopiowania Ansible umożliwia wykonywanie tych zadań w playbooku.

Administratorzy systemów regularnie monitorują stan zarządzanych serwerów i wykonują zdefiniowane działania zgodnie z polityką organizacji. Jednym z takich zadań jest sprawdzanie czasu pracy serwera. Ansible umożliwia łatwe pobieranie i wyświetlanie wartości czasu sprawności. Poniżej przedstawiono przykład kopiowania konfiguracji NTP z systemu lokalnego na serwer zdalny za pomocą modułu kopiowania:

---
- 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

Konfigurowanie dodatkowych zadań cron

Konfigurowanie zadań harmonogramowych do wykonywania rutynowych czynności jest elementem zarządzania serwerem. Można zaplanować automatyczne tworzenie kopii zapasowych, aktualizacje, audyty itp. w określonych porach dnia lub miesiąca, zwiększając produktywność.

cron to jedno z narzędzi w systemie Linux, które wspiera planowanie, a Ansible może pomóc w dodawaniu lub modyfikowaniu tych zadań. Poniższy przykład ilustruje, jak łatwo ustawić zadanie rsync jako root na wybranych lub wszystkich serwerach za pomocą Ansible.

---
- 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"

Zarządzanie dyskami i systemami plików

Ansible może być wykorzystywany do zarządzania dyskami, układami partycji, systemami plików i ich montowaniem, w tym /etc/fstab na serwerach Linux. Obsługuje to specjalny moduł Ansible. Poniżej znajduje się przykład, który tworzy partycję na dysku o pojemności 100 GB, formatuje ją za pomocą systemu plików ext4, tworzy nowy katalog do montowania partycji i montuje ją w zadanym katalogu. Wpis w /etc/fstab jest także generowany, montując partycję tymczasowo lub na stałe, zależnie od ustawień modułu.

---
- 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

Gromadzenie logów serwera

Przechowywanie logów w odpowiednim miejscu jest niezbędne dla bezpieczeństwa, audytu i analizy. Ansible umożliwia gromadzenie dzienników z różnych serwerów w środowisku korporacyjnym i ich łatwe przechowywanie w określonej lokalizacji. Poniższy przykład pokazuje, jak to osiągnąć:

---
- 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 }}"

Instalacja i usuwanie pakietów i oprogramowania

Pakiety są często instalowane na żądanie użytkownika lub jako część konfiguracji serwera. Może być także konieczne usunięcie pakietów, które nie są już potrzebne lub zawierają błędy. Ansible pozwala łatwo instalować i usuwać pakiety bez konieczności ręcznego wykonywania poleceń na każdym serwerze. Poniżej przedstawiono przykład instalacji i usunięcia pakietu dla serwerów Linux Ubuntu i 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

Zarządzanie użytkownikami

Użytkownicy i grupy tworzą podstawową strukturę, w oparciu o którą systemy oparte na Unix/Linux zarządzają dostępem i uprawnieniami. W dużej organizacji zarządzanie użytkownikami i grupami może być sporym wyzwaniem, nawet przy wsparciu automatyzacji.

Dzięki Ansible administrator systemu dysponuje potężnym narzędziem do tworzenia, modyfikowania i usuwania użytkowników i grup, z różnymi opcjami obsługiwanymi przez system operacyjny.

Poniżej przedstawiono prosty przykład, pokazujący tworzenie i usuwanie użytkowników i grup za pomocą Ansible. Po uruchomieniu tego poradnika, docelowe serwery będą miały utworzone grupy A i B z określonymi identyfikatorami GID, a użytkownik 1 zostanie usunięty, jeśli istnieje. Nowy użytkownik bez powłoki zostanie utworzony jako użytkownik2 z określonym UID, przypisanymi grupami i zablokowanym hasłem.

---
- 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

Zarządzanie usługami

Usługi to procesy działające w tle, które zapewniają pewne funkcjonalności, takie jak sshd dla połączeń SSH. Ansible umożliwia zarządzanie usługami systemowymi i użytkownika, na przykład ich uruchamianie, zatrzymywanie i ponowne uruchamianie. Poniżej znajduje się przykład podręcznika, który pokazuje, jak to zrobić:

---
- 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

W powyższym przykładzie usługa SSH zostanie ponownie uruchomiona, podczas gdy usługa SSSD zostanie zatrzymana. Usługa httpd zostanie uruchomiona na końcu. Ponieważ Ansible jest idempotentny, każda usługa, która już działa lub jest zatrzymana, nie zostanie zmieniona podczas ponownego uruchomienia, a jedynie jej stan. Należy pamiętać o sprawdzeniu nazwy usługi, ponieważ różne dystrybucje Linuksa używają różnych nazw, nawet dla tej samej usługi, takiej jak ssh i sshd.

Podsumowanie 👨‍💻

Ansible ułatwia pracę administratorom systemów, umożliwiając automatyzację powtarzalnych i czasochłonnych zadań, a także redukując ryzyko błędów ludzkich i wysiłek. Dodatkowo pozwala na przechowywanie danych konfiguracyjnych w scentralizowanym repozytorium kodu, takim jak Git, umożliwiając współpracę wielu użytkowników i śledzenie każdej akcji.

Aby dowiedzieć się więcej o Ansible i jego rozbudowanym zestawie modułów, zapoznaj się z jego dokumentacją.