Wéi benotzen ech Ansible Moduler fir Systemadministratiounsaufgaben - Deel 6


An dësem Deel 6 vu e puer Ansible Moduler an de vergaangenen Themen, wäerte mir elo méi déif goen an zousätzlech Moduler entdecken déi hëllefräich sinn fir eng Zuel vu Systemadministratiounsaufgaben auszeféieren.

Dir kritt eng Basis Iddi vun all Modul a kuckt d'Optiounen déi verfügbar sinn fir verschidden Aufgaben z'erreechen.

  1. Gestioun Software Packagen a Repositories an Ansible
  2. Gestioun Servicer mat Ansible
  3. Firewall verwalten mat Ansible
  4. Archivéiere vun Dateien oder Ordner mat Ansible
  5. Tasks plangen mat Ansible
  6. Verwalte Benotzer a Gruppen mat Ansible
  7. Erstellt Dateien an Verzeichnisser mat Ansible
  8. Lagerung mat Ansible verwalten
  9. Dateisystemer mat Ansible verwalten

Wann Dir Packagen op Linux Systemer installéiere wëllt, kommen verschidde Verdeelunge mat verschiddene Packagemanager. Fir RedHat Verdeelungen hu mir apt.

Ansible kënnt mat engem Modul genannt Package, wat de Besoin eliminéiert fir verschidde Packagemanager fir verschidde Systemer ze benotzen. Et benotzt automatesch den entspriechende Package Manager vum Hostsystem, wouduerch d'Aarbecht méi einfach gëtt.

Zum Beispill, fir htop an enger Grupp vu Hosten z'installéieren, déi souwuel Debian & RedHat Distros ausmaachen, benotzt de Package Modul wéi am install_htop.yml Playbook ënnendrënner.

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

- package:
         name: htop
         state: installed

NOTÉIERT: Package Nimm kënne vun engem Betribssystem zu engem aneren ënnerscheeden. Zum Beispill hu mir httpd an Redhat Verdeelungen an Apache2 fir Debian/Ubuntu Systemer déi all den Apache Webserver bezeechnen. Dofir sollt extra Vorsicht geholl ginn wann Dir dës Packagen passéiert. Normalerweis ass et am beschten Variabelen oder bedingte Aussoen ze benotzen.

Als nächst hu mir e Servicemodul, dee benotzt gëtt fir Servicer op Linux Systemer ze managen. Et gëtt benotzt fir e Service unzefänken, ze stoppen oder nei ze starten. Dir kënnt et och benotze fir e Service z'aktivéieren sou datt wann e System boott, de Service automatesch ufänkt.

Zum Beispill, fir Apache Webserver op RHEL 8 ze starten an z'aktivéieren, benotzt de Service wéi gewisen.

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

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

Fir den httpd Service ze stoppen, gitt de gestoppt Attribut.

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

- service:
         name: httpd
         state: stopped

Fir den httpd Service nei unzefänken, gitt den nei gestarten Attribut.

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

- service:
         name: httpd
         state: restarted

Eng aner wichteg Aufgab System Administrateuren ënnerhuelen ass d'Gestioun vun der Firewall. An Ansible Playbooks ass dëst vill méi einfach gemaach mat Firewalld an ufw Moduler. Dir kënnt d'Firewall konfiguréieren fir e Port oder Service oder souguer eng Quelladress z'erméiglechen oder ze blockéieren.

Loosst eis eran sprangen an e puer Beispiller kucken:

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

Am Playbook uewendriwwer ass den Hafen 80 iwwer d'Firewall erlaabt.

D'Optioun permanent: jo erzwéngt d'Firewall-Regel a mécht se persistent iwwer Neistarten. Dës Regel gëllt awer net direkt. Et trëtt nëmmen a Kraaft no engem Restart. Fir d'Regel direkt ëmzesetzen, benotzt d'Optioun direkt: jo.

Fir d'Adressen ze spezifizéieren erlaabt, benotzt d'Quell:0.0.0.0/0 Ausso.

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

Fir eng Rei vu Ports ze spezifizéieren déi erlaabt sinn d'Portoptioun ze benotzen wéi follegt:

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

Fir den Hafen ze blockéieren, ännert d'Staatsoptioun op deaktivéiert wéi gewisen:

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

Niewent derbäisetzen/blockéieren vun engem Hafen, kënnt Dir och déiselwecht Reegele fir e Service uwenden. An et ass ganz einfach. Benotzt einfach de Servicemodul an fügt de Service un fir ze addéieren an ze garantéieren datt d'Staatsoptioun aktivéiert ass.

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

Fir de Service ze blockéieren, setzt d'Staatsoptioun op deaktivéiert.

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

Archivéieren bezitt sech op d'Kompressioun vun enger Datei oder Dossier op e Format dat liicht portabel a méi kleng ass. Ansible Schëffer mat engem Modul genannt Archiv. Eng Datei kompriméieren ass ongeféier sou einfach wéi et gëtt. Alles wat néideg ass, ass de Quellwee vun der Datei an d'Destinatioun vun der kompriméierter Datei ze spezifizéieren.

Betruecht e Spillbuch compress.yml ënnert.

---
- hosts: webservers
  tasks:

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

Dat uewe genannte Spillbuch kompriméiert den /opt/data/Web Verzeichnis a späichert et op /tmp/web.gz.

De Standardkompressiounsformat ass .gz, dëst kann awer mat dem Formatattribut spezifizéiert ginn. Probe déi nächst Playbook.

---
- hosts: webservers
  Tasks:

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

D'Spillbuch hei uewen kompriméiert /opt/data/Web Verzeechnes op /tmp/web.zip.

Dir kënnt och eng kompriméiert Datei mat dem Unarchiv Attribut unkompriméieren. Betruecht d'Spillbuch hei drënner.

---
- hosts: webservers
  tasks:

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

D'Playbook uewendriwwer dekompriméiert d'Datei /opt/data/web.gz fir /opt op den Ansible Controller.

Fir de Remote Source System ze spezifizéieren, benotzt d'Optioun 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 

D'Playbook uewen kompriméiert d'Datei /tmp/web.bz2 um Remote Node an den /opt/ Verzeichnis.

De Cron Modul hëlleft beim Zäitplang vun Aarbechtsplazen an Ansible Playbooks.

Betruecht d'Spillbuch hei drënner.

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

D'Spillbuch leeft d'Participatioun Skript de 5. Abrëll um 17:00 Auer.

Wann Dir dëse Skript wëllt plangen fir nëmmen ze lafen wann de 5. Abrëll e Méindeg ass, benotzt de Wochendag: 1 Attribut. 0 bedeit Sonndeg a 6 bedeit Samschdeg no Cron Notatioun.

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

Eng Asterisk (*) an engem vun dëse Felder weist all Wäert un.

Fir den Job den 5. Abrëll um 17:00 ze lafen egal wéi de Wochendag ass, benotzt d'Zäitparameter wéi gewisen.

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

Fir de Cron Job de 5. Dag vun all Mount um 17:00 auszeféieren, benotzt d'Astellungen hei ënnen.

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

Fir de Cron Job all Dag um 17:00 auszeféieren, setzt d'Zäitastellunge wéi gewisen:

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

Fir de Cron Job all 5 Stonnen auszeféieren, benotzt de Schrëttwäert */5 wéi gewisen.

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

Dir kënnt och Benotzer a Gruppen bannent Ansible Playbooks ganz einfach verwalten.

Fir en neie Benotzer ze kreéieren, benotzt de Benotzermodul wéi gewisen.

---
- hosts: webservers
  tasks:

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

Dir kënnt och zousätzlech Optiounen wéi UID, Gruppen addéieren.

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

Fir de Benotzer ze läschen, benotzt d' entfernen: jo Ausso.

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

Fir en neie Grupp ze kreéieren, benotzt de Gruppemodul.

- name: Create a group
  group:
    name: developers

Fir Dateie vu Verzeichnisser ze kreéieren, benotzt de Dateimodul.

Zum Beispill, fir en neie Verzeechnes ze kreéieren.

---
- hosts: webservers
  tasks:

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

Dir kënnt aner Attributer wéi Besëtzer, Grupp a Fichier Permissiounen derbäi.

- hosts: webservers
  tasks:

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

Zousätzlech kënnt Dir Verzeichnisser rekursiv erstellen andeems Dir d'Recurse benotzt: jo Ausso.

---
- hosts: webservers
  tasks:

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

Fir e Fichier ze kreéieren, benotzt d'Optioun Staat: 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

De lvg Modul gëtt benotzt fir LVM Bänn a Gruppen ze konfiguréieren.

Betruecht d'Spillbuch hei ënnen:

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

Dëst erstellt eng Volumengrupp uewen op /dev/sda1 Partition mat enger kierperlecher Gréisst vun 32 MB.

Eemol erstallt, benotzt de lvol Modul fir e logesche Volume ze kreéieren wéi gewisen

---
    - hosts: webservers
      tasks: 

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

Fir e Dateiesystem op engem Blockapparat ze kreéieren, benotzt de Dateisystemmodul.

D'Spillbuch hei drënner erstellt den Dateisystemtyp vun xfs um Blockvolumen.

---
    - hosts: webservers
      tasks: 

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

Dir kënnt als nächst weidergoën fir de Blockvolumen mam Montéierungsmodul ze montéieren wéi am Playbook hei ënnen gewisen:

---
    - hosts: webservers
      tasks: 

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

Dëst schléisst d'Thema of. Mir hunn verschidde Systemadministratiounsaufgaben ofgedeckt, déi duerch spezifesch agebaute Moduler an Ansible Playbooks erfëllt kënne ginn.