Wyszukiwanie w witrynie

Jak używać modułów Ansible do zadań administracyjnych systemu — część 6


W tej Części 6 serii Ansible omówiliśmy kilka modułów Ansible z poprzednich tematów. Teraz przejdziemy głębiej i odkryjemy dodatkowe moduły, które są pomocne w wykonywaniu wielu zadań administracyjnych systemu.

Poznasz podstawowe pojęcie o każdym module i przyjrzysz się dostępnym opcjom realizacji określonych zadań.

Na tej stronie:
  1. Zarządzanie pakietami oprogramowania i repozytoriami w Ansible
  2. Zarządzanie usługami za pomocą Ansible
  3. Zarządzanie zaporą sieciową za pomocą Ansible
  4. Archiwizowanie plików lub folderów za pomocą Ansible
  5. Zaplanuj zadania za pomocą Ansible
  6. Zarządzaj użytkownikami i grupami za pomocą Ansible
  7. Twórz pliki i katalogi za pomocą Ansible
  8. Zarządzanie pamięcią masową za pomocą Ansible
  9. Zarządzanie systemami plików za pomocą Ansible

1. Zarządzanie pakietami oprogramowania i repozytoriami w Ansible

Podczas instalowania pakietów w systemach Linux różne dystrybucje zawierają różnych menedżerów pakietów. W przypadku dystrybucji RedHat mamy yum i dnf, natomiast w przypadku dystrybucji Debian jest to trafne.

Ansible zawiera moduł o nazwie pakiet, który eliminuje potrzebę używania różnych menedżerów pakietów dla różnych systemów. Automatycznie korzysta z odpowiedniego menedżera pakietów systemu hosta, ułatwiając w ten sposób pracę.

Zainstaluj pakiety oprogramowania

Na przykład, aby zainstalować htop w grupie hostów składającej się zarówno z dystrybucji Debian, jak i RedHat, użyj modułu pakietu jako pokazano w poradniku install_htop.yml poniżej.

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed

UWAGA: nazwy pakietów mogą się różnić w zależności od systemu operacyjnego. Na przykład mamy httpd w dystrybucjach Redhat i Apache2 dla systemów Debian/Ubuntu, z których wszystkie oznaczają Apache serwer internetowy. Dlatego też należy zachować szczególną ostrożność podczas przekazywania tych pakietów. Zwykle najlepiej jest używać zmiennych lub instrukcji warunkowych.

2. Zarządzanie usługami za pomocą Ansible

Następnie mamy moduł usługi, który służy do zarządzania usługami w systemach Linux. Służy do uruchamiania, zatrzymywania lub ponownego uruchamiania usługi. Można go także użyć do włączenia usługi, dzięki czemu po uruchomieniu systemu usługa zostanie automatycznie uruchomiona.

Uruchom i włącz usługę

Na przykład, aby uruchomić i włączyć serwer WWW Apache w RHEL 8, użyj usługi, jak pokazano.

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes

Zatrzymaj usługę

Aby zatrzymać usługę httpd, przekaż atrybut stopped.

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped

Uruchom ponownie usługę

Aby ponownie uruchomić usługę httpd, przekaż atrybut restarted.

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted

3. Zarządzanie zaporą sieciową za pomocą Ansible

Kolejnym ważnym zadaniem, jakie podejmują administratorzy systemu, jest zarządzanie zaporą ogniową. W podręcznikach Ansible zostało to znacznie ułatwione dzięki modułom firewalld i ufw. Możesz skonfigurować zaporę tak, aby zezwalała lub blokowała port lub usługę, a nawet adres źródłowy.

Przejdźmy do rzeczy i spójrzmy na kilka przykładów:

Otwórz/zablokuj port 80 w zaporze firewall

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

W powyższym poradniku port 80 jest dozwolony przez zaporę ogniową.

Opcja permanent: Yes wymusza regułę zapory sieciowej i sprawia, że jest ona trwała po ponownym uruchomieniu. Zasada ta nie obowiązuje jednak od razu. Zacznie działać dopiero po ponownym uruchomieniu. Aby natychmiast wymusić regułę, użyj opcji natychmiast: tak.

Aby określić dozwolone adresy, użyj instrukcji source:0.0.0.0/0.

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

Aby określić zakres portów, na których można używać opcji portu, wykonaj następujące czynności:

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

Aby zablokować port, zmień opcję stanu na wyłączony, jak pokazano:

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

Dodaj/zablokuj usługę w zaporze firewalld

Oprócz dodania/zablokowania portu możesz także zastosować te same reguły do usługi. I to jest całkiem proste. Wystarczy skorzystać z modułu usługa, dodać usługę, która ma zostać dodana i upewnić się, że opcja stanu jest ustawiona na włączona.

- firewalld:
    service: https
    permanent: true
    state: enabled

Aby zablokować usługę, ustaw opcję stan na wyłączona.

- firewalld:
    service: https
    permanent: true
    state: disabled

4. Archiwizowanie plików lub folderów za pomocą Ansible

Archiwizacja oznacza kompresję pliku lub folderu do formatu, który można łatwo przenosić i który jest mniejszy. Ansible jest dostarczany z modułem o nazwie archiwum. Kompresowanie pliku jest tak proste, jak to tylko możliwe. Wystarczy określić ścieżkę źródłową pliku i miejsce docelowe skompresowanego pliku.

Kompresuj katalog

Rozważ poniższy poradnik compress.yml.

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

Powyższy podręcznik kompresuje katalog /opt/data/web i zapisuje go w pliku /tmp/web.gz.

Kompresuj katalog za pomocą formatu

Domyślny format kompresji to .gz, można go jednak określić za pomocą atrybutu format. Wypróbuj następny poradnik.

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

Powyższy podręcznik kompresuje katalog /opt/data/web do pliku /tmp/web.zip.

Rozpakuj plik

Możesz także zdekompresować skompresowany plik, korzystając z atrybutu unarchive. Rozważ poniższy podręcznik.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

Powyższy podręcznik dekompresuje plik /opt/data/web.gz do /opt na kontrolerze Ansible.

Rozpakuj plik w węźle zdalnym

Aby określić zdalny system źródłowy, użyj opcji remote_src=yes.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

Powyższy podręcznik dekompresuje plik /tmp/web.bz2 na zdalnym węźle do katalogu /opt/.

5. Zaplanuj zadania za pomocą Ansible

Moduł cron pomaga w planowaniu zadań w podręcznikach Ansible.

Utwórz zaplanowane zadanie

Rozważ poniższy podręcznik.

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

Podręcznik uruchamia scenariusz obecności 5 kwietnia o godzinie 17:00.

Zaplanuj skrypt na konkretną datę

Jeśli chcesz zaplanować uruchomienie tego skryptu tylko wtedy, gdy 5 kwietnia wypada w poniedziałek, użyj atrybutu dzień powszedni: 1. 0 oznacza niedzielę, a 6 oznacza sobotę zgodnie z notacją cron.

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

gwiazdka (*) w dowolnym z tych pól wskazuje dowolną wartość.

Uruchom zadanie na randce

Aby uruchomić zadanie 5 kwietnia o godzinie 17:00, niezależnie od dnia tygodnia, użyj parametrów czasu, jak pokazano.

month: 4
day: 5
hour: 17
minute: 00
weekday: *

Wykonaj zadanie w określonym dniu każdego miesiąca

Aby wykonać zadanie cron piątego dnia każdego miesiąca o godzinie 17:00, użyj poniższych ustawień.

month: *
day: 5
hour: 17
minute: 00
weekday: *

Wykonuj zadanie codziennie

Aby wykonywać zadanie cron codziennie o 17:00, ustaw ustawienia czasu jak pokazano:

month: *
day: *
hour: 17
minute: 00
weekday: *

Wykonuj zadanie co 5 godzin

Aby wykonywać zadanie cron co 5 godzin, użyj wartości kroku */5, jak pokazano.

month: *
day: *
hour: */5
minute: *
weekday: *

6. Zarządzaj użytkownikami i grupami za pomocą Ansible

Możesz także bez wysiłku zarządzać użytkownikami i grupami w podręcznikach Ansible.

Utwórz nowego użytkownika

Aby utworzyć nowego użytkownika, użyj modułu użytkownika, jak pokazano.

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

Możesz także dodać dodatkowe opcje, takie jak UID, grupy.

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

Usuń użytkownika

Aby usunąć użytkownika użyj instrukcji remove: Yes.

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

Utwórz nową grupę

Aby utworzyć nową grupę, skorzystaj z modułu grupa.

- name: Create a group
  group:
    name: developers

7. Twórz pliki i katalogi za pomocą Ansible

Do tworzenia plików katalogów służy moduł plik.

Utwórz nowy katalog

Na przykład, aby utworzyć nowy katalog.

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

Możesz dodać inne atrybuty, takie jak uprawnienia właściciela, grupy i pliku.

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

Dodatkowo możesz tworzyć katalogi rekurencyjnie, używając instrukcji recurse: tak.

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

Utwórz plik

Aby utworzyć plik użyj opcji state: touch.

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. Zarządzanie pamięcią masową za pomocą Ansible

Moduł lvg służy do konfigurowania woluminów i grup LVM.

Utwórz grupę woluminów LVM

Rozważ poniższy podręcznik gry:

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

Spowoduje to utworzenie grupy woluminów na partycji /dev/sda1 o rozmiarze fizycznym 32 MB.

Po utworzeniu użyj modułu lvol, aby utworzyć wolumin logiczny, jak pokazano

Utwórz wolumin logiczny

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. Zarządzanie systemami plików za pomocą Ansible

Aby utworzyć system plików na urządzeniu blokowym, użyj modułu filesystem.

Utwórz system plików

Poniższy podręcznik tworzy typ systemu plików xfs na woluminie blokowym.

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

Zamontuj system plików

Następnie możesz przystąpić do montowania woluminu blokowego za pomocą modułu mount, jak pokazano w poniższym podręczniku:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
Wniosek

To kończy temat. Omówiliśmy różne zadania administracyjne systemu, które można wykonać za pomocą określonych modułów wbudowanych w podręcznikach Ansible.