Ansible-modules gebruiken voor systeembeheertaken - Deel 6
In dit Deel 6 van de Ansible-serie hebben we in de afgelopen onderwerpen een aantal Ansible-modules behandeld. We gaan nu dieper in en ontdekken aanvullende modules die nuttig zijn bij het uitvoeren van een aantal systeembeheertaken.
U krijgt een basisidee van elke module en bekijkt de beschikbare opties om bepaalde taken uit te voeren.
Op deze pagina:
- Softwarepakketten en repositories beheren in Ansible
- Services beheren met Anible
- Firewall beheren met Anible
- Bestanden of mappen archiveren met Ansible
- Plan taken met Anible
- Beheer gebruikers en groepen met Ansible
- Maak bestanden en mappen met Ansible
- Opslag beheren met Anible
- Bestandssystemen beheren met Anible
1. Softwarepakketten en repositories beheren in Ansible
Bij het installeren van pakketten op Linux-systemen worden verschillende distributies geleverd met verschillende pakketbeheerders. Voor RedHat-distributies hebben we yum & dnf, terwijl er voor Debian-versies geschikt is.
Ansible wordt geleverd met een module genaamd pakket, waardoor het niet meer nodig is om verschillende pakketbeheerders voor verschillende systemen te gebruiken. Het maakt automatisch gebruik van de overeenkomstige pakketbeheerder van het hostsysteem, waardoor het werk eenvoudiger wordt.
Installeer softwarepakketten
Om htop bijvoorbeeld te installeren in een groep hosts die zowel Debian als RedHat distributies omvat, gebruikt u de pakket module als weergegeven in het install_htop.yml playbook hieronder.
---
- name: Install htop on Ubuntu and CentOS
hosts: all
tasks:
- package:
name: htop
state: installed
OPMERKING: Pakketnamen kunnen per besturingssysteem verschillen. We hebben bijvoorbeeld httpd in Redhat-distributies en Apache2 voor Debian/Ubuntu-systemen, die allemaal de Apache aanduiden web Server. Daarom moet extra voorzichtigheid worden betracht bij het passeren van deze pakketten. Meestal is het het beste om variabelen of voorwaardelijke instructies te gebruiken.
2. Services beheren met Ansible
Vervolgens hebben we een service module, die wordt gebruikt voor het beheren van services op Linux-systemen. Het wordt gebruikt om een service te starten, stoppen of herstarten. U kunt het ook gebruiken om een service in te schakelen, zodat wanneer een systeem opstart, de service automatisch wordt gestart.
Start en schakel een service in
Om bijvoorbeeld de Apache-webserver op RHEL 8 te starten en in te schakelen, gebruikt u de service zoals weergegeven.
---
- name: Start and enable httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: started
enabled: yes
Stop een dienst
Om de httpd-service te stoppen, geeft u het stopped-kenmerk door.
---
- name: Stop httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: stopped
Start een dienst opnieuw
Om de httpd-service opnieuw te starten, geeft u het restarted-kenmerk door.
---
- name: Restart httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: restarted
3. Firewall beheren met Ansible
Een andere belangrijke taak die systeembeheerders uitvoeren is het beheer van de firewall. In Ansible-playbooks is dit veel eenvoudiger gemaakt met firewalld- en ufw-modules. U kunt de firewall configureren om een poort of service of zelfs een bronadres toe te staan of te blokkeren.
Laten we erin springen en een paar voorbeelden bekijken:
Open/blokkeer poort 80 in firewalld
---
- name: Allow port 80
hosts: webservers
tasks:
-firewalld:
port: 80/tcp
permanent: yes
state: enabled
In het bovenstaande draaiboek is poort 80 toegestaan via de firewall.
De optie permanent: ja
dwingt de firewallregel af en zorgt ervoor dat deze bij herstarten persistent blijft. Deze regel is echter niet onmiddellijk van toepassing. Het treedt pas in werking na een herstart. Om de regel onmiddellijk af te dwingen, gebruikt u de optie onmiddellijk: ja
.
Gebruik de source:0.0.0.0/0-instructie om de toegestane adressen op te geven.
- firewalld:
source: 192.168.0.0/24
zone: public
state: enabled
Om een bereik van poorten op te geven die de poortoptie mogen gebruiken, gaat u als volgt te werk:
- firewalld:
port: 213-567/udp
permanent: yes
state: enabled
Om de poort te blokkeren, wijzigt u de statusoptie in uitgeschakeld, zoals weergegeven:
-firewalld:
port: 80/tcp
permanent: yes
state: disabled
Een service toevoegen/blokkeren in firewalld
Naast het toevoegen/blokkeren van een poort, kun je dezelfde regels ook toepassen op een dienst. En het is vrij eenvoudig. Gebruik gewoon de module service en voeg de toe te voegen service toe en zorg ervoor dat de statusoptie is ingesteld op ingeschakeld.
- firewalld:
service: https
permanent: true
state: enabled
Om de service te blokkeren, stelt u de optie status in op uitgeschakeld.
- firewalld:
service: https
permanent: true
state: disabled
4. Bestanden of mappen archiveren met Ansible
Archiveren verwijst naar de compressie van een bestand of map naar een formaat dat gemakkelijk draagbaar en kleiner van formaat is. Ansible wordt geleverd met een module genaamd archief. Het comprimeren van een bestand is ongeveer net zo eenvoudig als mogelijk. Het enige dat u hoeft te doen, is het bronpad van het bestand en de bestemming van het gecomprimeerde bestand opgeven.
Een map comprimeren
Bekijk hieronder een playbook compress.yml.
---
- hosts: webservers
tasks:
• name: Compress a folder
archive:
path: /opt/data/web
dest: /tmp/web.gz
Het bovenstaande playbook comprimeert de map /opt/data/web en slaat deze op in /tmp/web.gz.
Comprimeer een map met indeling
Het standaard compressieformaat is .gz
, maar dit kan worden gespecificeerd met behulp van het formaatattribuut. Voorbeeld van het volgende Playbook.
---
- hosts: webservers
Tasks:
- name: Create a zip archive
archive:
path: /opt/data/web
dest: /tmp/web
format: zip
Het bovenstaande playbook comprimeert de map /opt/data/web naar /tmp/web.zip.
Decomprimeer een bestand
U kunt een gecomprimeerd bestand ook decomprimeren met het kenmerk unarchive. Beschouw het onderstaande draaiboek.
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.gz to/opt directory on Ansible controller
unarchive:
src: /tmp/web.bz2
dest: /opt/
Het bovenstaande playbook decomprimeert het bestand /opt/data/web.gz naar /opt op de Ansible-controller.
Decomprimeer een bestand op een extern knooppunt
Om het externe bronsysteem te specificeren, gebruikt u de optie 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
Het bovenstaande playbook decomprimeert het bestand /tmp/web.bz2 op het externe knooppunt naar de map /opt/.
5. Plan taken met Ansible
De cron module helpt bij het plannen van taken in Ansible Playbooks.
Maak een geplande taak
Beschouw het onderstaande draaiboek.
---
- 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
Het draaiboek draait het presentiescript op 5 april om 17.00 uur.
Plan een script op een specifieke datum
Als u wilt dat dit script alleen wordt uitgevoerd als de 5e dag van april een maandag is, gebruikt u het kenmerk weekdag: 1. 0 staat voor zondag en 6 voor zaterdag volgens cron-notatie.
month: 4
day: 5
hour: 17
minute: 00
weekday: 1
Een sterretje (*) in een van deze velden geeft een waarde aan.
Voer een taak uit op een datum
Om de taak op 5 april om 17:00 uur uit te voeren, ongeacht de dag van de week, gebruikt u de tijdparameters zoals weergegeven.
month: 4
day: 5
hour: 17
minute: 00
weekday: *
Voer elke maand een taak uit op een specifieke dag
Om de cronjob op de 5e dag van elke maand om 17:00 uur uit te voeren, gebruikt u de onderstaande instellingen.
month: *
day: 5
hour: 17
minute: 00
weekday: *
Voer dagelijks een taak uit
Om de cronjob dagelijks om 17:00 uur uit te voeren, stelt u de tijdsinstellingen in zoals weergegeven:
month: *
day: *
hour: 17
minute: 00
weekday: *
Voer elke 5 uur een taak uit
Om de cron-taak elke 5 uur uit te voeren, gebruikt u de stapwaarde */5
zoals weergegeven.
month: *
day: *
hour: */5
minute: *
weekday: *
6. Beheer gebruikers en groepen met Ansible
U kunt ook heel moeiteloos gebruikers en groepen binnen Ansible-playbooks beheren.
Maak een nieuwe gebruiker aan
Om een nieuwe gebruiker aan te maken, gebruikt u de user module zoals weergegeven.
---
- hosts: webservers
tasks:
- name: Create a new user
user:
name: Jack
U kunt ook extra opties toevoegen, zoals UID, groepen.
- name: Create a new user
user:
name: Jack
comment: Jack Peters
uid: 1002
group: administrators
shell: /bin/bash
Een gebruiker verwijderen
Om de gebruiker te verwijderen, gebruikt u de instructie remove: yes
.
- name: Remove the user 'Jack'
user:
name: Jack
state: absent
remove: yes
Maak een nieuwe groep
Gebruik de module groep om een nieuwe groep aan te maken.
- name: Create a group
group:
name: developers
7. Maak bestanden en mappen met Ansible
Om bestanden of mappen aan te maken, gebruikt u de file module.
Maak een nieuwe map
Bijvoorbeeld om een nieuwe directory aan te maken.
---
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/app
state: directory
U kunt andere kenmerken toevoegen, zoals eigenaar-, groeps- en bestandsrechten.
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/web
state: directory
owner: www-data
group: www-data
mode: 0644
Bovendien kunt u recursief mappen maken met behulp van de recurse: yes-instructie.
---
- hosts: webservers
tasks:
- name: Create directories recursively
file:
path: /opt/web/app
state: directory
owner: www-data
group: www-data
mode: 0644
recurse: yes
Maak een bestand
Om een bestand aan te maken, gebruikt u de optie 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. Opslag beheren met Ansible
De lvg module wordt gebruikt om LVM-volumes en -groepen te configureren.
Maak een LVM-volumegroep
Beschouw het onderstaande draaiboek:
---
- hosts: webservers
tasks:
• name: Create lVM volume group
lvg:
vg: vg1
pvs: /dev/sda1
pesize: 32
Hierdoor wordt er een volumegroep aangemaakt bovenop de /dev/sda1
partitie met een fysieke omvang van 32 MB.
Eenmaal gemaakt, gebruikt u de lvol module om een logisch volume te maken, zoals weergegeven
Creëer een logisch volume
---
- hosts: webservers
tasks:
- name: Create lVM volume
lvol:
vg: vg1
lv: lvol1
pvs: /dev/sda1
9. Bestandssystemen beheren met Ansible
Om een bestandssysteem op een blokapparaat aan te maken, gebruikt u de module bestandssysteem.
Maak een bestandssysteem
Het onderstaande playbook maakt het bestandssysteemtype xfs op het blokvolume.
---
- hosts: webservers
tasks:
- name: Create a filesystem
filesystem:
fstype: xfs
dev: /dev/vg1/lvol1
Mount een bestandssysteem
U kunt vervolgens doorgaan met het koppelen van het blokvolume met behulp van de mount module, zoals weergegeven in het onderstaande speelboek:
---
- hosts: webservers
tasks:
- name: Mount a filesystem
mount:
fstype: xfs
src: /dev/vg1/lvol1
path: /opt/web
state: mounted
Conclusie
Hiermee wordt het onderwerp afgesloten. We hebben verschillende systeembeheertaken behandeld die kunnen worden uitgevoerd door specifieke ingebouwde modules in Ansible Playbooks.