Zoeken op website

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:
  1. Softwarepakketten en repositories beheren in Ansible
  2. Services beheren met Anible
  3. Firewall beheren met Anible
  4. Bestanden of mappen archiveren met Ansible
  5. Plan taken met Anible
  6. Beheer gebruikers en groepen met Ansible
  7. Maak bestanden en mappen met Ansible
  8. Opslag beheren met Anible
  9. 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.