7 codziennych zadań Sysadmin do automatyzacji za pomocą Ansible

Ansible, bezpłatny i oparty na otwartym kodzie źródłowym projekt Red Hata w języku Python, to popularna platforma do zarządzania konfiguracją i automatyzacji IT.

Jest wieloplatformowy i może współpracować z większością nowoczesnych systemów operacyjnych, w tym Linux, Windows i Mac. Obsługuje deklaratywny język napisany w YAML lub YAML Ain’t Markup Language do opisu konfiguracji systemu.

Ansible, wraz z innymi nowoczesnymi platformami do zarządzania konfiguracją, zrewolucjonizował automatyzację IT i standardy branżowe. Narzędzia do zarządzania konfiguracją stały się częścią zestawu narzędzi DevOps i są nieodłączną częścią każdego nowoczesnego cyklu życia procesów IT. Ma to zastosowanie do każdego nowoczesnego środowiska infrastruktury, niezależnie od tego, czy jest zbudowane na środowisku lokalnym, hybrydowym czy w chmurze. Nie tylko dla DevOps, ale Ansible może również pomóc zautomatyzować wiele codziennych zadań wykonywanych przez administratora systemu.

Jedną z zalet korzystania z Ansible jest to, że nie wymaga agentów i nie wymaga wiele, aby rozpocząć, poza dostępem SSH do maszyny docelowej i obsługiwanej wersji Pythona, która jest już domyślnie zainstalowana w większości nowoczesnych systemów operacyjnych. Ponadto, ponieważ jest to lekkie narzędzie, może być wdrażane i używane ze spuścizną po innowacyjnych systemach.

Zastosowania Ansible

Orkiestracja

Ansible to wybrane narzędzie do organizowania różnych zadań związanych z administrowaniem systemem i wdrażaniem. Playbooki umożliwiają korzystanie z tych samych przepływów pracy orkiestracji w różnych projektach, a dane konfiguracyjne oparte na YAML umożliwiają przechowywanie i wersjonowanie infrastruktury w repozytorium Git lub dowolnej obsługiwanej platformie kontroli wersji.

Wdrażanie aplikacji

Niezależnie od tego, czy jest to prosta aplikacja z kilkuwierszowym kodem, czy wielowarstwowe, rozbudowane wdrożenie, Ansible umożliwia zautomatyzowanie całego cyklu wdrażania aplikacji.

Bezpieczeństwo i zgodność

Ansible może również pomóc w zapewnieniu bezpieczeństwa systemów zgodnie z wytycznymi Twojej organizacji i zgodności ze standardami branżowymi. Może działać na tysiącach serwerów, generować audyt i naprawiać te luki w zabezpieczeniach, dając administratorowi pełną kontrolę nad środowiskiem.

Przyjrzyjmy się teraz niektórym z typowych zadań Sysadmin, które można zautomatyzować za pomocą Ansible.

Skopiuj pliki z lokalnego lub zdalnego systemu

Jako administrator systemu często kopiujesz pliki z jednego katalogu do drugiego. Pliki konfiguracyjne często trzeba kopiować na serwery zdalne, a czasami musimy przenieść pliki z jednej zdalnej lokalizacji do drugiej.

Moduł kopiowania Ansible może pomóc w wykonaniu tych zadań w playbooku.

Sysadmin rutynowo sprawdza stan zarządzanych serwerów i wykonuje predefiniowane działania zgodnie z zasadami organizacji. Jednym z takich zadań jest znajomość czasu pracy serwera. Dzięki Ansible możemy łatwo pobrać wartości czasu sprawności i wydrukować je razem. Przykład kopiowania konfiguracji ntp z lokalnego na zdalny serwer za pomocą modułu kopiowania pokazano poniżej:

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

Skonfiguruj dodatkowe zadania cron

Konfigurowanie zaplanowanych zadań do wykonywania rutynowych zadań jest częścią zarządzania dowolnym serwerem. Możesz zaplanować automatyczne tworzenie kopii zapasowych, łatanie, audyty itp. o określonych porach dnia lub miesiąca, pozostawiając produktywny czas do użytku.

cron jest jednym z takich narzędzi w systemie Linux, które obsługuje planowanie, a Ansible może pomóc w dodawaniu lub modyfikowaniu tych zadań. Jako przykład, poniższy poradnik pokazuje, jak łatwo ustawić zadanie rsync jako root na niektórych 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ądzaj dyskami i systemami plików

Ansible może być używany do zarządzania dyskami, układami partycji, systemami plików i montowaniami, w tym /etc/fstab na serwerach Linux. Umożliwia to inny moduł Ansible. Oto 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 ostatecznie montuje ją w podanym katalogu. Wpis w /etc/fstab jest również tworzony przez montowanie tymczasowe lub stałe, w zależności od opcji 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

Zbierz logi serwera

Prowadzenie logów w dogodnym miejscu jest czasem niezbędne dla bezpieczeństwa, audytu, a także analizy. Ansible umożliwia zbieranie dzienników z różnych serwerów w środowisku przedsiębiorstwa i łatwe przechowywanie ich w określonej lokalizacji. Oto poradnik, 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 }}"

Zainstaluj lub usuń pakiety i oprogramowanie

Pakiety są często wymagane do zainstalowania na żądanie użytkownika lub jako część początkowych kompilacji serwera. Możemy również potrzebować usunąć niektóre pakiety, które nie są już potrzebne lub mają kilka krytycznych błędów itp. Ansible pozwala łatwo instalować lub usuwać pakiety bez kłopotów z przechodzeniem do każdego serwera i uruchamianiem ręcznych poleceń. Oto przykład demonstrujący instalację i usunięcie jednego 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ę, wokół której systemy oparte na systemach Unix/Linux zarządzają dostępem i uprawnieniami. W dużej organizacji zarządzanie użytkownikami i grupami może być dużym wyzwaniem pomimo automatyzacji wspierającej środowisko.

Dzięki Ansible administrator systemu ma doskonałe narzędzie do tworzenia, modyfikowania i usuwania użytkowników i grup z różnymi możliwościami obsługiwanymi w systemie operacyjnym.

Oto prosty przykład, który pokazuje tworzenie i usuwanie użytkowników i grup za pomocą Ansible. Po uruchomieniu tego podręcznika, serwery docelowe będą miały utworzone grupy A i B z podanymi identyfikatorami GID, podczas gdy użytkownik 1 zostanie usunięty, jeśli jest obecny. Nowy użytkownik bez powłoki zostanie utworzony jako użytkownik2 z podanym 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 demony procesów, które działają w tle i obsługują niektóre usługi, takie jak sshd zapewniające łączność SSH itp. Za pomocą Ansible możesz zarządzać usługami systemowymi i użytkownikami, takimi jak uruchamianie, zatrzymywanie i ponowne ich uruchamianie. Oto przykładowy podręcznik, który pokazuje, że:

---
- 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 zatrzymywania usługi SSSD. Demon httpd jest uruchamiany pod koniec. Ponieważ Ansible jest idempotentny, każda usługa, która jest już uruchomiona lub zatrzymana, nie zostanie zmieniona podczas ponownego uruchamiania, zawsze zmienia stan usługi. Pamiętaj, aby sprawdzić nazwę usługi, ponieważ różne dystrybucje Linuksa używają innych nazw, nawet dla tej samej usługi, takiej jak ssh i sshd.

Podsumowanie 👨‍💻

Ansible ułatwia życie administratorowi systemu, umożliwiając wykonywanie powtarzających się i czasochłonnych zadań w sposób zautomatyzowany oraz redukując ludzkie błędy i wysiłek. Co więcej, umożliwi przechowywanie danych konfiguracyjnych w centralnym repozytorium kodu, takim jak Git, umożliwiając wielu użytkownikom współpracę i przeglądanie każdego działania.

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