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:
- Zarządzanie pakietami oprogramowania i repozytoriami w Ansible
- Zarządzanie usługami za pomocą Ansible
- Zarządzanie zaporą sieciową za pomocą Ansible
- Archiwizowanie plików lub folderów za pomocą Ansible
- Zaplanuj zadania za pomocą Ansible
- Zarządzaj użytkownikami i grupami za pomocą Ansible
- Twórz pliki i katalogi za pomocą Ansible
- Zarządzanie pamięcią masową za pomocą Ansible
- 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.