So erstellen Sie Ansible-Spiele und Playbooks – Teil 5

In diesem Teil 5 In Ansible Series werden wir erklären, wie man erstellt Ansible Spiele und Spielbücher mit Ansible-Modulen.

Ansible Schiffe mit eigenständigen Skripten werden aufgerufen Module die in verwendet werden Spielbücher zur Ausführung spezialisierter Aufgaben auf Remote-Knoten.

Module Dies ist praktisch, um Aufgaben wie Paketverwaltung, Archivierung und Kopieren von Dateien zu automatisieren, um nur einige zu nennen. Mit ihnen können Sie Konfigurationsdateien optimieren und Geräte wie Router, Switches, Load Balancer, Firewalls und eine Vielzahl anderer Geräte verwalten.

Ziel dieses Unterthemas ist es, Ihnen einen Überblick über verschiedene Aufgaben zu geben, die von ausgeführt werden können Ansible Module::

Paketverwaltung unter Linux

Die Paketverwaltung ist eine der wichtigsten und häufigsten Aufgaben von Systemadministratoren. Ansible wird mit Modulen geliefert, mit denen Sie Paketverwaltungsaufgaben ausführen können Roter Hut und Debian basierte Systeme.


Sie sind relativ leicht zu erraten. Dort ist der passendes Modul für die APT-Paketverwaltung für Debian basiert das alte yum Modul für YUM Paketverwaltung und DNS-Modul im Zusammenhang mit neueren RHEL-Distributionen.

Nachfolgend einige Beispiele, wie die Module in einem verwendet werden können Spielbuch::

Beispiel 1: Installieren des Apache Webservers auf RHEL 8

---
- name: install Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         dnf:  
          name: httpd  
          State: latest

Beispiel 2: Installieren des Apache Webservers unter Debian 10

---
- name: install Apache webserver
  hosts: databases

  tasks:
       - name: install Apache webserver
         apt:  
          name: apache2  
          State: latest

Servicemodul

Mit dem Servicemodul können Systemadministratoren Dienste auf dem System starten, stoppen, aktualisieren, aktualisieren und neu laden.

Beispiel 1: Starten von Apache Webserver

---
- name: Start service httpd, if not started
  service:
    name: httpd
    state: started

Beispiel 2: Stoppen des Apache-Webservers

---
- name: Stop service httpd
  service:
    name: httpd
    state: stopped

Beispiel 3: Neustart einer Netzwerkschnittstelle enp2s0

---
- name: Restart network service for interface eth0
  service:
    name: network
    state: restarted
    args: enp2s0

Modul kopieren

Wie der Name schon sagt, kopiert das Kopiermodul Dateien von einem Speicherort auf dem Remotecomputer an einen anderen Speicherort auf demselben Computer.

Beispiel 1: Kopieren von Dateien von lokal nach Remote Linux

---
- name: Copy file with owner and permissions
  copy:
    src: /etc/files/tecmint.conf
    dest: /srv/tecmint.conf
    owner: tecmint
    group: tecmint
    mode: '0644'

Das Playbook kopiert die Konfigurationsdatei tecmint.conf von / etc / files / Verzeichnis zu / srv / Verzeichnis als tecmint Benutzer mit 0644 Berechtigungen.

Berechtigungen können auch durch symbolische Darstellung dargestellt werden, wie in der letzten Zeile gezeigt.

Beispiel 2: Kopieren von Dateien von lokal nach Remote Linux

---
- name: Copy file with owner and permissions
  copy:
    src: /etc/files/tecmint.conf
    dest: /srv/tecmint.conf
    owner: tecmint
    group: tecmint
    mode: u=rw, g=r, o=r

Die Berechtigungen im vorherigen Beispiel können wie in der letzten Zeile gezeigt dargestellt werden. Der Benutzer wird zugewiesen lesen und schreiben Berechtigungen, der Gruppe werden Schreibberechtigungen zugewiesen, und dem Rest der Welt werden Leseberechtigungen zugewiesen.

Dateimodul

Das Dateimodul wird verwendet, um viele Dateivorgänge auszuführen, einschließlich Erstellen von Dateien und Verzeichnissen, Zuweisen von Dateiberechtigungen und Festlegen von Symlinks.

Beispiel 1: Führen Sie Linux-Dateiberechtigungen aus

---
- name: Change file ownership, group, and permissions
  file:
    path: /etc/tecmint.conf
    owner: tecmint
    group: tecmint
    mode: '0644'

Das obige Spiel erstellt eine Datei namens tecmint.conf in dem /etc Verzeichniseinstellungsberechtigungen für 0644.

Beispiel 2: Linux-Datei löschen

---
- name: Remove file (delete file)
  file:
    path: /etc/tecmint.conf
    state: absent

Dadurch wird die Datei entfernt oder gelöscht tecmint.conf.

Beispiel 3: Erstellen Sie ein Verzeichnis

---
- name: create a directory if it doesn’t exist
  file:
    path: /etc/mydirectory
    State: directory
    mode: '0777'

Dadurch wird ein Verzeichnis in der erstellt /etc Verzeichniseinstellungsberechtigungen für 0777.

Beispiel 4: Ein Verzeichnis rekursiv löschen

---
- name: Recursively deleting a  directory
  file:
    path: /etc/tecmint.conf
    state: absent

Das obige Spiel löscht rekursiv ein Verzeichnis.

Lineinfile-Modul

Das lineinfile Das Modul ist hilfreich, wenn Sie eine einzelne Zeile in einer Datei ändern möchten. Es kann eine vorhandene Leitung ersetzen.

Beispiel 1: Bearbeiten von Dateien unter Linux

---
 - name: Ensure SELinux is set to enforcing mode
  lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=disabled

Das obige Spiel setzt SELINUX Wert zu behindert.

SELINUX=disabled

Beispiel 2: Dateien unter Linux ändern

---
- name: Add a line to a file if the file does not exist, without         passing regexp
  lineinfile:
    path: /etc/hosts
    line: 10.200.50.51 tecmint.com
    create: yes

Dies fügt den Eintrag hinzu 10.200.50.51 tecmint.com zum / etc / hosts Datei.

Archivmodul

Ein Archiv Das Modul wird zum Erstellen eines komprimierten Archivs einer einzelnen oder mehrerer Dateien verwendet. Es wird davon ausgegangen, dass die vorhandene Komprimierungsquelle auf dem Ziel vorhanden ist. Nach der Archivierung kann die Quelldatei später mithilfe der Anweisung gelöscht oder entfernt werden remove=True.

Beispiel 1: Erstellen Sie eine Archivdatei

- name: Compress directory /path/to/tecmint_dir/ into /path/to/tecmint.tgz
  archive:
    path: /path/to/tecmint_dir
    dest: /path/to/tecmint.tgz

This compresses the /path/to/tecmint_dir  directory to /path/to/tecmint.tgz

Beispiel 2: Erstellen Sie eine Archivdatei und entfernen Sie sie

- name: Compress regular file /path/to/tecmint into /path/to/foo.gz and remove it
  archive:
    path: /path/to/tecmint
    dest: /path/to/tecmint.tgz
    remove: yes

Im obigen Spiel die Quelldatei / path / to / tecmint wird nach Abschluss der Archivierung gelöscht.

Beispiel 3: Erstellen Sie eine Archivdatei

- name: Create a bz2 archive of /path/to/tecmint
  archive:
    path: /path/to/tecmint
    format: bz2

Dadurch wird eine komprimierte Datei in erstellt bz2 Format aus dem / path / to / tecmint Datei.

Git-Modul

Das Modul verwaltet Git-Checkouts von Software-Repositorys.

Beispiel 1: Überprüfen Sie Git Repositoires

- git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    version: release-0.22

Befehlsmodul

Eines der am häufigsten verwendeten Module, das Befehl Modul nimmt den Befehlsnamen und später eine Liste von Argumenten. Der Befehl wird genauso übergeben, wie Sie eine Linux-Shell eingeben würden.

Beispiel 1: Führen Sie einen Befehl aus

- name: Executing a command using the command module
  command: cat helloworld.txt

Beispiel 2: Überprüfen Sie die Betriebszeit von Remote Linux

---
 - name: Check the remote host uptime
    hosts: servers
    tasks:
      - name: Execute the Uptime command over Command module
        register: uptimeoutput
        command: "uptime"

- debug:
          var: uptimeoutput.stdout_lines

Das Befehlsmodul ruft die Verfügbarkeit von Remote-Servern ab.

Variablen zum Abrufen der Ergebnisse laufender Befehle

Normalerweise, Ansible Playbooks werden verwendet, um Aufgaben auf verwalteten Hosts auszuführen, ohne die Ausgabe in der Befehlszeile anzuzeigen. Es kann jedoch vorkommen, dass Sie die Ausgabe oder Ergebnisse erfassen müssen. In diesem Abschnitt zeigen wir Ihnen, wie Sie die Ausgabe eines Playbooks in einer Variablen erfassen und später anzeigen können.

Ein ansible-Register wird verwendet, um die Ausgabe einer Aufgabe zu erfassen und als Variable zu speichern. Die Variable enthält danach die Standardausgabe der Aufgabe.

Angenommen, Sie möchten die Festplattennutzung verwalteter Knoten in den jeweiligen Stammverzeichnissen mithilfe von überprüfen df -Th / Befehl. Sie werden die verwenden ‘command’ Modul zur Definition des Befehls und ‘register’ um die Standardausgabe in einer Variablen zu speichern.

Um den Befehl anzuzeigen, verwenden Sie die ‘debug’ Modul neben dem Rückgabewert stdout.

---

 - hosts: all
   become: yes

   tasks:
     - name: Execute /boot usage on Hosts
       command: 'df -Th /'
       register: df

     - debug: var=df.stdout

Lassen Sie uns nun das Playbook ausführen. In diesem Fall haben wir unser Spielbuch benannt check_disk_space.yml.

# ansible-playbook check_disk_space.yml
Überprüfen Sie die Festplattennutzung der von Ansible verwalteten Knoten
Überprüfen Sie die Festplattennutzung der von Ansible verwalteten Knoten

Wie Sie gesehen haben, ist die Ausgabe durcheinander und macht es schwierig, mitzumachen.

Ersetzen Sie die, um die Ausgabe auszurichten und das Lesen zu erleichtern stdout Rückgabewert mit stdout_lines.

---

 - hosts: all
   become: yes

   tasks:
     - name: Execute /boot usage on Hosts
       command: 'df -Th /'
       register: df

     - debug: var=df.stdout_lines

Verwenden Sie Bedingungen, um die Spielausführung zu steuern

Genau wie in Programmiersprachen, bedingte Anweisungen werden verwendet, wenn mehr als ein Ergebnis möglich ist. Schauen wir uns einige der häufig verwendeten bedingten Anweisungen in Ansible-Playbooks an.

Wann-Anweisung

Manchmal möchten Sie möglicherweise Aufgaben auf bestimmten Knoten ausführen und nicht auf anderen. Das 'when' Die bedingte Anweisung ist recht einfach zu verwenden und in ein Playbook zu implementieren. Bei Verwendung der 'when' Klausel deklarieren Sie einfach die Bedingung neben der Klausel wie folgt:

when: condition

Wenn die Bedingung erfüllt ist, wird die Aufgabe auf dem Remote-System ausgeführt.

Schauen wir uns einige Beispiele an:

Beispiel 1: Verwenden von When Operator

---
- hosts: all

  tasks:
  - name: Install Nginx on Debian
     apt: name=nginx state=present
     when: ansible_os_family == “Debian”

Das obige Spiel wird installiert Nginx Webserver auf Hosts, auf denen die Debian-Familie von Distributionen ausgeführt wird.

Sie können auch die verwenden OR und AND Operator neben dem Zeitpunkt der bedingten Anweisung.

Beispiel 2: Verwenden des Operators AND mit When

---
- hosts: all

  tasks:
  - name: Install Nginx on Debian
     apt: name=nginx state=present
     when: ansible_os_family == “Debian” and
           ansible_distribution_version == “18.04”

Bei Verwendung der AND Operator müssen beide Anweisungen erfüllt sein, damit die Aufgabe ausgeführt werden kann.

Das obige Spiel installiert Nginx auf Knoten, auf denen eine Debian-Betriebssystemfamilie der Version 18.04 ausgeführt wird. Dies wird natürlich Ubuntu 18.04 sein.

Beispiel 3: Verwenden des ODER-Operators mit Wann

Mit OR Operator wird die Aufgabe ausgeführt, wenn eine der Bedingungen erfüllt ist.

---
- hosts: all

  tasks:
  - name: Install Nginx on Debian
     apt: name=nginx state=present
     when: ansible_os_family == “Debian” or
          Ansible_os_family == “SUSE”

Das obige Spiel installiert Nginx-Webserver entweder auf der Debian- oder der SUSE-Betriebssystemfamilie oder auf beiden.

HINWEIS: Stellen Sie immer sicher, dass Sie das doppelte Gleichheitszeichen verwenden == beim Testen einer Bedingung.

Bedingungen in Schleifen

Bedingungen können auch in einer Schleife verwendet werden. Angenommen, Sie haben eine Liste mit mehreren Paketen, die auf Remote-Knoten installiert werden müssen.

Im Playbook unten haben wir ein Array namens Pakete enthält eine Liste der Pakete, die installiert werden müssen. Diese Aufgaben werden nacheinander ausgeführt, wenn die erforderlich Klausel ist auf gesetzt Wahr.

---
 - name: Install Software packages
    hosts: all
    vars:
    packages:
    • name: nginx
required: True
    • name: mysql
required: True
    • name: apache
required: False



   tasks:
    • name: Install “{{ item.name }}”on Debian
apt: 
 name: “{{ item.name }}”
 state: present 
When: item.required == True
loop: “{{ packages }}”  

Konfigurieren Sie die Fehlerbehandlung

Manchmal schlagen Aufgaben beim Ausführen von Playbooks fehl. Nehmen wir an, Sie führen 5 Aufgaben auf 3 Servern aus, wie im folgenden Playbook gezeigt. Wenn bei Task 3 (Starten von MySQL) auf Server 2 ein Fehler auftritt, beendet Ansible die Ausführung der verbleibenden Tasks auf Server 2 und versucht, die verbleibenden Tasks auf den restlichen Servern auszuführen.

---
 - name: Install Software packages
   hosts: server1, server2, server3
   tasks:
- name: Install dependencies
<< some code >>

- name: Install MySQL database
<< some code >>

- name: Start MySQL
<< some code >>

- name: Install Nginx
<< some code >>

- name: Start Nginx
<< some code >>

Wenn Sie beispielsweise eine konsistente Ausführung des Playbooks wünschen, beenden Sie die Ausführung eines Playbooks. Wenn einer der Server ausfällt, fügen Sie die Option hinzu.

---
 - name: Install Software packages
   hosts: server1, server2, server3
   any_errors_fatal:  true
   tasks:

Auf diese Weise stoppt Ansible die Ausführung des gesamten Playbooks auf allen Servern und beendet das Programm, wenn eine Aufgabe auf einem Server fehlschlägt.

Wenn Sie möchten, dass das Playbook die Fehler ignoriert und die verbleibenden Aufgaben ausführt, verwenden Sie die ignore_errors: True Option.

---
 - name: Install Software packages
   hosts: server1, server2, server3
   tasks:
- name: Install dependencies
<< some code >>
     ignore_errors: True

Erstellen Sie Playbooks, um Systeme für einen bestimmten Status zu konfigurieren

In diesem Abschnitt werden einige zusätzliche Optionen vorgestellt, die beim Ausführen eines Playbooks verfügbar sind.

Beginnen wir mit dem Prüfen Modus oder Probelauf Möglichkeit. Die Option Trockenlauf oder Überprüfungsmodus wird beim Ausführen eines Playbooks verwendet, um zu überprüfen, ob Fehler auftreten und ob auf den verwalteten Hosts Änderungen vorgenommen werden. Es werden jedoch keine Änderungen an den Remote-Knoten vorgenommen.

Zum Beispiel, um ein Playbook namens trocken laufen zu lassen httpd.yml das installiert und startet den Apache-Webserver-Lauf:

# ansible-playbook httpd.yml --check
Trockenlauf eines Ansible-Playbooks
Trockenlauf eines Ansible-Playbooks

Die andere Option, die wir uns ansehen müssen, ist die --start-at-task Möglichkeit. Dies wird verwendet, wenn der Name der Aufgabe angegeben wird, mit der das Playbook beginnen oder beginnen soll.

Nehmen wir ein Beispiel: Das folgende Playbook beschreibt zwei Aufgaben: Das erste Spiel installiert den Apache-Webserver und das zweite das Dienstprogramm htop.

---
 - name: Install httpd

   hosts: all
   tasks:
    yum:     
name: httpd
     state: Installed

- name: Install htop

      yum:  
      name: htop
      state: started

Wenn Sie die Installation des Apache-Webservers überspringen und stattdessen das Dienstprogramm htop installieren möchten, führen Sie Folgendes aus:

# ansible-playbook playbook.yml --start-at-task “Install htop”
Installieren Sie Pakete mit Ansible Playbook
Installieren Sie Pakete mit Ansible Playbook

Zuletzt können Sie Ihre Aufgaben oder Spiele markieren, indem Sie die hinzufügen Stichworte Option zu Ihrem Playbook wie gezeigt. Dies ist praktisch, wenn Sie ein ziemlich großes Spielbuch haben und bestimmte Aufgaben aus dem gesamten Spielbuch ausführen möchten.

---
 - name: Install httpd
   tags: Install and start
   hosts: all
   tasks:
    yum:     
name: httpd
     state: Installed

   tags: Install

    • service: 
name: httpd
state: started
# ansible-playbook playbook.yml -tags "Install"

Um die Tags wegzulassen, verwenden Sie die --skip-tags Optionen wie gezeigt.

# ansible-playbook playbook.yml --skip-tags "Install"
Fazit

In diesem Thema haben wir Sie durch die häufig verwendeten Module in geführt Ansible, wie man stdout aus der Ausführung eines Playbooks zur Analyse abruft, Bedingungen im Playbook verwendet und wie man Fehler verwaltet, die beim Ausführen von Aufgaben auftreten können. Zuletzt haben wir die Konfiguration von Playbooks zusammengefasst und erläutert, wie Sie mithilfe zusätzlicher Optionen entscheiden können, welche Aufgaben ausgeführt werden sollen, wenn Sie nicht beabsichtigen, das gesamte Playbook auszuführen.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *